ZGlmZiAtLWdpdCBhL0dsZW1tQ2xpZW50Ly5jbGFzc3BhdGggYi9HbGVtbUNsaWVudC8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MTU0MDUKLS0tIC9kZXYvbnVsbAorKysgYi9HbGVtbUNsaWVudC8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIG91dHB1dD0idGFyZ2V0L2NsYXNzZXMiIHBhdGg9InNyYyI+CisJCTxhdHRyaWJ1dGVzPgorCQkJPGF0dHJpYnV0ZSBuYW1lPSJvcHRpb25hbCIgdmFsdWU9InRydWUiLz4KKwkJCTxhdHRyaWJ1dGUgbmFtZT0ibWF2ZW4ucG9tZGVyaXZlZCIgdmFsdWU9InRydWUiLz4KKwkJPC9hdHRyaWJ1dGVzPgorCTwvY2xhc3NwYXRoZW50cnk+CisJPGNsYXNzcGF0aGVudHJ5IGV4cG9ydGVkPSJ0cnVlIiBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLm0yZS5NQVZFTjJfQ0xBU1NQQVRIX0NPTlRBSU5FUiI+CisJCTxhdHRyaWJ1dGVzPgorCQkJPGF0dHJpYnV0ZSBuYW1lPSJtYXZlbi5wb21kZXJpdmVkIiB2YWx1ZT0idHJ1ZSIvPgorCQkJPGF0dHJpYnV0ZSBuYW1lPSJvcmcuZWNsaXBzZS5qc3QuY29tcG9uZW50Lm5vbmRlcGVuZGVuY3kiIHZhbHVlPSIiLz4KKwkJPC9hdHRyaWJ1dGVzPgorCTwvY2xhc3NwYXRoZW50cnk+CisJPGNsYXNzcGF0aGVudHJ5IGNvbWJpbmVhY2Nlc3NydWxlcz0iZmFsc2UiIGtpbmQ9InNyYyIgcGF0aD0iL0dsZW1tU2VydmljZXMiLz4KKwk8Y2xhc3NwYXRoZW50cnkgY29tYmluZWFjY2Vzc3J1bGVzPSJmYWxzZSIga2luZD0ic3JjIiBwYXRoPSIvSnNvblRyYXZlcnNlIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLmNvbnRhaW5lci9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5ydW50aW1lVGFyZ2V0L0FwYWNoZSBUb21jYXQgdjkuMCI+CisJCTxhdHRyaWJ1dGVzPgorCQkJPGF0dHJpYnV0ZSBuYW1lPSJvd25lci5wcm9qZWN0LmZhY2V0cyIgdmFsdWU9ImpzdC51dGlsaXR5Ii8+CisJCTwvYXR0cmlidXRlcz4KKwk8L2NsYXNzcGF0aGVudHJ5PgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvamRrMS44LjBfMjMxIj4KKwkJPGF0dHJpYnV0ZXM+CisJCQk8YXR0cmlidXRlIG5hbWU9Im93bmVyLnByb2plY3QuZmFjZXRzIiB2YWx1ZT0iamF2YSIvPgorCQk8L2F0dHJpYnV0ZXM+CisJPC9jbGFzc3BhdGhlbnRyeT4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJ0YXJnZXQvY2xhc3NlcyIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9HbGVtbUNsaWVudC8ucHJvamVjdCBiL0dsZW1tQ2xpZW50Ly5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZGNiOTgKLS0tIC9kZXYvbnVsbAorKysgYi9HbGVtbUNsaWVudC8ucHJvamVjdApAQCAtMCwwICsxLDM2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5HbGVtbUNsaWVudDwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24udmFsaWRhdGlvbmJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UubTJlLmNvcmUubWF2ZW4yQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamVtLndvcmtiZW5jaC5KYXZhRU1GTmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5tb2R1bGVjb3JlLk1vZHVsZUNvcmVOYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5tMmUuY29yZS5tYXZlbjJOYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUubmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9HbGVtbUNsaWVudC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9HbGVtbUNsaWVudC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU0YTNhZAotLS0gL2Rldi9udWxsCisrKyBiL0dsZW1tQ2xpZW50Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDkgQEAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS44CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuOAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5yZWxlYXNlPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS44CmRpZmYgLS1naXQgYS9HbGVtbUNsaWVudC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubTJlLmNvcmUucHJlZnMgYi9HbGVtbUNsaWVudC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubTJlLmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg5N2E3ZgotLS0gL2Rldi9udWxsCisrKyBiL0dsZW1tQ2xpZW50Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5tMmUuY29yZS5wcmVmcwpAQCAtMCwwICsxLDQgQEAKK2FjdGl2ZVByb2ZpbGVzPQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK3Jlc29sdmVXb3Jrc3BhY2VQcm9qZWN0cz10cnVlCit2ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL0dsZW1tQ2xpZW50Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudCBiL0dsZW1tQ2xpZW50Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmYxZTE0Ci0tLSAvZGV2L251bGwKKysrIGIvR2xlbW1DbGllbnQvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50CkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48cHJvamVjdC1tb2R1bGVzIGlkPSJtb2R1bGVDb3JlSWQiIHByb2plY3QtdmVyc2lvbj0iMS41LjAiPgorICAgIDx3Yi1tb2R1bGUgZGVwbG95LW5hbWU9IkdsZW1tQ2xpZW50Ij4KKyAgICAgICAgPHdiLXJlc291cmNlIGRlcGxveS1wYXRoPSIvIiBzb3VyY2UtcGF0aD0iL3NyYyIvPgorICAgIDwvd2ItbW9kdWxlPgorPC9wcm9qZWN0LW1vZHVsZXM+CmRpZmYgLS1naXQgYS9HbGVtbUNsaWVudC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUueG1sIGIvR2xlbW1DbGllbnQvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWNhM2UxCi0tLSAvZGV2L251bGwKKysrIGIvR2xlbW1DbGllbnQvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnhtbApAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8ZmFjZXRlZC1wcm9qZWN0PgorICA8cnVudGltZSBuYW1lPSJBcGFjaGUgVG9tY2F0IHY5LjAiLz4KKyAgPGluc3RhbGxlZCBmYWNldD0iamF2YSIgdmVyc2lvbj0iMS44Ii8+CisgIDxpbnN0YWxsZWQgZmFjZXQ9ImpzdC51dGlsaXR5IiB2ZXJzaW9uPSIxLjAiLz4KKzwvZmFjZXRlZC1wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvR2xlbW1DbGllbnQvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLnByZWZzIGIvR2xlbW1DbGllbnQvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0Y2FkOGMKLS0tIC9kZXYvbnVsbAorKysgYi9HbGVtbUNsaWVudC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24ucHJlZnMKQEAgLTAsMCArMSwyIEBACitkaXNhYmxlZD0wNnRhcmdldAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL0dsZW1tQ2xpZW50L3BvbS54bWwgYi9HbGVtbUNsaWVudC9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1MDMwZjkKLS0tIC9kZXYvbnVsbAorKysgYi9HbGVtbUNsaWVudC9wb20ueG1sCkBAIC0wLDAgKzEsNTMgQEAKKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgIDxncm91cElkPmRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDwvZ3JvdXBJZD4KKyAgPGFydGlmYWN0SWQ+R2xlbW1DbGllbnQ8L2FydGlmYWN0SWQ+CisgIDx2ZXJzaW9uPjAuMi1UZXN0PC92ZXJzaW9uPgorICA8bmFtZT5HbGVtbSBDbGllbnQgbGlicmFyeTwvbmFtZT4KKyAgPGRlc2NyaXB0aW9uPkNsaWVudCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIEdsZW1tIFNlcnZpY2VzPC9kZXNjcmlwdGlvbj4KKyAgPGJ1aWxkPgorICAgIDxzb3VyY2VEaXJlY3Rvcnk+c3JjPC9zb3VyY2VEaXJlY3Rvcnk+CisgICAgPHBsdWdpbnM+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1jb21waWxlci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjMuNy4wPC92ZXJzaW9uPgorICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8c291cmNlPjEuODwvc291cmNlPgorICAgICAgICAgIDx0YXJnZXQ+MS44PC90YXJnZXQ+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvcGx1Z2luPgorICAgIDwvcGx1Z2lucz4KKyAgPC9idWlsZD4KKyAgCisgPGRlcGVuZGVuY2llcz4KKyAgIDxkZXBlbmRlbmN5PgorICAgIDxncm91cElkPmNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlPC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPmphY2tzb24tY29yZTwvYXJ0aWZhY3RJZD4KKyAgICA8dmVyc2lvbj4yLjkuNjwvdmVyc2lvbj4KKyAgICA8c2NvcGU+Y29tcGlsZTwvc2NvcGU+CisgICA8L2RlcGVuZGVuY3k+CisJPGRlcGVuZGVuY3k+CisJICA8Z3JvdXBJZD5jb20uZmFzdGVyeG1sLmphY2tzb24uY29yZTwvZ3JvdXBJZD4KKwkgIDxhcnRpZmFjdElkPmphY2tzb24tYW5ub3RhdGlvbnM8L2FydGlmYWN0SWQ+CisJICA8dmVyc2lvbj4yLjkuNjwvdmVyc2lvbj4KKwk8L2RlcGVuZGVuY3k+CisJPGRlcGVuZGVuY3k+CisJICA8Z3JvdXBJZD5jb20uZmFzdGVyeG1sLmphY2tzb24uY29yZTwvZ3JvdXBJZD4KKwkgIDxhcnRpZmFjdElkPmphY2tzb24tZGF0YWJpbmQ8L2FydGlmYWN0SWQ+CisJICA8dmVyc2lvbj4yLjkuNjwvdmVyc2lvbj4KKwkgIDxzY29wZT5jb21waWxlPC9zY29wZT4KKwk8L2RlcGVuZGVuY3k+CisJPGRlcGVuZGVuY3k+CisJCTxncm91cElkPmRlLmtvcmFwLmpzb248L2dyb3VwSWQ+CisJCTxhcnRpZmFjdElkPkpzb25UcmF2ZXJzZTwvYXJ0aWZhY3RJZD4KKwkJPHZlcnNpb24+MC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorCTwvZGVwZW5kZW5jeT4KKwkJPGRlcGVuZGVuY3k+CisJCTxncm91cElkPmRlLmtvcmFwLnNlcnZpY2VzPC9ncm91cElkPgorCQk8YXJ0aWZhY3RJZD51dGlsczwvYXJ0aWZhY3RJZD4KKwkJPHZlcnNpb24+MC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorCQk8c2NvcGU+Y29tcGlsZTwvc2NvcGU+CisJPC9kZXBlbmRlbmN5PgorIDwvZGVwZW5kZW5jaWVzPgorICAKKzwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9HbGVtbUNsaWVudC9zcmMvZGUva29yYXAvc2VydmljZXMvZ2xlbW0vY2xpZW50L0dsZW1tQ2xpZW50LmphdmEgYi9HbGVtbUNsaWVudC9zcmMvZGUva29yYXAvc2VydmljZXMvZ2xlbW0vY2xpZW50L0dsZW1tQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJlZmE0MgotLS0gL2Rldi9udWxsCisrKyBiL0dsZW1tQ2xpZW50L3NyYy9kZS9rb3JhcC9zZXJ2aWNlcy9nbGVtbS9jbGllbnQvR2xlbW1DbGllbnQuamF2YQpAQCAtMCwwICsxLDM0MyBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOworaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5ldC4qOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmUuSnNvblBhcnNlRXhjZXB0aW9uOworaW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5kYXRhYmluZC5Kc29uTWFwcGluZ0V4Y2VwdGlvbjsKK2ltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uZGF0YWJpbmQuT2JqZWN0TWFwcGVyOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMuTGVtbWFSZXNwb25zZTsKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworLyoKKyAqIE5vdGVzIG9uIGVuY29kaW5nIFVSTHM6CisgKiAKKyAqIC0+IGh0dHA6Ly9zZXJ2ZXI6cG9ydC9HbGVtbVNlcnZpY2VzLTAuMi10ZXN0L2xlbW1hL2luZm8vSGF1cz9vcHRzPWNvbXArb3RoZXIKKyAqIC0gaW4gdGhpcyBVUkwsICdIYXVzJyBpcyBub3QgcGFydCBvZiB0aGUgcXVlcnkgYnV0IHBhcnQgb2YgdGhlIHBhdGguCisgKiAtIHRoZSBxdWVyeSBzdGFydHMgYmVoaW5kIHRoZSAnPycuCisgKiAtPiBodHRwOi8vc2VydmVyOnBvcnQvR2xlbW1TZXJ2aWNlcy0wLjItdGVzdC9sZW1tYS9pbmZvP2xlbW1hPUhhdXMmb3B0cz1jb21wK290aGVyCisgKiAtIHRoYXQgd291bGQgYmUgY29ycmVjdDogbm93IGxlbW1hPUhhdXMgaXMgcGFydCBvZiB0aGUgcXVlcnkuCisgKiAtIEJ1dCBmb3J0dW5hdGx5LCBVUkkudG9BU0NJSVN0cmluZygpIHdpbGwgYWxzbyB1cmxlbmNvZGUgbGVtbWEgJ0hhdXMnIGFzIHBhcnQKKyAqICAgb2YgdGhlIHBhdGggaW4gdGhlIDFzdCBVUkwgYWJvdmUuCisgKi8KKworcHVibGljIGNsYXNzIEdsZW1tQ2xpZW50IHsKKwkKKwkvKiBjb25zdGFudHMgdGhhdCBtYXkgYmUgcmV3cml0dGVuIGJ5IHByb3BlcnRpZXMgKi8KKwlTdHJpbmcgVVJMR2xlbW1TZXJ2ZXIJPSAiaHR0cDovL2MwcjRmdCI7CisJaW50ICAgIEdsZW1tUG9ydAkJPSA0MDkxMzsKKwlTdHJpbmcgVVJMR2xlbW1TZXJ2aWNlcwk9ICJHbGVtbVNlcnZpY2VzLTAuMS1TTkFQU0hPVCI7CisJU3RyaW5nIExlbW1hUmVxdWVzdFBhdGgJPSAiaW5kZXgvaW5mby9sZW1tYSI7CisJCisJcHVibGljIFByaW50U3RyZWFtIGZvdXQJPSBudWxsOworCXB1YmxpYyBQcmludFN0cmVhbSBmZXJyCT0gbnVsbDsJCQorCQkKKwlwdWJsaWMgR2xlbW1DbGllbnQoUHJpbnRTdHJlYW0gZm91dCwgUHJpbnRTdHJlYW0gZmVycikKKwkKKwl7CisJdGhpcy5mb3V0ID0gZm91dDsKKwl0aGlzLmZlcnIgPSBmZXJyOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogR2xlbW1DbGllbnQ6IGNvbnN0cnVjdG9yIGNhbGxlZC5cbiIpOwkKKwl9CisJCisJLyogR2xlbW1DbGllbnQgY29uc3RydWN0b3I6CisJICogCisJICogaW5pdCBjb25zdGFudHMgZnJvbSBwcm9wZXJ0aWVzLgorCSAqIAorCSAqIDIyLjEwLjIxL0ZCCisJICovCisJCisJcHVibGljIEdsZW1tQ2xpZW50KFByb3BlcnRpZXMgcHJvcHMsIFByaW50U3RyZWFtIGZvdXQsIFByaW50U3RyZWFtIGZlcnIpCisJCisJeworCVN0cmluZworCQl0bXA7CisJCisJdGhpcy5mb3V0ID0gZm91dDsKKwl0aGlzLmZlcnIgPSBmZXJyOworCQorCVVSTEdsZW1tU2VydmVyCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgIlVSTEdsZW1tU2VydmVyIiwgImh0dHA6Ly9jMHI0ZnQiKTsKKwl0bXAJCQkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiR2xlbW1Qb3J0IiwgCSAgICI0MDkxMyIpOworCUdsZW1tUG9ydAkJPSBJbnRlZ2VyLnBhcnNlSW50KHRtcCk7CisJVVJMR2xlbW1TZXJ2aWNlcz0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgIlVSTEdsZW1tU2VydmljZXMiLCAiR2xlbW1TZXJ2aWNlcy0wLjEtU05BUFNIT1QiKTsKKwlMZW1tYVJlcXVlc3RQYXRoPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiTGVtbWFSZXF1ZXN0UGF0aCIsICJpbmRleC9pbmZvL2xlbW1hIik7CQkKKwl9CisJCisJcHVibGljIGludCBHbGVtbUNvbm5lY3QoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgZnVuYyA9ICJHbGVtbUNvbm5lY3QiOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRvIGNvbm5lY3QgdG8gR0xFTU0gU2VydmljZXMuLi5cbiIsIGZ1bmMpOworCQorCXJldHVybiAwOworCX0gLy8gR2xlbW1Db25uZWN0CisKKwkvKgorCSAqIHNlbmRRdWVyeToKKwkgKiAtIHNlbmRzIGEgbGVtbWEgcXVlcnkgb3ZlciB0aGUgbmV0d29yayB0byB0aGUgR2xlbW0gU2VydmljZXMuCisJICogTm90ZXM6CisJICogLSBjbGFzc2ljYWwgdXNlIG9mIFVSTHMsIEh0dHBVUkxDb25uZWN0aW9ucywgZXRjLiBvdXQgb2YgdGhlIGJveCBvZgorCSAqICAgdGhlIGphdmEgbGlicmFyeTsgbm8gb3RoZXIgbGlicmFyeSBpcyBuZWVkZWQuCisJICogCisJICogQXJndW1lbnRzOgorCSAqIGxlbW1hUXVlcnk6IGUuZy4gU2NodWggb3IgU2NodWg/b3B0cz1mbGV4K2NvbXArb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOgorCSAqIC0gbGlzdCBvZiB3b3JkZm9ybXMgKD0gbGVtbWEgZXhwYW5zaW9ucykuCisJICoKKwkgKiAyNy4wNC4yMC9GQgorCSAqIDEwLjA1LjIxL0ZCIDoKKwkgKiAtIGNvbnZlcnRpbmcgbGVtbWFRdWVyeSB1c2luZyB1cmxlbmNvZGluZy4KKwkgKiBub3RlOiAtIEpWTSBvbiBDT1NNQVMgSUktbHVuaXggaXMgdXNpbmcgSVNPLTg4NTktMSBwZXIgZGVmYXVsdC4KKwkgKiAgICAgICAtIGN1cnJlbnRseSwgbW9kaWZ5aW5nIGRlZmF1bHQgY2hhcmFjdGVyIGVuY29kaW5nIChhdCBKVk0gc3RhcnQpIGlzIGRpc2NvdXJhZ2VkLgorCSAqIC0gc2VuZFF1ZXJ5KCkgZ2V0IEpTT04gW1VURi04XSBiYWNrIGZyb20gdGhlIEdsZW1tU2VydmljZXMuCisJICogLSBsaXN0IG9mIHdmcyByZXR1cm5lZCBbVVRGLThdIGhhdmUgdG8gYmUgY29udmVydGVkIHRvIFtJU084ODU5LTFdIGJlZm9yZSBiZWluZyBjb252ZXJ0ZWQKKwkgKiAgIGJ5IHRyYW5zZm9ybV9KU09OMk9iaigpIHRvIEpTT04gW1VURi04XS4gT3RoZXJ3aXNlIFVURi04IGNoYXJzIHdpbGwgYmUgd3JvbmdseQorCSAqICAgY29udmVydGVkIHRvIFVURi04IChjb252ZXJ0IFVURi04IHRvIFVURi04ID0gY2FyYmFnZSkuCisJICogLSBsZW1tYVF1ZXJ5OiB1c2luZyBVUkkgKyB1cmkudG9BU0NJSVN0cmluZygpIGZvciAibGVtbWE/b3B0cz1mbGV4K2NvbXAiOiAKKwkgKiAgIHRoaXMgdXJsZW5jb2RlcyB0aGUgbGVtbWEgcGFydCBidXQgbm90IHRoZSBxdWVyeSBwYXJhbWV0ZXJzIGJlaGluZCB0aGUgJz8nLiAKKwkgKiAyOC4xMC4yMS9GQgorCSAqLworCQorCXB1YmxpYyBMZW1tYVJlc3BvbnNlIHNlbmRRdWVyeShTdHJpbmcgbGVtbWFRdWVyeSkKKwkKKwl7CisJZmluYWwgU3RyaW5nIGZ1bmMgPSAic2VuZFF1ZXJ5IjsKKwlTdHJpbmcKKwkJVVJMYXNTdHJpbmc7CisJVVJMIAorCQl1cmwgCQk9IG51bGw7CisJVVJJCisJCXVyaQkJCT0gbnVsbDsKKwlIdHRwVVJMQ29ubmVjdGlvbiAKKwkJY29uOworCWludAorCQlzdGF0dXM7CisJU3RyaW5nCisJCXJlc3BvbnNlQ29udGVudDsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbVJlc3AJCT0gbnVsbDsKKwlmaW5hbCBib29sZWFuCisJCWJVUkxlbmNvZGUJPSB0cnVlOwkvLyBpZiB0cnVlOiB1cmxlbmNvZGUgcXVlcnkuCisJZmluYWwgYm9vbGVhbgorCQliTGF0MQkJPSB0cnVlOyAvLyBpZiB0cnVlOiBjb252ZXJ0IGZyb20gVVRGLTggdG8gSVNPODg1OS0xCisKKwl0aGlzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlcXVlc3RlZCBsZW1tYSA9ICclcycuXG4iLCBmdW5jLCBsZW1tYVF1ZXJ5KTsKKworCWlmKCBiVVJMZW5jb2RlICkKKwkJeworCQlVUkxhc1N0cmluZyA9IFN0cmluZy5mb3JtYXQoIiVzOiVkLyVzLyVzLyVzIiwgCisJCQkJCQkJCVVSTEdsZW1tU2VydmVyLCAKKwkJCQkJCQkJR2xlbW1Qb3J0LCAKKwkJCQkJCQkJVVJMR2xlbW1TZXJ2aWNlcywgCisJCQkJCQkJCUxlbW1hUmVxdWVzdFBhdGgsIAkvLyA9IHBhdGggd2l0aG91dCBsZW1tYSB3aGljaCBpcyBwYXJ0IG9mIHRoZSBwYXRoLiAKKwkJCQkJCQkJbGVtbWFRdWVyeSk7ICAJCS8vIG5vdCB1cmxlbmNvZGVkIHlldCEKKwkJdHJ5IHsKKwkJCXVyaSA9IG5ldyBVUkkoVVJMYXNTdHJpbmcpOworCQkJLy8gdXJpLnRvQVNDSUlTdHJpbmc6IHVybGVuY29kZXMgb25seSB0aGUgbGVtbWEgKE9LKS4gCisJCQl0aGlzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHVyaSBhbHMgQVNDSUkgc3RyaW5nID0gJyVzJy5cbiIsICBmdW5jLCB1cmkudG9BU0NJSVN0cmluZygpKTsKKwkJCX0gCisJCWNhdGNoIChVUklTeW50YXhFeGNlcHRpb24gZTEpIHsKKwkJCXRoaXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNvbnZlcnQgdG8gVVJJOiAnJXMnIVxuIiwgZnVuYywgVVJMYXNTdHJpbmcpOworCQkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCQlyZXR1cm4gbnVsbDsKKwkJCX0KKwkJCisJCXRyeSB7IAorCQkJdXJsID0gbmV3IFVSTCh1cmkudG9BU0NJSVN0cmluZygpKTsgLy8gd2hpY2ggdHJhbnNsYXRlcyB0aGUgbGVtbWEsIGJ1dCBub3QgdGhlIHF1ZXJ5IHBhcnQgYmVoaW5kIHRoZSAnPycgdG8gdXJsZW5jb2RpbmcuCisJCQl0aGlzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNyZWF0aW5nIFVSTD0nJXMnLlxuIiwgZnVuYywgdXJsLnRvU3RyaW5nKCkpOworCQkJfSAKKwkJY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiAgZSkgeworCQkJdGhpcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgYnVpbGQgVVJMIGZyb20gJyVzJyFcbiIsIGZ1bmMsIHVyaS50b0FTQ0lJU3RyaW5nKCkpOworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCXJldHVybiBudWxsOworCQkJfSAKKwkJfQorCWVsc2UKKwkJeworCQkvLyBmb3JtdWxhdGUgcmVxdWVzdCBhcyBVUkw6CisJCVVSTGFzU3RyaW5nID0gU3RyaW5nLmZvcm1hdCgiJXM6JWQvJXMvJXMvJXMiLCAKKwkJCQkJCVVSTEdsZW1tU2VydmVyLCAKKwkJCQkJCUdsZW1tUG9ydCwgCisJCQkJCQlVUkxHbGVtbVNlcnZpY2VzLCAKKwkJCQkJCUxlbW1hUmVxdWVzdFBhdGgsIAorCQkJCQkJbGVtbWFRdWVyeSk7IAkJCisJCQorCQl0cnkgeyAKKwkJCXVybCA9IG5ldyBVUkwoVVJMYXNTdHJpbmcpOworCQkJdGhpcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjcmVhdGluZyBVUkw9JyVzJy5cbiIsIGZ1bmMsIHVybC50b1N0cmluZygpKTsKKwkJCX0gCisJCWNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gIGUpIHsKKwkJCXRoaXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGJ1aWxkIFVSTCBmcm9tICclcychXG4iLCBmdW5jLCBVUkxhc1N0cmluZyk7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJcmV0dXJuIG51bGw7CisJCQl9CisJCX0KKworCS8vIGJ1aWxkIHRoZSBjb25uZWN0aW9uOgorCQorCXRyeSB7CisJCWNvbiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJdGhpcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY29ubmVjdCB0byBVUkw9JyVzJyFcbiIsIGZ1bmMsIFVSTGFzU3RyaW5nKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIG51bGw7CisJCX0KKwkKKwl0cnkgeworCQljb24uc2V0UmVxdWVzdE1ldGhvZCgiR0VUIik7CisJCWNvbi5zZXRSZXF1ZXN0UHJvcGVydHkoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi9qc29uIik7CisJCWNvbi5zZXRSZXF1ZXN0UHJvcGVydHkoIkFjY2VwdCIsICAgICAgICJhcHBsaWNhdGlvbi9qc29uIik7IAorCQljb24uc2V0VXNlQ2FjaGVzKGZhbHNlKTsKKwkJfSAKKwljYXRjaCAoUHJvdG9jb2xFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCQorCS8vIHNlbmRpbmcgdGhlIHJlcXVlc3QgJiB3YWl0aW5nIGZvciB0aGUgcmVzcG9uc2Ugd2l0aCB0aGUgd2YgbGlzdHM6CisKKwl0cnkgeworCQlpZiggKHN0YXR1cyA9IGNvbi5nZXRSZXNwb25zZUNvZGUoKSkgPT0gSHR0cFVSTENvbm5lY3Rpb24uSFRUUF9PSyApCisJCQl7CisJCQl0aGlzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgcmV0dXJuIHN0YXR1cyA9IE9LLlxuIiwgZnVuYyk7CisJCQlyZXNwb25zZUNvbnRlbnQgPSBnZXRSZXNwb25zZUNvbnRlbnQoY29uKTsKKwkJCWlmKCByZXNwb25zZUNvbnRlbnQgPT0gbnVsbCApCisJCQkJcmV0dXJuIG51bGw7CisJCQl0aGlzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVzcG9uc2UgQ29udGVudCA9ICclcycuXG4iLCBmdW5jLCByZXNwb25zZUNvbnRlbnQpOworCQkJLy8gMjguMTAuMjEvRkIKKwkJCWlmKCBiTGF0MSApCisJCQkJeworCQkJCVN0cmluZworCQkJCQlyZXNwb25zZUNvbnRlbnRMYXQxID0gbmV3IFN0cmluZyhyZXNwb25zZUNvbnRlbnQuZ2V0Qnl0ZXMoIklTTy04ODU5LTEiKSwgInV0Zi04Iik7CisJCQkJdGhpcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBSZXNwb25zZSBDb250ZW50ID0gJyVzJyBbTGF0MV0uXG4iLCBmdW5jLCByZXNwb25zZUNvbnRlbnRMYXQxKTsKKwkJCQlyZXNwb25zZUNvbnRlbnQgPSByZXNwb25zZUNvbnRlbnRMYXQxOworCQkJCX0KKwkJCX0JCisJCWVsc2UKKwkJCXsKKwkJCXRoaXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCByZXR1cm4gc3RhdHVzID0gJWQgKCVzKSFcbiIsICBmdW5jLCBzdGF0dXMsIGNvbi5nZXRSZXNwb25zZU1lc3NhZ2UoKSk7CisJCQljb24uZGlzY29ubmVjdCgpOworCQkJcmV0dXJuIG51bGw7CisJCQl9CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJdGhpcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBzZW5kaW5nIHJlcXVlc3QgdG8gR2xlbW1TZXJ2aWNlcyFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQljb24uZGlzY29ubmVjdCgpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCQorCS8vIGNvbnZlcnRpbmcgSlNPTiBSZXNwb25zZSBDb250ZW50IHRvIG9iamVjdDoKKwlsZW1SZXNwID0gdHJhbnNmb3JtX0pTT04yT2JqKHJlc3BvbnNlQ29udGVudCk7CisJCisJdGhpcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1SZXNwPSclcycuXG4iLCBmdW5jLCBsZW1SZXNwLnRvU3RyaW5nKCkpOworCQorCS8vIGRpc2Nvbm5lY3Rpbmc6CisJY29uLmRpc2Nvbm5lY3QoKTsKKwkKKwkvLyByZXR1cm5pbmcgbGVtbWEgUmVzcG9uc2UgT2JqZWN0OgorCXJldHVybiBsZW1SZXNwOyAvLyBvay4KKwkKKwl9IC8vIHNlbmRRdWVyeQorCQorCisJLyogZ2V0UmVzcG9uc2VDb250ZW50OgorCSAqIAorCSAqIC0gcmV0dXJucyB0aGUgSFRUUCBSZXNwb25zZSBDb250ZW50IG9uIGNvbi4KKwkgKiBSZXR1cm5zOgorCSAqICAtIGVpdGhlciB0aGUgQ29udGVudCBhcyBTdHJpbmcuCisJICogIC0gb3IgbnVsbCBpZiBhbiBlcnJvciBvY2N1cmVzLgorCSAqIDI5LjA0LjIwL0ZCCisJICovCisJCisJcHJpdmF0ZSBTdHJpbmcgZ2V0UmVzcG9uc2VDb250ZW50KEh0dHBVUkxDb25uZWN0aW9uIGNvbikKKwkKKwl7CisJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZ2V0UmVzcG9uc2VDb250ZW50IjsKKwlCdWZmZXJlZFJlYWRlciAKKwkJaW47CisJU3RyaW5nIAorCQlpbnB1dExpbmU7CisJU3RyaW5nQnVmZmVyIAorCQljb250ZW50OworCQkJCisJdHJ5IHsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIoCisJCQkJICBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoY29uLmdldElucHV0U3RyZWFtKCkpKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQl0aGlzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCByZWFkIHJldHVybmVkIEhUVFAgQ29udGVudCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCQorCWNvbnRlbnQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisJCisJdHJ5IHsKKwkJd2hpbGUgKChpbnB1dExpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsKSAKKwkJCXsKKwkJICAgIGNvbnRlbnQuYXBwZW5kKGlucHV0TGluZSk7CisJCQl9CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUxKSB7CisJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCisJdHJ5IHsKKwkJaW4uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCisJLy8gcmV0dXJuIFJlc3BvbnNlIENvbnRlbnQ6CisJcmV0dXJuIGNvbnRlbnQudG9TdHJpbmcoKTsKKwkKKwl9IC8vIGdldFJlc3BvbnNlQ29udGVudAkJCisJCQkKKwkvKiB0cmFuc2Zvcm1fSlNPTjJPYmoKKwkgKiAtIHRyYW5zZm9ybXMgdGhlIEpTT04gZm9ybWF0ZWQgR2xlbW0gUmVzcG9uc2UgY29udGVudCB0byBhbgorCSAqICAgb2JqZWN0LgorCSAqIDI5LjA0LjIwL0ZCCisJICovCisJCisJcHJpdmF0ZSBMZW1tYVJlc3BvbnNlIHRyYW5zZm9ybV9KU09OMk9iaihTdHJpbmcganNvblN0cmluZykKKwkKKwl7CisJT2JqZWN0TWFwcGVyCisJCW9iak1hcHBlciA9IG51bGw7CQorCUxlbW1hUmVzcG9uc2UKKwkJbGVtUmVzcDsKKwkKKwlvYmpNYXBwZXIgPSBuZXcgT2JqZWN0TWFwcGVyKCk7CisKKwl0cnkgeworCQlsZW1SZXNwICAgPSBvYmpNYXBwZXIucmVhZFZhbHVlKGpzb25TdHJpbmcsIExlbW1hUmVzcG9uc2UuY2xhc3MpOworCQl9IAorCWNhdGNoIChKc29uUGFyc2VFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gbnVsbDsKKwkJfSAKKwljYXRjaCAoSnNvbk1hcHBpbmdFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gbnVsbDsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCQorCXJldHVybiBsZW1SZXNwOwkKKwl9IC8vIHRyYW5zZm9ybV9KU09OMk9iagorCSAKK30gLy8gY2xhc3MgR2xlbW1DbGllbnQKZGlmZiAtLWdpdCBhL0dsZW1tU2VydmljZXMvLmNsYXNzcGF0aCBiL0dsZW1tU2VydmljZXMvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzJhYzJlCi0tLSAvZGV2L251bGwKKysrIGIvR2xlbW1TZXJ2aWNlcy8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIG91dHB1dD0idGFyZ2V0L2NsYXNzZXMiIHBhdGg9InNyYyI+CisJCTxhdHRyaWJ1dGVzPgorCQkJPGF0dHJpYnV0ZSBuYW1lPSJvcHRpb25hbCIgdmFsdWU9InRydWUiLz4KKwkJCTxhdHRyaWJ1dGUgbmFtZT0ibWF2ZW4ucG9tZGVyaXZlZCIgdmFsdWU9InRydWUiLz4KKwkJPC9hdHRyaWJ1dGVzPgorCTwvY2xhc3NwYXRoZW50cnk+CisJPGNsYXNzcGF0aGVudHJ5IGV4cG9ydGVkPSJ0cnVlIiBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLm0yZS5NQVZFTjJfQ0xBU1NQQVRIX0NPTlRBSU5FUiI+CisJCTxhdHRyaWJ1dGVzPgorCQkJPGF0dHJpYnV0ZSBuYW1lPSJtYXZlbi5wb21kZXJpdmVkIiB2YWx1ZT0idHJ1ZSIvPgorCQk8L2F0dHJpYnV0ZXM+CisJPC9jbGFzc3BhdGhlbnRyeT4KKwk8Y2xhc3NwYXRoZW50cnkgY29tYmluZWFjY2Vzc3J1bGVzPSJmYWxzZSIgZXhwb3J0ZWQ9InRydWUiIGtpbmQ9InNyYyIgcGF0aD0iL0pzb25UcmF2ZXJzZSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS5jb250YWluZXIvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQucnVudGltZVRhcmdldC9BcGFjaGUgVG9tY2F0IHY5LjAgKDIpIj4KKwkJPGF0dHJpYnV0ZXM+CisJCQk8YXR0cmlidXRlIG5hbWU9Im93bmVyLnByb2plY3QuZmFjZXRzIiB2YWx1ZT0ianN0LndlYiIvPgorCQk8L2F0dHJpYnV0ZXM+CisJPC9jbGFzc3BhdGhlbnRyeT4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0phdmFTRS0xLjgiPgorCQk8YXR0cmlidXRlcz4KKwkJCTxhdHRyaWJ1dGUgbmFtZT0ibWF2ZW4ucG9tZGVyaXZlZCIgdmFsdWU9InRydWUiLz4KKwkJPC9hdHRyaWJ1dGVzPgorCTwvY2xhc3NwYXRoZW50cnk+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwud2ViLmNvbnRhaW5lciIvPgorCTxjbGFzc3BhdGhlbnRyeSBjb21iaW5lYWNjZXNzcnVsZXM9ImZhbHNlIiBraW5kPSJzcmMiIHBhdGg9Ii91dGlscyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9InRhcmdldC9jbGFzc2VzIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL0dsZW1tU2VydmljZXMvLnByb2plY3QgYi9HbGVtbVNlcnZpY2VzLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZDczZDIKLS0tIC9kZXYvbnVsbAorKysgYi9HbGVtbVNlcnZpY2VzLy5wcm9qZWN0CkBAIC0wLDAgKzEsMzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPkdsZW1tU2VydmljZXM8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwkJPHByb2plY3Q+SnNvblRyYXZlcnNlPC9wcm9qZWN0PgorCQk8cHJvamVjdD5VdGlsczwvcHJvamVjdD4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5idWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLnZhbGlkYXRpb25idWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLm0yZS5jb3JlLm1hdmVuMkJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLm0yZS5jb3JlLm1hdmVuMk5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmplbS53b3JrYmVuY2guSmF2YUVNRk5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLndzdC5jb21tb24ubW9kdWxlY29yZS5Nb2R1bGVDb3JlTmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUubmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUuanNOYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL0dsZW1tU2VydmljZXMvLnNldHRpbmdzLy5qc2R0c2NvcGUgYi9HbGVtbVNlcnZpY2VzLy5zZXR0aW5ncy8uanNkdHNjb3BlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZTY2NmQKLS0tIC9kZXYvbnVsbAorKysgYi9HbGVtbVNlcnZpY2VzLy5zZXR0aW5ncy8uanNkdHNjb3BlCkBAIC0wLDAgKzEsMTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBleGNsdWRpbmc9IioqL2Jvd2VyX2NvbXBvbmVudHMvKnwqKi9ub2RlX21vZHVsZXMvKnwqKi8qLm1pbi5qcyIga2luZD0ic3JjIiBwYXRoPSJXZWJDb250ZW50Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS53c3QuanNkdC5sYXVuY2hpbmcuV2ViUHJvamVjdCI+CisJCTxhdHRyaWJ1dGVzPgorCQkJPGF0dHJpYnV0ZSBuYW1lPSJoaWRlIiB2YWx1ZT0idHJ1ZSIvPgorCQk8L2F0dHJpYnV0ZXM+CisJPC9jbGFzc3BhdGhlbnRyeT4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS53c3QuanNkdC5sYXVuY2hpbmcuYmFzZUJyb3dzZXJMaWJyYXJ5Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL0dsZW1tU2VydmljZXMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcyBiL0dsZW1tU2VydmljZXMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTBhZDIyCi0tLSAvZGV2L251bGwKKysrIGIvR2xlbW1TZXJ2aWNlcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzCkBAIC0wLDAgKzEsMiBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK2xpbmUuc2VwYXJhdG9yPVxuCmRpZmYgLS1naXQgYS9HbGVtbVNlcnZpY2VzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL0dsZW1tU2VydmljZXMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNGEzYWQKLS0tIC9kZXYvbnVsbAorKysgYi9HbGVtbVNlcnZpY2VzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDkgQEAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS44CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuOAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5yZWxlYXNlPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS44CmRpZmYgLS1naXQgYS9HbGVtbVNlcnZpY2VzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5tMmUuY29yZS5wcmVmcyBiL0dsZW1tU2VydmljZXMvLnNldHRpbmdzL29yZy5lY2xpcHNlLm0yZS5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4OTdhN2YKLS0tIC9kZXYvbnVsbAorKysgYi9HbGVtbVNlcnZpY2VzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5tMmUuY29yZS5wcmVmcwpAQCAtMCwwICsxLDQgQEAKK2FjdGl2ZVByb2ZpbGVzPQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK3Jlc29sdmVXb3Jrc3BhY2VQcm9qZWN0cz10cnVlCit2ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL0dsZW1tU2VydmljZXMvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50IGIvR2xlbW1TZXJ2aWNlcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM1NTYxOAotLS0gL2Rldi9udWxsCisrKyBiL0dsZW1tU2VydmljZXMvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50CkBAIC0wLDAgKzEsMTUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PHByb2plY3QtbW9kdWxlcyBpZD0ibW9kdWxlQ29yZUlkIiBwcm9qZWN0LXZlcnNpb249IjEuNS4wIj4KKyAgICA8d2ItbW9kdWxlIGRlcGxveS1uYW1lPSJHbGVtbVNlcnZpY2VzMi0wLjAuMS1TTkFQU0hPVCI+CisgICAgICAgIDx3Yi1yZXNvdXJjZSBkZXBsb3ktcGF0aD0iLyIgc291cmNlLXBhdGg9Ii90YXJnZXQvbTJlLXd0cC93ZWItcmVzb3VyY2VzIi8+CisgICAgICAgIDx3Yi1yZXNvdXJjZSBkZXBsb3ktcGF0aD0iLyIgc291cmNlLXBhdGg9Ii9XZWJDb250ZW50IiB0YWc9ImRlZmF1bHRSb290U291cmNlIi8+CisgICAgICAgIDx3Yi1yZXNvdXJjZSBkZXBsb3ktcGF0aD0iL1dFQi1JTkYvY2xhc3NlcyIgc291cmNlLXBhdGg9Ii9zcmMiLz4KKyAgICAgICAgPGRlcGVuZGVudC1tb2R1bGUgYXJjaGl2ZU5hbWU9InV0aWxzLTAuMS1TTkFQU0hPVC5qYXIiIGRlcGxveS1wYXRoPSIvV0VCLUlORi9saWIiIGhhbmRsZT0ibW9kdWxlOi9yZXNvdXJjZS91dGlscy91dGlscyI+CisgICAgICAgICAgICA8ZGVwZW5kZW5jeS10eXBlPnVzZXM8L2RlcGVuZGVuY3ktdHlwZT4KKyAgICAgICAgPC9kZXBlbmRlbnQtbW9kdWxlPgorICAgICAgICA8ZGVwZW5kZW50LW1vZHVsZSBhcmNoaXZlTmFtZT0iSnNvblRyYXZlcnNlLTAuMS1TTkFQU0hPVC5qYXIiIGRlcGxveS1wYXRoPSIvV0VCLUlORi9saWIiIGhhbmRsZT0ibW9kdWxlOi9yZXNvdXJjZS9Kc29uVHJhdmVyc2UvSnNvblRyYXZlcnNlIj4KKyAgICAgICAgICAgIDxkZXBlbmRlbmN5LXR5cGU+dXNlczwvZGVwZW5kZW5jeS10eXBlPgorICAgICAgICA8L2RlcGVuZGVudC1tb2R1bGU+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJqYXZhLW91dHB1dC1wYXRoIiB2YWx1ZT0iL0dsZW1tU2VydmljZXMvYnVpbGQvY2xhc3NlcyIvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iY29udGV4dC1yb290IiB2YWx1ZT0iR2xlbW1TZXJ2aWNlcyIvPgorICAgIDwvd2ItbW9kdWxlPgorPC9wcm9qZWN0LW1vZHVsZXM+CmRpZmYgLS1naXQgYS9HbGVtbVNlcnZpY2VzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5wcmVmcy54bWwgYi9HbGVtbVNlcnZpY2VzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5wcmVmcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M4MTM4NQotLS0gL2Rldi9udWxsCisrKyBiL0dsZW1tU2VydmljZXMvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnByZWZzLnhtbApAQCAtMCwwICsxLDcgQEAKKzxyb290PgorICA8ZmFjZXQgaWQ9ImpzdC5qYXhycyI+CisgICAgPG5vZGUgbmFtZT0ibGlicHJvdiI+CisgICAgICA8YXR0cmlidXRlIG5hbWU9InByb3ZpZGVyLWlkIiB2YWx1ZT0iamF4cnMtbm8tb3AtbGlicmFyeS1wcm92aWRlciIvPgorICAgIDwvbm9kZT4KKyAgPC9mYWNldD4KKzwvcm9vdD4KZGlmZiAtLWdpdCBhL0dsZW1tU2VydmljZXMvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnhtbCBiL0dsZW1tU2VydmljZXMvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzRlOGM0Ci0tLSAvZGV2L251bGwKKysrIGIvR2xlbW1TZXJ2aWNlcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUueG1sCkBAIC0wLDAgKzEsMTEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8ZmFjZXRlZC1wcm9qZWN0PgorICA8cnVudGltZSBuYW1lPSJBcGFjaGUgVG9tY2F0IHY5LjAgKDIpIi8+CisgIDxmaXhlZCBmYWNldD0iamF2YSIvPgorICA8Zml4ZWQgZmFjZXQ9ImpzdC53ZWIiLz4KKyAgPGZpeGVkIGZhY2V0PSJ3c3QuanNkdC53ZWIiLz4KKyAgPGluc3RhbGxlZCBmYWNldD0iamF2YSIgdmVyc2lvbj0iMS44Ii8+CisgIDxpbnN0YWxsZWQgZmFjZXQ9IndzdC5qc2R0LndlYiIgdmVyc2lvbj0iMS4wIi8+CisgIDxpbnN0YWxsZWQgZmFjZXQ9ImpzdC5qYXhycyIgdmVyc2lvbj0iMi4xIi8+CisgIDxpbnN0YWxsZWQgZmFjZXQ9ImpzdC53ZWIiIHZlcnNpb249IjQuMCIvPgorPC9mYWNldGVkLXByb2plY3Q+CmRpZmYgLS1naXQgYS9HbGVtbVNlcnZpY2VzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuanNkdC51aS5zdXBlclR5cGUuY29udGFpbmVyIGIvR2xlbW1TZXJ2aWNlcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuc3VwZXJUeXBlLmNvbnRhaW5lcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmQ1ZDBhCi0tLSAvZGV2L251bGwKKysrIGIvR2xlbW1TZXJ2aWNlcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuc3VwZXJUeXBlLmNvbnRhaW5lcgpAQCAtMCwwICsxIEBACitvcmcuZWNsaXBzZS53c3QuanNkdC5sYXVuY2hpbmcuYmFzZUJyb3dzZXJMaWJyYXJ5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvR2xlbW1TZXJ2aWNlcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuc3VwZXJUeXBlLm5hbWUgYi9HbGVtbVNlcnZpY2VzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuanNkdC51aS5zdXBlclR5cGUubmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWJkNzFiCi0tLSAvZGV2L251bGwKKysrIGIvR2xlbW1TZXJ2aWNlcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuc3VwZXJUeXBlLm5hbWUKQEAgLTAsMCArMSBAQAorV2luZG93ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvR2xlbW1TZXJ2aWNlcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24ucHJlZnMgYi9HbGVtbVNlcnZpY2VzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGNhZDhjCi0tLSAvZGV2L251bGwKKysrIGIvR2xlbW1TZXJ2aWNlcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24ucHJlZnMKQEAgLTAsMCArMSwyIEBACitkaXNhYmxlZD0wNnRhcmdldAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL0dsZW1tU2VydmljZXMvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL0dsZW1tU2VydmljZXMvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTQyNzJlCi0tLSAvZGV2L251bGwKKysrIGIvR2xlbW1TZXJ2aWNlcy9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMyBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitDbGFzcy1QYXRoOiAKKwpkaWZmIC0tZ2l0IGEvR2xlbW1TZXJ2aWNlcy9XZWJDb250ZW50L1dFQi1JTkYvR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIGIvR2xlbW1TZXJ2aWNlcy9XZWJDb250ZW50L1dFQi1JTkYvR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMDVjN2MKLS0tIC9kZXYvbnVsbAorKysgYi9HbGVtbVNlcnZpY2VzL1dlYkNvbnRlbnQvV0VCLUlORi9HbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMKQEAgLTAsMCArMSwzMiBAQAorIyBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXM6CisjIGV4cGVjdGVkIGluIC9XRUItSU5GLy4KKworIyMgR2VuZXJhbCBwcm9wZXJ0aWVzOgorR1NfV29ya2luZ1BhdGggPSAvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy93b3JrLWxpdmUKKworIyBHbGVtbURCIHByb3BlcnRpZXM6CisjIERlcmJ5QXJjaGl2REIgPSBkYXRhYmFzZSBmb3IgdGhlIHdmb3JtIGxpc3Qgb2YgYSB3aG9sZSBDMi1BcmNoaXZlOgorZm5hbWVEQiAJCT0gL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5QXJjaGl2ZURCCisjZm5hbWVEQiAJCT0gL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCMgorc2VydmVySG9zdAk9IC8vbG9jYWxob3N0OjE1MjcvCisKKyMjIEdsZW1tOiBwcm9wZXJ0aWVzIGZvciBsZW1tYXRpemluZzoKKworIyBmbmFtZVNjcmlwdCA9IEdTX1dvcmtpbmdQYXRoICsgZG9HbGVtbQorZm5hbWVTY3JpcHQgPSBkb0dsZW1tCisjIGZuYW1lV2ZzID0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworZm5hbWVXZnMgPSBnbF93ZnNfaW4udHh0CisjIGZuYW1lU2NyaXB0CT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworZm5hbWVTY3JpcHQJPSBkb0dsZW1tCisjIGZuYW1lTGVtYXRhCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworIyBsZW0zIGV4cGVjdGVkIHRvIGJlIElTTzg4NTktMSBlbmNvZGVkLgorZm5hbWVMZW1hdGEJPSB0bXAvbGVtMworCisjIyBMb2dpbmc6CisKKyMgZm5hbWVPdXQgPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworI2ZuYW1lT3V0ID0gR2xlbW1TZXJ2aWNlcy10LmxvZworZm5hbWVPdXQgPSBHbGVtbVNlcnZpY2VzLXQyLmxvZworIyBmbmFtZUVyciAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKyNmbmFtZUVyciA9IEdsZW1tU2VydmljZXMtdC5lcnIKK2ZuYW1lRXJyID0gR2xlbW1TZXJ2aWNlcy10Mi5lcnIKZGlmZiAtLWdpdCBhL0dsZW1tU2VydmljZXMvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwgYi9HbGVtbVNlcnZpY2VzL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMmM3MmMKLS0tIC9kZXYvbnVsbAorKysgYi9HbGVtbVNlcnZpY2VzL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCkBAIC0wLDAgKzEsMjUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIGtvcGllcnQgYXVzIGh0dHBzOi8vYmxvZy5kZWphdnUuc2svcmVnaXN0ZXJpbmctcmVzb3VyY2VzLWFuZC1wcm92aWRlcnMtaW4tamVyc2V5LTIvICwgMDkuMTIuMTkvRkIgLS0+Cis8d2ViLWFwcCB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIiB2ZXJzaW9uPSIyLjUiPgorICA8c2VydmxldD4KKyAgICA8c2VydmxldC1uYW1lPkdsZW1tU2VydmljZXMgbWl0IEplcnNleSBSRVNUPC9zZXJ2bGV0LW5hbWU+CisgICAgPHNlcnZsZXQtY2xhc3M+b3JnLmdsYXNzZmlzaC5qZXJzZXkuc2VydmxldC5TZXJ2bGV0Q29udGFpbmVyPC9zZXJ2bGV0LWNsYXNzPgorICAgIDxpbml0LXBhcmFtPgorICAgICAgPHBhcmFtLW5hbWU+amVyc2V5LmNvbmZpZy5zZXJ2ZXIucHJvdmlkZXIucGFja2FnZXM8L3BhcmFtLW5hbWU+CisgICAgICA8cGFyYW0tdmFsdWU+ZGUua29yYXAuc2VydmljZXM8L3BhcmFtLXZhbHVlPgorICAgIDwvaW5pdC1wYXJhbT4KKyAgICA8aW5pdC1wYXJhbT4KKyAgICAgIDxwYXJhbS1uYW1lPmplcnNleS5jb25maWcuc2VydmVyLnByb3ZpZGVyLmNsYXNzbmFtZXM8L3BhcmFtLW5hbWU+CisgICAgICA8cGFyYW0tdmFsdWU+ZGUua29yYXAuc2VydmljZXM8L3BhcmFtLXZhbHVlPgorICAgIDwvaW5pdC1wYXJhbT4KKyAgICA8aW5pdC1wYXJhbT4KKyAgICAgIDxwYXJhbS1uYW1lPmplcnNleS5jb25maWcuc2VydmVyLnRyYWNpbmc8L3BhcmFtLW5hbWU+CisgICAgICA8cGFyYW0tdmFsdWU+QUxMPC9wYXJhbS12YWx1ZT4KKyAgICA8L2luaXQtcGFyYW0+CisgICAgPGxvYWQtb24tc3RhcnR1cD4xPC9sb2FkLW9uLXN0YXJ0dXA+CisgIDwvc2VydmxldD4KKyAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1uYW1lPkdsZW1tU2VydmljZXMgbWl0IEplcnNleSBSRVNUPC9zZXJ2bGV0LW5hbWU+CisgICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KKyAgPC9zZXJ2bGV0LW1hcHBpbmc+Cis8L3dlYi1hcHA+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvR2xlbW1TZXJ2aWNlcy9wb20ueG1sIGIvR2xlbW1TZXJ2aWNlcy9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxODM4ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9HbGVtbVNlcnZpY2VzL3BvbS54bWwKQEAgLTAsMCArMSw4NiBAQAorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgCisJeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisJeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgPGdyb3VwSWQ+ZGUua29yYXAuc2VydmljZXM8L2dyb3VwSWQ+CisgIDxhcnRpZmFjdElkPkdsZW1tU2VydmljZXM8L2FydGlmYWN0SWQ+CisgIDx2ZXJzaW9uPjAuMi1UZXN0PC92ZXJzaW9uPgorICA8IS0tID52ZXJzaW9uPjAuMi1saXZlPC92ZXJzaW9uIC0tPgorICAKKyAgPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KKyAgPG5hbWU+R2xlbW1TZXJ2aWNlcyAoVGVzdC1Lb25maWd1cmF0aW9uKTwvbmFtZT4KKyAgCisgIDxkZXNjcmlwdGlvbj5SRVNUZnVsbCBHbGVtbVNlcnZpY2VzIGbDvHIgS29yQVAgKExpdmUtS29uZmlndXJhdGlvbik8L2Rlc2NyaXB0aW9uPgorICAKKyAgPGRlcGVuZGVuY2llcz4KKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+CisgICAgICA8dmVyc2lvbj4zLjguMTwvdmVyc2lvbj4KKyAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICA8L2RlcGVuZGVuY3k+CisgICA8ZGVwZW5kZW5jeT4KKyAgICA8Z3JvdXBJZD5qYXZheC5zZXJ2bGV0PC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPnNlcnZsZXQtYXBpPC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjIuNTwvdmVyc2lvbj4KKyAgIDwvZGVwZW5kZW5jeT4KKyAgIDwhLS0gaHR0cHM6Ly9tdm5yZXBvc2l0b3J5LmNvbS9hcnRpZmFjdC9qYXZheC53cy5ycy9qYXZheC53cy5ycy1hcGkgLS0+CisgICA8ZGVwZW5kZW5jeT4KKyAgICA8Z3JvdXBJZD5qYXZheC53cy5yczwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5qYXZheC53cy5ycy1hcGk8L2FydGlmYWN0SWQ+CisgICAgPHZlcnNpb24+Mi4wPC92ZXJzaW9uPgorICAgPC9kZXBlbmRlbmN5PgorICAgPGRlcGVuZGVuY3k+CisgICAgPGdyb3VwSWQ+Y29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmU8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+amFja3Nvbi1jb3JlPC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjIuOS42PC92ZXJzaW9uPgorICAgIDxzY29wZT5jb21waWxlPC9zY29wZT4KKyAgIDwvZGVwZW5kZW5jeT4KKwk8ZGVwZW5kZW5jeT4KKwkgIDxncm91cElkPmNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlPC9ncm91cElkPgorCSAgPGFydGlmYWN0SWQ+amFja3Nvbi1hbm5vdGF0aW9uczwvYXJ0aWZhY3RJZD4KKwkgIDx2ZXJzaW9uPjIuOS42PC92ZXJzaW9uPgorCTwvZGVwZW5kZW5jeT4KKwk8ZGVwZW5kZW5jeT4KKwkgIDxncm91cElkPmNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlPC9ncm91cElkPgorCSAgPGFydGlmYWN0SWQ+amFja3Nvbi1kYXRhYmluZDwvYXJ0aWZhY3RJZD4KKwkgIDx2ZXJzaW9uPjIuOS42PC92ZXJzaW9uPgorCSAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KKwk8L2RlcGVuZGVuY3k+CisKKwk8ZGVwZW5kZW5jeT4KKwkJPGdyb3VwSWQ+ZGUua29yYXAuc2VydmljZXM8L2dyb3VwSWQ+CisJCTxhcnRpZmFjdElkPnV0aWxzPC9hcnRpZmFjdElkPgorCQk8dmVyc2lvbj4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisJPC9kZXBlbmRlbmN5PgorCTxkZXBlbmRlbmN5PgorCQk8Z3JvdXBJZD5kZS5rb3JhcC5qc29uPC9ncm91cElkPgorCQk8YXJ0aWZhY3RJZD5Kc29uVHJhdmVyc2U8L2FydGlmYWN0SWQ+CisJCTx2ZXJzaW9uPjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKwk8L2RlcGVuZGVuY3k+CisgIDwvZGVwZW5kZW5jaWVzPgorICAKKyAgPGJ1aWxkPgorICAgIDxzb3VyY2VEaXJlY3Rvcnk+c3JjPC9zb3VyY2VEaXJlY3Rvcnk+CisgICAgPHBsdWdpbnM+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1jb21waWxlci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjMuNy4wPC92ZXJzaW9uPgorICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8c291cmNlPjEuODwvc291cmNlPgorICAgICAgICAgIDx0YXJnZXQ+MS44PC90YXJnZXQ+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvcGx1Z2luPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4td2FyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+My4yLjE8L3ZlcnNpb24+CisgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgIDxmYWlsT25NaXNzaW5nV2ViWG1sPmZhbHNlPC9mYWlsT25NaXNzaW5nV2ViWG1sPgorICAgICAgICAgIDx3YXJTb3VyY2VEaXJlY3Rvcnk+V2ViQ29udGVudDwvd2FyU291cmNlRGlyZWN0b3J5PgorICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICA8L3BsdWdpbj4KKyAgICA8L3BsdWdpbnM+CisgICAgPGZpbmFsTmFtZT5HbGVtbVNlcnZpY2VzPC9maW5hbE5hbWU+CisgIDwvYnVpbGQ+CisgIAorPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0dsZW1tU2VydmljZXMvc3JjL2RlL2tvcmFwL3NlcnZpY2VzL0dsZW1tREIuamF2YSBiL0dsZW1tU2VydmljZXMvc3JjL2RlL2tvcmFwL3NlcnZpY2VzL0dsZW1tREIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjg4MDE5Ci0tLSAvZGV2L251bGwKKysrIGIvR2xlbW1TZXJ2aWNlcy9zcmMvZGUva29yYXAvc2VydmljZXMvR2xlbW1EQi5qYXZhCkBAIC0wLDAgKzEsODE1IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKK2ltcG9ydCBqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7CitpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitwdWJsaWMgY2xhc3MgR2xlbW1EQgorCit7CisJc3RhdGljIHB1YmxpYyBTdHJpbmcgZGJUYWJsZSAJPSAiR2xlbW1MZW1tYXRhIjsKKwlzdGF0aWMgU3RyaW5nIGRiTGVtbWEgCQkgCT0gImxlbW1hIjsKKwlzdGF0aWMgU3RyaW5nIGRiV2YJIAkJCT0gIndmIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDEgCQkJPSAicHJvcDEiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMiAJCQk9ICJwcm9wMiI7CisKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKG92ZXJ3cml0dGVuIGJ5IEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZuYW1lREIgPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgc2VydmVySG9zdCA9ICIvL2xvY2FsaG9zdDoxNTI3LyI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChmaW5hbCBhc3NpZ25tZW50cyk6CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyRW1iID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZERyaXZlciI7CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyQ2xpZW50ID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREcml2ZXIiOworCisJZmluYWwgc3RhdGljIGJvb2xlYW4KKwkJdXNlUHJlcGFyZWRTdG10ID0gdHJ1ZTsgLy8gMT11c2UgUHJlcGFyZWRTdGF0ZW1lbnQgYW5kIG5vdCBTdGF0ZW1lbnQuCisJCisJLy8gdmFsdWVzIHRvIGJlIGluc2VydGVkOiBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYy4KKwlzdGF0aWMgU3RyaW5nIGluc2VydFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKCclcycsICclcycsICclcycsICclcycsICclcycpIjsKKwlzdGF0aWMgU3RyaW5nIGluc2VydFByZXBhcmVkUXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoPywgPywgPywgPywgPykiOworCQorCS8vIENvbnN0YW50cyBvZiB0YWJsZSBHbGVtbUxlbW1hdGE6CisJc3RhdGljIGZpbmFsIGludCBtYXhMZW1tYVNpemUJPSA2NDsgCS8vIG1heC4gbm8uIG9mIGNoYXJzLCBhcyBkZWNsYXJlZCBpbiB0YWJsZSBHbGVtbUxlbW1hdGEuCisJc3RhdGljIGZpbmFsIGludCBtYXhXZlNpemUJCT0gNjQ7CS8vIG1heC4gbm8uIG9mIGNoYXJzLCBhcyBkZWNsYXJlZCBpbiB0YWJsZSBHbGVtbUxlbW1hdGEuCisJCisJLyogdmFyaWFibGVzICovCisJc3RhdGljIGludCBuRXhjZXB0U3RtdAkJCT0gMDsJLy8gY291bnQgbm8uIG9mIGV4Y2VwdGlvbnMgZm9yIHByZXBhcmVkU3RtdC4KKwlzdGF0aWMgaW50IG5FeGNlcHRJbnNlcnQJCT0gMDsJLy8gY291bnQgbm8uIG9mIGV4Y2VwdGlvbnMgZm9yIEluc2VydHMuCisJCisJLyoKKwkgKiBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkgKiAKKwkgKiBBcmd1bWVudHM6CisJICogcHJvcHMJOiBQcm9wZXJ0aWVzIGxvYWRlZCBieSB0aGUgR2xlbW1TZXJ2aWNlcy4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgZnVuY3Rpb24gbG9hZHMgb25seSB0aG9zZSBDb25zdGFudHMgbmVlZGVkIGluIHRoaXMgY2xhc3MuCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzCXByb3BzKQorCQorCXsKKwlmbmFtZURCCQkgCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAJIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCXNlcnZlckhvc3QJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgInNlcnZlckhvc3QiLAkiLy9sb2NhbGhvc3Q6MTUyNy8iKTsKKwlkZXJieURCVVJMIAkJPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJCQkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qICAgIGNoZWNrRGVyYnlDb25uZWN0aW9uOgorCSAqIAorCSAqIGNoZWNrIGlmIERlcmJ5IE5ldHdvcmsgU2VydmVyIGlzIGF2YWlsYWJsZS4KKwkgKiBSZXR1cm5zOiAwICg9T0spIG9yIC0xIChvbiBlcnJvcikuCisJICogMDUuMTEuMjEvRkIKKwkgKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBjaGVja0RlcmJ5Q29ubmVjdGlvbigpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJjaGVja0RlcmJ5Q29ubmVjdGlvbiI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2UsCisJLy8gc2V0IEF1dG9jb21taXQgPSBmYWxzZSB0byBhY2NlbGVyYXRlIGluc2VydGlvbnM6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nIHRvICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3RpbmcgZmFpbGVkIVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCWZpbmFsbHkgCisJCXsgCisJCXRyeSB7IC8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGNoZWNrX0RlcmJ5Q29ubmVjdGlvbgorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIHdoZW4gaW5kZXhpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSwgc2VsZWN0IHRoZSBzdWJtaXR0ZWQgZGJwYXRoLAorCS8vIChub3QgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZGJwYXRoOworCQorCS8vIG9wZW4gcmVhZGVyIG9uIEdsZW1tIExlbW1hdGE6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJCisJCW5FcnJvcnMgPSB3cml0ZURCTGVtbWF0YShpbik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIGZyb20gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwkvLyBjbG9zZSBSZWFkZXI6CisJdHJ5IHsKKwkJaW4uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQluRXJyb3JzID0gLTE7CisJCX0KKwkKKwlpZiggbkVycm9ycyA9PSAtMSApCisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBlcnJvciB0byBEZXJieSBTZXJ2ZXIhXG4iLCBmdW5jKTsKKwllbHNlIGlmKCBuRXJyb3JzID09IC0yICkKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBTUUwgZXJyb3Igd2hlbiBjcmVhdGluZyBTUUwgc3RhdGVtZW50IVxuIiwgZnVuYyk7CisJZWxzZSBpZiggbkVycm9ycyA9PSAtMyApCisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogSS9PIGVycm9yIHdoZW4gcmVhZGluZyBsZW1tYS93ZnMhXG4iLCBmdW5jKTsKKwllbHNlIGlmKCBuRXJyb3JzID09IDAgKQorIAkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQgZG9uZSBzdWNjZXNzZnVsbHkuXG4iLCBmdW5jKTsKKyAJZWxzZQorIAkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQ6ICVkIEVycm9ycyFcbiIsIGZ1bmMsIG5FcnJvcnMpOworIAkKKwlyZXR1cm4gbkVycm9yczsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YQorCQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVEQkxlbW1hdGEoKQorCSAqICAgICAgICAgICAgICAgICAgICAgICAKKwkgKiBzdG9yZXMgbGlzdCBvZiBsZW1tYXRhICsgaW5mb3MgaW50byBEZXJieSBkYi4KKwkgKiBGaWxlIGZvcm1hdDogIkxlbW1hIERlY29tcG9zaXRpb24gV2YiLAorCSAqICAgICAgICAgICAgICBlLmcuOiAiSMOkdXNlciArLSBIYXVzIi4KKwkgKiBSZXR1cm5zOiAgMDogT0sgb3IgCisJICogCQkJLTE6IGNvbm5lY3Rpb24gZXJyb3IgdG8gRGVyYnkgU2VydmVyLCBvcgorCSAqIAkJCS0yOiBTUUwgZXJyb3IsIG9yCisJICogCQkJLTM6IEkvTyBlcnJvciB3aGVuIHJlYWRpbmcgd2ZzLCBvcgorCSAqIAkJICAgPiAwOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIDA5LjAxLjIwL0ZCCisJICogMDQuMTEuMjEvRkIgdHVybiBhdXRvY29tbWl0IG9mZiB0byBhY2NlbGVyYXRlIGh1Z2UgYW1vdW50IG9mIGluc2VydGlvbnMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYXRhKEJ1ZmZlcmVkUmVhZGVyIGluKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hdGEiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJUHJlcGFyZWRTdGF0ZW1lbnQKKwkJc3RtdFByZXAgPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10IAkgPSBudWxsOworCVN0cmluZworCQlsaW5lOwkKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQluSW5zZXJ0ZWQgPSAwLAkvLyBuby4gb2YgbGVtbWEvd2YgcGFpcnMgaW1wb3J0ZWQuCisJCXJldCA9IDA7IC8vIE9LLgorCWJvb2xlYW4KKwkJY29udGFpbnNTcGVjOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZSwKKwkvLyBzZXQgQXV0b2NvbW1pdCA9IGZhbHNlIHRvIGFjY2VsZXJhdGUgaW5zZXJ0aW9uczoKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJY29uLnNldEF1dG9Db21taXQoZmFsc2UpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZCAoYXV0b0NvbW1pdD1vZmYpLlxuIiwgZnVuYyk7CisJCQorCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCXN0bXRQcmVwID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0UHJlcGFyZWRRdWVyeSk7CisJCWVsc2UKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisKKwkJd2hpbGUoIChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoICE9IDMgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6ICclcycgaGFzICVkIGNvbXBvbmVudHMhIEV4cGVjdGVkID0gMyEgQ2Fubm90IGJlIHN0b3JlZCFcbiIsIGZ1bmMsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJCW5FcnJvcnMrKzsKKwkJCQljb250aW51ZTsKKwkJCQl9CisJCQkKKwkJCS8vIEdldCBJbmZvLCBpZiB3b3JkZm9ybSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgJy0nLCBpbnRlcnB1bmN0aW9uIGV0Yy46CisJCQkvLyBsZW1tYUluZm9bMl0gPSB3b3JkZm9ybS4KKwkJCWNvbnRhaW5zU3BlYyA9IExlbW1hSW5mby5pc1dmU3BlY2lhbENhc2UobGVtbWFJbmZvWzJdKTsKKwkJCS8vIHN0b3JlIGludG8gREI6CisJCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZChzdG10UHJlcCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvcyhzdG10LCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJCisJCQlpZiggcmV0ICE9IDAgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBzdG9yZSBsZW1tYSAnJXMnIGludG8gREIhIChyZXQ9JWQpXG4iLCBmdW5jLCBsaW5lLCByZXQpOworCQkJCW5FcnJvcnMrKzsgCisJCQkJfQorCQkJZWxzZQorCQkJCW5JbnNlcnRlZCsrOworCQkJfSAvLyB3aGlsZQorCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBHbGVtbSBsZW1tYXRhK2luZm9zIGZyb20gZmlsZSEgRXhpdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTM7IAorCQl9CQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gY29uID09IG51bGwgPyAtMSA6IC0yOworCQl9CisJZmluYWxseSAKKwkJeyAKKwkJdHJ5IHsKKwkJCS8vIGltcG9ydGFudDogbm93IGNvbW1pdCwgYXMgYXV0b0NvbW1pdCBpcyBkZWFjdGl2YXRlZCwKKwkJCS8vIHRoaXMgYWxzbyByZW1vdmVzIGRhdGFiYXNlIGxvY2tzOgorCQkJY29uLmNvbW1pdCgpOworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb21taXQgc3VjY2Vzc2Z1bGwuXG4iLCBmdW5jKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb21taXQgYXQgdGhlIGVuZCBvZiB0aGUgd2ZzIGxpc3QgZmFpbGVkIVxuIiwgZnVuYyk7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCQorCQl0cnkgeyAvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSAKKwkJCQlzdG10LmNsb3NlKCk7CisJCQlpZiggc3RtdFByZXAgIT0gbnVsbCApIAorCQkJCXN0bXRQcmVwLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkluZm8gOiAlczogbm8uIG9mIGxlbW1hdGEvd2YgcGFpcnMgaW5zZXJ0ZWQgPSAlZC5cbiIsIGZ1bmMsIG5JbnNlcnRlZCk7CisJCisJcmV0dXJuIG5FcnJvcnM7IC8vIDA9T0ssID4wID0gbm8uIG9mIGVycm9ycy4KKwl9IC8vIHdyaXRlREJMZW1tYXRhCisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIHJ1bGVzIGludG8gRGVyYnkgREIuCisJICogTm90ZXM6CisJICogLSB0aGlzIGlzIHRoZSB2ZXJzaW9uIHdpdGggYSBQcmVwYXJlZFF1ZXJ5LgorCSAqIFBhcmFtZXRlcnM6CisJICogc3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDE3LjAxLjIwL0ZCCisJICogMDUuMS4yMS9GQiByZWplY3QgbGVtbWEvd2YgPiA2NCBjaGFycy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoCisJCQlQcmVwYXJlZFN0YXRlbWVudCBzdG10LCAKKwkJCVN0cmluZyBsZW1tYSwgCisJCQlTdHJpbmcgd2YsIAorCQkJU3RyaW5nIGRlY29tcG9zaXRpb24sIAorCQkJYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQiOworCWZpbmFsIGJvb2xlYW4KKwkJYkxvZyA9IGZhbHNlOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCWJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCS8vIGNoZWNrIHNpemUgb2Ygd2YgYW5kIGxlbW1hIGFnYWluc3QgZmllbGQgc2l6ZSBpbiB0YWJsZSBHbGVtbUxlbW1hdGE6CisJaWYoIGxlbW1hLmxlbmd0aCgpID49IEdsZW1tREIubWF4TGVtbWFTaXplICkgCisJCXsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBsZW1tYSByZWplY3RlZCAoPiAlZCk6ICclcychXG4iLAorCQkJCWZ1bmMsIG1heExlbW1hU2l6ZSwgbGVtbWEpOworCQlyZXR1cm4gNDsKKwkJfQorCWlmKCB3Zi5sZW5ndGgoKSA+PSBHbGVtbURCLm1heFdmU2l6ZSApIAorCQl7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2YgcmVqZWN0ZWQgKD4gJWQpOiAnJXMnIVxuIiwKKwkJCQlmdW5jLCBtYXhXZlNpemUsIHdmKTsKKwkJcmV0dXJuIDU7CisJCX0KKwkgCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIAorCS8vIGZvciBsb2dpbmcgb25seToKKwlzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJaWYoIGJMb2cgKQorCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKyAgICAvLyBub3cgaW5zZXJ0IG5ldyB2YWx1ZXMgaW50byBQcmVwYXJlZFN0YXRlbWVudDoKKyAgICB0cnkgeworICAgIAlzdG10LnNldFN0cmluZyggMSwgbGVtbWEpOworICAgICAgICBzdG10LnNldFN0cmluZyggMiwgd2YpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oMywgcHJvcDEpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNCwgcHJvcDIpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNSwgc3BlYyk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJlcGFyZWQgc3RtdCA9ICclcycuXG4iLCAgZnVuYywgc3RtdC50b1N0cmluZygpKTsKKyAgICAgICAgfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZTEpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigJIkVycm9yOiAlczogd2hpbGUgZmlsbGluZyBwcmVwYXJlZCBzdGF0ZW1lbnQgd2l0aCBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JyViJyBwcm9wMj0nJWInIHNwZWM9JyViJyFcbiIsICAKKwkJCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWlmKCArK25FeGNlcHRTdG10IDw9IDEgKQorCQkJZTEucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisgICAgCisgICAgdHJ5IHsKKwkJLy8gZXhlY3V0ZSB0aGUgZmlsbGVkIHByZXBhcmVkIHN0YXRlbWVudDoKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZSgpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViISAobj0lZClcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMsIG4pOworIAkJCXJldHVybiAyOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJaWYoICsrbkV4Y2VwdEluc2VydCA8PSAxICkKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAzOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIGludG8gRGVyYnkgREIuCisJICogUGFyYW1ldGVyczoKKwkgKiBjb250YWluc1NwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxMC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvcyhTdGF0ZW1lbnQgc3RtdCwgU3RyaW5nIGxlbW1hLCBTdHJpbmcgd2YsIFN0cmluZyBkZWNvbXBvc2l0aW9uLCBib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvcyI7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJQm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIHNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAgICAKKyAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKwl0cnkgeworCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKHNxbEluc2VydCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWFEYXRhCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgZnJvbSB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dDogbGVtbWEgKyBHTEVNTV9PUFRTX3h4eCAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hRGF0YShMZW1tYUluZm8gbGVtbWFJbmZvLCBQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWFEYXRhIjsKKworCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWxlbW1hSW5mby5jb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCWxlbW1hSW5mby5zdG10ID0gbGVtbWFJbmZvLmNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJaW50IHIgPSByZWFkREJMZW1tYShsZW1tYUluZm8uc3RtdCwgbGVtbWFJbmZvKTsKKwkJCQorCQlpZiggciAhPSAwICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGdldCBkYXRhIGZvciBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyFcbiIsIAorCQkJCQlmdW5jLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGxlbW1hSW5mby5jb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYURhdGEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBieSBhY2Nlc3NpbmcgdGhlIEdsZW1tREIuCisJICogSW5wdXQgOiBsZW1tYSArIHByb3AxKzIgKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqIE91dHB1dDogCisJICogIC0gY29udGFpbnMgYSBSZXN1bHRTZXQgZm9yIGZldGNoaW5nIHRoZSB3b3JkZm9ybXMuCisJICogCSAgVGhpcyBSZXN1bHRTZXQgd2lsbCBoYXZlIGJlIGJlIGNsb3NlZCB3aXRoIExlbW1hSW5mby5jbG9zZSgpLgorCSAqIAkgIFRoZSBuby4gb2YgZm91bmQgd29yZGZvcm1zIGlzIG5vdCBrbm93biB0aWxsIHdlCisJICogCSAgZmV0Y2ggYWxsIG9mIHRoZW0gZnJvbSBSZXN1bHRTZXQhIAorCSAqIAktIGR1ZSB0byBTRUxFQ1QgRElTVElOQ1Qgb25seSB1bmlxIHdmIGFyZSByZXR1cm5lZC4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWEoU3RhdGVtZW50IHN0bXQsIExlbW1hSW5mbyBsZW1tYUluZm8pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYSI7CisJU3RyaW5nCisJCXNxbDsKKwkJCisJc3FsID0gU3RyaW5nLmZvcm1hdCgiU0VMRUNUIERJU1RJTkNUIHdmIGZyb20gJXMgV0hFUkUgbGVtbWE9JyVzJyAlcyAlcyAlcyIsIAorCQkJZGJUYWJsZSwKKwkJCWxlbW1hSW5mby5sZW1tYSwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIkFORCBwcm9wMT0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICJBTkQgcHJvcDE9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIkFORCBwcm9wMj0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICJBTkQgcHJvcDI9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAxID8gIkFORCBzcGVjPSd0cnVlJyIgICA6IAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiQU5EIHNwZWM9J2ZhbHNlJyIgIDogIiIpOworCQorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIGZ1bmMsIGxlbW1hSW5mby5wcm9wMSwgbGVtbWFJbmZvLnByb3AyLCBsZW1tYUluZm8uc3BlYyk7CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWwgPSAnJXMnLlxuIiwgZnVuYywgc3FsKTsKKworCXRyeSB7CisJCWxlbW1hSW5mby5yZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOwkKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGVuIGV4ZWN1dGluZyBzcWw9JyVzJyFcbiIsIGZ1bmMsIHNxbCk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisJZmluYWxseSB7CisJCS8vIGFsbCBzcWwgc3R1ZmYgYXJlIGNsb3NlZCBvdXRzaWRlIHRoaXMgZnVuY3Rpb24sIHNvIGRvbid0IGNsb3NlIHRoZW0gaGVyZSEKKwkJfQkKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zCisJICogUmV0dXJucyBHZW5lcmFsIEluZm9zIGFib3V0IHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiByZWFkIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiSW5mb3MoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWRiSW5mbyA9IHJlYWREYkxlbW1hdGFJbmZvcyhzdG10KTsKKwkJCQorCQlpZiggZGJJbmZvID09IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgcmVhZCBHZW5lcmFsIEluZm9zIGZyb20gR2xlbW0gRGF0YWJhc2UhXG4iLCBmdW5jKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIG51bGw7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgc3RtdC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBtYXkgYmUgbnVsbC4KKwkJCisJfSAvLyByZWFkRGJJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkxlbW1hdGFJbmZvczoKKwkgKiByZWFkcyBhbmQgcmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjb250ZW50IAorCSAqIG9mIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiBSZXR1cm5zIDA9T0sgb3IgZXJyb3IgY29kZSA+IDAuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJMZW1tYXRhSW5mb3MoU3RhdGVtZW50IHN0bXQpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInJlYWREYkxlbW1hSW5mb3MiOworCVN0cmluZ1tdCisJCXNxbCA9IHsJIlNFTEVDVCBDT1VOVChkaXN0aW5jdCBsZW1tYSkgZnJvbSAiICsgZGJUYWJsZSAsCS8vIGNvdW50cyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YS4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUsCQkJCQkvLyBjb3VudHMgdG90YWwgbm8uIG9mIHN0b3JlZCB3b3JkZm9ybXMuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj10cnVlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj10cnVlIn07CisJUmVzdWx0U2V0CisJCXJlcyA9IG51bGw7IAorCWludFtdCisJCW5Db3VudHMgPSBuZXcgaW50W3NxbC5sZW5ndGhdOworCWludAkJCisJCWkgPSAwLCAKKwkJbkRpc3RMZW1tYXRhID0gLTEsCS8vIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhIGluIERCLgorCQluV2ZzCQkgPSAtMTsJLy8gbm8uIG9mIHdvcmRmb3JtcyBpbiBEQi4KKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogZXh0cmFjdGluZyBhZ3JlZ2F0ZWQgaW5mb3MgYWJvdXQgRGF0YWJhc2UgY29udGVudHMuLi5cbiIsIGZ1bmMpOworCQorCWRiSW5mbyA9IG5ldyBHbGVtbURCSW5mbygpOworCisJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJdHJ5IHsKKwkJZm9yKGk9MDsgaTxzcWwubGVuZ3RoOyBpKyspCisJCQl7CisJCQlyZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWxbaV0pOworCQkJaWYoIHJlcy5uZXh0KCkgKQorCQkJCWRiSW5mby5jb3VudHNbaV0gPSByZXMuZ2V0SW50KDEpOyAvLyBjb3VudCBpcyBpbiBjb2x1bW4gMS4KKwkJCWVsc2UKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZXh0cmFjdCBjb3VudCBmcm9tICclcychXG4iLCBmdW5jLCBzcWxbaV0pOworCQkJCWRiSW5mby5jb3VudHNbaV0gPSAtMTsKKwkJCQl9CisJCQl9CisgICAgICAgCisgICAgICAgIH0KKyAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAJeworICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHNxbD0nJXMnIGZhaWxlZCFcbiIsIGZ1bmMsIHNxbFtpXSk7CisgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgCX0KKwlmaW5hbGx5IHsKKwkJdHJ5IHsKKwkJCXJlcy5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gT0sKKwl9IC8vIHJlYWREYkxlbW1hdGFJbmZvcworCQorCS8qKioqKioqKioqKioqKioqKioqKiBUZXN0IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQorCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvc190ZXN0CisJICogVGhpcyBpcyBkZWJ1ZyBjb2RlIHdyaXR0ZW4gdG8gdGVzdCBpZiB3ZSBjYW4gYWNjZXNzIHRoZSBEZXJieQorCSAqIERhdGFiYXNlIGZyb20gYW4gZXh0ZXJuYWwgSmF2YSBQcm9ncmFtbS4KKwkgKiAwOC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgcmVhZERiSW5mb3NfdGVzdCgpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJU3RyaW5nCisJCWluc2VydFN0bXQgPSAiIjsKKwkKKwkvLyBDb25uZWN0IHRvIERlcmJ5IGRhdGFiYXNlOgorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQkKKwkJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJCXRyeQorCQkJeworCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIFN0cmluZyAKKyAgICAgICAgICAgIAlzcWwgPSAiU0VMRUNUICogRlJPTSAiICsgZGJUYWJsZTsKKyAgICAgICAgICAgIFJlc3VsdFNldCAKKyAgICAgICAgICAgIAlyZXN1bHQgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOworIAorICAgICAgICAgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiB0YWJsZSAnJXMnOlxuIiwgIGZ1bmMsIGRiVGFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAocmVzdWx0Lm5leHQoKSkgeworICAgICAgICAgICAgCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIiclcycgOiAnJXMnIDogJyVzJyA6ICclcycgLlxuIiwgcmVzdWx0LmdldFN0cmluZygxKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMiksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDMpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZyg0KSk7CisgICAgICAgIAkJaW5zZXJ0U3RtdCA9IGluc2VydFN0bXQgKyAiPHA+IiArIHJlc3VsdC5nZXRTdHJpbmcoMSkgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoMikgKyAiIDogIiArCisgICAgICAgICAgICAgICAgCQkgICAgIHJlc3VsdC5nZXRTdHJpbmcoMykgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoNCkgKyAiPC9wPiI7CisgICAgICAgICAgICAJfQorCQkJfQorCSAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAgICAgCXsKKwkgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogaW5zZXJ0U3RtdD0nJXMnIGZhaWxlZCEuXG4iLCBmdW5jLCBzdG10KTsKKyAgICAgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIAl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGluZyAnJXMgZmFpbGVkIVxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCXJldHVybiAxOworCQl9CisJCisJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCXRyeSB7CisJCWNvbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCQorCX0gLy8gcmVhZERiSW5mb3NfdGVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIGltcG9ydEdsZW1tTGVtYXRhX3Rlc3QKKwkgKiBUZXN0IFZlcnNpb24uCisJICogMTIuMTIuMTkvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0KFN0cmluZyBmbikKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QiOworCUlucHV0U3RyZWFtIAorCQlpbjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbjIgPSBudWxsOworCVN0cmluZworCQlsaW5lOworCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJcjsKKwkKKwkvKgorCSAqIFJlYWQgTGVtbWF0YSArIEluZm8gZnJvbSBmaWxlOiAKKwkgKi8KKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQkKKwl0cnkgeworCQkvL2luID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oIG5ldyBGaWxlSW5wdXRTdHJlYW0oZm4pICk7CisJCWluMiA9IG5ldyBCdWZmZXJlZFJlYWRlciggbmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJd2hpbGUoIChsaW5lID0gaW4yLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCA9PSAzICkKKwkJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogSW1wb3J0OiBsZW09JyVzJyBEZWNvbXA9JyVzJyBXZj0nJXMnLlxuIiwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMV0sIGxlbW1hSW5mb1syXSk7CisJCQllbHNlCisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6IGltcG9ydEdsZW1tTGFtYXRhOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzIVxuIiwgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQl9CisJCX0gCisJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBvcGVuICclcychXG4iLCBmdW5jLCBmbik7CisJCXJldHVybiAxOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisKKwl0cnkgeworCQlpbjIuY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwkvKiBDaGVjayBjb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCSAqLyAKKwlyID0gcmVhZERiSW5mb3NfdGVzdCgpOworCWlmKCByICE9IDAgKQorCQlyZXR1cm4gcjsKKwkJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdAorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvR2xlbW1TZXJ2aWNlcy9zcmMvZGUva29yYXAvc2VydmljZXMvR2xlbW1EQkluZm8uamF2YSBiL0dsZW1tU2VydmljZXMvc3JjL2RlL2tvcmFwL3NlcnZpY2VzL0dsZW1tREJJbmZvLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRmYzdhOQotLS0gL2Rldi9udWxsCisrKyBiL0dsZW1tU2VydmljZXMvc3JjL2RlL2tvcmFwL3NlcnZpY2VzL0dsZW1tREJJbmZvLmphdmEKQEAgLTAsMCArMSw0MyBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworcHVibGljIGNsYXNzIEdsZW1tREJJbmZvCisKK3sKKwlwdWJsaWMgaW50CisJCW5EaXN0TGVtbWF0YSwJLy8gbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEgaW4gREIuCisJCW5XZnMsCQkJLy8gbm8uIG9mIHdvcmRmb3JtcyBpbiBEQi4KKwkJbkZsZXhpb25zLAkJLy8gbm8uIG9mIGZsZXhpb25zLgorCQluQ29tcG91bmRzLAkJLy8gbm8uIG9mIGNvbXBvdW5kcy4KKwkJbk90aGVycywJCS8vIG5vLiBvZiAic29uc3RpZ2UgV29ydGJpbGR1bmdzZm9ybWVuIi4KKwkJblNwZWM7CQkJLy8gbm8uIG9mICJTcGV6aWFsZsOkbGxlIi4KKwlwdWJsaWMgaW50W10KKwkJY291bnRzICA9IHstMSwtMSwtMSwtMSwtMSwtMX07CisJZmluYWwgcHVibGljIFN0cmluZ1tdCisJCWNvdW50TGFiZWxzID0gewkiZWluZGV1dGlnZSBMZW1tYXRhIiwKKwkJCQkJCSJXb3J0Zm9ybWVuIiwKKwkJCQkJCSJGbGV4aW9uc2Zvcm1lbiIsCisJCQkJCQkiS29tcG9zaXRhIiwKKwkJCQkJCSJzb25zdGlnZSBXb3J0YmlsZHVuZ3Nmb3JtZW4iLAorCQkJCQkJIktvbXBvc2l0YSBtaXQgc29uc3QuIFdvcnRiaWxkdW5nc2Zvcm1lbiJ9OworCQorCS8qIEdsZW1tREJJbmZvIGNvbnN0cnVjdG9yCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlHbGVtbURCSW5mbyhpbnQgbkRpc3RMZW1tYXRhLCBpbnQgbldmcykKKwkKKwl7CisJdGhpcy5uRGlzdExlbW1hdGEgPSBuRGlzdExlbW1hdGE7CisJdGhpcy5uV2ZzID0gbldmczsKKwl9CisJCisJLyogR2xlbW1EQkluZm8gY29uc3RydWN0b3IKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUdsZW1tREJJbmZvKCkKKwkKKwl7CQorCX0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0dsZW1tU2VydmljZXMvc3JjL2RlL2tvcmFwL3NlcnZpY2VzL0dsZW1tU2VydmljZXMuamF2YSBiL0dsZW1tU2VydmljZXMvc3JjL2RlL2tvcmFwL3NlcnZpY2VzL0dsZW1tU2VydmljZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTcyMjViCi0tLSAvZGV2L251bGwKKysrIGIvR2xlbW1TZXJ2aWNlcy9zcmMvZGUva29yYXAvc2VydmljZXMvR2xlbW1TZXJ2aWNlcy5qYXZhCkBAIC0wLDAgKzEsOTkwIEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKKy8qIDAuMSA6IDE3LjA2LjIwL0ZCIAorICogMC4yIDogMjUuMTAuMjEvRkIKKyAqICAgICAgIGxvZ2luZyBvZiB0aGUgQVBJIFJlcXVlc3RzLgorICogICAgICAgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisgKiAgICAgICBjb3JyZWN0aW5nIGNhbGxpbmcgb2YgbGVtbWEgKyBwcm9wMS9wcm9wMi9zcGVjLgorICogICAgICAgaGFuZGxpbmcgb2YgbGVtbWF0YSB3aXRoICfDnycuCisgKiAKKyAqIEdlbmVyYWwgY29tbWVudHMgdG8gdGhlIGVuY29kaW5nIG9mIGRlcml2YXRpb25zIGZyb20gbGVtbWEgdG8gd2ZzIGFuZCBob3cgdGhleSBhcmUgZW5jb2RlZAorICogaW4gdGhlIERlcmJ5IGRhdGFiYXNlOgorICogCisgKiBHTEVNTSBlbmNvZGluZzogIAorICogICBfIF8gOiArRmxleCAgICAgICDDlmxlIC0+IMOWbCAgICAgIAorICogICArIF8gOiArQ29tcCAgICAgICDDlmxsYW1wZSAtPiDDlmwgb3IgTGFtcGUgKGNvbXBvdW5kKS4KKyAqICAgXyArIDogK290aGVyICAgICAgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm5zY2h1aCAobm8gY29tcG91bmQgZm9yICdUdXJuc2NodWgnLCBvbmx5IHByZWZpeCkuCisgKiAgICsgKyA6ICtDb21wK290aGVyIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuICsgU2NodWggKGNvbXBvdW5kIGZvciAnU2NodWgnICsgUHJlZml4KS4KKyAqIEMyIGxlbW1hdGl6YXRpb24gb3B0aW9uczoKKyAqICAgRmxleCAgKGlkZW50aWNhbCB0byBHbGVtbSkKKyAqICAgQ29tcCAgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKQorICogICBPdGhlciAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpLgorICogICBTcGVjICAob25seSBDMjogaW5jbHVkZXMgYWxsIHdmcyB3aXRoIGhpcGhlbiBhbmQvb3Igc29tZSBub24tYWxwaGFiZXRpYyBJU084ODU5LTEgY2hhcnMpCisgKiAgICAgICAgIEUuZy4gw5ZsLUV4cG9ydGUsICJNYXJrZW4iLcOWbGUuCisgKiBEZXJieSBFbmNvZGluZzoKKyAqICBwcm9wMSAJcHJvcDIJc3BlYyAgIAltZWFuaW5nIGluIEMyOgorICogIDAJCTAJCS0JCUZsZXgKKyAqICAxCQkwCQktCQlDb21wCisgKiAgMAkJMQkJLQkJT3RoZXIgKHByZWZpeCkKKyAqICAxCQkxCQktCQlDb21wICsgT3RoZXIKKyAqICAtCQktCQkwCQktU3BlYworICogIC0JCS0JCTEJCStTcGVjCisgKiAKKyAqIEV4YW1wbGVzOgorICogJlNjaHVoCQkJOiBTY2h1aCwgU2NodWhlLCAuLi4gb25seSBmbGV4aW9ucworICogJlNjaHVoK2NvbXAJCTogU2NodWhlLCBUdXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMuCisgKiAmU2NodWgrb3RoZXIJCTogU2NodWhlLCBBbnRpc2NodWhlLi4uIGZsZXhpb25zIGFuZCBwcmVmaXhlZCB3ZnMgKG5vIGNvbXBvdW5kcykuCisgKiAmU2NodWgrY29tcCtvdGhlcjogU2NodWhlLCBBbnRpc2NodWhlLCBUdXJuc2NodWhlLCBBbnRpdHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzIGFuZCAKKyAqIAkJCQkJICBwcmVmaXhlZCBzaW5nbGUgd2ZzIChBbnRpc2NodWhlKSBhbmQgcHJlZml4ZWQgY29tcG91bmRzLgorICogJlNjaHVoK3NwZWMJCTogIkFudGkiLVNjaHVoZSwgNjhnZXItU2NodWhlLi4uIG1heSBiZSBjb21iaW5lZCB3aXRoIGV2ZXJ5IG9wdGlvbnM6IGFkZHMKKyAqICAgICAgICAgICAgICAgICAgICB3ZnMgd2l0aCBoeXBoZW4gYW5kL29yIG5vbi1hbHBoYWJldGljIGNoYXJzLgorICogCisgKiBDb252ZXJzaW9uIHJ1bGVzOgorICogCisgKiAgJnNjaGxpZcOfZW4gLT4gaW50ZXJuYWwgc2VhcmNoIGZvciAnc2NobGllc3NlbicsCisgKiAgYmVjYXVzZSBHbGVtbSBvdXRwdXRzICdzcycgZm9yICfDnycuCisgKiAgCisgKiBDaGFyYWN0ZXIgRW5jb2Rpbmc6CisgKiAKKyAqIC0gV2hlbiBpbXBvcnRpbmcgd2ZzIHRvIHRoZSBEZXJieSBEYXRhYmFzZSB3aXRoIGRvQ3VybEdsZW1tU2VydmljZXMvaW5kZXhMZW1tYXRhOgorICogCisgKiAgIElOUFVUOiB3b3JkZm9ybSBsaXN0IGluIFtVVEYtOF0gOiBVVEYtOCBpcyB0aGVuIGNvbnZlcnRlZCB0byBMYXQxIGZvciBHbGVtbSwKKyAqICAgICAgICAgIHRoZSBvdXRwdXQgb2YgR2xlbW0gW0xhdDFdIGlzIHJldHVybmVkIHRvIHRoZSBHbGVtbVNlcnZpY2VzIHdpdGhvdXQgcmVjb252ZXJzaW9uCisgKiAgICAgICAgICB0byBVVEY4IGFuZCBpbXBvcnRlZCBpbnRvIERlcmJ5IERhdGFiYXNlIHVuY2hhbmdlZC4KKyAqCQkKKyAqLworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA1LjExLjIxIjsgCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4yIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVByb3BzCQk9ICIvV0VCLUlORi9HbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiOworCQorCS8vIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSByZWFkIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzICh0aGVzZSBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzKToKKwlwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCAJCT0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCXByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCQkJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwlAQ29udGV4dAorCXByaXZhdGUgU2VydmxldENvbnRleHQgc2VydmxldENvbnRleHQ7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmb3V0CT0gbnVsbDsKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZlcnIJPSBudWxsOwkJCisJCQorCS8qIAorIAkgKiAKKwkgKiAtIGFmdGVyIGxvYWRQcm9wZXJ0aWVzLCBzZXRzIHRoZSBjbGFzcyB2YXJpYWJsZSB3aXRoIGxvYWRlZCBwcm9wZXJ0eSB2YWx1ZXMuCisJICogCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCUdTX1dvcmtpbmdQYXRoIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJHU19Xb3JraW5nUGF0aCIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyIpOworCWZuYW1lV2ZzCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVdmcyIsIAkgICAiZ2xfd2ZzX2luLnR4dCIpOworCWZuYW1lV2ZzCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVXZnM7CisJZm5hbWVPdXQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lT3V0IiwgCSAgICJHbGVtbVNlcnZpY2VzLmxvZyIpOworCWZuYW1lT3V0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVPdXQ7CisJZm5hbWVFcnIJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lRXJyIiwgCSAgICJHbGVtbVNlcnZpY2VzLmVyciIpOworCWZuYW1lRXJyCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVFcnI7CisJZm5hbWVTY3JpcHQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lU2NyaXB0IiwJICAgImRvR2xlbW0iKTsKKwlmbmFtZVNjcmlwdAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lU2NyaXB0OworCWZuYW1lTGVtYXRhCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUxlbWF0YSIsICAgICJ0bXAvbGVtMyIpOworCWZuYW1lTGVtYXRhCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVMZW1hdGE7CisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKgorCSAqICBsb2dfUmVxdWVzdDoKKwkgKiAgCisJICogIC0gd3JpdGUgaW5mbyBhYm91dCBBUEkgUmVxdWVzdC4KKwkgKiAgUGFyYW1ldGVyczoKKwkgKiAgcmVxdWVzdFBhdGgJOiBwYXRoIG9mIHdlYmFwcCBhZGRyZXNzZWQgYnkgdGhlIHJlcXVlc3QuCisJICogIGZ1bmMJCTogbmFtZSBvZiB0aGUgZnVuY3Rpb24gd2hpY2ggaW1wbGVtZW50cyB0aGUgcmVxdWVzdC4KKwkgKiAgCisJICogIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGxvZ19SZXF1ZXN0KFN0cmluZyByZXF1ZXN0UGF0aCwgU3RyaW5nIGZ1bmMpCisJCisJeworCS8vIHRyYW5zZm9ybSAiZGF0ZVR0aW1lIiAtPiAiZGF0ZSB0aW1lIjoKKwkKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwlmb3V0LnByaW50ZigiIyMjICVzOiAlcyA6IHZlcnM9JyVzJywgdmRhdGU9JyVzJyByZXF1ZXN0PSclcycuXG4iLCBmdW5jLCByZXF1ZXN0UGF0aCwgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIAorCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisJZm91dC5wcmludGYoIiMjI1xuIik7CisJfSAvLyBsb2dfUmVxdWVzdAorCQkKKwkvKiBmb3JtYXREYk5hbWUKKwkgKiAKKwkgKiAtIGdldHMgbmFtZSBvZiBEYXRhYmFzZSB1c2VkIGJ5IERlcmJ5IGZyb20gcHJvcHMgCisJICogICBhbmQgZm9ybWF0IGl0IHRvIEhUTUwuCisJICogIAorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBTdHJpbmcgZm9ybWF0RGJOYW1lKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCVN0cmluZworCQlkYk5hbWU7CisJU3RyaW5nCisJCWRiUGF0aCA9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCWludAorCQlqID0gZGJQYXRoLmxhc3RJbmRleE9mKCcvJyk7CisJCisJaWYoIGogPiAwICkKKwkJZGJOYW1lID0gZGJQYXRoLnN1YnN0cmluZyhqKzEpOworCWVsc2UKKwkJZGJOYW1lID0gZGJQYXRoOworCQorCXJldHVybiBkYk5hbWU7IC8vICI8cD48Yj5EYXRhYmFzZTogIiArIGRiTmFtZSArICI8L2I+PC9wPlxuIjsKKwl9IC8vIGZvcm1hdERiTmFtZQorCisJLyoKKwkgKiBjbG9zZUxvZ1N0cmVhbXM6CisJICogCisJICogLSBjbG9zZSB0aGUgZm91dC9mZXJyIGxvZyBzdHJlYW1zLgorCSAqIAorCSAqIDI2LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGNsb3NlTG9nU3RyZWFtcygpCisJCisJeworCWlmKCBmb3V0ICE9IG51bGwpCisJCWZvdXQuY2xvc2UoKTsKKwlmb3V0ID0gbnVsbDsKKwkKKwlpZiggZmVyciAhPSBudWxsICkKKwkJZmVyci5jbG9zZSgpOworCWZlcnIgPSBudWxsOworCX0gLy8gY2xvc2VMb2dTdHJlYW1zCisJCisJLyogaW5pdF9hbmRfbG9nX1JlcXVlc3QKKwkgKiAKKwkgKiAtIGxvYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLCBzZXRzIEdsZW1tU2VydmljZXMgY29uc3RhbnRzCisJICogICBhbmQgbG9ncyB0aGUgcmVxdWVzdC4KKwkgKiAtIGxvYWQgcHJvcGVydGllcyBhbmQgc2V0IGNvbnN0YW50cyBiZWZvcmUgbG9nZ2luZyBhbnl0aGluZywgYmVjYXVzZQorCSAqICAgbG9nZ2luZyB3aWxsIGJlIGRvbmUgaW50byB0aGUgbGFzdCBzdGRvdXQvc3RkZXJyIG9wZW5lZCBpbiBnbGFzc2Zpc2gncyBKVk0sCisJICogICBlLmcuIGluIHRoZSBsb2cgb2YgYW5vdGhlciBTZXJ2aWNlLgorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBQcm9wZXJ0aWVzIGluaXRfYW5kX2xvZ19SZXF1ZXN0KFN0cmluZyBmdW5jLCBTdHJpbmcgcmVxdWVzdFBhdGgpCisJCisJeworCVN0cmluZworCQlyZWFsUGF0aCA9IHNlcnZsZXRDb250ZXh0LmdldFJlYWxQYXRoKGZuYW1lUHJvcHMpOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAoaWYgbGFzdCBwYXJhbSA9IHRydWUpOgorCVByb3BlcnRpZXMKKwkJcHJvcHMgPSBVdGlscy5sb2FkUHJvcGVydGllcyhzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpLCBmbmFtZVByb3BzLCByZWFsUGF0aCwgZmFsc2UpOworCQorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBmb3V0IGFuZCBmZXJyIGFzIHJlcGxhY2VtZW50IGZvciBzdGRvdXQvc3RkZXJyIGZvciB1c2UgaW4gR2xlbW1TZXJ2aWNlcy4KKwkvLyBkbyBub3QgdXNlIG9yIHJlZGlyZWN0IFN5c3RlbS5vdXQgYW5kIFN5c3RlbS5lcnIsIGFzIHRoZXkgd2lsbCBiZSByZWRpcmVjdGVkCisJLy8gYnkgb3RoZXIgU2VydmljZXMgaW4gdGhlIHNhbWUgZ2xhc3NmaXNoIEpWTSwgZS5nLiBieSB0aGUgV2Zvcm1TZXJ2aWNlcy4KKwlmb3V0ID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lT3V0KTsKKwlmZXJyID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lRXJyKTsKKwkKKwkvL1V0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCisJbG9nX1JlcXVlc3QocmVxdWVzdFBhdGgsIGZ1bmMpOworCQorCXJldHVybiBwcm9wczsKKwl9IC8vIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJU3RyaW5nCisJCXN0YXR1czsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCWJvb2xlYW4KKwkJYkRlcmJ5U2VydmVyQ29ubmVjdGVkID0gZmFsc2U7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3N0YXR1cy8iKTsKKwkKKwliRGVyYnlTZXJ2ZXJDb25uZWN0ZWQgPSBHbGVtbURCLmNoZWNrRGVyYnlDb25uZWN0aW9uKCkgPT0gMCA/IHRydWUgOiBmYWxzZTsKKwkKKwkvLyBodHRwU2VydmxldFJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW52KTsKKwkKKwlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5TZXJ2aWNlcyBzdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPkRlcmJ5IFNlcnZlciBzdGF0dXM8L2I+IDogJXMuPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5wcm9wZXJ0aWVzPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+ZGF0YWJhc2U8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJYkRlcmJ5U2VydmVyQ29ubmVjdGVkID8gImNvbm5lY3RlZCIgOiAibm90IGF2YWlsYWJsZSIsCisJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSwKKwkJCQkJCQlzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpID09IG51bGwgPyAibm90IGZvdW5kIiA6CisJCQkJCQkJCXByb3BzLmlzRW1wdHkoKSA/ICJlbXB0eSIgOiAibG9hZGVkIiwKKwkJCQkJCQlmb3JtYXREYk5hbWUocHJvcHMpCisJCQkJCQkJKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIAorCSAqIGRvUE9TVF9pbXBvcnRMZW1tYURhdGE6CisJICogCisJICogUE9TVDogL2luZGV4L2FkZC97ZGF0YWJhc2VuYW1lfTogdGV4dC9wbGFpbgorCSAqIAorCSAqIFBhcmFtZXRlcnM6CisJICogbGlzdAkJIAk6IHRoZSBsaXN0IG9mIHdmcyBzZW50IGluIHRoZSBib2R5IG9mIHRoZSBQT1NUIHJlcXVlc3QuCisJICogZGJwYXRoRW5jb2RlZDogdGhlIGxvY2F0aW9uIG9mIHRoZSBkYXRhYmFzZSB3aGVyZSB0aGUgbGVtbWErd2ZzIGFyZSB0byBiZSBzdG9yZWQuCisJICogICAgICAgICAgICAgCSAgZW5jb2RlZCBhcyAiLmhvbWUudXNlci5Lb3JBUC4uLi4iLCBtdXN0IGJlIGNvbnZlcnRlZCB0bworCSAqICAgICAgICAgICAgCSAgIi9ob21lL3VzZXIvS29yQVAvLi4uIgorCSAqICAgICAgICAgCQkgIElNUE9SVEFOVDogZG8gbm90IHVzZSBhICcuJyBmb3IgZW5jb2RpbmcgYW55dGhpbmcgZWxzZSB0aGFuIGEgJy8nLgorCSAqIE5vdGVzICAgICA6CisJICogLSBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZSBsb2NhdGVkIGF0ICdkYXRhYmFzZW5hbWUnLgorCSAqIC0gVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQgaW50byBhIERlcmJ5IGRhdGFiYXNlLgorCSAqIElucHV0CSA6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqIDA0LjExLjIxL0ZCCisJICogLSBzdWJtaXR0ZWQgZGF0YWJhc2UgcGF0aC4KKwkgKi8KKwkKKwlAUGF0aCgiYWRkL3tkYXRhYmFzZXBhdGh9IikgCisJQFBPU1QgCisJQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvUE9TVF9pbXBvcnRMZW1tYURhdGEKKwkJCQkJCQkoCisJCQkJCQkJU3RyaW5nIAkJCQkJCQkJCQkgIGxpc3QsCisJCQkJCQkJQFBhdGhQYXJhbSh2YWx1ZT0iZGF0YWJhc2VwYXRoIikgZmluYWwgU3RyaW5nIGRicGF0aEVuY29kZWQKKwkJCQkJCQkpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9QT1NUX2ltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gCisJCWFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJU3RyaW5nCisJCWRicGF0aDsKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IG51bGw7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9hZGQve2RicGF0aH0iKTsKKwkKKwlkYnBhdGggPSBkYnBhdGhFbmNvZGVkLnJlcGxhY2UoJy4nLCAnLycpOworCQorCWZvdXQucHJpbnRmKCJJbmZvIDogJXM6IHNlbGVjdGVkIGRhdGFiYXNlIHBhdGggPSAnJXMnLlxuIiwgZnVuYywgZGJwYXRoKTsKKwlmb3V0LnByaW50ZigiSW5mbyA6ICVzOiB3b3JraW5nIGRpcmVjdG9yeSA9ICclcycuXG4iLCBmdW5jLCBHU19Xb3JraW5nUGF0aCk7CisJCisJLy8gc2V0IGZpbGUgYW5kIHBhdGhzIGFmdGVyIEdTX1dvcmtpbmdQYXRoIGhhcyBiZWVuIGluaXRpYWxpc2VkOgorCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBmb3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKGZlcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMsIGZvdXQsIGZlcnIpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNmw7xocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSwgcHJvcHMsIGRicGF0aCk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCQorCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwkKKwl9IC8vIGRvUE9TVF9pbXBvcnRMZW1tYURhdGEKKworCS8qIGRvR0VUX3ZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnMgPSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvLyIpOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJZmluYWwgU3RyaW5nCisJCWRiTmFtZSA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPmRhdGFiYXNlPC9iPjogJXM8L3A+IiwgZm9ybWF0RGJOYW1lKHByb3BzKSk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIGRiTmFtZSArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gZG9HRVRfdmlld0RCSW5mbworCisKKwkvKiBkb0dFVF92aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND52ZXJzaW9uICIgKyB2ZXJzaW9uICsgIiB2b20gIiArIHZlcnNpb25EYXRlICsgIiByZXF1ZXN0ID0gJyIgKyBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpICsgIic8L2k+PC9oND5cbiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAxOjwvYj4gKEMyIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfTwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPntsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpPC9jb2RlPjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw8L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT7Dlmw/b3B0cz1mbGV4K2NvbXArb3RoZXIrc3BlYzwvY29kZT48L3A+IiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDI6PC9iPiAoaW50ZXJuYWwgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9P3Byb3AxPVswMTJdJmFtcDtwcm9wMj1bMDEyXSZhbXA7c3BlYz1bMDEyXTwvY29kZT4gKHdoZXJlIGVhY2ggcHJvcDEsIHByb3AyLCBzcGVjIGlzIG9wdGlvbmFsKS48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsP3Byb3AxPTAmYW1wO3Byb3AyPTEmYW1wO3NwZWM9MjwvY29kZT48L3A+IjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0iKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0nJWQnIHByb3AyPSclZCcgc3BlYz0nJWQnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJLyogCisJZm9yKGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCQl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCQl9CQorCSAqLworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCBsZW1tYUluZm8ub3B0c1NldHRpbmcgPT0gTGVtbWFJbmZvLk9QVFNfU0VUVElOR19DMiApIAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEscHJvcDIsc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZyk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWludAorCQluV2ZzID0gbGVtbWFJbmZvLm5XZnM7CisJCisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJLy8gbG9nIG91dGNvbWU6CisJaWYoIG5XZnMgPCAwICkKKwkJZm91dC5wcmludGYoIkVycm9yOiAlczogcmV0dXJuaW5nIDAgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jKTsKKwllbHNlCisJCWZvdXQucHJpbnRmKCJEZWJ1Zy4gJXM6IHJldHVybmluZyAlZCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMsIG5XZnMpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiBub3RlOgorCSAqIC0gaWYgQnJvd3NlciByZXF1ZXN0OiBIVFRQU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ3RleHQvaHRtbCwuLi54bWwuLi4nCisJICogLSBpZiBXZm9ybVNlcnZpY2VzIHJlcXVlc3Q6IEh0dHBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAnYXBwbGljYXRpb24vanNvbicuCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKiAKKwkgKiAtIHN1Ym1pdHRlZCBVUkwsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYSwgaXMgaW50ZXJwcmV0ZWQgYnkgZ2xhc3NmaXNoIGFzCisJICogICBiZWluZyBJU08tODg1OS0xIGVuY29kZWQuIFdoZW4gdGhlIHJlcXVlc3QgaXMgVVRGLTggZW5jb2RlZCwgVW1sYXV0cyBhbmQKKwkgKiAgICfDnycgYXJlIG1pcy1pbnRlcnByZWRlZCwgbGVhZGluZyB0byBhbiBlcnJvbmVyb3VzIHJlcXVlc3QgdG8gdGhlIERlcmJ5CisJICogICBkYXRhYmFzZS4KKwkgKiAtIFJlcXVlc3RlZCBsZW1tYSAnbGVtbWEnIGhhcyB0byBiZSB0cmFuc2Zvcm1lZCB0byBVVEYtOCBmaXJzdC4KKwkgKiAtIG5vdGU6IGV2ZW4gd2hlbiBzdWJtaXR0aW5nIHRoZSBHRVQgcmVxdWVzdCBieSBzcGVjaWZ5aW5nICdjaGFyZW5jb2RlPVVURi04JywKKwkgKiAgIGdsYXNzZmlzaCBkb2VzIG5vdCBjb252ZXJ0IGl0IGF1dG9tYXRpY2FsbHkgYXMgZXhwZWN0ZWQuCisJICogICAKKwkgKiAgMjIuMTAuMjEvRkIKKwkgKiAKKwkgKiAtIGlmIGFjY2VwdD1hcHBsaWNhdGlvbi9qc29uIHJldHVybiBVVEYtOCAoV2Zvcm1TZXJ2aWNlcykuCisJICogLSBlbHNlIGlmIGFjY2VwdD10ZXh0L2h0bWwgZG8gbm90IHRyYW5zZm9ybSBjaGFyYWN0ZXIgZW5jb2RpbmcgKEJyb3dzZXIpLgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAQ29uc3VtZXMoImFwcGxpY2F0aW9uL2pzb24sIHRleHQvaHRtbCIpCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbzsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwlmaW5hbCBib29sZWFuCisJCWJFbmNvZGVMZW1tYSA9IGZhbHNlOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOworCQorCS8qIHRlc3Q6CisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWlmKCBiRW5jb2RlTGVtbWEgKQorCQl7CisJCS8vIHdoZW4gYWNjZXB0aW5nIEpTT04sIHVybCBoYXMgdG8gYmUgY29udmVydGVkIHRvIFVURi04LCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWE6CisJCXRyeSB7CisJCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKG5ldyBTdHJpbmcobGVtbWEuZ2V0Qnl0ZXMoIklTTy04ODU5LTEiKSwgInV0Zi04IikpOworCQkJfSAKKwkJY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZTEpIHsKKwkJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQkJTGVtbWFSZXNwb25zZQorCQkJCWxlbXJlc3AgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1yZXNwKS5idWlsZCgpOworCQkJfQorCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFtVVEYtOF0gb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWFJbmZvLmxlbW1hT3JpZywgb3B0aW9ucyk7CisJCX0KKwllbHNlCisJCXsKKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW3VuY2hhbmdlZF0gb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWFJbmZvLmxlbW1hT3JpZywgb3B0aW9ucyk7CisJCX0KKworCS8qIGRvZXMgbm90IGhlbHA6CisJIFN0cmluZworCSAJcmVxdWVzdENoYXJFbmNvZGluZyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRDaGFyYWN0ZXJFbmNvZGluZygpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVxdWVzdCBjaGFyYWN0ZXIgZW5jb2RpbmcgPSclcycuXG4iLCBmdW5jLCByZXF1ZXN0Q2hhckVuY29kaW5nKTsKKwkqLworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQl7CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJLy9yZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCX0KKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CQorCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwkvKgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvdGVzdC9pbmZvLyIpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9mb3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCWZvdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvR2xlbW1TZXJ2aWNlcy9zcmMvZGUva29yYXAvc2VydmljZXMvTGVtbWFJbmZvLmphdmEgYi9HbGVtbVNlcnZpY2VzL3NyYy9kZS9rb3JhcC9zZXJ2aWNlcy9MZW1tYUluZm8uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWJiZjA2Ci0tLSAvZGV2L251bGwKKysrIGIvR2xlbW1TZXJ2aWNlcy9zcmMvZGUva29yYXAvc2VydmljZXMvTGVtbWFJbmZvLmphdmEKQEAgLTAsMCArMSw2MjkgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLnNxbC5Db25uZWN0aW9uOworaW1wb3J0IGphdmEuc3FsLlJlc3VsdFNldDsKK2ltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CitpbXBvcnQgamF2YS5zcWwuU3RhdGVtZW50OworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy5MZW1tYVJlc3BvbnNlOworCitwdWJsaWMgY2xhc3MgTGVtbWFJbmZvIHsKKwkKKwkvLyBHTEVNTSBBUEkgT3B0aW9uczoKKwlmaW5hbCBzdGF0aWMgU3RyaW5nCisJCUdMRU1NX09QVFNfRkxFWCAJPSAiZmxleCIsCS8vIEZsZXhpb25zZm9ybWVuCisJCUdMRU1NX09QVFNfQ09NUAkJPSAiY29tcCIsIAkvLyBLb21wb3NpdGEKKwkJR0xFTU1fT1BUU19PVEhFUgk9ICJvdGhlciIsCS8vIHNvbnN0aWdlIFdvcnRiaWxkdW5nc2Zvcm1lbgorCQlHTEVNTV9PUFRTX1NQRUMJCT0gInNwZWMiLAkvLyBTcGV6aWFsZsOkbGxlLgorCQlHTEVNTV9PUFRTX05GTEVYIAk9ICItZmxleCIsCS8vIGtlaW5lIEZsZXhpb25zZm9ybWVuCisJCUdMRU1NX09QVFNfTkNPTVAJPSAiLWNvbXAiLCAJLy8ga2VpbmUgS29tcG9zaXRhCisJCUdMRU1NX09QVFNfTk9USEVSCT0gIi1vdGhlciIsCS8vIGtlaW5lIHNvbnN0aWdlIFdvcnRiaWxkdW5nc2Zvcm1lbgorCQlHTEVNTV9PUFRTX05TUEVDCT0gIi1zcGVjIjsJLy8ga2VpbmUgU3BlemlhbGbDpGxsZS4KKwkKKwkvLyBPcHRpb25zIFNldHRpbmdzIHJlcXVlc3RlZCBpbiBRdWVyeToKKwlmaW5hbCBzdGF0aWMgaW50CisJCU9QVFNfU0VUVElOR19VTkRFRgk9IDAsCisJCU9QVFNfU0VUVElOR19DMgkJPSAxLAkvLyBsZW1tYS9TY2h1aCBhbmQgbGVtbWEvU2NodWg/b3B0cz1jb21wLi4uCisJCU9QVFNfU0VUVElOR19JTlQJPSAyOwkvLyBsZW1tYS9TY2h1aD9wcm9wMT0uLi4gW2ludGVybmFsIG1vZGVdLgorCQorCXB1YmxpYyBTdHJpbmcKKwkJbGVtbWEsCQkJLy8gcmVxdWVzdGVkIGxlbW1hLCBhZnRlciBjb252ZXJzaW9uID0gJ8OfJyAtPiAnc3MnLCBpLmUuICdzY2hsaWVzc2xpY2gnLgorCQlsZW1tYU9yaWc7CQkvLyBvcmlnaW5hbCBsZW1tYSB2ZXJzaW9uLCBhcyBzdWJtaXR0ZWQgKGUuZy4gJ3NjaGxpZcOfbGljaCcpLgorCXB1YmxpYyBTdHJpbmcKKwkJbGVtbWFPcHRzOwkJLy8gbGVtbWF0aXphdGlvbiBvcHRpb25zIGFzIHdyaXR0ZW4gaW4gcmVxdWVzdC4KKwlwdWJsaWMgaW50CisJCXByb3AxCQk9IDIsIAorCQlwcm9wMgkJPSAyLAkvLyBsZW1tYXRpc2F0aW9uIHJ1bGU6IDAgPSAnLScsIDEgPSAnKycsIDIgPSB1bmRlZi4KKwkJc3BlYwkJPSAyOworCS8vIE9wdGlvbnMgc2V0IGJ5IHVzZXI6IG9GbGV4LCBvQ29tcCBldGMuCisJLy8gb0ZsZXggPSAwIDogbm8gZmxleGlvbnMgLyAxIDogZmxleGlvbnMgLyAyIDogdW5kZWZpbmVkLgorCXB1YmxpYyBpbnQKKwkJb0ZsZXgJCT0gMiwKKwkJb0NvbXAJCT0gMiwKKwkJb090aGVyCQk9IDIsCisJCW9TcGVjCQk9IDI7CisJcHVibGljIGludAorCQlvcHRzU2V0dGluZyA9IE9QVFNfU0VUVElOR19DMjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsJCisJcHVibGljIFJlc3VsdFNldAorCQlyZXMgPSBudWxsOworCXB1YmxpYyBpbnQKKwkJbldmcyA9IC0xOyAJLy8gLTE6IGVycm9yIG9jY3VyZWQ7IDAgPSBsZW1tYSBoYXMgbm8gd29yZGZvcm1zOyA+IDAgPSBuby4gb2YKKwkJCQkJLy8gICAgIHdvcmRmb3JtcyBleHRyYWN0ZWQgZm9yIHRoYXQgbGVtbWEuCisJCQkJCS8vIG5XZnMgaXMgZmlsbGVkIGFmdGVyIHRoaXMucmVzIGhhcyBiZSByZWFkLgorCVN0cmluZ0J1aWxkZXIKKwkJd29yZGZvcm1zID0gbnVsbDsKKworCisJLyogbGVtbWFJbmZvCisJICogCisJICogY29uc3RydWN0b3IuCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwlMZW1tYUluZm8oKQorCQorCXsKKwlsZW1tYSAJCT0gbnVsbDsKKwlsZW1tYU9yaWcJPSBudWxsOworCXByb3AxIAkJPSAyOworCXByb3AyIAkJPSAyOworCX0KKworCS8qIGxlbW1hSW5mbyhsZW1tYSkKKwkgKiAKKwkgKiBjb25zdHJ1Y3Rvci4KKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCUxlbW1hSW5mbyhmaW5hbCBTdHJpbmcgbGVtbWEpCisJCisJeworCXRoaXMubGVtbWEgCQk9IGxlbW1hLnJlcGxhY2UoIsOfIiwgICJzcyIpOworCXRoaXMubGVtbWFPcmlnIAk9IGxlbW1hOworCXRoaXMucHJvcDEgCQk9IDI7CisJdGhpcy5wcm9wMiAJCT0gMjsKKwl9CisJCisJLyogTGVtbWFJbmZvKGxlbW1hLCBwcm9wMSwgcHJvcDIpCisJICogCisJICogY29uc3RydXRvci4KKwkgKiBFLmcuICJIYXVzJnAxPTEmcDI9MCIKKwkgKiBUbyBiZSByZXBsYWNlZC4KKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUxlbW1hSW5mbyhTdHJpbmcgbGVtbWEsIGludCBwcm9wMSwgaW50IHByb3AyKQorCQorCXsKKwl0aGlzLmxlbW1hIAkJPSBsZW1tYS5yZXBsYWNlKCLDnyIsICAic3MiKTsKKwl0aGlzLmxlbW1hT3JpZyAJPSBsZW1tYTsKKwl0aGlzLnByb3AxIAkJPSBwcm9wMSA9PSAwIHx8IHByb3AxID09IDEgPyBwcm9wMSA6IDI7CisJdGhpcy5wcm9wMiAJCT0gcHJvcDIgPT0gMCB8fCBwcm9wMiA9PSAxID8gcHJvcDIgOiAyOworCX0KKwkKKwkvKiBwYXJzZUFsbE9wdGlvbnMKKwkgKiAKKwkgKiBJbnB1dDogb3B0aW9ucyBvZiBDMiBPcHRpb24gU2V0dGluZyBvZiBvcHRpb25zIG9mIEV4dGVuZGVkIE9wdGlvbnMgU2V0dGluZworCSAqICAgICAgICB0aHJvdWdoIFF1ZXJ5IFBhcmFtcy4KKwkgKiAgICAgICAgRWl0aGVyIEMyIFNldHRpbmc6IG9wdHMsIG9yCisJICogICAgICAgIEV4dGVuZGVkIFNldHRpbmcgOiBwcm9wMSwgcHJvcDIsIHNwZWMKKwkgKiB3aWxsIGJlIHNldC4KKwkgKiBJZiBvcHRpb25zID0gInVuZGVmIiwgZXh0ZW5kZWQgT3B0aW9ucyBhcmUgcmVxdWVzdGVkIGluc3RlYWQgb2YgQzIgT3B0aW9ucy4KKwkgKiBJZiBwcm9wMSA9PSBwcm9wMiA9PSBzcGVjID09IDM6IEV4dGVuZGVkIFNldHRpbmcgaXMgbm90IHJlcXVlc3RlZC4KKwkgKiBEZWZhdWx0LCBpZiBib3RoIGFyZSBub3Qgc2V0OiBvcHRpb25zPWZsZXguCisJICogCisJICogUGFyYW1ldGVyIG9wdGlvbnMgaXMgcGFyc2VkLCBjaGVja2VkIGFnYWluc3QgY29ycmVjdCBjb25zdGFudHMgYW5kCisJICogc3RvcmVkIGludG8gbGVtbWFJbmZvLkdsZW1tWFhYLgorCSAqIAorCSAqIEFjY2VwdGVkIGNvbnN0YW50czogR0xFTU1fT1BUU194CisJICogRS5nLiAiZmxleCtjb21wIgorCSAqIE5vdGU6IAorCSAqIC0gR2xlbW1GbGV4IGlzIHNldCBlaXRoZXIgZXhwbGljaXRseSBieSBzdW1pdHRpbmcgb3B0aW9uICJmbGV4Iiwgb3IKKwkgKiAgIGltcGxpY2l0bHkgYnkgc3VibWl0dGluZyBhbnkgb3RoZXIgb3B0aW9uLgorCSAqIC0gRmlyc3Qgb2YgYWxsLCB3ZSBpbXBsZW1lbnQgdGhlIEMyIE9wdGlvbiBTZXR0aW5nLgorCSAqIDE1LjAxLjIwL0ZCCisJICogLSBpbXBsZW1lbnRhdGlvbiBvZiBleHRlbmRlZCBmbGFnIG9wdGlvbnM6IDMxLjAxLjIwL0ZCCisJICovCisJCisJaW50IHBhcnNlQWxsT3B0aW9ucyhTdHJpbmcgb3B0aW9ucywgaW50IHByb3AxLCBpbnQgcHJvcDIsIGludCBzcGVjKQorCQorCXsKKwlpZiggIW9wdGlvbnMuZXF1YWxzKCJ1bmRlZiIpICkKKwkJeworCQl0aGlzLm9wdHNTZXR0aW5nID0gT1BUU19TRVRUSU5HX0MyOworCQlyZXR1cm4gcGFyc2VPcHRzX0MyU2V0dGluZyhvcHRpb25zKTsKKwkJfQorCWVsc2UgaWYoIHByb3AxICE9IDMgfHwgcHJvcDIgIT0gMyB8fCBzcGVjICE9IDMpCisJCXsKKwkJdGhpcy5vcHRzU2V0dGluZyA9IE9QVFNfU0VUVElOR19JTlQ7CisJCXJldHVybiBwYXJzZU9wdHNfRXh0ZW5kZWRTZXR0aW5nKHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCX0KKwllbHNlCisJCXsJLy8gbm8gc2V0dGluZyByZXF1ZXN0ZWQsIHJldHVybiBkZWZhdWx0CisJCXRoaXMub3B0c1NldHRpbmcgPSBPUFRTX1NFVFRJTkdfQzI7CisJCXJldHVybiBwYXJzZU9wdHNfQzJTZXR0aW5nKCJmbGV4Iik7CQorCQl9CisJCQorCX0gLy8gcGFyc2VBbGxPcHRpb25zCisKKwkvKgorCSAqICBwYXJzZU9wdHNfQzJTZXR0aW5nCisJICogIAorCSAqICBleHBlY3RlZDogIihmbGV4KSAoY29tcCkgKG90aGVyKSAoc3BlYykiCisJICogIE5vdGVzOgorCSAqICAtIEplcnNleSB0cmFuc2Zvcm1zICJmbGV4K2NvbXArb3RoZXIuLi4iIGF1dG9tYXRpY2FsbHkgdG8KKwkgKiAgICAiZmxleCBjb21wIG90aGVyIC4uLiIuCisJICogICAgCisJICogIDMxLjAxLjIwL0ZCCisJICovCisJCisJaW50IHBhcnNlT3B0c19DMlNldHRpbmcoZmluYWwgU3RyaW5nIG9wdGlvbnMpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInBhcnNlT3B0c19DMlNldHRpbmciOworCVN0cmluZ1tdCisJCQlvcHRzID0gb3B0aW9ucy5zcGxpdCgiWyBdIik7CisJCWludAorCQkJbkVycm9ycyA9IDA7CisJCQorCXRoaXMucHJvcDEgPSB0aGlzLnByb3AyID0gMDsgLy8gZGVmYXVsdDogK0ZsZXggLUNvbXAgLU90aGVyIC1TcGVjLgorCXRoaXMub0ZsZXggPSAxOwkJCQkgLy8gZGVmYXVsdDogK0ZsZXgKKwkKKwlmb3IoaW50IGk9MDsgaTxvcHRzLmxlbmd0aDsgaSsrKQorCQl7CisJCXN3aXRjaChvcHRzW2ldKSB7CisJCQorCQljYXNlIEdMRU1NX09QVFNfRkxFWDogCisJCQl0aGlzLm9GbGV4CT0gMTsKKwkJCWJyZWFrOworCQljYXNlIEdMRU1NX09QVFNfQ09NUDogCisJCQl0aGlzLm9Db21wCT0gMTsKKwkJCWJyZWFrOworCQljYXNlIEdMRU1NX09QVFNfT1RIRVI6IAorCQkJdGhpcy5vT3RoZXIgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgR0xFTU1fT1BUU19TUEVDOiAKKwkJCXRoaXMub1NwZWMgPSAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlpZiggb3B0c1tpXS5pc0VtcHR5KCkgKQorCQkJCXsJCisJCQkJdGhpcy5vRmxleCA9IDE7CisJCQkJfQorCQkJZWxzZQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHVua25vd24gR2xlbW0gT3B0aW9uICclcychXG4iLCBmdW5jLCBvcHRzW2ldKTsKKwkJCQluRXJyb3JzKys7CisJCQkJfQorCQkJfSAvLyBzd2l0Y2gKKwkJfQorCQorCWlmKCBuRXJyb3JzID4gMCApCisJCXJldHVybiBuRXJyb3JzOworCQorCS8vIGNvbnZlcnRpb24gb2YgVXNlciBPcHRpb25zIC0+IGludGVybmFsIGZsYWdzOgorCisJdGhpcy5wcm9wMSA9IHRoaXMucHJvcDIgPSB0aGlzLnNwZWMgPSAwOworCQorCS8vIHByb3AxID0gMiA9IHVuZGVmID0gRmxleCtDb21wIHJlcXVlc3RlZDsgMSA9IG9ubHkgQ29tcCByZXF1ZXN0ZWQuCisJaWYoIHRoaXMub0NvbXAgPT0gMSApCisJCXRoaXMucHJvcDEgPSAyOyAvLyB1bmRlZiA9IGZsZXggYW5kIGNvbXAuCisJCisJaWYoIHRoaXMub090aGVyID09IDEgKQorCQl0aGlzLnByb3AyID0gMjsgLy8gdW5kZWY6IG90aGVyIGFuZCBub3Qgb3RoZXIgcmVxdWVzdGVkLgorCQorCWlmKCB0aGlzLm9TcGVjID09IDEgKQorCQl0aGlzLnNwZWMgPSAyOyAvLyB1bmRlZjogc3BlYyBhbmQgbm90IHNwZWMgcmVxdWVzdGVkLgorCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyBwYXJzZU9wdGlvbnNfQzJTZXR0aW5nCisKKwkvKgorCSAqICBwYXJzZU9wdHNfRXh0ZW5kZWRTZXR0aW5nCisJICogIAorCSAqICBleHBlY3RlZDogcHJvcDEsIHByb3AyLCBzcGVjIG1heSBoYXZlIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorCSAqICAJCSAgMCA6IGZhbHNlOworCSAqICAJCSAgMSA6IHRydWU7CisJICogIAkJICAyIDogdW5kZWYsIGkuZS4gZG8gbm90IHNldCB0aGF0IGZsYWcgZm9yIFNRTCBSZXF1ZXN0LgorCSAqICAJCSAgMyA6IGZsYWcgbm90IHJlcXVlc3RlZAorCSAqICBOb3RlczoKKwkgKiAgLSBmbGFncyBhcmUgZGlyZWN0bHkgc2V0IGJ5IHRoZSBzdW1pdHRlZCBwYXJhbWV0ZXJzLgorCSAqICAzMS4wMS4yMC9GQgorCSAqLworCQorCWludCBwYXJzZU9wdHNfRXh0ZW5kZWRTZXR0aW5nKGZpbmFsIGludCBwcm9wMSwgZmluYWwgaW50IHByb3AyLCBmaW5hbCBpbnQgc3BlYykKKwkKKwl7CisJaWYoIHByb3AxID09IDAgfHwgcHJvcDEgPT0gMSApCisJCXRoaXMucHJvcDEgPSBwcm9wMTsKKwllbHNlCisJCXRoaXMucHJvcDEgPSAyOyAvLyB1bmRlZgorCQorCWlmKCBwcm9wMiA9PSAwIHx8IHByb3AyID09IDEgKQorCQl0aGlzLnByb3AyID0gcHJvcDI7CisJZWxzZQorCQl0aGlzLnByb3AyID0gMjsgLy8gdW5kZWYKKworCWlmKCBzcGVjID09IDAgfHwgc3BlYyA9PSAxICkKKwkJdGhpcy5zcGVjID0gc3BlYzsKKwllbHNlCisJCXRoaXMuc3BlYyA9IDI7IC8vIHVuZGVmCisKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHBhcnNlT3B0aW9uc19FeHRlbmRlZFNldHRpbmcKKwkKKwkvKiBwYXJzZU9wdGlvbnMKKwkgKiAKKwkgKiBARGVwcmVjYXRlZAorCSAqIAorCSAqIElucHV0OiBQYXRoIFBhcmFtIG9wdGlvbnMuCisJICogUGFyYW1ldGVyIG9wdGlvbnMgaXMgcGFyc2VkLCBjaGVja2VkIGFnYWluc3QgY29ycmVjdCBjb25zdGFudHMgYW5kCisJICogc3RvcmVkIGludG8gbGVtbWFJbmZvLkdsZW1tWFhYLgorCSAqIAorCSAqIEFjY2VwdGVkIGNvbnN0YW50czogR0xFTU1fT1BUU194CisJICogRS5nLiAiZmxleCtjb21wIgorCSAqIE5vdGU6IAorCSAqIC0gR2xlbW1GbGV4IGlzIHNldCBlaXRoZXIgZXhwbGljaXRseSBieSBzdW1pdHRpbmcgb3B0aW9uICJmbGV4Iiwgb3IKKwkgKiAgIGltcGxpY2l0bHkgYnkgc3VibWl0dGluZyBhbnkgb3RoZXIgb3B0aW9uLgorCSAqIC0gRmlyc3Qgb2YgYWxsLCB3ZSBpbXBsZW1lbnQgdGhlIEMyIE9wdGlvbiBTZXR0aW5nLgorCSAqIDE1LjAxLjIwL0ZCCisJICovCisJCisJaW50IHBhcnNlT3B0aW9ucyhTdHJpbmcgb3B0aW9ucykKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAicGFyc2VPcHRpb25zIjsgCisJZmluYWwgYm9vbGVhbgorCQltb2RlQzIgPSB0cnVlOwkvLyBDT1NNQVMgSUkgT3B0aW9uIFNldHRpbmcuCisJU3RyaW5nW10KKwkJb3B0cyA9IG9wdGlvbnMuc3BsaXQoIlsgLF0iKTsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJCisJdGhpcy5wcm9wMSA9IHRoaXMucHJvcDIgPSAwOyAvLyBkZWZhdWx0OiArRmxleCAtQ29tcCAtT3RoZXIgLVNwZWMuCisJCisJZm9yKGludCBpPTA7IGk8b3B0cy5sZW5ndGg7IGkrKykKKwkJeworCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGk9JWQgb3B0cz0nJXMnLlxuIiwgZnVuYywgaSwgb3B0c1tpXSk7IAorCQlzd2l0Y2gob3B0c1tpXSkgeworCQkKKwkJY2FzZSBHTEVNTV9PUFRTX0ZMRVg6IAorCQkJdGhpcy5vRmxleAkgICA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBHTEVNTV9PUFRTX05GTEVYOiAKKwkJCXRoaXMub0ZsZXgJICAgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgR0xFTU1fT1BUU19DT01QOiAKKwkJCXRoaXMucHJvcDEgPSAxOworCQkJdGhpcy5vQ29tcCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBHTEVNTV9PUFRTX05DT01QOiAKKwkJCXRoaXMucHJvcDEgPSAxOworCQkJdGhpcy5vQ29tcCA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBHTEVNTV9PUFRTX09USEVSOiAKKwkJCXRoaXMucHJvcDIgPSAxOworCQkJdGhpcy5vT3RoZXIgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgR0xFTU1fT1BUU19OT1RIRVI6IAorCQkJdGhpcy5wcm9wMiA9IDE7CisJCQl0aGlzLm9PdGhlciA9IDA7CisJCQlicmVhazsJCQorCQljYXNlIEdMRU1NX09QVFNfU1BFQzogCisJCQkvLyBuZWl0aGVyIG9mIHByb3AxIG5vciBwcm9wMiBpcyBzZXQgYnkgdGhpcyBvcHRpb24uCisJCQl0aGlzLm9TcGVjID0gMTsKKwkJCWJyZWFrOworCQljYXNlIEdMRU1NX09QVFNfTlNQRUM6IAorCQkJLy8gbmVpdGhlciBvZiBwcm9wMSBub3IgcHJvcDIgaXMgc2V0IGJ5IHRoaXMgb3B0aW9uLgorCQkJdGhpcy5vU3BlYyA9IDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWlmKCBvcHRzW2ldLmlzRW1wdHkoKSApCisJCQkJewkKKwkJCQkvLyBkb24ndCBzZXQgYW55dGhpbmcgaGVyZS4KKwkJCQl9CisJCQllbHNlCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogdW5rbm93biBHTEVNTSBPcHRpb24gJyVzJyFcbiIsIGZ1bmMsIG9wdHNbaV0pOworCQkJCW5FcnJvcnMrKzsKKwkJCQl9CisJCQl9IC8vIHN3aXRjaAorCQl9CisJCisJaWYoIG5FcnJvcnMgPiAwICkKKwkJcmV0dXJuIG5FcnJvcnM7CisJCisJLy8gY29udmVydGlvbiBvZiBVc2VyIE9wdGlvbnMgLT4gaW50ZXJuYWwgZmxhZ3M6CisJLy8gQ09TTUFTIElJIE9wdGlvbnMgU2V0dGluZzoKKwlpZiggbW9kZUMyICkKKwkJeworCQl0aGlzLnByb3AxID0gdGhpcy5wcm9wMiA9IHRoaXMuc3BlYyA9IDA7CisJCQorCQkvLyBwcm9wMSA9IDIgPSB1bmRlZiA9IEZsZXgrQ29tcCByZXF1ZXN0ZWQ7IDEgPSBvbmx5IENvbXAgcmVxdWVzdGVkLgorCQlpZiggdGhpcy5vQ29tcCA9PSAxICkKKwkJCXRoaXMucHJvcDEgPSB0aGlzLm9GbGV4ID09IDEgPyAyIDogMTsgCisJCQorCQlpZiggdGhpcy5vT3RoZXIgPT0gMSApCisJCQl0aGlzLnByb3AyID0gMjsgLy8gdW5kZWY6IG90aGVyIGFuZCBub3Qgb3RoZXIgcmVxdWVzdGVkLgorCQkKKwkJaWYoIHRoaXMub1NwZWMgPT0gMSApCisJCQl0aGlzLnNwZWMgPSAyOyAvLyB1bmRlZjogc3BlYyBhbmQgbm90IHNwZWMgcmVxdWVzdGVkLgorCQl9CisJCisJcmV0dXJuIG5FcnJvcnM7IC8vIE9LCisJfSAvLyBwYXJzZU9wdGlvbnMKKwkKKwkvKiBvcHRpb25zdG9TdHJpbmc6CisJICogCisJICogMTUuMDEuMjAvRkIKKwkgKi8KKwkKKwlTdHJpbmcgb3B0aW9uc3RvU3RyaW5nKCkKKwkKKwl7CisJU3RyaW5nQnVpbGRlcgorCQlvcHRzID0gbmV3IFN0cmluZ0J1aWxkZXIoIiIpOworCWludAorCQluID0gMDsKKwkKKwlpZiggdGhpcy5vRmxleCAhPSAyICkKKwkJeworCQlvcHRzLmFwcGVuZCggKHRoaXMub0ZsZXggPT0gMCA/ICItIiA6ICIiKSArIEdMRU1NX09QVFNfRkxFWCk7CisJCW4rKzsKKwkJfQorCWlmKCB0aGlzLm9Db21wICE9IDIgKQorCQl7CisJCW9wdHMuYXBwZW5kKCAodGhpcy5vQ29tcCA9PSAwID8gIi0iIDogbiA+IDAgPyAiKyIgOiAiICIpICsgR0xFTU1fT1BUU19DT01QKTsKKwkJbisrOworCQl9CisJaWYoIHRoaXMub090aGVyICE9IDIgKQorCQl7CisJCW9wdHMuYXBwZW5kKCAodGhpcy5vT3RoZXIgPT0gMCA/ICItIiA6IG4gPiAwID8gIisiIDogIiIpICsgR0xFTU1fT1BUU19PVEhFUik7CisJCW4rKzsKKwkJfQorCWlmKCB0aGlzLm9TcGVjICE9IDIgKQorCQl7CisJCW9wdHMuYXBwZW5kKCh0aGlzLm9TcGVjID09IDAgPyAiLSIgOiBuID4gMCA/ICIrIiA6ICIiKSArIEdMRU1NX09QVFNfU1BFQyk7CisJCX0KKwkKKwlyZXR1cm4gb3B0cy50b1N0cmluZygpOworCX0gLy8gb3B0aW9uc3RvU3RyaW5nCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiBjbG9zZToKKwkgKiAKKwkgKiBjbG9zZXMgdGhlIFNRTCBzdHVmZiB1c2VkIGZvciBleHRyYWN0aW5nIHRoZSBsZW1tYSdzIHdvcmRmb3Jtcy4KKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXZvaWQgY2xvc2UoKQorCQorCXsKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogY2xvc2U6IHJlcz0lcyBjb249JXMgc3RtdD0lcy5cbiIsCisJCQkJdGhpcy5yZXMgIT0gbnVsbCA/ICJhbGxvY2F0ZWQiIDogIm51bGwiLAorCQkJCXRoaXMuY29uICE9IG51bGwgPyAiYWxsb2NhdGVkIiA6ICJudWxsIiwKKwkJCQl0aGlzLnN0bXQhPSBudWxsID8gImFsbG9jYXRlZCIgOiAibnVsbCIpOworCQkKKwl0cnkgeworCQlpZiggdGhpcy5yZXMgIT0gbnVsbCApCisJCQl0aGlzLnJlcy5jbG9zZSgpOworCQlpZiggdGhpcy5jb24gIT0gbnVsbCApCisJCQl0aGlzLmNvbi5jbG9zZSgpOworCQlpZiggdGhpcy5zdG10ICE9IG51bGwgKQorCQkJdGhpcy5zdG10LmNsb3NlKCk7CisJCXRoaXMucmVzIAk9IG51bGw7CisJCXRoaXMuY29uIAk9IG51bGw7CisJCXRoaXMuc3RtdCAJPSBudWxsOworCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCisJfSAvLyBjbG9zZQorCisJLyogd2ZzMkhUTUwKKwkgKiB3cml0ZXMgd2ZzIHRvIGEgSFRNTCBmb3JtYXR0ZWQgYnVmZmVyLgorCSAqIDE0LjAxLjIwL0ZCCisJICovCisJCisJcHVibGljIFN0cmluZyB3ZnMySFRNTCgpCisJCisJeworCWludAorCQluID0gLTE7IC8vIHVuZGVmaW5lZC4KKworCXRoaXMud29yZGZvcm1zID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkKKwl0cnkgeworCQlmb3Iobj0wOyB0aGlzLnJlcy5uZXh0KCk7IG4rKykKKwkJCXsKKwkJCXRoaXMud29yZGZvcm1zLmFwcGVuZChTdHJpbmcuZm9ybWF0KCI8dHI+PHRkPiVzPC90ZD48L3RyPlxuIiwgIHRoaXMucmVzLmdldFN0cmluZygid2YiKSkpOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQluID0gLTE7IC8vIHJlc2V0IHRvIHVuZGVmaW5lZCBkdWUgdG8gZXJyb3IuCisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKworCXRoaXMubldmcyA9IG47CisJCisJcmV0dXJuIHRoaXMud29yZGZvcm1zICE9IG51bGwgPyB0aGlzLndvcmRmb3Jtcy50b1N0cmluZygpIDogbnVsbDsKKwkKKwl9IC8vIHdmczJIVE1MCisKKwkvKiByZXMySlNPTigpOgorCSAqIAorCSAqIHRyYW5zZm9ybXMgcmVzdWx0IG9mIExlbW1hIFF1ZXJ5IHRvIGEgSlNPTiBsaXN0LgorCSAqIDI3LjAxLjIwL0ZCCisJICovCisJCisJcHVibGljIExlbW1hUmVzcG9uc2UgcmVzMkpTT04oKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJyZXMySlNPTiI7CisJTGVtbWFSZXNwb25zZQorCQlsZW1SZXNwID0gbnVsbDsKKwkKKwl0cnkgeworCQlsZW1SZXNwID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcC5saXN0b2ZXZnMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKwkJfQorCWNhdGNoICggRXhjZXB0aW9uIGUgKXsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciAlcyFcbiIsCisJCQkJZnVuYywgbGVtUmVzcCA9PSBudWxsID8gImxlbVJlc3AiIDogImxpc3RvZldmcyIpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlpZiggbGVtUmVzcCA9PSBudWxsICkKKwkJCXJldHVybiBudWxsOworCQllbHNlCisJCQlyZXR1cm4gbGVtUmVzcDsKKwkJfQorCQorCS8vIGZpbGwgaGVhZGVyOgorCWxlbVJlc3AuaGVhZF9uV2ZzICAgID0gLTE7CisJbGVtUmVzcC5oZWFkX3F1ZXJ5ICAgPSB0aGlzLmxlbW1hT3JpZzsKKwlsZW1SZXNwLmhlYWRfb3B0aW9ucyA9IHRoaXMub3B0aW9uc3RvU3RyaW5nKCk7CisJCisJLy8gZmlsbCBsZW1tYSBsaXN0OgorCQorCXRyeSB7CisJCWZvcih0aGlzLm5XZnM9MDsgdGhpcy5yZXMubmV4dCgpOyB0aGlzLm5XZnMrKykKKwkJCXsKKwkJCWxlbVJlc3AubGlzdG9mV2ZzLmFkZCh0aGlzLnJlcy5nZXRTdHJpbmcoIndmIikpOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgewkKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJbGVtUmVzcC5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IGNhbm5vdCBjb252ZXJ0IGFsbCBsZW1tYXRhISByZXR1cm5zIGFmdGVyICVkIGxlbW1hdGEuXG4iLCAKKwkJCQlmdW5jLCB0aGlzLm5XZnMpOworCQlyZXR1cm4gbGVtUmVzcDsKKwkJfQorCisJbGVtUmVzcC5oZWFkX25XZnMgPSB0aGlzLm5XZnM7CisJCisJcmV0dXJuIGxlbVJlc3A7CisJCisJfSAvLyByZXMySlNPTgorCQorCQorCS8qIHJlczJURVhUKCk6CisJICogCisJICogdHJhbnNmb3JtcyByZXN1bHQgb2YgTGVtbWEgUXVlcnkgdG8gYSBsaXN0IG9mIHdvcmRmb3JtcyBpbiBUZXh0L3BsYWluIGZvcm1hdC4KKwkgKiAyOC4wMS4yMC9GQgorCSAqLworCQorCXB1YmxpYyBTdHJpbmcgcmVzMlRFWFQoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJyZXMyVEVTVCI7CisJU3RyaW5nQnVpbGRlcgorCQlyZXN1bHQ7CisJCisJdHJ5IHsKKwkJcmVzdWx0ID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJfSAKKwljYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgYWxsb2NhdGVkIG1lbW9yeSFcbiIsICBmdW5jKTsgCisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IGNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHdvcmRmb3JtIGxpc3QhXG4iLCBmdW5jKTsKKwkJfQorCQorCS8vIGZpbGwgU3RyaW5nQnVmZmVyIHdpdGggbGlzdCBvZiB3ZnM6CisJdHJ5IHsKKwkJZm9yKHRoaXMubldmcz0wOyB0aGlzLnJlcy5uZXh0KCk7IHRoaXMubldmcysrKQorCQkJeworCQkJcmVzdWx0LmFwcGVuZCh0aGlzLnJlcy5nZXRTdHJpbmcoIndmIikgKyAiXG4iKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsJCisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IGNhbm5vdCBjb252ZXJ0IGFsbCBsZW1tYXRhISByZXR1cm5zIGFmdGVyICVkIGxlbW1hdGEuXG4iLCAKKwkJCQlmdW5jLCB0aGlzLm5XZnMpOworCQl9CisJCisJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCQorCX0gLy8gcmVzMlRFWFQKKwkKKwkvKgorCSAqIGRlY29tcG9zaXRpb25SdWxlc3RvU3RyaW5nOgorCSAqIAorCSAqIHRyYW5zZm9ybXMgdGhlIEdMRU1NIGRlY29tcG9zaXRpb24gcnVsZXMgcHJvcDErMiB0byBhIGh1bWFuCisJICogcmVhZGFibGUgc3RyaW5nLgorCSAqIFNlZSBlLmcuIENPU01BUyBJSTogc3JjL3V0aWwvbGlzdDJzZ21sLmMuCisJICogMTUuMDEuMjAvRkIKKwkgKiAyMS4xMC4yMS9GQiBDMi1vcHRpb24gJ1NwZWMnIGlzIG5vIEdsZW1tIG9wdGlvbiBhbmQgdGh1cyBub3QgcmV0dXJuZWQgaGVyZS4KKwkgKi8KKwkKKwlzdGF0aWMgU3RyaW5nIGRlY29tcFJ1bGVzdG9TdHJpbmcoaW50IHByb3AxLCBpbnQgcHJvcDIpCisJCisJeworCWlmKCBwcm9wMSA9PSAwICYmIHByb3AyID09IDApCisJCXJldHVybiAiRmxleGlvbnNmb3JtZW4iOworCWVsc2UgaWYoIHByb3AxID09IDEgJiYgcHJvcDIgPT0gMCkKKwkJcmV0dXJuICJLb21wb3NpdGEiOworCWVsc2UgaWYoIHByb3AxID09IDAgJiYgcHJvcDIgPT0gMSkKKwkJcmV0dXJuICJzb25zdC4gV29ydGJpZGx1bmdzZm9ybWVuIjsKKwllbHNlIGlmKCBwcm9wMSA9PSAxICYmIHByb3AyID09IDEpCisJCXJldHVybiAiS29tcG9zaXRhIHVuZCBzb25zdC4gV29ydGJpbGR1bmdzZm9ybWVuIjsKKwllbHNlCisJCXJldHVybiAiIjsKKwkKKwl9IC8vIGRlY29tcG9zaXRpb25SdWxlc3RvU3RyaW5nCisJCisJLyoKKwkgKiBpc1dmU3BlY2lhbENhc2UKKwkgKiBSZXR1cm5zIHRydWUsIGlmIHdvcmRmb3JtIHNob3VsZCBiZSByZXR1cm5lZCBmb3IgR0xFTU1fT1BUX1NQRUMsCisJICogaS5lLiBpZiBpdCBjb250YWlucyBoeXBoZW5zIG9yIHNwZWNpYWwgY2hhcnMuCisJICogMTUuMDEuMjAvRkIKKwkgKi8KKwkKKwlzdGF0aWMgYm9vbGVhbiBpc1dmU3BlY2lhbENhc2UoU3RyaW5nIHdmKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpc1dmU3BlY2lhbENhc2UiOworCWJvb2xlYW4KKwkJaXNMb3JEOworCQorCS8qIHRlc3Q6IGlzTGV0dGVyT3JEaWdpdCB3b3JrcyBhcyBleHBlY3RlZDogYWxsIGNoYXJzIGZyb20gSVNPODg1OS0xIGFyZSBpZGVudGlmaWVkIGFzIGEgbGV0dGVyLAorCSAqIGRpZ2l0cyBhcyBkaWdpdHMsIGludGVycHVuY3Rpb24gYW5kIG90aGVyIGNoYXJzIGFyZSBpZGVudGlmaWVkIGFzIG5vbi1sZXR0ZXIuCisJICovCisJLyoKKwljaGFyW10KKwkJY2hhcnMgPSBuZXcgY2hhclsyNTZdOworCWZvcihpPTA7IGk8MjU2OyBpKyspCisJCWNoYXJzW2ldID0gKGNoYXIpaTsKKwlmb3IoaT0wOyBpPGNoYXJzLmxlbmd0aDsgaSsrKQorCQl7CisJCXR5cGUgPSBDaGFyYWN0ZXIuaXNMZXR0ZXJPckRpZ2l0KGNoYXJzW2ldKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlYyA6ICVzXG4iLCBjaGFyc1tpXSwgdHlwZSA9PSB0cnVlID8gImxldHRlciBvciBkaWdpdCIgOiAic3BlY2lhbCBjaGFyIik7CisJCX0KKwkqLworCisJZm9yKGludCBpPTA7IGk8d2YubGVuZ3RoKCk7IGkrKykKKwkJeworCQlpc0xvckQgPSBDaGFyYWN0ZXIuaXNMZXR0ZXJPckRpZ2l0KHdmLmNoYXJBdChpKSk7CisJCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlYyA6ICVzXG4iLCB3Zi5jaGFyQXQoaSksIGlzTG9yRCA9PSB0cnVlID8gImxldHRlciBvciBkaWdpdCIgOiAic3BlY2lhbCBjaGFyIik7CisJCWlmKCAhaXNMb3JEICkKKwkJCXsKKwkJCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlcyA6ICVzIHNwZWM9JWIuXG4iLCBmdW5jLCB3ZiwgdHJ1ZSk7CisJCQlyZXR1cm4gdHJ1ZTsgLy8gd2YgY29udGFpbnMgYXQgbGVhc3Qgb25lIGh5cGhlbiBvciBzcGVjaWFsIGNoYXIuCisJCQl9CisJCX0KKworCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlcyA6ICVzIHNwZWM9JWIuXG4iLCBmdW5jLCB3ZiwgZmFsc2UpOworCQorCXJldHVybiBmYWxzZTsKKwl9IC8vIGlzV2ZTcGVjaWFsQ2FzZQorCQorCQorfQorCmRpZmYgLS1naXQgYS9Kc29uVHJhdmVyc2UvLmNsYXNzcGF0aCBiL0pzb25UcmF2ZXJzZS8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZjVhMzgKLS0tIC9kZXYvbnVsbAorKysgYi9Kc29uVHJhdmVyc2UvLmNsYXNzcGF0aApAQCAtMCwwICsxLDI2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBvdXRwdXQ9InRhcmdldC9jbGFzc2VzIiBwYXRoPSJzcmMiPgorCQk8YXR0cmlidXRlcz4KKwkJCTxhdHRyaWJ1dGUgbmFtZT0ib3B0aW9uYWwiIHZhbHVlPSJ0cnVlIi8+CisJCQk8YXR0cmlidXRlIG5hbWU9Im1hdmVuLnBvbWRlcml2ZWQiIHZhbHVlPSJ0cnVlIi8+CisJCTwvYXR0cmlidXRlcz4KKwk8L2NsYXNzcGF0aGVudHJ5PgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLm0yZS5NQVZFTjJfQ0xBU1NQQVRIX0NPTlRBSU5FUiI+CisJCTxhdHRyaWJ1dGVzPgorCQkJPGF0dHJpYnV0ZSBuYW1lPSJtYXZlbi5wb21kZXJpdmVkIiB2YWx1ZT0idHJ1ZSIvPgorCQkJPGF0dHJpYnV0ZSBuYW1lPSJvcmcuZWNsaXBzZS5qc3QuY29tcG9uZW50Lm5vbmRlcGVuZGVuY3kiIHZhbHVlPSIiLz4KKwkJPC9hdHRyaWJ1dGVzPgorCTwvY2xhc3NwYXRoZW50cnk+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLmNvbnRhaW5lci9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5ydW50aW1lVGFyZ2V0L0FwYWNoZSBUb21jYXQgdjkuMCI+CisJCTxhdHRyaWJ1dGVzPgorCQkJPGF0dHJpYnV0ZSBuYW1lPSJvd25lci5wcm9qZWN0LmZhY2V0cyIgdmFsdWU9ImpzdC51dGlsaXR5Ii8+CisJCTwvYXR0cmlidXRlcz4KKwk8L2NsYXNzcGF0aGVudHJ5PgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvamRrMS44LjBfMjMxIj4KKwkJPGF0dHJpYnV0ZXM+CisJCQk8YXR0cmlidXRlIG5hbWU9Im93bmVyLnByb2plY3QuZmFjZXRzIiB2YWx1ZT0iamF2YSIvPgorCQk8L2F0dHJpYnV0ZXM+CisJPC9jbGFzc3BhdGhlbnRyeT4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJ0YXJnZXQvY2xhc3NlcyIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9Kc29uVHJhdmVyc2UvLnByb2plY3QgYi9Kc29uVHJhdmVyc2UvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMxMzE3NAotLS0gL2Rldi9udWxsCisrKyBiL0pzb25UcmF2ZXJzZS8ucHJvamVjdApAQCAtMCwwICsxLDM2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5Kc29uVHJhdmVyc2U8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5idWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLnZhbGlkYXRpb25idWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLm0yZS5jb3JlLm1hdmVuMkJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmplbS53b3JrYmVuY2guSmF2YUVNRk5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLndzdC5jb21tb24ubW9kdWxlY29yZS5Nb2R1bGVDb3JlTmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UubTJlLmNvcmUubWF2ZW4yTmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLm5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvSnNvblRyYXZlcnNlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL0pzb25UcmF2ZXJzZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU0YTNhZAotLS0gL2Rldi9udWxsCisrKyBiL0pzb25UcmF2ZXJzZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSw5IEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuOAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjgKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucmVsZWFzZT1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuOApkaWZmIC0tZ2l0IGEvSnNvblRyYXZlcnNlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5tMmUuY29yZS5wcmVmcyBiL0pzb25UcmF2ZXJzZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubTJlLmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg5N2E3ZgotLS0gL2Rldi9udWxsCisrKyBiL0pzb25UcmF2ZXJzZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubTJlLmNvcmUucHJlZnMKQEAgLTAsMCArMSw0IEBACithY3RpdmVQcm9maWxlcz0KK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCityZXNvbHZlV29ya3NwYWNlUHJvamVjdHM9dHJ1ZQordmVyc2lvbj0xCmRpZmYgLS1naXQgYS9Kc29uVHJhdmVyc2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50IGIvSnNvblRyYXZlcnNlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDllYzhiCi0tLSAvZGV2L251bGwKKysrIGIvSnNvblRyYXZlcnNlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PHByb2plY3QtbW9kdWxlcyBpZD0ibW9kdWxlQ29yZUlkIiBwcm9qZWN0LXZlcnNpb249IjEuNS4wIj4KKyAgICA8d2ItbW9kdWxlIGRlcGxveS1uYW1lPSJKc29uVHJhdmVyc2UiPgorICAgICAgICA8d2ItcmVzb3VyY2UgZGVwbG95LXBhdGg9Ii8iIHNvdXJjZS1wYXRoPSIvc3JjIi8+CisgICAgPC93Yi1tb2R1bGU+Cis8L3Byb2plY3QtbW9kdWxlcz4KZGlmZiAtLWdpdCBhL0pzb25UcmF2ZXJzZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUueG1sIGIvSnNvblRyYXZlcnNlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VjYTNlMQotLS0gL2Rldi9udWxsCisrKyBiL0pzb25UcmF2ZXJzZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUueG1sCkBAIC0wLDAgKzEsNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxmYWNldGVkLXByb2plY3Q+CisgIDxydW50aW1lIG5hbWU9IkFwYWNoZSBUb21jYXQgdjkuMCIvPgorICA8aW5zdGFsbGVkIGZhY2V0PSJqYXZhIiB2ZXJzaW9uPSIxLjgiLz4KKyAgPGluc3RhbGxlZCBmYWNldD0ianN0LnV0aWxpdHkiIHZlcnNpb249IjEuMCIvPgorPC9mYWNldGVkLXByb2plY3Q+CmRpZmYgLS1naXQgYS9Kc29uVHJhdmVyc2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLnByZWZzIGIvSnNvblRyYXZlcnNlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGNhZDhjCi0tLSAvZGV2L251bGwKKysrIGIvSnNvblRyYXZlcnNlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5wcmVmcwpAQCAtMCwwICsxLDIgQEAKK2Rpc2FibGVkPTA2dGFyZ2V0CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvSnNvblRyYXZlcnNlL3BvbS54bWwgYi9Kc29uVHJhdmVyc2UvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWY5MGJmCi0tLSAvZGV2L251bGwKKysrIGIvSnNvblRyYXZlcnNlL3BvbS54bWwKQEAgLTAsMCArMSw0NCBAQAorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgPGdyb3VwSWQ+ZGUua29yYXAuanNvbjwvZ3JvdXBJZD4KKyAgPGFydGlmYWN0SWQ+SnNvblRyYXZlcnNlPC9hcnRpZmFjdElkPgorICA8dmVyc2lvbj4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgIDxwYWNrYWdpbmc+amFyPC9wYWNrYWdpbmc+CisgIDxuYW1lPkpzb25UcmF2ZXJzZTwvbmFtZT4KKyAgPGRlc2NyaXB0aW9uPk1ldGhvZHMgZm9yIHRyYXZlcnNpbmcgYSBKc29uIFRyZWUgKEtvcmFsbFF1ZXJ5KSBhbmQgZXh0cmFjdGluZy9yZXdyaXRpbmcgZGF0YTwvZGVzY3JpcHRpb24+CisgCisgIDxkZXBlbmRlbmNpZXM+CisgICA8ZGVwZW5kZW5jeT4KKyAgICA8Z3JvdXBJZD5jb20uZmFzdGVyeG1sLmphY2tzb24uY29yZTwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5qYWNrc29uLWNvcmU8L2FydGlmYWN0SWQ+CisgICAgPHZlcnNpb24+Mi45LjY8L3ZlcnNpb24+CisgICAgPHNjb3BlPmNvbXBpbGU8L3Njb3BlPgorICAgPC9kZXBlbmRlbmN5PgorCTxkZXBlbmRlbmN5PgorCSAgPGdyb3VwSWQ+Y29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmU8L2dyb3VwSWQ+CisJICA8YXJ0aWZhY3RJZD5qYWNrc29uLWFubm90YXRpb25zPC9hcnRpZmFjdElkPgorCSAgPHZlcnNpb24+Mi45LjY8L3ZlcnNpb24+CisJPC9kZXBlbmRlbmN5PgorCTxkZXBlbmRlbmN5PgorCSAgPGdyb3VwSWQ+Y29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmU8L2dyb3VwSWQ+CisJICA8YXJ0aWZhY3RJZD5qYWNrc29uLWRhdGFiaW5kPC9hcnRpZmFjdElkPgorCSAgPHZlcnNpb24+Mi45LjY8L3ZlcnNpb24+CisJICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgorCTwvZGVwZW5kZW5jeT4KKyAgPC9kZXBlbmRlbmNpZXM+CisgCisgCisgIDxidWlsZD4KKyAgICA8c291cmNlRGlyZWN0b3J5PnNyYzwvc291cmNlRGlyZWN0b3J5PgorICAgIDxwbHVnaW5zPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tY29tcGlsZXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4zLjcuMDwvdmVyc2lvbj4KKyAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgPHNvdXJjZT4xLjg8L3NvdXJjZT4KKyAgICAgICAgICA8dGFyZ2V0PjEuODwvdGFyZ2V0PgorICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICA8L3BsdWdpbj4KKyAgICA8L3BsdWdpbnM+CisgIDwvYnVpbGQ+Cis8L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvSnNvblRyYXZlcnNlL3NyYy9kZS9rb3JhcC9qc29uL0pzb25UcmF2ZXJzZS5qYXZhIGIvSnNvblRyYXZlcnNlL3NyYy9kZS9rb3JhcC9qc29uL0pzb25UcmF2ZXJzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZTg3ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Kc29uVHJhdmVyc2Uvc3JjL2RlL2tvcmFwL2pzb24vSnNvblRyYXZlcnNlLmphdmEKQEAgLTAsMCArMSwxNTggQEAKK3BhY2thZ2UgZGUua29yYXAuanNvbjsKKworaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworCitpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmRhdGFiaW5kLkpzb25Ob2RlOworaW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5kYXRhYmluZC5ub2RlLkFycmF5Tm9kZTsKKworcHVibGljIGNsYXNzIEpzb25UcmF2ZXJzZQorCit7CisJLy8ga2luZCBvZiBvcGVyYXRpb25zIGR1cmluZyBKc29uVHJlZSBUcmF2ZXJzYWw6CisJCisJcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgQ09MTEVDVCAJPSAxOyAKKwlwdWJsaWMgZmluYWwgc3RhdGljIGludCBSRVdSSVRFIAk9IDI7CS8vIHJlcGxhY2UgbGVtbWF0YSBieSByZWZzIG9uIGV4cGFuc2lvbiBsaXN0LgorCXB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFJFV1JJVEVfRVhQCT0gMzsJLy8gcmVwbGFjZSBsZW1tYXRhIGJ5IGV4cGFuc2lvbiBsaXN0IFt3Zix3ZiwuLi5dLgorCQorCVByaW50U3RyZWFtCisJCWZvdXQsCQkJLy8gdG8gYmUgc2V0IGJ5IGNhbGxlciwgcmVwbGFjZXMgc3Rkb3V0LgorCQlmZXJyOwkJCS8vIHRvIGJlIHNldCBieSBjYWxsZXIsIHJlcGxhY2VzIHN0ZGVyci4KKwkKKwkvKgorCSAqIHRyYXZlcnNlSnNvblRyZWUKKwkgKiAKKwkgKiAtIHRyYXZlcnNlcyBKc29uVHJlZSBzdGFydGluZyBhdCBub2RlLgorCSAqIC0gdFBhdGg6IGNvbGxlY3RzIGxlbW1hdGEgYW5kIGNvbnRhaW5zIHJlZmVyZW5jZXMgdG8gcmV3cml0ZS4KKwkgKiAtIG1vZGU6IG9wZXJhdGlvbiBtb2RlIENPTExFQ1QsIFJFV1JJVEUsIFJFV1JJVEVfRVhQLgorCSAqIDMxLjAzLjIwL0ZCCisJICovCisJCisJc3RhdGljIGZpbmFsIHB1YmxpYyB2b2lkIHRyYXZlcnNlSnNvblRyZWUoCisJCQkJSnNvbk5vZGUgCQkJbm9kZSwgCisJCQkJVHJhdmVyc2VkUGF0aAkgCXRQYXRoLCAKKwkJCQlmaW5hbCBpbnQJIAkJbW9kZSwgCisJCQkJZmluYWwgUHJpbnRTdHJlYW0JZm91dCwKKwkJCQlmaW5hbCBQcmludFN0cmVhbQlmZXJyICkKKwkKKwl7CisJZmluYWwgU3RyaW5nIGZ1bmMgPSAidHJhdmVyc2VKc29uVHJlZSI7CisJYm9vbGVhbgorCQlpc0ZvdW5kID0gZmFsc2U7CisJYm9vbGVhbgorCQliRGVidWcgPSBmYWxzZTsKKwkKKyAgICBpZiggbm9kZS5pc09iamVjdCgpKQorICAgIAl7CisgICAgICAgIEl0ZXJhdG9yPFN0cmluZz4gZmllbGROYW1lcyA9IG5vZGUuZmllbGROYW1lcygpOworICAgICAgICBpZiggYkRlYnVnICkKKyAgICAgICAgCWZvdXQucHJpbnRmKCJEZWJ1Zzolczogb2JqZWN0OiB7IFxuIiwgIGZ1bmMpOworICAgICAgICAKKyAgICAgICAgd2hpbGUoZmllbGROYW1lcy5oYXNOZXh0KCkpIAorICAgICAgICAJeworICAgICAgICAgICAgU3RyaW5nIGZpZWxkTmFtZSA9IGZpZWxkTmFtZXMubmV4dCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBwYXRoIHNlYXJjaCB1bmRlciAncXVlcnknOgorICAgICAgICAgICAgaWYoIHRQYXRoLmNoZWNrUGF0aChmaWVsZE5hbWUsIG5vZGUuZ2V0KGZpZWxkTmFtZSksIG1vZGUsIGZvdXQpICkKKyAgICAgICAgICAgIAlpc0ZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgSnNvbk5vZGUgZmllbGRWYWx1ZSA9IG5vZGUuZ2V0KGZpZWxkTmFtZSk7CisgICAgICAgICAgICBpZiggYkRlYnVnICkKKyAgICAgICAgICAgIAlmb3V0LnByaW50ZigiRGVidWc6JXM6IGtleT0nJXMnOlxuIiwgZnVuYywgZmllbGROYW1lKTsgCisgICAgICAgICAgICB0cmF2ZXJzZUpzb25UcmVlKGZpZWxkVmFsdWUsIHRQYXRoLCBtb2RlLCBmb3V0LCBmZXJyKTsKKyAgICAgICAgCX0KKyAgICAgICAgCisgICAgICAgIGlmKCBiRGVidWcgKQorICAgICAgICAJZm91dC5wcmludGYoIkRlYnVnOiVzOiB9IDogZW5kIG9mIG9iamVjdC5cbiIsICBmdW5jKTsKKyAgICAgICAgCisgICAgICAgIGlmKCAobW9kZSA9PSBSRVdSSVRFIHx8IG1vZGUgPT0gUkVXUklURV9FWFApICYmIGlzRm91bmQgKQorICAgICAgICAJeworICAgICAgICAJdFBhdGgucmV3cml0ZU9iak5vZGUobm9kZSwgbW9kZSwgZm91dCk7CisgICAgICAgIAlmb3V0LnByaW50ZigiRGVidWc6JXM6IGFmdGVyIHJld3JpdGU6IG5vZGU9JyVzJy5cbiIsIGZ1bmMsIG5vZGUudG9TdHJpbmcoKSk7CisgICAgICAgIAl9CisgICAgCX0gCisgICAgZWxzZSBpZihub2RlLmlzQXJyYXkoKSkKKyAgICAJeworICAgIAlpZiggYkRlYnVnICkKKyAgICAJCWZvdXQucHJpbnRmKCJEZWJ1ZzolczogYXJyYXk6IFtcbiIsICBmdW5jKTsKKyAgICAJCisgICAgICAgIEFycmF5Tm9kZSBhcnJheU5vZGUgPSAoQXJyYXlOb2RlKSBub2RlOworICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgYXJyYXlOb2RlLnNpemUoKTsgaSsrKSAKKyAgICAgICAgCXsKKyAgICAgICAgICAgIEpzb25Ob2RlIGFycmF5RWxlbWVudCA9IGFycmF5Tm9kZS5nZXQoaSk7CisgICAgICAgICAgICB0cmF2ZXJzZUpzb25UcmVlKGFycmF5RWxlbWVudCwgdFBhdGgsIG1vZGUsIGZvdXQsIGZlcnIpOworICAgICAgICAJfQorICAgIAlpZiggYkRlYnVnICkgCisgICAgCQlmb3V0LnByaW50ZigiRGVidWc6JXM6IF0gZW5kIG9mIGFycmF5LlxuIiwgIGZ1bmMpOworICAgIAl9IAorICAgIGVsc2UgeworICAgICAgICAvLyBKc29uTm9kZSBub2RlIHJlcHJlc2VudHMgYSBzaW5nbGUgdmFsdWUgZmllbGQgLSBkbyBzb21ldGhpbmcgd2l0aCBpdC4KKyAgICAJaWYoIGJEZWJ1ZyApCisgICAgCQlmb3V0LnByaW50ZigiRGVidWc6JXM6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICclcydcbiIsIGZ1bmMsIG5vZGUuYXNUZXh0KCkpOworICAgIAl9CisgICAgCisJfSAvLyB0cmF2ZXJzZUpzb25UcmVlCisJCisJLyoKKwkgKiBpc1BhdGhMZW1tYVF1ZXJ5CisJICogCisJICogcmV0dXJuczogbGVtbWEgYXMgYSBTdHJpbmcsIGlmIHBhdGggJiBsZW1tYSB3ZXJlIGZvdW5kLgorCSAqIAkJCWVsc2U6IG51bGwuCisJICogMDQuMDQuMjAvRkIKKwkgKi8KKwkKKwlzdGF0aWMgcHJpdmF0ZSBTdHJpbmcgaXNQYXRoTGVtbWFRdWVyeShKc29uTm9kZSBub2RlLCBQcmludFN0cmVhbSBmb3V0LCBQcmludFN0cmVhbSBmZXJyKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgZnVuYyA9ICJpc1BhdGhMZW1tYVF1ZXJ5IjsKKwlpbnQKKwkJbk1hdGNoZXMgPSAwOworCVN0cmluZworCQlsZW1tYSA9IG51bGw7CisJYm9vbGVhbgorCQliRGVidWcgPSBmYWxzZTsKKwkKKwlpZiggbm9kZS5pc09iamVjdCgpID09IGZhbHNlICkKKwkJcmV0dXJuIG51bGw7CisJCisJSXRlcmF0b3I8U3RyaW5nPiBmaWVsZE5hbWVzID0gbm9kZS5maWVsZE5hbWVzKCk7CisgICAgCisgICAgd2hpbGUoZmllbGROYW1lcy5oYXNOZXh0KCkpIAorICAgIAl7CisgICAgICAgIFN0cmluZyBmaWVsZE5hbWUgPSBmaWVsZE5hbWVzLm5leHQoKTsKKyAgICAgICAgU3RyaW5nIGZpZWxkVmFsdWUgPSBub2RlLmdldChmaWVsZE5hbWUpLmFzVGV4dCgpOworICAgICAgICAKKyAgICAgICAgaWYoIGZpZWxkTmFtZS5lcXVhbHMoIkB0eXBlIikgJiYgZmllbGRWYWx1ZS5lcXVhbHMoImtvcmFsOnRva2VuIikgKQorICAgICAgICAJbk1hdGNoZXMrKzsKKyAgICAgICAgZWxzZSBpZiggZmllbGROYW1lLmVxdWFscygid3JhcCIpICYmIG5vZGUuZ2V0KGZpZWxkTmFtZSkuaXNPYmplY3QoKSA9PSB0cnVlICkgCisJICAgICAgICB7CisgICAgICAgIAlJdGVyYXRvcjxTdHJpbmc+ZmllbGROYW1lczIgPSBub2RlLmdldChmaWVsZE5hbWUpLmZpZWxkTmFtZXMoKTsKKyAgICAgICAgCXdoaWxlKCBmaWVsZE5hbWVzMi5oYXNOZXh0KCkpCisJICAgICAgICAJeworICAgICAgICAJCVN0cmluZyBmbiA9IGZpZWxkTmFtZXMyLm5leHQoKTsKKyAgICAgICAgCQlpZiggZm4uZXF1YWxzKCJAdHlwZSIpICYmIG5vZGUuZ2V0KGZuKS5hc1RleHQoKS5lcXVhbHMoImtvcmFsOnRlcm0iKSApCisgICAgICAgIAkJCW5NYXRjaGVzKys7CisgICAgICAgIAkJZWxzZSBpZiggZm4uZXF1YWxzKCJrZXkiKSApCisJICAgICAgICAJCXsKKwkgICAgICAgIAkJbGVtbWEgPSBub2RlLmdldChmbikuYXNUZXh0KCk7CQorCQkgICAgICAgIAl9CisgICAgICAgICAgIAkJZWxzZSBpZiggZm4uZXF1YWxzKCJsYXllciIpICYmIG5vZGUuZ2V0KGZuKS5hc1RleHQoKS5lcXVhbHMoImxlbW1hIikgKQorCSAgICAgICAgCQluTWF0Y2hlcysrOworCSAgICAgICAgCX0gLy8gd2hpbGUKKwkgICAgICAgIH0KKyAgICAJfSAvLyB3aGlsZQorCQorICAgIGlmKCBiRGVidWcgKQorICAgIAlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBuTWF0Y2hlcz0lZC5cbiIsIGZ1bmMsIG5NYXRjaGVzKTsKKyAgICAKKyAgICBpZiggbk1hdGNoZXMgPT0gMyAmJiBsZW1tYSAhPSBudWxsICkKKwkgICAgeworCSAgICBmb3V0LnByaW50ZigiRGVidWc6JXM6IHBhdGggZm91bmQgdG8gbGVtbWEgJyVzJy5cbiIsIGZ1bmMsIGxlbW1hKTsKKwkgICAgcmV0dXJuIGxlbW1hOworCSAgICB9CisJCisgICAgLy8gcGF0aCBvZiBsZW1tYSBub3QgZm91bmQ6CisJcmV0dXJuIG51bGw7CisJfSAvLyBpc1BhdGhMZW1tYVF1ZXJ5CisJCit9IC8vIEpzb25UcmF2ZXJzZQpkaWZmIC0tZ2l0IGEvSnNvblRyYXZlcnNlL3NyYy9kZS9rb3JhcC9qc29uL1RyYXZlcnNlZFBhdGguamF2YSBiL0pzb25UcmF2ZXJzZS9zcmMvZGUva29yYXAvanNvbi9UcmF2ZXJzZWRQYXRoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVkYzI0MgotLS0gL2Rldi9udWxsCisrKyBiL0pzb25UcmF2ZXJzZS9zcmMvZGUva29yYXAvanNvbi9UcmF2ZXJzZWRQYXRoLmphdmEKQEAgLTAsMCArMSw0MjYgQEAKK3BhY2thZ2UgZGUua29yYXAuanNvbjsKKworaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uZGF0YWJpbmQuSnNvbk5vZGU7CitpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmRhdGFiaW5kLk9iamVjdE1hcHBlcjsKK2ltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uZGF0YWJpbmQubm9kZS5BcnJheU5vZGU7CitpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmRhdGFiaW5kLm5vZGUuT2JqZWN0Tm9kZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLkxlbW1hUmVzcG9uc2U7CisKK3B1YmxpYyBjbGFzcyBUcmF2ZXJzZWRQYXRoIHsKKwkKKwlib29sZWFuCisJCWluc2lkZVF1ZXJ5OworCWludAorCQlsZXZlbDsKKwlib29sZWFuCisJCW9rVHlwZTsgCisJaW50CisJCXF1ZXJ5VHlwZTsgCQkJLy8gTEVNTUEsIGV0Yy4KKwlMaXN0PFN0cmluZz4KKwkJbGVtbWF0YSAJPSBudWxsOwkvLyB0aGUgZXh0cmFjdGVkIGxlbW1hdGEuCisJU3RyaW5nCisJCWxlbW1hIAkJPSBudWxsOwkvLyBjdXJyZW50bHkgZm91bmQgbGVtbWEuCisJTGlzdDxTdHJpbmc+CisJCXJlZnMJCT0gbnVsbDsJLy8gcmVmZXJlbmNlcyB0byBleHBhbnNpb24gbGlzdHMgcmV0dXJuZWQgZnJvbSBHTEVNTS4KKwkJCQkJCQkvLyBzYW1lIG9yZGVyIHRoYW4gbGVtbWF0YSBpbiBsZW1tYXRhW10uCisJSnNvbk5vZGUKKwkJd3JhcE5vZGUJPSBudWxsOyAvLyBub2RlIHVuZGVyICd3cmFwJyB3aGVyZSBwcm9wZXJ0aWVzIG9mIGxlbW1hIHRlcm0gCisJCQkJCQkJLy8gYXJlIHN0b3JlZCwgaGVyZSBjYWxsZWQgbGV2ZWwgMi4KKwlPYmplY3RNYXBwZXIKKwkJb2JqTWFwcGVyCT0gbnVsbDsKKwlpbnQKKwkJaVJld3JpdGUJPSAwOwkvLyBpbmRleCBvZiBsZW1tYSBjdXJyZW50bHkgcmV3cml0dGVuIChpbiBsZW1tYXRhKS4KKwlMaXN0PExpc3Q8U3RyaW5nPj4KKwkJZXhwYW5zaW9uTGlzdHMJPSBudWxsOwkvLyBlYWNoIGVsZW1lbnQgb2YgdGhpcyBsaXN0IGlzIGFuIGV4cGFuc2lvbiBsaXN0CisJCQkJCQkJCS8vIGkuZS4gYSBsaXN0IG9mIHdmcyBmb3IgYSBsZW1tYS4KKwlMaXN0PExlbW1hUmVzcG9uc2U+CQkJLy8gbGlzdCBvZiBsZW1tYVJlc3BvbnNlIGNvcnJlc3BvbmRpbmcgdG8gZWFjaAorCQlsZW1SZXNwTGlzdAkJPSBudWxsOwkvLyBsZW1tYSBvZiBsaXN0IGxlbW1hdGEuCisJCQkJCQkJCS8vIHRvZG86IHNob3VsZCByZXBsYWNlIExpc3QgZXhwYW5zaW9uTGlzdHMuCisJCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTk9ORQkJPSAwOyAvLyB1bmRlZmluZWQuCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEVNTUEJCT0gMTsgLy8gR0xFTU0gbGVtbWEuCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkVHRVhQUgkJPSAyOyAvLyBDT1NNQVMgSUkncyByZWdleCBvbiB3b3JkIGxldmVsLgorCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdJTERDQVJECT0gMzsgLy8gQ09TTUFTIElJJ3Mgd2lsZGNhcmQgZXhwcmVzc2lvbi4KKwkKKwlwdWJsaWMgVHJhdmVyc2VkUGF0aChPYmplY3RNYXBwZXIgb2JqKQorCQorCQl7CisJCW9iak1hcHBlcgk9IG9iajsKKwkJaW5zaWRlUXVlcnkgPSBmYWxzZTsKKwkJb2tUeXBlIAkJPSBmYWxzZTsKKwkJbGV2ZWwgCQk9IDA7CisJCXF1ZXJ5VHlwZQk9IE5PTkU7CisJCX0KKwkKKwkvKgorCSAqIGNoZWNrUGF0aAorCSAqIAorCSAqIG5vdGVzOgorCSAqIC0gdG8gYmUgY2FsbGVkIGZvciBlYWNoIHByb3BlcnR5IG9mIGFuIG9iamVjdC4KKwkgKiAtIGNvbGxlY3RzIGFsbCBsZW1tYSBzdWJxdWVyaWVzIGluc2lkZSBhIHF1ZXJ5IHRyZWUuCisJICogQXJndW1lbnRzOgorCSAqIGZpZWxkTmFtZTogY3VycmVudGx5IHByb2Nlc3NlZCBmaWVsZCBuYW1lLgorCSAqIG5vZGUJCTogSnNvbk5vZGUgdGhhdCBpcyB0aGUgdmFsdWUgb2YgZmllbGROYW1lLgorCSAqIG1vZGUJCTogQ09MTEVDVCBvciBSRVdSSVRFLgorCSAqIFJldHVybnM6CisJICogLSBMaXN0PFN0cmluZz5sZW1tYXRhIGFzIGEgbGlzdCBvZiBsZW1tYXRhLgorCSAqIC0gdHJ1ZSBpZiB3cmFwLW9iamVjdCB0byBiZSByZXdyaXR0ZW4gaGFzIGJlZW4gZm91bmQuCisJICogMDQuMDQuMjAvRkIKKwkgKi8KKwkKKwlib29sZWFuIGNoZWNrUGF0aChmaW5hbCBTdHJpbmcgZmllbGROYW1lLCBKc29uTm9kZSBub2RlLCBmaW5hbCBpbnQgbW9kZSwgZmluYWwgUHJpbnRTdHJlYW0gZm91dCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIGZ1bmMgPSAiY2hlY2tQYXRoIjsKKwlmaW5hbCBib29sZWFuCisJCWJMb2cgCT0gdHJ1ZTsgCS8vIGZvciBsb2dpbmcuCisJYm9vbGVhbgorCQlpc0ZvdW5kID0gZmFsc2U7CS8vIHRydWUsIHdoZW4gd3JhcC1vYmogdG8gYmUgcmV3cml0dGVuIGhhcyBiZWVuIGZvdW5kLgorCQorCWlmKCBpbnNpZGVRdWVyeSA9PSBmYWxzZSApCisJCXsKKwkJaWYoIGZpZWxkTmFtZS5lcXVhbHMoInF1ZXJ5IikgKQorCQkJeworCQkJaW5zaWRlUXVlcnkgPSB0cnVlOworCQkJbGV2ZWwgPSAxOworCQkJb2tUeXBlID0gZmFsc2U7CisJCQl9CisJCXJldHVybiBmYWxzZTsKKwkJfQorCQorCWlmKCBsZXZlbCA9PSAxICkKKwkJeworCQlpZiggIW9rVHlwZSAmJiBmaWVsZE5hbWUuZXF1YWxzKCJAdHlwZSIpICkKKwkJCXsKKwkJCWlmKCBub2RlLmlzVGV4dHVhbCgpICYmIG5vZGUuYXNUZXh0KCkuZXF1YWxzKCJrb3JhbDp0b2tlbiIpICkKKwkJCQl7CisJCQkJb2tUeXBlID0gdHJ1ZTsKKwkJCQl9CisJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCWVsc2UgaWYoIG9rVHlwZSAmJiBmaWVsZE5hbWUuZXF1YWxzKCJ3cmFwIikgKQorCQkJeworCQkJbGV2ZWwgCQk9IDI7CisJCQlva1R5cGUgCQk9IGZhbHNlOyAvLyByZXNldCBmb3IgbmV4dCBsZXZlbC4KKwkJCXF1ZXJ5VHlwZQk9IE5PTkU7CisJCQlsZW1tYSAJCT0gbnVsbDsKKwkJCXdyYXBOb2RlCT0gbm9kZTsKKwkJCWlmKCBiTG9nICYmIGZvdXQgIT0gbnVsbCApCisJCQkJZm91dC5wcmludGYoIkRlYnVnOiAlczogd3JhcC1PYmo6ICclcydcbiIsIGZ1bmMsIG5vZGUudG9TdHJpbmcoKSk7CisJCQl9CisJCXJldHVybiBmYWxzZTsKKwkJfSAvLyBsZXZlbCAxCisJCisJaWYoIGxldmVsID09IDIgKQorCQl7CisJCWlmKCBmaWVsZE5hbWUuZXF1YWxzKCJAdHlwZSIpICkKKwkJCXsKKwkJCWlmKCBub2RlLmlzVGV4dHVhbCgpICYmIG5vZGUuYXNUZXh0KCkuZXF1YWxzKCJrb3JhbDp0ZXJtIikgKQorCQkJCW9rVHlwZSA9IHRydWU7CisJCQllbHNlCisJCQkJeyAvLyByZXNldCwgdGhpcyBpcyBub3QgdGhlIHJlcXVlc3RlZCBAdHlwZS4KKwkJCQlsZXZlbCA9IDE7CisJCQkJb2tUeXBlID0gZmFsc2U7CisJCQkJfQorCQkJfQorCQllbHNlIGlmKCBmaWVsZE5hbWUuZXF1YWxzKCJsYXllciIpICkgCisJCQl7CisJCQlpZiggbm9kZS5pc1RleHR1YWwoKSAmJiBub2RlLmFzVGV4dCgpLmVxdWFscygibGVtbWEiKSApCisJCQkJcXVlcnlUeXBlID0gTEVNTUE7CisJCQl9CisJCWVsc2UgaWYoIGZpZWxkTmFtZS5lcXVhbHMoImtleSIpICkKKwkJCXsKKwkJCWlmKCBub2RlLmlzVGV4dHVhbCgpICkKKwkJCQlsZW1tYSA9IG5vZGUuYXNUZXh0KCk7CisJCQl9CisJCQorCQlpZiggb2tUeXBlICYmIHF1ZXJ5VHlwZSA9PSBMRU1NQSAmJiBsZW1tYSAhPSBudWxsICkKKwkJCXsKKwkJCWlmKCBtb2RlID09IEpzb25UcmF2ZXJzZS5DT0xMRUNUICkKKwkJCQl7CisJCQkJaWYoIGxlbW1hdGEgPT0gbnVsbCApCisJCQkJCWxlbW1hdGEgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCQlsZW1tYXRhLmFkZChsZW1tYSk7CisJCQkJCisJCQkJaWYoIGJMb2cgJiYgZm91dCAhPSBudWxsICkKKwkJCQkJZm91dC5wcmludGYoIkRlYnVnOiAlczogZm91bmQ6IGxlbW1hPSclcycgYXMga29yYWw6dGVybS5cbiIsIGZ1bmMsIGxlbW1hKTsKKwkJCQl9CisJCQkKKwkJCWlzRm91bmQgPSB0cnVlOyAKKwkJCQorCQkJLy8gcmVzZXQgYmVmb3JlIHNlYXJjaGluZyB0aGUgbmV4dCBsZW1tYSAoaS5lLiBAdHlwZSk7IHN1cHBvc2luZyB3ZSBzdGF5IHVuZGVybmVhdGggbm9kZSAncXVlcnknLgorCQkJbGV2ZWwgID0gMTsgCisJCQlva1R5cGUgPSBmYWxzZTsKKwkJCX0KKwkJcmV0dXJuIGlzRm91bmQ7CisJCX0gLy8gbGV2ZWwgMgorCQorCXJldHVybiBmYWxzZTsKKwl9IC8vIGNoZWNrUGF0aAorCisJLyogcmV3cml0ZU9iak5vZGUKKwkgKiBub3RlczogaHR0cHM6Ly9ta3lvbmcuY29tL2phdmEvamFja3Nvbi10cmVlLW1vZGVsLWV4YW1wbGUvCisJICogMDguMDQuMjAvRkIKKwkgKi8KKwkKKwlwdWJsaWMgdm9pZCByZXdyaXRlT2JqTm9kZShKc29uTm9kZSBub2RlLCBmaW5hbCBpbnQgbW9kZSwgZmluYWwgUHJpbnRTdHJlYW0gZm91dCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIGZ1bmMgPSAicmV3cml0ZU9iak5vZGUiOworCQorCWlmKCBtb2RlID09IEpzb25UcmF2ZXJzZS5SRVdSSVRFICkKKwkJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiByZXdyaXRpbmcgZm9yIGxlbW1hICclcycgKCclcycpID4gJyVzJy4uLlxuIiwgZnVuYywgCisJCQkJCWxlbW1hLCBsZW1tYXRhLmdldChpUmV3cml0ZSksIHJlZnMuZ2V0KGlSZXdyaXRlKSk7CisJCQorCQkoKE9iamVjdE5vZGUpbm9kZSkucHV0KCJrZXkiLCAgICIiKTsKKwkJKChPYmplY3ROb2RlKW5vZGUpLnB1dCgibGF5ZXIiLCAib3J0aCIpOworCQkoKE9iamVjdE5vZGUpbm9kZSkucHV0KCJkZXNjIiwgICImIitsZW1tYSk7CisJCSgoT2JqZWN0Tm9kZSlub2RlKS5wdXQoImhpZGUiLCAgImtleSIpOyAvLyBUT0RPOiBtdXN0IGJlIFsia2V5Il0gIQorCQkoKE9iamVjdE5vZGUpbm9kZSkucHV0KCJyZWYiLCAgIHJlZnMuZ2V0KGlSZXdyaXRlKSk7IC8vIFRPRE86IG11c3QgYmUgWyJrZXkiXSAhCisJCWlSZXdyaXRlKys7CisJCX0KKwllbHNlIC8vIG1vZGUgPT0gUkVXUklURV9FWFAKKwkJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiByZXdyaXRpbmcgZm9yIGxlbW1hICclcycuXG4iLCBmdW5jLCBsZW1tYXRhLmdldChpUmV3cml0ZSkpOyAKKwkKKwkJLy8gaW5zZXJ0aW5nIGV4cGFuc2lvbiBsaXN0IGZyb20gY29ycmVzcG9uZGluZyBMZW1tYSBSZXNwb25zZSBvYmo6CisJCUFycmF5Tm9kZQorCQkJYXJyYXkgPSBvYmpNYXBwZXIuY3JlYXRlQXJyYXlOb2RlKCk7CisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3AgPSBsZW1SZXNwTGlzdC5nZXQoaVJld3JpdGUpOworCQkKKwkJZm9yKGludCBpPTA7IGk8bGVtUmVzcC5saXN0b2ZXZnMuc2l6ZSgpOyBpKyspCisJCQlhcnJheS5hZGQobGVtUmVzcC5saXN0b2ZXZnMuZ2V0KGkpKTsKKwkJCisJCSgoT2JqZWN0Tm9kZSlub2RlKS5zZXQoImtleSIsICAgYXJyYXkpOwkvLyBleHBhbnNpb24gbGlzdCBhcyBKc29uIE5vZGUuCisJCSgoT2JqZWN0Tm9kZSlub2RlKS5wdXQoImxheWVyIiwgIm9ydGgiKTsKKwkJKChPYmplY3ROb2RlKW5vZGUpLnB1dCgiZGVzYyIsICAiJiIrbGVtbWEpOworCQkoKE9iamVjdE5vZGUpbm9kZSkucHV0KCJoaWRlIiwgICJrZXkiKTsgLy8gVE9ETzogbXVzdCBiZSBbImtleSJdICEKKwkJaVJld3JpdGUrKzsKKwkJCisJCS8qIG9sZCB2ZXJzaW9uIDoKKwkJQXJyYXlOb2RlCisJCQlhcnJheSA9IG9iak1hcHBlci5jcmVhdGVBcnJheU5vZGUoKTsKKwkJTGlzdDxTdHJpbmc+CisJCQljdXJMaXN0ID0gZXhwYW5zaW9uTGlzdHMuZ2V0KGlSZXdyaXRlKTsKKwkJCisJCWZvcihpbnQgaT0wOyBpPGN1ckxpc3Quc2l6ZSgpOyBpKyspCisJCQlhcnJheS5hZGQoY3VyTGlzdC5nZXQoaSkpOworCQkJCisJCSgoT2JqZWN0Tm9kZSlub2RlKS5zZXQoImtleSIsICAgYXJyYXkpOwkvLyBleHBhbnNpb24gbGlzdC4KKwkJKChPYmplY3ROb2RlKW5vZGUpLnB1dCgibGF5ZXIiLCAib3J0aCIpOworCQkoKE9iamVjdE5vZGUpbm9kZSkucHV0KCJkZXNjIiwgICImIitsZW1tYSk7CisJCSgoT2JqZWN0Tm9kZSlub2RlKS5wdXQoImhpZGUiLCAgImtleSIpOyAvLyBUT0RPOiBtdXN0IGJlIFsia2V5Il0gIQorCQlpUmV3cml0ZSsrOworCQkqLworCQl9CisKKwl9IC8vIHJld3JpdGVPYmpOb2RlCisJCisJLyoKKwkgKiBnZXRMZW1tYXRhCisJICogCisJICogcmV0dXJucyBsaXN0IG9mIGxlbW1hdGEgY29sbGVjdGVkIGFuZCBmb3VuZCBpbiBLb3JhbFF1ZXJ5IGluIFN0cmluZyBmb3JtYXQuCisJICogCisJICogMDYuMDQuMjAvRkIKKwkgKi8KKwkKKwlwdWJsaWMgU3RyaW5nIGdldExlbW1hdGEoKQorCQorCXsKKwlyZXR1cm4gdGhpcy5sZW1tYXRhICE9IG51bGwgPyB0aGlzLmxlbW1hdGEudG9TdHJpbmcoKSA6ICIiOworCX0gLy8gZ2V0TGVtbWF0YQorCQorCS8qIGdldExlbW1hdGFDb3VudAorCSAqIAorCSAqIHJldHVybnMgbm8uIG9mIGxlbW1hdGEgZm91bmQgaW4gS29yYWxRdWVyeS4KKwkgKiAwNy4wNC4yMC9GQgorCSAqLworCQorCXB1YmxpYyBpbnQgZ2V0TGVtbWFDb3VudCgpCisJCisJeworCXJldHVybiB0aGlzLmxlbW1hdGEgIT0gbnVsbCA/IHRoaXMubGVtbWF0YS5zaXplKCkgOiAwOwkKKwl9IC8vIGdldExlbW1hdGFDb3VudAorCQorCS8qIGdldExlbW1hOgorCSAqIHJldHVybnMgbGVtbWEgYnkgaXRzIGluZGV4IGkuCisJICogcmV0dXJucyBudWxsIGlmIGluZGV4IG91dCBvZiByYW5nZS4KKwkgKiAwNy4wNC4yMC9GQgorCSAqLworCQorCXB1YmxpYyBTdHJpbmcgZ2V0TGVtbWEoaW50IGkpCisJCisJeworCWlmKCBpIDwgMCB8fCBpID4gdGhpcy5sZW1tYXRhLnNpemUoKSApCisJCXJldHVybiBudWxsOworCQorCXJldHVybiB0aGlzLmxlbW1hdGEuZ2V0KGkpOworCX0gLy8gZ2V0TGVtbWEKKwkKKwkvKiBzZXRSZWY6CisJICogLSBpbnNlcnRzIGEgcmVmZXJlbmNlIHRvIGEgaW5zdGFuY2lhdGlvbiBsaXN0IGludG8gdGhlCisJICogICBsaXN0IHJlZnMgYnkgaW5kZXggaS4KKwkgKiAtIGluZGV4IGkgbXVzdCBjb3JyZXNwb25kIHRvIGxlbW1hIGkgaW4gbGlzdCBsZW1tYXRhLgorCSAqIC0gdGhpcyBtZXRob2QgZW5zdXJlcyB0aGF0IGxpc3QgcmVmcyBpcyBhbGxvY2F0ZWQgd2l0aCBhcyBtdWNoIHBvc2l0aW9ucworCSAqICAgdGhhbiB0aGUgc2l6ZSBvZiBsaXN0IGxlbW1hdGEuCisJICogMDcuMDQuMjAvRkIKKwkgKi8KKwkgCisJcHVibGljIHZvaWQgc2V0UmVmKFN0cmluZyByZWYpCisJCisJeworCWlmKCB0aGlzLnJlZnMgPT0gbnVsbCApCisJCXsKKwkJaW50IHNpemUgPSB0aGlzLmxlbW1hdGEuc2l6ZSgpOworCQl0aGlzLnJlZnMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oc2l6ZSk7CisJCX0KKwkKKwl0aGlzLnJlZnMuYWRkKHJlZik7CisJfSAvLyBzZXRSZWYKKwkKKwkvKiBnZXRSZWZzQ291bnQ6CisJICogcmV0dXJucyBuby4gb2YgcmVmZXJlbmNlcyBzdG9yZWQgaW4gbGlzdCB0aGlzLnJlZnMuCisJICogMDcuMDQuMjAvRkIKKwkgKi8KKwkKKwlwdWJsaWMgaW50IGdldFJlZnNDb3VudCgpCisJCisJeworCXJldHVybiB0aGlzLnJlZnMgIT0gbnVsbCA/IHRoaXMucmVmcy5zaXplKCkgOiAwIDsJCisJfSAvLyBnZXRSZWZzQ291bnQuCisJCisJLyogZ2V0UmVmc2FzU3RyaW5nOgorCSAqIC0gcmV0dXJucyBhIHByaW50YWJsZSBsaXN0IG9mIHJlZmVyZW5jZXMgdG9nZXRoZXIgd2l0aCB0aGUgY29ycmVzcG9uZGluZworCSAqICAgbGVtbWF0YS4KKwkgKiAwNy4wNC4yMC9GQgorCSAqLworCQorCXB1YmxpYyBTdHJpbmcgZ2V0UmVmc2FzU3RyaW5nKCkKKwkKKwl7CisJaW50CisJCWksIG1heDsgCisJCisJaWYoIHRoaXMubGVtbWF0YSA9PSBudWxsIHx8IHRoaXMucmVmcyA9PSBudWxsICkKKwkJcmV0dXJuICIiOworCQorCS8vbWF4ID0gdGhpcy5sZW1tYXRhLnNpemUoKSA+IHRoaXMucmVmcy5zaXplKCkgPyAKKwkvLwkJCXRoaXMubGVtbWF0YS5zaXplKCkgOiB0aGlzLnJlZnMuc2l6ZSgpOworCisJcmV0dXJuIHRoaXMucmVmcy50b1N0cmluZygpOworCX0gLy8gZ2V0UmVmc2FzU3RyaW5nCisJCisJLyogYWRkRXhwTGlzdAorCSAqIAorCSAqIGFkZHMgYW4gRXhwYW5zaW9uIExpc3QgZm9yIGxlbW1hIGkuCisJICogTm90ZXM6CisJICogLSBhZGQgZXhwTGlzdCBpbiBzYW1lIG9yZGVyIGFzIGxlbW1hdGEgc3RvcmVkIGluIGxpc3QgbGVtbWF0YS4KKwkgKiAtIHRvZG86IHdpbGwgYmUgcmVwbGFjZWQgYnkgYWRkTGVtbWFSZXNwb25zZSgpLgorCSAqIDA4LjA0LjIwL0ZCCisJICovCisJCisJcHVibGljIHZvaWQgYWRkRXhwTGlzdChMaXN0IGV4cExpc3QpCisJCisJeworCWlmKCBleHBhbnNpb25MaXN0cyA9PSBudWxsICkKKwkJeworCQlleHBhbnNpb25MaXN0cyA9IG5ldyBBcnJheUxpc3Q8TGlzdDxTdHJpbmc+PihsZW1tYXRhLnNpemUoKSk7CisJCX0KKwkKKwlleHBhbnNpb25MaXN0cy5hZGQoZXhwTGlzdCk7CisJfSAvLyBhZGRFeHBMaXN0CisJCisJLyoKKwkgKiBhZGRMZW1tYVJlc3BvbnNlOgorCSAqIC0gYWRkcyBhIExlbW1hUmVzcG9uc2Ugb2JqZWN0IGZvciB0aGUgY29ycmVzcG9uZGlnIGxlbW1hLgorCSAqIDMwLjA0LjIwL0ZCCisJICogCisJICovCisJCisJcHVibGljIHZvaWQgYWRkTGVtbWFSZXNwb25zZShMZW1tYVJlc3BvbnNlIGxlbVJlc3ApCisJCisJeworCWlmKCB0aGlzLmxlbVJlc3BMaXN0ID09IG51bGwgKQorCQl0aGlzLmxlbVJlc3BMaXN0ID0gbmV3IEFycmF5TGlzdDxMZW1tYVJlc3BvbnNlPihsZW1tYXRhLnNpemUoKSk7CisJCisJdGhpcy5sZW1SZXNwTGlzdC5hZGQobGVtUmVzcCk7CisJfSAvLyBhZGRMZW1tYVJlc3BvbnNlCisJCisJLyogcmV3cml0ZVN1YlF1ZXJ5CisJICogCisJICogUnVsZXM6IE9sZAkJCT4gCU5ldzoKKwkgKiAJCSAgImtleSI6ICImSGF1cyIJImtleSI6ICJyZWYiLCBvcgorCSAqIAkJICAia2V5IjogIiZIYXVzIgkia2V5IjogW1dmMSwgV2YyLCAuLi5dLgorCSAqIAkJICAibGF5ZXIiOiAibGVtbWEiCSJsYXllciI6ICJvcnRoIgorCSAqIAkJICAiIgkJCQkiZGVzYyI6ICImTGVtbWEiIChuZXUpCisJICogCQkgICIiCQkJCSJoaWRlIjogImtleSIgICAgKG5ldSkKKwkgKiBBcmd1bWVudHM6CisJICogbm9kZQkJOiBleHBlY3RlZCB0byBiZSBhICJ3cmFwIi1vYmplY3QuCisJICogMDcuMDQuMjAvRkIKKwkgKi8KKwkKKwlwcm90ZWN0ZWQgdm9pZCByZXdyaXRlU3ViUXVlcnkoSnNvbk5vZGUgbm9kZSwgZmluYWwgU3RyaW5nIGxlbW1hLCBmaW5hbCBQcmludFN0cmVhbSBmb3V0KQorCQorCXsKKwlmaW5hbCBTdHJpbmcgZnVuYyA9ICJyZXdyaXRlU3ViUXVlcnkiOworCWZpbmFsIGJvb2xlYW4KKwkJYkxvZyA9IHRydWU7CisJCisJaWYoIGJMb2cgJiYgZm91dCAhPSBudWxsKQorCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiByZXdyaXRlICclcycuXG4iLCBmdW5jLCBub2RlLnRvU3RyaW5nKCkpOworCQorCWlmKCBub2RlLmlzT2JqZWN0KCkgKQorCQl7CisJICAgIEl0ZXJhdG9yPFN0cmluZz4gCisJICAgIAlmaWVsZE5hbWVzID0gbm9kZS5maWVsZE5hbWVzKCk7CisJICAgIAorCQl3aGlsZShmaWVsZE5hbWVzLmhhc05leHQoKSkgCisJCQl7CisJCSAgICBTdHJpbmcgCisJCSAgICAJZmllbGROYW1lIAk9IGZpZWxkTmFtZXMubmV4dCgpOworCQkgICAgSnNvbk5vZGUgCisJCSAgICAJZmllbGRWYWx1ZSA9IG5vZGUuZ2V0KGZpZWxkTmFtZSk7CisJCSAgICAKKwkJICAgIGlmKCBmaWVsZFZhbHVlLmlzVGV4dHVhbCgpID09IGZhbHNlICkKKwkJICAgIAljb250aW51ZTsKKwkJICAgIAorCQkgICAgLy8gcGF0aCBzZWFyY2ggdW5kZXIgJ3F1ZXJ5JzoKKwkJICAgIGlmKCBmaWVsZE5hbWUuZXF1YWxzKCJrZXkiKSApCisJCQkgICAgeworCQkJICAgIGlmKCBiTG9nICYmIGZvdXQgIT0gbnVsbCApCisJCQkgICAgCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlcGxhY2luZyAlcz0nJXMnIGJ5ICVzPSclcycuXG4iLCAKKwkJCQkgICAgCQkJZnVuYywgZmllbGROYW1lLCBmaWVsZFZhbHVlLmFzVGV4dCgpLAorCQkJCSAgICAJCQlmaWVsZE5hbWUsICJbLi4uXSIpOworCisJCSAgICAJLy9Kc29uTm9kZSBuZXdOb2RlID0gb2JqTWFwcGVyLmNyZWF0ZU9iamVjdE5vZGUoKTsKKwkJCSAgICAvLygoT2JqZWN0Tm9kZSlub2RlKS5wdXQoIm5ld2tleSIsIHZhbCk7CisJCQkgICAgKChPYmplY3ROb2RlKW5vZGUpLnB1dCgia2V5IiwgIlsuLi5dIik7CisJCQkgICAgCisJCQkgICAgaWYoIGJMb2cgJiYgZm91dCAhPSBudWxsICkKKwkJCSAgICAJZm91dC5wcmludGYoIkRlYnVnOiAlczogJXM9JyVzJyAoYWZ0ZXIgcmVwbGFjZW1lbnQpLlxuIiwgZnVuYywgZmllbGROYW1lLCBub2RlLmdldCgia2V5IikpOworCQkJICAgIH0KKwkJICAgIGVsc2UgaWYoIGZpZWxkTmFtZS5lcXVhbHMoImxheWVyIikgKQorCQkJICAgIHsKKwkJCSAgICAJCisJCQkgICAgfQorCQkgICAgCisJCQl9IC8vIHdoaWxlCisKKwkJaWYoIGJMb2cgJiYgZm91dCAhPSBudWxsICkKKwkJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGFmdGVyIHJld3JpdGluZywgd3JhcC1PYmo9JyVzJy5cbiIsIGZ1bmMsIG5vZGUudG9TdHJpbmcoKSk7CisKKwkJfSAvLyBvYmplY3QKKwkKKwl9IC8vIHJld3JpdGVTdWJRdWVyeQorCQorCQorfSAvLyBjbGFzcyBUcmF2ZXJzZWRQYXRoCisKZGlmZiAtLWdpdCBhL0pzb25UcmF2ZXJzZS9zcmMvZGUva29yYXAvc2VydmljZXMvTGVtbWFSZXNwb25zZS5qYXZhIGIvSnNvblRyYXZlcnNlL3NyYy9kZS9rb3JhcC9zZXJ2aWNlcy9MZW1tYVJlc3BvbnNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ2ZmQ3OQotLS0gL2Rldi9udWxsCisrKyBiL0pzb25UcmF2ZXJzZS9zcmMvZGUva29yYXAvc2VydmljZXMvTGVtbWFSZXNwb25zZS5qYXZhCkBAIC0wLDAgKzEsMTA0IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBqYXZheC54bWwuYmluZC5hbm5vdGF0aW9uLlhtbEFjY2Vzc29yVHlwZTsKKy8vaW1wb3J0IGphdmF4LnhtbC5iaW5kLmFubm90YXRpb24uWG1sUm9vdEVsZW1lbnQ7CisvL2ltcG9ydCBqYXZheC54bWwuYmluZC5hbm5vdGF0aW9uLlhtbFR5cGU7CitpbXBvcnQgamF2YXgueG1sLmJpbmQuYW5ub3RhdGlvbi4qOworCisvKiBHZW5lcmFsIGluZm9zOgorICogaHR0cDovL2Jsb2cuYmRvdWdoYW4uY29tLzIwMTEvMDYvdXNpbmctamF4YnMteG1sYWNjZXNzb3J0eXBlLXRvLmh0bWwKKyAqLworCisvKgorICogTGVtbWFSZXNwb25zZTogCisgKiBPYmplY3QgdG8gcmV0dXJuIGJ5IEdsZW1tU2VydmljZXMgb24gYSBMZW1tYSBSZXF1ZXN0LgorICogV2lsbCBiZSBjb252ZXJ0ZWQgYnkgZ2xhc3NmaXNoIHRvIEpTT04uCisgKiBOb3RlczoKKyAqIC0gaGVhZGVyIGZpZWxkcyBhcmUgcHJleGlkZWQgYnkgJ2hlYWRfJyBiZWNhdXNlIEpTT04gd2lsbCBiZSBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkgYnkgSkFYQi4KKyAqIAorICogMjQuMDEuMjAvRkIKKyAqLworCisvL0BYbWxSb290RWxlbWVudChuYW1lPSJMZW1tYVJlc3BvbnNlIikgLSBubyBlZmZlY3QKK0BYbWxBY2Nlc3NvclR5cGUoWG1sQWNjZXNzVHlwZS5QVUJMSUNfTUVNQkVSKQorLy9AWG1sVHlwZSAobmFtZT0iYWJjIiwgcHJvcE9yZGVyPXsicXVlcnkiLCAib3B0aW9ucyIsICJuV2ZzIiwgImxpc3RvZldmcyJ9KSAtIG5vIGVmZmVjdAorCisKK3B1YmxpYyBjbGFzcyBMZW1tYVJlc3BvbnNlIAorCit7CisJZmluYWwgaW50IFBSSU5UX0xJU1RfTElNSVQJPSAxMDsgLy8gZG8gbm90IHByaW50IG1vcmUgdGhhbiAxMCBXZnMgb2YgbGlzdG9mV2ZzW10uCisJCisJcHVibGljIGludAorCQloZWFkX25XZnMgPSAwOworCXB1YmxpYyBTdHJpbmcKKwkJaGVhZF9xdWVyeSAgID0gbnVsbCwKKwkJaGVhZF9vcHRpb25zID0gbnVsbCwgLy8gZS5nLiAiK2ZsZXgtc29uc3QiLAorCQloZWFkX2Vyck1lc3MgPSBudWxsOworCQkJCisJcHVibGljIExpc3Q8U3RyaW5nPgorCQlsaXN0b2ZXZnMgPSBudWxsOworCQorCXB1YmxpYyBMZW1tYVJlc3BvbnNlKCkKKwl7CisJCQorCX0KKwkKKwkvKiB0b1N0cmluZworCSAqIC0gZm9ybWF0cyBwYXJ0aWFsbHkgYSBMZW1tYVJlc3BvbnNlIG9iaiB0byBzdHJpbmcuCisJICogUmV0dXJucyBmb3JtYXRlZCBzdHJpbmcgb3IgbnVsbCBpZiBhbiBlcnJvciBvY2N1cmVzLgorCSAqIDI5LjA0LjIwL0ZCCisJICovCisJCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpCisJCisJeworCVN0cmluZworCQlzID0gbnVsbDsKKwkvL1N0cmluZ0J1ZmZlcgorCS8vCXNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOworCQorCXMgPSBTdHJpbmcuZm9ybWF0KCJoZWFkOiBuV2ZzPSVkLCBsaXN0PSVzLiIsIHRoaXMuaGVhZF9uV2ZzLCB0aGlzLmxpc3RvZldmcyk7CisJCisJcmV0dXJuIHMgIT0gbnVsbCA/IHMgOiAiIjsKKwl9IC8vIHRvU3RyaW5nCisKKwkvKiAgIHByaW50UGFydGlhbExpc3Q6CisJICogCisJICogLSBwcmludHMgdGhlIGZ1bGwgbGlzdCBvZiBXZnMgb3IsIGlmIHRoZSBsaXN0IGlzIGxvbmdlciB0aGFuIAorCSAqICAgUFJJTlRfTElTVF9MSU1JVCwgb25seSB0aGUgYmVnaW5uaW5nIGFuZCB0aGUgZW5kIG9mIGl0LgorCSAqIAorCSAqIFJldHVybnMgdGhlIGZvcm1hdGVkIChwYXJ0aWFsKSBsaXN0IG9mIFdmcyBhcyBhIHN0cmluZyBvciAiW10iIGlmCisJICogICAgICAgICB0aGUgbGlzdCBpcyBlbXB0eS4KKwkgKiAyNy4xMC4yMS9GQgorCSAqLworCQorCXB1YmxpYyBTdHJpbmcgcHJpbnRQYXJ0aWFsTGlzdCgpCisJCisJeworCVN0cmluZ0J1ZmZlcgorCQlzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKwlmaW5hbCBpbnQKKwkJaU1pbiA9IFBSSU5UX0xJU1RfTElNSVQvMiwKKwkJaU1heCA9IHRoaXMubGlzdG9mV2ZzLnNpemUoKS0oUFJJTlRfTElTVF9MSU1JVC8yKTsKKwkKKwlzYi5hcHBlbmQoJ1snKTsKKwkKKwlmb3IoaW50IGk9MDsgaTx0aGlzLmxpc3RvZldmcy5zaXplKCk7IGkrKykKKwkJeworCQlpZiggaTxpTWluIHx8IGk+PWlNYXggKQorCQkJeworCQkJaWYoaT4wKQorCQkJCXNiLmFwcGVuZCgnLCcpOworCQkJc2IuYXBwZW5kKHRoaXMubGlzdG9mV2ZzLmdldChpKSk7CisJCQl9CisJCX0KKwlzYi5hcHBlbmQoJ10nKTsKKwkKKwlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwkKKwl9IC8vIHByaW50UGFydGlhbExpc3QKKworfQpkaWZmIC0tZ2l0IGEvUHJvamVjdC1UZXN0cy8uY2xhc3NwYXRoIGIvUHJvamVjdC1UZXN0cy8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMDk4NzQKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9qZWN0LVRlc3RzLy5jbGFzc3BhdGgKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KYXZhU0UtMS44Ij4KKwkJPGF0dHJpYnV0ZXM+CisJCQk8YXR0cmlidXRlIG5hbWU9Im1hdmVuLnBvbWRlcml2ZWQiIHZhbHVlPSJ0cnVlIi8+CisJCTwvYXR0cmlidXRlcz4KKwk8L2NsYXNzcGF0aGVudHJ5PgorCTxjbGFzc3BhdGhlbnRyeSBjb21iaW5lYWNjZXNzcnVsZXM9ImZhbHNlIiBleHBvcnRlZD0idHJ1ZSIga2luZD0ic3JjIiBwYXRoPSIvR2xlbW1DbGllbnQiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBvdXRwdXQ9InRhcmdldC9jbGFzc2VzIiBwYXRoPSJzcmMiPgorCQk8YXR0cmlidXRlcz4KKwkJCTxhdHRyaWJ1dGUgbmFtZT0ib3B0aW9uYWwiIHZhbHVlPSJ0cnVlIi8+CisJCQk8YXR0cmlidXRlIG5hbWU9Im1hdmVuLnBvbWRlcml2ZWQiIHZhbHVlPSJ0cnVlIi8+CisJCTwvYXR0cmlidXRlcz4KKwk8L2NsYXNzcGF0aGVudHJ5PgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy1VdGlscyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLm0yZS5NQVZFTjJfQ0xBU1NQQVRIX0NPTlRBSU5FUiI+CisJCTxhdHRyaWJ1dGVzPgorCQkJPGF0dHJpYnV0ZSBuYW1lPSJtYXZlbi5wb21kZXJpdmVkIiB2YWx1ZT0idHJ1ZSIvPgorCQk8L2F0dHJpYnV0ZXM+CisJPC9jbGFzc3BhdGhlbnRyeT4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSIvSnNvblRyYXZlcnNlIi8+CisJPGNsYXNzcGF0aGVudHJ5IGNvbWJpbmVhY2Nlc3NydWxlcz0iZmFsc2UiIGtpbmQ9InNyYyIgcGF0aD0iL1V0aWxzIi8+CisJPGNsYXNzcGF0aGVudHJ5IGV4cG9ydGVkPSJ0cnVlIiBraW5kPSJsaWIiIHBhdGg9Ii9VdGlscy90YXJnZXQvVXRpbHMtMC4xLVNOQVBTSE9ULmphciIvPgorCTxjbGFzc3BhdGhlbnRyeSBleHBvcnRlZD0idHJ1ZSIga2luZD0ibGliIiBwYXRoPSIvSnNvblRyYXZlcnNlL3RhcmdldC9Kc29uVHJhdmVyc2UtMC4xLVNOQVBTSE9ULmphciIvPgorCTxjbGFzc3BhdGhlbnRyeSBjb21iaW5lYWNjZXNzcnVsZXM9ImZhbHNlIiBraW5kPSJzcmMiIHBhdGg9Ii93Zm9ybVNlcnZpY2VKYXIiLz4KKwk8Y2xhc3NwYXRoZW50cnkgZXhwb3J0ZWQ9InRydWUiIGtpbmQ9ImxpYiIgcGF0aD0iL3dmb3JtU2VydmljZUphci90YXJnZXQvd2Zvcm1TZXJ2aWNlSmFyLTAuMS1TTkFQU0hPVC5qYXIiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJ0YXJnZXQvY2xhc3NlcyIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9Qcm9qZWN0LVRlc3RzLy5wcm9qZWN0IGIvUHJvamVjdC1UZXN0cy8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmQ4NzJhCi0tLSAvZGV2L251bGwKKysrIGIvUHJvamVjdC1UZXN0cy8ucHJvamVjdApAQCAtMCwwICsxLDM1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5UZXN0czwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCQk8cHJvamVjdD5HbGVtbUNsaWVudDwvcHJvamVjdD4KKwkJPHByb2plY3Q+SnNvblRyYXZlcnNlPC9wcm9qZWN0PgorCQk8cHJvamVjdD5VdGlsczwvcHJvamVjdD4KKwkJPHByb2plY3Q+d2Zvcm1TZXJ2aWNlSmFyPC9wcm9qZWN0PgorCQk8cHJvamVjdD53Zm9ybVNlcnZpY2VzPC9wcm9qZWN0PgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLm0yZS5jb3JlLm1hdmVuMkJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLm0yZS5jb3JlLm1hdmVuMk5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+CisJPGxpbmtlZFJlc291cmNlcz4KKwkJPGxpbms+CisJCQk8bmFtZT5zcmMtVXRpbHM8L25hbWU+CisJCQk8dHlwZT4yPC90eXBlPgorCQkJPGxvY2F0aW9uPkM6L215SURTL0RhdGVuL0tvckFQL1NlcnZpY2VzL1V0aWxzL3NyYzwvbG9jYXRpb24+CisJCTwvbGluaz4KKwk8L2xpbmtlZFJlc291cmNlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvUHJvamVjdC1UZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9Qcm9qZWN0LVRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDQ1YjZiCi0tLSAvZGV2L251bGwKKysrIGIvUHJvamVjdC1UZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSwxMyBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjgKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS44CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnJlbGVhc2U9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjgKZGlmZiAtLWdpdCBhL1Byb2plY3QtVGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLm0yZS5jb3JlLnByZWZzIGIvUHJvamVjdC1UZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubTJlLmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg5N2E3ZgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2plY3QtVGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLm0yZS5jb3JlLnByZWZzCkBAIC0wLDAgKzEsNCBAQAorYWN0aXZlUHJvZmlsZXM9CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorcmVzb2x2ZVdvcmtzcGFjZVByb2plY3RzPXRydWUKK3ZlcnNpb249MQpkaWZmIC0tZ2l0IGEvUHJvamVjdC1UZXN0cy9HbGVtbVNlcnZpY2VzLmVyciBiL1Byb2plY3QtVGVzdHMvR2xlbW1TZXJ2aWNlcy5lcnIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2plY3QtVGVzdHMvR2xlbW1TZXJ2aWNlcy5lcnIKZGlmZiAtLWdpdCBhL1Byb2plY3QtVGVzdHMvR2xlbW1TZXJ2aWNlcy5sb2cgYi9Qcm9qZWN0LVRlc3RzL0dsZW1tU2VydmljZXMubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZmVlNTMKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9qZWN0LVRlc3RzL0dsZW1tU2VydmljZXMubG9nCkBAIC0wLDAgKzEsOTA4IEBACitEZWJ1ZzogZG9QT1NUX2hhbmRsZVdvcmRmb3JtUXVlcmllczogdmVyc2lvbiBkYXRlOiAwNC4wNC4yMC4KK0RlYnVnOiBkb1BPU1RfaGFuZGxlV29yZGZvcm1RdWVyaWVzOiBzdGFydGluZyB0aW1lOiAyMDIwLTA1LTE1VDE4OjM5OjUwLjYxOC4KK0RlYnVnOiBkb1BPU1RfaGFuZGxlV29yZGZvcm1RdWVyaWVzOiBxdWVyeSA9ICd7CisgICJAY29udGV4dCIgOiAiaHR0cDovL2tvcmFwLmlkcy1tYW5uaGVpbS5kZS9ucy9Lb3JhbFF1ZXJ5L3YwLjMvY29udGV4dC5qc29ubGQiLAorICAiY29sbGVjdGlvbiIgOiB7CisgICAgIkB0eXBlIiA6ICJrb3JhbDpkb2NHcm91cCIsCisgICAgIm9wZXJhbmRzIiA6IFsgeworICAgICAgIkB0eXBlIiA6ICJrb3JhbDpkb2MiLAorICAgICAgImtleSIgOiAiYXZhaWxhYmlsaXR5IiwKKyAgICAgICJtYXRjaCIgOiAibWF0Y2g6ZXEiLAorICAgICAgInR5cGUiIDogInR5cGU6cmVnZXgiLAorICAgICAgInZhbHVlIiA6ICJDQy1CWS4qIgorICAgIH0sIHsKKyAgICAgICJAdHlwZSIgOiAia29yYWw6ZG9jR3JvdXAiLAorICAgICAgIm9wZXJhbmRzIiA6IFsgeworICAgICAgICAiQHR5cGUiIDogImtvcmFsOmRvYyIsCisgICAgICAgICJrZXkiIDogImF2YWlsYWJpbGl0eSIsCisgICAgICAgICJtYXRjaCIgOiAibWF0Y2g6ZXEiLAorICAgICAgICAidHlwZSIgOiAidHlwZTpyZWdleCIsCisgICAgICAgICJ2YWx1ZSIgOiAiQ0MtQlkuKiIKKyAgICAgIH0sIHsKKyAgICAgICAgIkB0eXBlIiA6ICJrb3JhbDpkb2NHcm91cCIsCisgICAgICAgICJvcGVyYW5kcyIgOiBbIHsKKyAgICAgICAgICAiQHR5cGUiIDogImtvcmFsOmRvYyIsCisgICAgICAgICAgImtleSIgOiAiYXZhaWxhYmlsaXR5IiwKKyAgICAgICAgICAibWF0Y2giIDogIm1hdGNoOmVxIiwKKyAgICAgICAgICAidHlwZSIgOiAidHlwZTpyZWdleCIsCisgICAgICAgICAgInZhbHVlIiA6ICJBQ0EuKiIKKyAgICAgICAgfSwgeworICAgICAgICAgICJAdHlwZSIgOiAia29yYWw6ZG9jR3JvdXAiLAorICAgICAgICAgICJvcGVyYW5kcyIgOiBbIHsKKyAgICAgICAgICAgICJAdHlwZSIgOiAia29yYWw6ZG9jIiwKKyAgICAgICAgICAgICJrZXkiIDogImF2YWlsYWJpbGl0eSIsCisgICAgICAgICAgICAibWF0Y2giIDogIm1hdGNoOmVxIiwKKyAgICAgICAgICAgICJ0eXBlIiA6ICJ0eXBlOnJlZ2V4IiwKKyAgICAgICAgICAgICJ2YWx1ZSIgOiAiUUFPLU5DIgorICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICJAdHlwZSIgOiAia29yYWw6ZG9jIiwKKyAgICAgICAgICAgICJrZXkiIDogImF2YWlsYWJpbGl0eSIsCisgICAgICAgICAgICAibWF0Y2giIDogIm1hdGNoOmVxIiwKKyAgICAgICAgICAgICJ0eXBlIiA6ICJ0eXBlOnJlZ2V4IiwKKyAgICAgICAgICAgICJ2YWx1ZSIgOiAiUUFPLioiCisgICAgICAgICAgfSBdLAorICAgICAgICAgICJvcGVyYXRpb24iIDogIm9wZXJhdGlvbjpvciIKKyAgICAgICAgfSBdLAorICAgICAgICAib3BlcmF0aW9uIiA6ICJvcGVyYXRpb246b3IiCisgICAgICB9IF0sCisgICAgICAib3BlcmF0aW9uIiA6ICJvcGVyYXRpb246b3IiCisgICAgfSBdLAorICAgICJvcGVyYXRpb24iIDogIm9wZXJhdGlvbjphbmQiLAorICAgICJyZXdyaXRlcyIgOiBbIHsKKyAgICAgICJAdHlwZSIgOiAia29yYWw6cmV3cml0ZSIsCisgICAgICAib3BlcmF0aW9uIiA6ICJvcGVyYXRpb246aW5zZXJ0aW9uIiwKKyAgICAgICJzY29wZSIgOiAiYXZhaWxhYmlsaXR5KEZSRUUpIiwKKyAgICAgICJzcmMiIDogIkt1c3R2YWt0IgorICAgIH0gXQorICB9LAorICAibWF0Y2hlcyIgOiBbICIuLi4iIF0sCisgICJtZXRhIiA6IHsKKyAgICAiYmVuY2htYXJrIiA6ICI1LjA4MDEwMDY4IHMiLAorICAgICJjb250ZXh0IiA6IHsKKyAgICAgICJsZWZ0IiA6IFsgInRva2VuIiwgNDAgXSwKKyAgICAgICJyaWdodCIgOiBbICJ0b2tlbiIsIDQwIF0KKyAgICB9LAorICAgICJjb3VudCIgOiAyNSwKKyAgICAiY3V0T2ZmIiA6IHRydWUsCisgICAgImZpZWxkcyIgOiBbICJJRCIsICJVSUQiLCAidGV4dFNpZ2xlIiwgImNvcnB1c0lEIiwgImF1dGhvciIsICJ0aXRsZSIsICJzdWJUaXRsZSIsICJ0ZXh0Q2xhc3MiLCAicHViUGxhY2UiLCAicHViRGF0ZSIsICJhdmFpbGFiaWxpdHkiLCAibGF5ZXJJbmZvcyIsICJkb2NTaWdsZSIsICJjb3JwdXNTaWdsZSIgXSwKKyAgICAiaXRlbXNQZXJQYWdlIiA6IDI1LAorICAgICJzZXJpYWxRdWVyeSIgOiAic3BhbkRpc3RhbmNlKHsxMjk6IHNwYW5OZXh0KHNwYW5OZXh0KHRva2Vuczp0dC9sOnJlbm5lbiwgdG9rZW5zOnR0L2w6c2NobGFmZW4pLCB0b2tlbnM6dHQvbDpsYXVmZW4pfSwgezEyOTogdG9rZW5zOnR0L2w6a2F1ZmVufSwgWyh3WzA6Ml0sIG5vdE9yZGVyZWQsIG5vdEV4Y2x1ZGVkKV0pIiwKKyAgICAic3RhcnRJbmRleCIgOiAwLAorICAgICJ0aW1lb3V0IiA6IDEwMDAwLAorICAgICJ0b3RhbFJlc3VsdHMiIDogLTEsCisgICAgInZlcnNpb24iIDogIjAuNTkuMSIKKyAgfSwKKyAgInF1ZXJ5IiA6IHsKKyAgICAiQHR5cGUiIDogImtvcmFsOmdyb3VwIiwKKyAgICAiZGlzdGFuY2VzIiA6IFsgeworICAgICAgIkB0eXBlIiA6ICJjb3NtYXM6ZGlzdGFuY2UiLAorICAgICAgImJvdW5kYXJ5IiA6IHsKKyAgICAgICAgIkB0eXBlIiA6ICJrb3JhbDpib3VuZGFyeSIsCisgICAgICAgICJtYXgiIDogMiwKKyAgICAgICAgIm1pbiIgOiAwCisgICAgICB9LAorICAgICAgImtleSIgOiAidyIKKyAgICB9IF0sCisgICAgImluT3JkZXIiIDogZmFsc2UsCisgICAgIm9wZXJhbmRzIiA6IFsgeworICAgICAgIkB0eXBlIiA6ICJrb3JhbDpncm91cCIsCisgICAgICAiY2xhc3NPdXQiIDogMTI5LAorICAgICAgIm9wZXJhbmRzIiA6IFsgeworICAgICAgICAiQHR5cGUiIDogImtvcmFsOmdyb3VwIiwKKyAgICAgICAgIm9wZXJhbmRzIiA6IFsgeworICAgICAgICAgICJAdHlwZSIgOiAia29yYWw6dG9rZW4iLAorICAgICAgICAgICJ3cmFwIiA6IHsKKyAgICAgICAgICAgICJAdHlwZSIgOiAia29yYWw6dGVybSIsCisgICAgICAgICAgICAiZm91bmRyeSIgOiAidHQiLAorICAgICAgICAgICAgImtleSIgOiAiR0Y+MiZyZW5uZW4iLAorICAgICAgICAgICAgImxheWVyIiA6ICJsZW1tYSIsCisgICAgICAgICAgICAibWF0Y2giIDogIm1hdGNoOmVxIiwKKyAgICAgICAgICAgICJyZXdyaXRlcyIgOiBbIHsKKyAgICAgICAgICAgICAgIkB0eXBlIiA6ICJrb3JhbDpyZXdyaXRlIiwKKyAgICAgICAgICAgICAgIm9wZXJhdGlvbiIgOiAib3BlcmF0aW9uOmluamVjdGlvbiIsCisgICAgICAgICAgICAgICJzY29wZSIgOiAiZm91bmRyeSIsCisgICAgICAgICAgICAgICJzcmMiIDogIkt1c3R2YWt0IgorICAgICAgICAgICAgfSBdCisgICAgICAgICAgfQorICAgICAgICB9LCB7CisgICAgICAgICAgIkB0eXBlIiA6ICJrb3JhbDp0b2tlbiIsCisgICAgICAgICAgIndyYXAiIDogeworICAgICAgICAgICAgIkB0eXBlIiA6ICJrb3JhbDp0ZXJtIiwKKyAgICAgICAgICAgICJmb3VuZHJ5IiA6ICJ0dCIsCisgICAgICAgICAgICAia2V5IiA6ICJzY2hsYWZlbiIsCisgICAgICAgICAgICAibGF5ZXIiIDogImxlbW1hIiwKKyAgICAgICAgICAgICJtYXRjaCIgOiAibWF0Y2g6ZXEiLAorICAgICAgICAgICAgInJld3JpdGVzIiA6IFsgeworICAgICAgICAgICAgICAiQHR5cGUiIDogImtvcmFsOnJld3JpdGUiLAorICAgICAgICAgICAgICAib3BlcmF0aW9uIiA6ICJvcGVyYXRpb246aW5qZWN0aW9uIiwKKyAgICAgICAgICAgICAgInNjb3BlIiA6ICJmb3VuZHJ5IiwKKyAgICAgICAgICAgICAgInNyYyIgOiAiS3VzdHZha3QiCisgICAgICAgICAgICB9IF0KKyAgICAgICAgICB9CisgICAgICAgIH0sIHsKKyAgICAgICAgICAiQHR5cGUiIDogImtvcmFsOnRva2VuIiwKKyAgICAgICAgICAid3JhcCIgOiB7CisgICAgICAgICAgICAiQHR5cGUiIDogImtvcmFsOnRlcm0iLAorICAgICAgICAgICAgImZvdW5kcnkiIDogInR0IiwKKyAgICAgICAgICAgICJrZXkiIDogImxhdWZlbiIsCisgICAgICAgICAgICAibGF5ZXIiIDogImxlbW1hIiwKKyAgICAgICAgICAgICJtYXRjaCIgOiAibWF0Y2g6ZXEiLAorICAgICAgICAgICAgInJld3JpdGVzIiA6IFsgeworICAgICAgICAgICAgICAiQHR5cGUiIDogImtvcmFsOnJld3JpdGUiLAorICAgICAgICAgICAgICAib3BlcmF0aW9uIiA6ICJvcGVyYXRpb246aW5qZWN0aW9uIiwKKyAgICAgICAgICAgICAgInNjb3BlIiA6ICJmb3VuZHJ5IiwKKyAgICAgICAgICAgICAgInNyYyIgOiAiS3VzdHZha3QiCisgICAgICAgICAgICB9IF0KKyAgICAgICAgICB9CisgICAgICAgIH0gXSwKKyAgICAgICAgIm9wZXJhdGlvbiIgOiAib3BlcmF0aW9uOnNlcXVlbmNlIgorICAgICAgfSBdLAorICAgICAgIm9wZXJhdGlvbiIgOiAib3BlcmF0aW9uOmNsYXNzIgorICAgIH0sIHsKKyAgICAgICJAdHlwZSIgOiAia29yYWw6Z3JvdXAiLAorICAgICAgImNsYXNzT3V0IiA6IDEyOSwKKyAgICAgICJvcGVyYW5kcyIgOiBbIHsKKyAgICAgICAgIkB0eXBlIiA6ICJrb3JhbDp0b2tlbiIsCisgICAgICAgICJ3cmFwIiA6IHsKKyAgICAgICAgICAiQHR5cGUiIDogImtvcmFsOnRlcm0iLAorICAgICAgICAgICJmb3VuZHJ5IiA6ICJ0dCIsCisgICAgICAgICAgImtleSIgOiAia2F1ZmVuIiwKKyAgICAgICAgICAibGF5ZXIiIDogImxlbW1hIiwKKyAgICAgICAgICAibWF0Y2giIDogIm1hdGNoOmVxIiwKKyAgICAgICAgICAicmV3cml0ZXMiIDogWyB7CisgICAgICAgICAgICAiQHR5cGUiIDogImtvcmFsOnJld3JpdGUiLAorICAgICAgICAgICAgIm9wZXJhdGlvbiIgOiAib3BlcmF0aW9uOmluamVjdGlvbiIsCisgICAgICAgICAgICAic2NvcGUiIDogImZvdW5kcnkiLAorICAgICAgICAgICAgInNyYyIgOiAiS3VzdHZha3QiCisgICAgICAgICAgfSBdCisgICAgICAgIH0KKyAgICAgIH0gXSwKKyAgICAgICJvcGVyYXRpb24iIDogIm9wZXJhdGlvbjpjbGFzcyIKKyAgICB9IF0sCisgICAgIm9wZXJhdGlvbiIgOiAib3BlcmF0aW9uOnNlcXVlbmNlIgorICB9Cit9Jy4KK0RlYnVnOiB0cmF2ZXJzZV9hbmRfcmV3cml0ZV9Lb3JhbFF1ZXJ5OiByZWFkeSBmb3IgdHJhdmVyc2luZyBxdWVyeS4uLgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogb2JqZWN0OiB7IAorRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdAY29udGV4dCc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnaHR0cDovL2tvcmFwLmlkcy1tYW5uaGVpbS5kZS9ucy9Lb3JhbFF1ZXJ5L3YwLjMvY29udGV4dC5qc29ubGQnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J2NvbGxlY3Rpb24nOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogb2JqZWN0OiB7IAorRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdAdHlwZSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAna29yYWw6ZG9jR3JvdXAnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J29wZXJhbmRzJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGFycmF5OiBbCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBvYmplY3Q6IHsgCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J0B0eXBlJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdrb3JhbDpkb2MnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J2tleSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnYXZhaWxhYmlsaXR5JworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdtYXRjaCc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnbWF0Y2g6ZXEnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J3R5cGUnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ3R5cGU6cmVnZXgnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J3ZhbHVlJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdDQy1CWS4qJworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogfSA6IGVuZCBvZiBvYmplY3QuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBvYmplY3Q6IHsgCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J0B0eXBlJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdrb3JhbDpkb2NHcm91cCcKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nb3BlcmFuZHMnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogYXJyYXk6IFsKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IG9iamVjdDogeyAKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nQHR5cGUnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2tvcmFsOmRvYycKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0na2V5JzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdhdmFpbGFiaWxpdHknCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J21hdGNoJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdtYXRjaDplcScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0ndHlwZSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAndHlwZTpyZWdleCcKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0ndmFsdWUnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ0NDLUJZLionCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiB9IDogZW5kIG9mIG9iamVjdC4KK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IG9iamVjdDogeyAKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nQHR5cGUnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2tvcmFsOmRvY0dyb3VwJworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdvcGVyYW5kcyc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBhcnJheTogWworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogb2JqZWN0OiB7IAorRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdAdHlwZSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAna29yYWw6ZG9jJworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdrZXknOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2F2YWlsYWJpbGl0eScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nbWF0Y2gnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ21hdGNoOmVxJworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSd0eXBlJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICd0eXBlOnJlZ2V4JworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSd2YWx1ZSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnQUNBLionCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiB9IDogZW5kIG9mIG9iamVjdC4KK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IG9iamVjdDogeyAKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nQHR5cGUnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2tvcmFsOmRvY0dyb3VwJworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdvcGVyYW5kcyc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBhcnJheTogWworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogb2JqZWN0OiB7IAorRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdAdHlwZSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAna29yYWw6ZG9jJworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdrZXknOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2F2YWlsYWJpbGl0eScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nbWF0Y2gnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ21hdGNoOmVxJworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSd0eXBlJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICd0eXBlOnJlZ2V4JworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSd2YWx1ZSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnUUFPLU5DJworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogfSA6IGVuZCBvZiBvYmplY3QuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBvYmplY3Q6IHsgCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J0B0eXBlJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdrb3JhbDpkb2MnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J2tleSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnYXZhaWxhYmlsaXR5JworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdtYXRjaCc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnbWF0Y2g6ZXEnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J3R5cGUnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ3R5cGU6cmVnZXgnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J3ZhbHVlJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdRQU8uKicKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IH0gOiBlbmQgb2Ygb2JqZWN0LgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogXSBlbmQgb2YgYXJyYXkuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J29wZXJhdGlvbic6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnb3BlcmF0aW9uOm9yJworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogfSA6IGVuZCBvZiBvYmplY3QuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBdIGVuZCBvZiBhcnJheS4KK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nb3BlcmF0aW9uJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdvcGVyYXRpb246b3InCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiB9IDogZW5kIG9mIG9iamVjdC4KK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IF0gZW5kIG9mIGFycmF5LgorRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdvcGVyYXRpb24nOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ29wZXJhdGlvbjpvcicKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IH0gOiBlbmQgb2Ygb2JqZWN0LgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogXSBlbmQgb2YgYXJyYXkuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J29wZXJhdGlvbic6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnb3BlcmF0aW9uOmFuZCcKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0ncmV3cml0ZXMnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogYXJyYXk6IFsKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IG9iamVjdDogeyAKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nQHR5cGUnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2tvcmFsOnJld3JpdGUnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J29wZXJhdGlvbic6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnb3BlcmF0aW9uOmluc2VydGlvbicKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nc2NvcGUnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2F2YWlsYWJpbGl0eShGUkVFKScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nc3JjJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdLdXN0dmFrdCcKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IH0gOiBlbmQgb2Ygb2JqZWN0LgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogXSBlbmQgb2YgYXJyYXkuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiB9IDogZW5kIG9mIG9iamVjdC4KK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nbWF0Y2hlcyc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBhcnJheTogWworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJy4uLicKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IF0gZW5kIG9mIGFycmF5LgorRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdtZXRhJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IG9iamVjdDogeyAKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nYmVuY2htYXJrJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICc1LjA4MDEwMDY4IHMnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J2NvbnRleHQnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogb2JqZWN0OiB7IAorRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdsZWZ0JzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGFycmF5OiBbCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAndG9rZW4nCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnNDAnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBdIGVuZCBvZiBhcnJheS4KK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0ncmlnaHQnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogYXJyYXk6IFsKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICd0b2tlbicKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICc0MCcKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IF0gZW5kIG9mIGFycmF5LgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogfSA6IGVuZCBvZiBvYmplY3QuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J2NvdW50JzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICcyNScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nY3V0T2ZmJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICd0cnVlJworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdmaWVsZHMnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogYXJyYXk6IFsKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdJRCcKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdVSUQnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAndGV4dFNpZ2xlJworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2NvcnB1c0lEJworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2F1dGhvcicKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICd0aXRsZScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdzdWJUaXRsZScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICd0ZXh0Q2xhc3MnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAncHViUGxhY2UnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAncHViRGF0ZScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdhdmFpbGFiaWxpdHknCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnbGF5ZXJJbmZvcycKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdkb2NTaWdsZScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdjb3JwdXNTaWdsZScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IF0gZW5kIG9mIGFycmF5LgorRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdpdGVtc1BlclBhZ2UnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJzI1JworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdzZXJpYWxRdWVyeSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnc3BhbkRpc3RhbmNlKHsxMjk6IHNwYW5OZXh0KHNwYW5OZXh0KHRva2Vuczp0dC9sOnJlbm5lbiwgdG9rZW5zOnR0L2w6c2NobGFmZW4pLCB0b2tlbnM6dHQvbDpsYXVmZW4pfSwgezEyOTogdG9rZW5zOnR0L2w6a2F1ZmVufSwgWyh3WzA6Ml0sIG5vdE9yZGVyZWQsIG5vdEV4Y2x1ZGVkKV0pJworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdzdGFydEluZGV4JzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICcwJworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSd0aW1lb3V0JzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICcxMDAwMCcKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0ndG90YWxSZXN1bHRzJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICctMScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0ndmVyc2lvbic6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnMC41OS4xJworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogfSA6IGVuZCBvZiBvYmplY3QuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J3F1ZXJ5JzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IG9iamVjdDogeyAKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nQHR5cGUnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2tvcmFsOmdyb3VwJworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdkaXN0YW5jZXMnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogYXJyYXk6IFsKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IG9iamVjdDogeyAKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nQHR5cGUnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2Nvc21hczpkaXN0YW5jZScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nYm91bmRhcnknOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogb2JqZWN0OiB7IAorRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdAdHlwZSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAna29yYWw6Ym91bmRhcnknCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J21heCc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnMicKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nbWluJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICcwJworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogfSA6IGVuZCBvZiBvYmplY3QuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J2tleSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAndycKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IH0gOiBlbmQgb2Ygb2JqZWN0LgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogXSBlbmQgb2YgYXJyYXkuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J2luT3JkZXInOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2ZhbHNlJworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdvcGVyYW5kcyc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBhcnJheTogWworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogb2JqZWN0OiB7IAorRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdAdHlwZSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAna29yYWw6Z3JvdXAnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J2NsYXNzT3V0JzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICcxMjknCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J29wZXJhbmRzJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGFycmF5OiBbCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBvYmplY3Q6IHsgCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J0B0eXBlJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdrb3JhbDpncm91cCcKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nb3BlcmFuZHMnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogYXJyYXk6IFsKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IG9iamVjdDogeyAKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nQHR5cGUnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2tvcmFsOnRva2VuJworRGVidWc6IGNoZWNrUGF0aDogd3JhcC1PYmo6ICd7IkB0eXBlIjoia29yYWw6dGVybSIsImZvdW5kcnkiOiJ0dCIsImtleSI6IkdGPjImcmVubmVuIiwibGF5ZXIiOiJsZW1tYSIsIm1hdGNoIjoibWF0Y2g6ZXEiLCJyZXdyaXRlcyI6W3siQHR5cGUiOiJrb3JhbDpyZXdyaXRlIiwib3BlcmF0aW9uIjoib3BlcmF0aW9uOmluamVjdGlvbiIsInNjb3BlIjoiZm91bmRyeSIsInNyYyI6Ikt1c3R2YWt0In1dfScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nd3JhcCc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBvYmplY3Q6IHsgCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J0B0eXBlJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdrb3JhbDp0ZXJtJworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdmb3VuZHJ5JzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICd0dCcKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0na2V5JzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdHRj4yJnJlbm5lbicKK0RlYnVnOiBjaGVja1BhdGg6IGZvdW5kOiBsZW1tYT0nR0Y+MiZyZW5uZW4nIGFzIGtvcmFsOnRlcm0uCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J2xheWVyJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdsZW1tYScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nbWF0Y2gnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ21hdGNoOmVxJworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdyZXdyaXRlcyc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBhcnJheTogWworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogb2JqZWN0OiB7IAorRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdAdHlwZSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAna29yYWw6cmV3cml0ZScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nb3BlcmF0aW9uJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdvcGVyYXRpb246aW5qZWN0aW9uJworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdzY29wZSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnZm91bmRyeScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nc3JjJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdLdXN0dmFrdCcKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IH0gOiBlbmQgb2Ygb2JqZWN0LgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogXSBlbmQgb2YgYXJyYXkuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiB9IDogZW5kIG9mIG9iamVjdC4KK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IH0gOiBlbmQgb2Ygb2JqZWN0LgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogb2JqZWN0OiB7IAorRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdAdHlwZSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAna29yYWw6dG9rZW4nCitEZWJ1ZzogY2hlY2tQYXRoOiB3cmFwLU9iajogJ3siQHR5cGUiOiJrb3JhbDp0ZXJtIiwiZm91bmRyeSI6InR0Iiwia2V5Ijoic2NobGFmZW4iLCJsYXllciI6ImxlbW1hIiwibWF0Y2giOiJtYXRjaDplcSIsInJld3JpdGVzIjpbeyJAdHlwZSI6ImtvcmFsOnJld3JpdGUiLCJvcGVyYXRpb24iOiJvcGVyYXRpb246aW5qZWN0aW9uIiwic2NvcGUiOiJmb3VuZHJ5Iiwic3JjIjoiS3VzdHZha3QifV19JworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSd3cmFwJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IG9iamVjdDogeyAKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nQHR5cGUnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2tvcmFsOnRlcm0nCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J2ZvdW5kcnknOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ3R0JworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdrZXknOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ3NjaGxhZmVuJworRGVidWc6IGNoZWNrUGF0aDogZm91bmQ6IGxlbW1hPSdzY2hsYWZlbicgYXMga29yYWw6dGVybS4KK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nbGF5ZXInOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2xlbW1hJworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdtYXRjaCc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnbWF0Y2g6ZXEnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J3Jld3JpdGVzJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGFycmF5OiBbCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBvYmplY3Q6IHsgCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J0B0eXBlJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdrb3JhbDpyZXdyaXRlJworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdvcGVyYXRpb24nOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ29wZXJhdGlvbjppbmplY3Rpb24nCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J3Njb3BlJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdmb3VuZHJ5JworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdzcmMnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ0t1c3R2YWt0JworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogfSA6IGVuZCBvZiBvYmplY3QuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBdIGVuZCBvZiBhcnJheS4KK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IH0gOiBlbmQgb2Ygb2JqZWN0LgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogfSA6IGVuZCBvZiBvYmplY3QuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBvYmplY3Q6IHsgCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J0B0eXBlJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdrb3JhbDp0b2tlbicKK0RlYnVnOiBjaGVja1BhdGg6IHdyYXAtT2JqOiAneyJAdHlwZSI6ImtvcmFsOnRlcm0iLCJmb3VuZHJ5IjoidHQiLCJrZXkiOiJsYXVmZW4iLCJsYXllciI6ImxlbW1hIiwibWF0Y2giOiJtYXRjaDplcSIsInJld3JpdGVzIjpbeyJAdHlwZSI6ImtvcmFsOnJld3JpdGUiLCJvcGVyYXRpb24iOiJvcGVyYXRpb246aW5qZWN0aW9uIiwic2NvcGUiOiJmb3VuZHJ5Iiwic3JjIjoiS3VzdHZha3QifV19JworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSd3cmFwJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IG9iamVjdDogeyAKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nQHR5cGUnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2tvcmFsOnRlcm0nCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J2ZvdW5kcnknOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ3R0JworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdrZXknOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2xhdWZlbicKK0RlYnVnOiBjaGVja1BhdGg6IGZvdW5kOiBsZW1tYT0nbGF1ZmVuJyBhcyBrb3JhbDp0ZXJtLgorRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdsYXllcic6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnbGVtbWEnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J21hdGNoJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdtYXRjaDplcScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0ncmV3cml0ZXMnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogYXJyYXk6IFsKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IG9iamVjdDogeyAKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nQHR5cGUnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2tvcmFsOnJld3JpdGUnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J29wZXJhdGlvbic6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnb3BlcmF0aW9uOmluamVjdGlvbicKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nc2NvcGUnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2ZvdW5kcnknCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J3NyYyc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnS3VzdHZha3QnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiB9IDogZW5kIG9mIG9iamVjdC4KK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IF0gZW5kIG9mIGFycmF5LgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogfSA6IGVuZCBvZiBvYmplY3QuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiB9IDogZW5kIG9mIG9iamVjdC4KK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IF0gZW5kIG9mIGFycmF5LgorRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdvcGVyYXRpb24nOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ29wZXJhdGlvbjpzZXF1ZW5jZScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IH0gOiBlbmQgb2Ygb2JqZWN0LgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogXSBlbmQgb2YgYXJyYXkuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J29wZXJhdGlvbic6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnb3BlcmF0aW9uOmNsYXNzJworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogfSA6IGVuZCBvZiBvYmplY3QuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBvYmplY3Q6IHsgCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J0B0eXBlJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdrb3JhbDpncm91cCcKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nY2xhc3NPdXQnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJzEyOScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nb3BlcmFuZHMnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogYXJyYXk6IFsKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IG9iamVjdDogeyAKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nQHR5cGUnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2tvcmFsOnRva2VuJworRGVidWc6IGNoZWNrUGF0aDogd3JhcC1PYmo6ICd7IkB0eXBlIjoia29yYWw6dGVybSIsImZvdW5kcnkiOiJ0dCIsImtleSI6ImthdWZlbiIsImxheWVyIjoibGVtbWEiLCJtYXRjaCI6Im1hdGNoOmVxIiwicmV3cml0ZXMiOlt7IkB0eXBlIjoia29yYWw6cmV3cml0ZSIsIm9wZXJhdGlvbiI6Im9wZXJhdGlvbjppbmplY3Rpb24iLCJzY29wZSI6ImZvdW5kcnkiLCJzcmMiOiJLdXN0dmFrdCJ9XX0nCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J3dyYXAnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogb2JqZWN0OiB7IAorRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdAdHlwZSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAna29yYWw6dGVybScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nZm91bmRyeSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAndHQnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J2tleSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAna2F1ZmVuJworRGVidWc6IGNoZWNrUGF0aDogZm91bmQ6IGxlbW1hPSdrYXVmZW4nIGFzIGtvcmFsOnRlcm0uCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J2xheWVyJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdsZW1tYScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nbWF0Y2gnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ21hdGNoOmVxJworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdyZXdyaXRlcyc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBhcnJheTogWworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogb2JqZWN0OiB7IAorRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdAdHlwZSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAna29yYWw6cmV3cml0ZScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nb3BlcmF0aW9uJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdvcGVyYXRpb246aW5qZWN0aW9uJworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdzY29wZSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnZm91bmRyeScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nc3JjJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdLdXN0dmFrdCcKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IH0gOiBlbmQgb2Ygb2JqZWN0LgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogXSBlbmQgb2YgYXJyYXkuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiB9IDogZW5kIG9mIG9iamVjdC4KK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IH0gOiBlbmQgb2Ygb2JqZWN0LgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogXSBlbmQgb2YgYXJyYXkuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J29wZXJhdGlvbic6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnb3BlcmF0aW9uOmNsYXNzJworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogfSA6IGVuZCBvZiBvYmplY3QuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBdIGVuZCBvZiBhcnJheS4KK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nb3BlcmF0aW9uJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdvcGVyYXRpb246c2VxdWVuY2UnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiB9IDogZW5kIG9mIG9iamVjdC4KK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IH0gOiBlbmQgb2Ygb2JqZWN0LgorRGVidWc6IHRyYXZlcnNlX2FuZF9yZXdyaXRlX0tvcmFsUXVlcnk6IHF1ZXJ5IHRyYXZlcnNlZC4KK0RlYnVnOiBHbGVtbUNsaWVudDogY29uc3RydWN0b3IgY2FsbGVkLgorRGVidWc6IHNlbmRRdWVyeTogcmVxdWVzdGVkIGxlbW1hID0gJ0dGPjImcmVubmVuJy4KK0RlYnVnOiBzZW5kUXVlcnk6IGJ1aWxkaW5nIFVSTD0naHR0cDovL2MwcjRmdDo0MDkxMy9HbGVtbVNlcnZpY2VzMi0wLjAuMS1TTkFQU0hPVC9pbmRleC9pbmZvL2xlbW1hL0dGPjImcmVubmVuJy4KK0RlYnVnOiBzZW5kUXVlcnk6IEhUVFAgcmV0dXJuIHN0YXR1cyA9IE9LLgorRGVidWc6IHNlbmRRdWVyeTogSFRUUCBSZXNwb25zZSBDb250ZW50ID0gJ3siaGVhZF9uV2ZzIjowLCJoZWFkX29wdGlvbnMiOiJmbGV4IiwiaGVhZF9xdWVyeSI6IkdGPjImcmVubmVuIiwibGlzdG9mV2ZzIjpbXX0nLgorRGVidWc6IHNlbmRRdWVyeTogbGVtUmVzcD0naGVhZDogbldmcz0wLCBsaXN0PVtdLicuCitEZWJ1Zzogc2VuZFF1ZXJ5OiByZXF1ZXN0ZWQgbGVtbWEgPSAnc2NobGFmZW4nLgorRGVidWc6IHNlbmRRdWVyeTogYnVpbGRpbmcgVVJMPSdodHRwOi8vYzByNGZ0OjQwOTEzL0dsZW1tU2VydmljZXMyLTAuMC4xLVNOQVBTSE9UL2luZGV4L2luZm8vbGVtbWEvc2NobGFmZW4nLgorRGVidWc6IHNlbmRRdWVyeTogSFRUUCByZXR1cm4gc3RhdHVzID0gT0suCitEZWJ1Zzogc2VuZFF1ZXJ5OiBIVFRQIFJlc3BvbnNlIENvbnRlbnQgPSAneyJoZWFkX25XZnMiOjUwLCJoZWFkX29wdGlvbnMiOiJmbGV4IiwiaGVhZF9xdWVyeSI6InNjaGxhZmVuIiwibGlzdG9mV2ZzIjpbIkdlc2NobGFmZW4iLCJTY2hsYWVmIiwiU2NobGFlZmUiLCJTY2hsYWVmc3QiLCJTY2hsYWZlIiwiU2NobGFmZW4iLCJTY2hsYWZlbmQiLCJTY2hsYWZlbmRlIiwiU2NobGFmZW5kZW0iLCJTY2hsYWZlbmRlbiIsIlNjaGxhZmVuZGVyIiwiU2NobGFmZW5kZXMiLCJTY2hsYWZldCIsIlNjaGxhZm4iLCJTY2hsYWZzdCIsIlNjaGxhZnQiLCJTY2hsaWVmIiwiU2NobGllZmUiLCJTY2hsaWVmZW4iLCJTY2hsaWVmZXN0IiwiU2NobGllZnN0IiwiU2NobGllZnQiLCJnZXNjaGxhZmVuIiwic2NobGFlZnN0Iiwic2NobGFlZnQiLCJzY2hsYWYiLCJzY2hsYWZlIiwic2NobGFmZW4iLCJzY2hsYWZlbmQiLCJzY2hsYWZlbmRlIiwic2NobGFmZW5kZW0iLCJzY2hsYWZlbmRlbiIsInNjaGxhZmVuZGVyIiwic2NobGFmZW5kZXMiLCJzY2hsYWZlbmRzdCIsInNjaGxhZmVzdCIsInNjaGxhZmV0Iiwic2NobGFmbiIsInNjaGxhZm5kZW4iLCJzY2hsYWZzdCIsInNjaGxhZnQiLCJzY2hsaWVmIiwic2NobGllZmUiLCJzY2hsaWVmZW4iLCJzY2hsaWVmZW5kIiwic2NobGllZmVzdCIsInNjaGxpZWZldCIsInNjaGxpZWZzdCIsInNjaGxpZWZ0Iiwic2NobMOkZnQiXX0nLgorRGVidWc6IHNlbmRRdWVyeTogbGVtUmVzcD0naGVhZDogbldmcz01MCwgbGlzdD1bR2VzY2hsYWZlbiwgU2NobGFlZiwgU2NobGFlZmUsIFNjaGxhZWZzdCwgU2NobGFmZSwgU2NobGFmZW4sIFNjaGxhZmVuZCwgU2NobGFmZW5kZSwgU2NobGFmZW5kZW0sIFNjaGxhZmVuZGVuLCBTY2hsYWZlbmRlciwgU2NobGFmZW5kZXMsIFNjaGxhZmV0LCBTY2hsYWZuLCBTY2hsYWZzdCwgU2NobGFmdCwgU2NobGllZiwgU2NobGllZmUsIFNjaGxpZWZlbiwgU2NobGllZmVzdCwgU2NobGllZnN0LCBTY2hsaWVmdCwgZ2VzY2hsYWZlbiwgc2NobGFlZnN0LCBzY2hsYWVmdCwgc2NobGFmLCBzY2hsYWZlLCBzY2hsYWZlbiwgc2NobGFmZW5kLCBzY2hsYWZlbmRlLCBzY2hsYWZlbmRlbSwgc2NobGFmZW5kZW4sIHNjaGxhZmVuZGVyLCBzY2hsYWZlbmRlcywgc2NobGFmZW5kc3QsIHNjaGxhZmVzdCwgc2NobGFmZXQsIHNjaGxhZm4sIHNjaGxhZm5kZW4sIHNjaGxhZnN0LCBzY2hsYWZ0LCBzY2hsaWVmLCBzY2hsaWVmZSwgc2NobGllZmVuLCBzY2hsaWVmZW5kLCBzY2hsaWVmZXN0LCBzY2hsaWVmZXQsIHNjaGxpZWZzdCwgc2NobGllZnQsIHNjaGzDpGZ0XS4nLgorRGVidWc6IHNlbmRRdWVyeTogcmVxdWVzdGVkIGxlbW1hID0gJ2xhdWZlbicuCitEZWJ1Zzogc2VuZFF1ZXJ5OiBidWlsZGluZyBVUkw9J2h0dHA6Ly9jMHI0ZnQ6NDA5MTMvR2xlbW1TZXJ2aWNlczItMC4wLjEtU05BUFNIT1QvaW5kZXgvaW5mby9sZW1tYS9sYXVmZW4nLgorRGVidWc6IHNlbmRRdWVyeTogSFRUUCByZXR1cm4gc3RhdHVzID0gT0suCitEZWJ1Zzogc2VuZFF1ZXJ5OiBIVFRQIFJlc3BvbnNlIENvbnRlbnQgPSAneyJoZWFkX25XZnMiOjM4LCJoZWFkX29wdGlvbnMiOiJmbGV4IiwiaGVhZF9xdWVyeSI6ImxhdWZlbiIsImxpc3RvZldmcyI6WyJHZWxhdWZlbiIsIkxhZXVmZSIsIkxhZXVmc3QiLCJMYWV1ZnQiLCJMYXVmZSIsIkxhdWZlbiIsIkxhdWZlbmRzdGVuIiwiTGF1ZmV0IiwiTGF1Zm4iLCJMYXVmdCIsIkxpZWYiLCJMaWVmZSIsIkxpZWZlbiIsIkxpZWZ0IiwiZ2VsYXVmZW4iLCJsYWV1ZnN0IiwibGFldWZ0IiwibGFldWZ0cyIsImxhdWYiLCJsYXVmZSIsImxhdWZlbiIsImxhdWZlbmQiLCJsYXVmZXQiLCJsYXVmbiIsImxhdWZuZGVuIiwibGF1ZnN0IiwibGF1ZnQiLCJsaWVmIiwibGllZmUiLCJsaWVmZW4iLCJsaWVmZW5kIiwibGllZmVuZGVuIiwibGllZmVuZGVyIiwibGllZmVzdCIsImxpZWZldCIsImxpZWZzdCIsImxpZWZ0IiwibMOkdWZ0Il19Jy4KK0RlYnVnOiBzZW5kUXVlcnk6IGxlbVJlc3A9J2hlYWQ6IG5XZnM9MzgsIGxpc3Q9W0dlbGF1ZmVuLCBMYWV1ZmUsIExhZXVmc3QsIExhZXVmdCwgTGF1ZmUsIExhdWZlbiwgTGF1ZmVuZHN0ZW4sIExhdWZldCwgTGF1Zm4sIExhdWZ0LCBMaWVmLCBMaWVmZSwgTGllZmVuLCBMaWVmdCwgZ2VsYXVmZW4sIGxhZXVmc3QsIGxhZXVmdCwgbGFldWZ0cywgbGF1ZiwgbGF1ZmUsIGxhdWZlbiwgbGF1ZmVuZCwgbGF1ZmV0LCBsYXVmbiwgbGF1Zm5kZW4sIGxhdWZzdCwgbGF1ZnQsIGxpZWYsIGxpZWZlLCBsaWVmZW4sIGxpZWZlbmQsIGxpZWZlbmRlbiwgbGllZmVuZGVyLCBsaWVmZXN0LCBsaWVmZXQsIGxpZWZzdCwgbGllZnQsIGzDpHVmdF0uJy4KK0RlYnVnOiBzZW5kUXVlcnk6IHJlcXVlc3RlZCBsZW1tYSA9ICdrYXVmZW4nLgorRGVidWc6IHNlbmRRdWVyeTogYnVpbGRpbmcgVVJMPSdodHRwOi8vYzByNGZ0OjQwOTEzL0dsZW1tU2VydmljZXMyLTAuMC4xLVNOQVBTSE9UL2luZGV4L2luZm8vbGVtbWEva2F1ZmVuJy4KK0RlYnVnOiBzZW5kUXVlcnk6IEhUVFAgcmV0dXJuIHN0YXR1cyA9IE9LLgorRGVidWc6IHNlbmRRdWVyeTogSFRUUCBSZXNwb25zZSBDb250ZW50ID0gJ3siaGVhZF9uV2ZzIjozNywiaGVhZF9vcHRpb25zIjoiZmxleCIsImhlYWRfcXVlcnkiOiJrYXVmZW4iLCJsaXN0b2ZXZnMiOlsiR2VrYXVmdCIsIkthdWZlIiwiS2F1ZmVuIiwiS2F1ZmVuZCIsIkthdWZlbmRlIiwiS2F1ZmVuZGVuIiwiS2F1ZmVuZGVyIiwiS2F1ZmVuZGVzIiwiS2F1ZmV0IiwiS2F1Zm4iLCJLYXVmc3QiLCJLYXVmdCIsIkthdWZ0ZSIsIkthdWZ0ZW4iLCJadWthdWZlIiwiZ2VrYXVmdCIsImthdWYiLCJrYXVmZSIsImthdWZlbiIsImthdWZlbmQiLCJrYXVmZW5kZSIsImthdWZlbmRlbSIsImthdWZlbmRlbiIsImthdWZlbmRlciIsImthdWZlbmRlcyIsImthdWZlc3QiLCJrYXVmZXQiLCJrYXVmbiIsImthdWZzdCIsImthdWZ0Iiwia2F1ZnRlIiwia2F1ZnRlbiIsImthdWZ0ZXN0Iiwia2F1ZnRldCIsImthdWZ0c3QiLCJ6dWthdWZlIiwienVrYXVmdGUiXX0nLgorRGVidWc6IHNlbmRRdWVyeTogbGVtUmVzcD0naGVhZDogbldmcz0zNywgbGlzdD1bR2VrYXVmdCwgS2F1ZmUsIEthdWZlbiwgS2F1ZmVuZCwgS2F1ZmVuZGUsIEthdWZlbmRlbiwgS2F1ZmVuZGVyLCBLYXVmZW5kZXMsIEthdWZldCwgS2F1Zm4sIEthdWZzdCwgS2F1ZnQsIEthdWZ0ZSwgS2F1ZnRlbiwgWnVrYXVmZSwgZ2VrYXVmdCwga2F1Ziwga2F1ZmUsIGthdWZlbiwga2F1ZmVuZCwga2F1ZmVuZGUsIGthdWZlbmRlbSwga2F1ZmVuZGVuLCBrYXVmZW5kZXIsIGthdWZlbmRlcywga2F1ZmVzdCwga2F1ZmV0LCBrYXVmbiwga2F1ZnN0LCBrYXVmdCwga2F1ZnRlLCBrYXVmdGVuLCBrYXVmdGVzdCwga2F1ZnRldCwga2F1ZnRzdCwgenVrYXVmZSwgenVrYXVmdGVdLicuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBvYmplY3Q6IHsgCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J0Bjb250ZXh0JzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdodHRwOi8va29yYXAuaWRzLW1hbm5oZWltLmRlL25zL0tvcmFsUXVlcnkvdjAuMy9jb250ZXh0Lmpzb25sZCcKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nY29sbGVjdGlvbic6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBvYmplY3Q6IHsgCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J0B0eXBlJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdrb3JhbDpkb2NHcm91cCcKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nb3BlcmFuZHMnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogYXJyYXk6IFsKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IG9iamVjdDogeyAKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nQHR5cGUnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2tvcmFsOmRvYycKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0na2V5JzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdhdmFpbGFiaWxpdHknCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J21hdGNoJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdtYXRjaDplcScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0ndHlwZSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAndHlwZTpyZWdleCcKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0ndmFsdWUnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ0NDLUJZLionCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiB9IDogZW5kIG9mIG9iamVjdC4KK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IG9iamVjdDogeyAKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nQHR5cGUnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2tvcmFsOmRvY0dyb3VwJworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdvcGVyYW5kcyc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBhcnJheTogWworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogb2JqZWN0OiB7IAorRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdAdHlwZSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAna29yYWw6ZG9jJworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdrZXknOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2F2YWlsYWJpbGl0eScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nbWF0Y2gnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ21hdGNoOmVxJworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSd0eXBlJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICd0eXBlOnJlZ2V4JworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSd2YWx1ZSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnQ0MtQlkuKicKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IH0gOiBlbmQgb2Ygb2JqZWN0LgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogb2JqZWN0OiB7IAorRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdAdHlwZSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAna29yYWw6ZG9jR3JvdXAnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J29wZXJhbmRzJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGFycmF5OiBbCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBvYmplY3Q6IHsgCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J0B0eXBlJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdrb3JhbDpkb2MnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J2tleSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnYXZhaWxhYmlsaXR5JworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdtYXRjaCc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnbWF0Y2g6ZXEnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J3R5cGUnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ3R5cGU6cmVnZXgnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J3ZhbHVlJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdBQ0EuKicKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IH0gOiBlbmQgb2Ygb2JqZWN0LgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogb2JqZWN0OiB7IAorRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdAdHlwZSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAna29yYWw6ZG9jR3JvdXAnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J29wZXJhbmRzJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGFycmF5OiBbCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBvYmplY3Q6IHsgCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J0B0eXBlJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdrb3JhbDpkb2MnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J2tleSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnYXZhaWxhYmlsaXR5JworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdtYXRjaCc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnbWF0Y2g6ZXEnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J3R5cGUnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ3R5cGU6cmVnZXgnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J3ZhbHVlJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdRQU8tTkMnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiB9IDogZW5kIG9mIG9iamVjdC4KK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IG9iamVjdDogeyAKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nQHR5cGUnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2tvcmFsOmRvYycKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0na2V5JzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdhdmFpbGFiaWxpdHknCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J21hdGNoJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdtYXRjaDplcScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0ndHlwZSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAndHlwZTpyZWdleCcKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0ndmFsdWUnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ1FBTy4qJworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogfSA6IGVuZCBvZiBvYmplY3QuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBdIGVuZCBvZiBhcnJheS4KK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nb3BlcmF0aW9uJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdvcGVyYXRpb246b3InCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiB9IDogZW5kIG9mIG9iamVjdC4KK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IF0gZW5kIG9mIGFycmF5LgorRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdvcGVyYXRpb24nOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ29wZXJhdGlvbjpvcicKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IH0gOiBlbmQgb2Ygb2JqZWN0LgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogXSBlbmQgb2YgYXJyYXkuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J29wZXJhdGlvbic6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnb3BlcmF0aW9uOm9yJworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogfSA6IGVuZCBvZiBvYmplY3QuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBdIGVuZCBvZiBhcnJheS4KK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nb3BlcmF0aW9uJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdvcGVyYXRpb246YW5kJworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdyZXdyaXRlcyc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBhcnJheTogWworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogb2JqZWN0OiB7IAorRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdAdHlwZSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAna29yYWw6cmV3cml0ZScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nb3BlcmF0aW9uJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdvcGVyYXRpb246aW5zZXJ0aW9uJworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdzY29wZSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnYXZhaWxhYmlsaXR5KEZSRUUpJworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdzcmMnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ0t1c3R2YWt0JworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogfSA6IGVuZCBvZiBvYmplY3QuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBdIGVuZCBvZiBhcnJheS4KK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IH0gOiBlbmQgb2Ygb2JqZWN0LgorRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdtYXRjaGVzJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGFycmF5OiBbCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnLi4uJworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogXSBlbmQgb2YgYXJyYXkuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J21ldGEnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogb2JqZWN0OiB7IAorRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdiZW5jaG1hcmsnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJzUuMDgwMTAwNjggcycKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nY29udGV4dCc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBvYmplY3Q6IHsgCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J2xlZnQnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogYXJyYXk6IFsKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICd0b2tlbicKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICc0MCcKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IF0gZW5kIG9mIGFycmF5LgorRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdyaWdodCc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBhcnJheTogWworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ3Rva2VuJworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJzQwJworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogXSBlbmQgb2YgYXJyYXkuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiB9IDogZW5kIG9mIG9iamVjdC4KK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nY291bnQnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJzI1JworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdjdXRPZmYnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ3RydWUnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J2ZpZWxkcyc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBhcnJheTogWworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ0lEJworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ1VJRCcKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICd0ZXh0U2lnbGUnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnY29ycHVzSUQnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnYXV0aG9yJworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ3RpdGxlJworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ3N1YlRpdGxlJworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ3RleHRDbGFzcycKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdwdWJQbGFjZScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdwdWJEYXRlJworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2F2YWlsYWJpbGl0eScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdsYXllckluZm9zJworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2RvY1NpZ2xlJworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2NvcnB1c1NpZ2xlJworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogXSBlbmQgb2YgYXJyYXkuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J2l0ZW1zUGVyUGFnZSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnMjUnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J3NlcmlhbFF1ZXJ5JzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdzcGFuRGlzdGFuY2UoezEyOTogc3Bhbk5leHQoc3Bhbk5leHQodG9rZW5zOnR0L2w6cmVubmVuLCB0b2tlbnM6dHQvbDpzY2hsYWZlbiksIHRva2Vuczp0dC9sOmxhdWZlbil9LCB7MTI5OiB0b2tlbnM6dHQvbDprYXVmZW59LCBbKHdbMDoyXSwgbm90T3JkZXJlZCwgbm90RXhjbHVkZWQpXSknCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J3N0YXJ0SW5kZXgnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJzAnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J3RpbWVvdXQnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJzEwMDAwJworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSd0b3RhbFJlc3VsdHMnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJy0xJworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSd2ZXJzaW9uJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICcwLjU5LjEnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiB9IDogZW5kIG9mIG9iamVjdC4KK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0ncXVlcnknOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogb2JqZWN0OiB7IAorRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdAdHlwZSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAna29yYWw6Z3JvdXAnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J2Rpc3RhbmNlcyc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBhcnJheTogWworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogb2JqZWN0OiB7IAorRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdAdHlwZSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnY29zbWFzOmRpc3RhbmNlJworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdib3VuZGFyeSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBvYmplY3Q6IHsgCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J0B0eXBlJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdrb3JhbDpib3VuZGFyeScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nbWF4JzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICcyJworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdtaW4nOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJzAnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiB9IDogZW5kIG9mIG9iamVjdC4KK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0na2V5JzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICd3JworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogfSA6IGVuZCBvZiBvYmplY3QuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBdIGVuZCBvZiBhcnJheS4KK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0naW5PcmRlcic6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnZmFsc2UnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J29wZXJhbmRzJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGFycmF5OiBbCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBvYmplY3Q6IHsgCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J0B0eXBlJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdrb3JhbDpncm91cCcKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nY2xhc3NPdXQnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJzEyOScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nb3BlcmFuZHMnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogYXJyYXk6IFsKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IG9iamVjdDogeyAKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nQHR5cGUnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2tvcmFsOmdyb3VwJworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdvcGVyYW5kcyc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBhcnJheTogWworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogb2JqZWN0OiB7IAorRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdAdHlwZSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAna29yYWw6dG9rZW4nCitEZWJ1ZzogY2hlY2tQYXRoOiB3cmFwLU9iajogJ3siQHR5cGUiOiJrb3JhbDp0ZXJtIiwiZm91bmRyeSI6InR0Iiwia2V5IjoiR0Y+MiZyZW5uZW4iLCJsYXllciI6ImxlbW1hIiwibWF0Y2giOiJtYXRjaDplcSIsInJld3JpdGVzIjpbeyJAdHlwZSI6ImtvcmFsOnJld3JpdGUiLCJvcGVyYXRpb24iOiJvcGVyYXRpb246aW5qZWN0aW9uIiwic2NvcGUiOiJmb3VuZHJ5Iiwic3JjIjoiS3VzdHZha3QifV19JworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSd3cmFwJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IG9iamVjdDogeyAKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nQHR5cGUnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2tvcmFsOnRlcm0nCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J2ZvdW5kcnknOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ3R0JworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdrZXknOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ0dGPjImcmVubmVuJworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdsYXllcic6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnbGVtbWEnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J21hdGNoJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdtYXRjaDplcScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0ncmV3cml0ZXMnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogYXJyYXk6IFsKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IG9iamVjdDogeyAKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nQHR5cGUnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2tvcmFsOnJld3JpdGUnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J29wZXJhdGlvbic6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnb3BlcmF0aW9uOmluamVjdGlvbicKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nc2NvcGUnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2ZvdW5kcnknCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J3NyYyc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnS3VzdHZha3QnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiB9IDogZW5kIG9mIG9iamVjdC4KK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IF0gZW5kIG9mIGFycmF5LgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogfSA6IGVuZCBvZiBvYmplY3QuCitEZWJ1ZzogcmV3cml0ZU9iak5vZGU6IHJld3JpdGluZyBmb3IgbGVtbWEgJ0dGPjImcmVubmVuJy4KK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGFmdGVyIHJld3JpdGU6IG5vZGU9J3siQHR5cGUiOiJrb3JhbDp0ZXJtIiwiZm91bmRyeSI6InR0Iiwia2V5IjpbXSwibGF5ZXIiOiJvcnRoIiwibWF0Y2giOiJtYXRjaDplcSIsInJld3JpdGVzIjpbeyJAdHlwZSI6ImtvcmFsOnJld3JpdGUiLCJvcGVyYXRpb24iOiJvcGVyYXRpb246aW5qZWN0aW9uIiwic2NvcGUiOiJmb3VuZHJ5Iiwic3JjIjoiS3VzdHZha3QifV0sImRlc2MiOiImR0Y+MiZyZW5uZW4iLCJoaWRlIjoia2V5In0nLgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogfSA6IGVuZCBvZiBvYmplY3QuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBvYmplY3Q6IHsgCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J0B0eXBlJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdrb3JhbDp0b2tlbicKK0RlYnVnOiBjaGVja1BhdGg6IHdyYXAtT2JqOiAneyJAdHlwZSI6ImtvcmFsOnRlcm0iLCJmb3VuZHJ5IjoidHQiLCJrZXkiOiJzY2hsYWZlbiIsImxheWVyIjoibGVtbWEiLCJtYXRjaCI6Im1hdGNoOmVxIiwicmV3cml0ZXMiOlt7IkB0eXBlIjoia29yYWw6cmV3cml0ZSIsIm9wZXJhdGlvbiI6Im9wZXJhdGlvbjppbmplY3Rpb24iLCJzY29wZSI6ImZvdW5kcnkiLCJzcmMiOiJLdXN0dmFrdCJ9XX0nCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J3dyYXAnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogb2JqZWN0OiB7IAorRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdAdHlwZSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAna29yYWw6dGVybScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nZm91bmRyeSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAndHQnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J2tleSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnc2NobGFmZW4nCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J2xheWVyJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdsZW1tYScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nbWF0Y2gnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ21hdGNoOmVxJworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdyZXdyaXRlcyc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBhcnJheTogWworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogb2JqZWN0OiB7IAorRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdAdHlwZSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAna29yYWw6cmV3cml0ZScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nb3BlcmF0aW9uJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdvcGVyYXRpb246aW5qZWN0aW9uJworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdzY29wZSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnZm91bmRyeScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nc3JjJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdLdXN0dmFrdCcKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IH0gOiBlbmQgb2Ygb2JqZWN0LgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogXSBlbmQgb2YgYXJyYXkuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiB9IDogZW5kIG9mIG9iamVjdC4KK0RlYnVnOiByZXdyaXRlT2JqTm9kZTogcmV3cml0aW5nIGZvciBsZW1tYSAnc2NobGFmZW4nLgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogYWZ0ZXIgcmV3cml0ZTogbm9kZT0neyJAdHlwZSI6ImtvcmFsOnRlcm0iLCJmb3VuZHJ5IjoidHQiLCJrZXkiOlsiR2VzY2hsYWZlbiIsIlNjaGxhZWYiLCJTY2hsYWVmZSIsIlNjaGxhZWZzdCIsIlNjaGxhZmUiLCJTY2hsYWZlbiIsIlNjaGxhZmVuZCIsIlNjaGxhZmVuZGUiLCJTY2hsYWZlbmRlbSIsIlNjaGxhZmVuZGVuIiwiU2NobGFmZW5kZXIiLCJTY2hsYWZlbmRlcyIsIlNjaGxhZmV0IiwiU2NobGFmbiIsIlNjaGxhZnN0IiwiU2NobGFmdCIsIlNjaGxpZWYiLCJTY2hsaWVmZSIsIlNjaGxpZWZlbiIsIlNjaGxpZWZlc3QiLCJTY2hsaWVmc3QiLCJTY2hsaWVmdCIsImdlc2NobGFmZW4iLCJzY2hsYWVmc3QiLCJzY2hsYWVmdCIsInNjaGxhZiIsInNjaGxhZmUiLCJzY2hsYWZlbiIsInNjaGxhZmVuZCIsInNjaGxhZmVuZGUiLCJzY2hsYWZlbmRlbSIsInNjaGxhZmVuZGVuIiwic2NobGFmZW5kZXIiLCJzY2hsYWZlbmRlcyIsInNjaGxhZmVuZHN0Iiwic2NobGFmZXN0Iiwic2NobGFmZXQiLCJzY2hsYWZuIiwic2NobGFmbmRlbiIsInNjaGxhZnN0Iiwic2NobGFmdCIsInNjaGxpZWYiLCJzY2hsaWVmZSIsInNjaGxpZWZlbiIsInNjaGxpZWZlbmQiLCJzY2hsaWVmZXN0Iiwic2NobGllZmV0Iiwic2NobGllZnN0Iiwic2NobGllZnQiLCJzY2hsw6RmdCJdLCJsYXllciI6Im9ydGgiLCJtYXRjaCI6Im1hdGNoOmVxIiwicmV3cml0ZXMiOlt7IkB0eXBlIjoia29yYWw6cmV3cml0ZSIsIm9wZXJhdGlvbiI6Im9wZXJhdGlvbjppbmplY3Rpb24iLCJzY29wZSI6ImZvdW5kcnkiLCJzcmMiOiJLdXN0dmFrdCJ9XSwiZGVzYyI6IiZzY2hsYWZlbiIsImhpZGUiOiJrZXkifScuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiB9IDogZW5kIG9mIG9iamVjdC4KK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IG9iamVjdDogeyAKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nQHR5cGUnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2tvcmFsOnRva2VuJworRGVidWc6IGNoZWNrUGF0aDogd3JhcC1PYmo6ICd7IkB0eXBlIjoia29yYWw6dGVybSIsImZvdW5kcnkiOiJ0dCIsImtleSI6ImxhdWZlbiIsImxheWVyIjoibGVtbWEiLCJtYXRjaCI6Im1hdGNoOmVxIiwicmV3cml0ZXMiOlt7IkB0eXBlIjoia29yYWw6cmV3cml0ZSIsIm9wZXJhdGlvbiI6Im9wZXJhdGlvbjppbmplY3Rpb24iLCJzY29wZSI6ImZvdW5kcnkiLCJzcmMiOiJLdXN0dmFrdCJ9XX0nCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J3dyYXAnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogb2JqZWN0OiB7IAorRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdAdHlwZSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAna29yYWw6dGVybScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nZm91bmRyeSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAndHQnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J2tleSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnbGF1ZmVuJworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdsYXllcic6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnbGVtbWEnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J21hdGNoJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdtYXRjaDplcScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0ncmV3cml0ZXMnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogYXJyYXk6IFsKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IG9iamVjdDogeyAKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nQHR5cGUnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2tvcmFsOnJld3JpdGUnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J29wZXJhdGlvbic6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnb3BlcmF0aW9uOmluamVjdGlvbicKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nc2NvcGUnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2ZvdW5kcnknCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J3NyYyc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnS3VzdHZha3QnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiB9IDogZW5kIG9mIG9iamVjdC4KK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IF0gZW5kIG9mIGFycmF5LgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogfSA6IGVuZCBvZiBvYmplY3QuCitEZWJ1ZzogcmV3cml0ZU9iak5vZGU6IHJld3JpdGluZyBmb3IgbGVtbWEgJ2xhdWZlbicuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBhZnRlciByZXdyaXRlOiBub2RlPSd7IkB0eXBlIjoia29yYWw6dGVybSIsImZvdW5kcnkiOiJ0dCIsImtleSI6WyJHZWxhdWZlbiIsIkxhZXVmZSIsIkxhZXVmc3QiLCJMYWV1ZnQiLCJMYXVmZSIsIkxhdWZlbiIsIkxhdWZlbmRzdGVuIiwiTGF1ZmV0IiwiTGF1Zm4iLCJMYXVmdCIsIkxpZWYiLCJMaWVmZSIsIkxpZWZlbiIsIkxpZWZ0IiwiZ2VsYXVmZW4iLCJsYWV1ZnN0IiwibGFldWZ0IiwibGFldWZ0cyIsImxhdWYiLCJsYXVmZSIsImxhdWZlbiIsImxhdWZlbmQiLCJsYXVmZXQiLCJsYXVmbiIsImxhdWZuZGVuIiwibGF1ZnN0IiwibGF1ZnQiLCJsaWVmIiwibGllZmUiLCJsaWVmZW4iLCJsaWVmZW5kIiwibGllZmVuZGVuIiwibGllZmVuZGVyIiwibGllZmVzdCIsImxpZWZldCIsImxpZWZzdCIsImxpZWZ0IiwibMOkdWZ0Il0sImxheWVyIjoib3J0aCIsIm1hdGNoIjoibWF0Y2g6ZXEiLCJyZXdyaXRlcyI6W3siQHR5cGUiOiJrb3JhbDpyZXdyaXRlIiwib3BlcmF0aW9uIjoib3BlcmF0aW9uOmluamVjdGlvbiIsInNjb3BlIjoiZm91bmRyeSIsInNyYyI6Ikt1c3R2YWt0In1dLCJkZXNjIjoiJmxhdWZlbiIsImhpZGUiOiJrZXkifScuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiB9IDogZW5kIG9mIG9iamVjdC4KK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IF0gZW5kIG9mIGFycmF5LgorRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdvcGVyYXRpb24nOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ29wZXJhdGlvbjpzZXF1ZW5jZScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IH0gOiBlbmQgb2Ygb2JqZWN0LgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogXSBlbmQgb2YgYXJyYXkuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J29wZXJhdGlvbic6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnb3BlcmF0aW9uOmNsYXNzJworRGVidWc6dHJhdmVyc2VKc29uVHJlZTogfSA6IGVuZCBvZiBvYmplY3QuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBvYmplY3Q6IHsgCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J0B0eXBlJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdrb3JhbDpncm91cCcKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nY2xhc3NPdXQnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJzEyOScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nb3BlcmFuZHMnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogYXJyYXk6IFsKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IG9iamVjdDogeyAKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nQHR5cGUnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2tvcmFsOnRva2VuJworRGVidWc6IGNoZWNrUGF0aDogd3JhcC1PYmo6ICd7IkB0eXBlIjoia29yYWw6dGVybSIsImZvdW5kcnkiOiJ0dCIsImtleSI6ImthdWZlbiIsImxheWVyIjoibGVtbWEiLCJtYXRjaCI6Im1hdGNoOmVxIiwicmV3cml0ZXMiOlt7IkB0eXBlIjoia29yYWw6cmV3cml0ZSIsIm9wZXJhdGlvbiI6Im9wZXJhdGlvbjppbmplY3Rpb24iLCJzY29wZSI6ImZvdW5kcnkiLCJzcmMiOiJLdXN0dmFrdCJ9XX0nCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J3dyYXAnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogb2JqZWN0OiB7IAorRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdAdHlwZSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAna29yYWw6dGVybScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nZm91bmRyeSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAndHQnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J2tleSc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAna2F1ZmVuJworRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdsYXllcic6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnbGVtbWEnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J21hdGNoJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdtYXRjaDplcScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0ncmV3cml0ZXMnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogYXJyYXk6IFsKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IG9iamVjdDogeyAKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nQHR5cGUnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2tvcmFsOnJld3JpdGUnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J29wZXJhdGlvbic6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnb3BlcmF0aW9uOmluamVjdGlvbicKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nc2NvcGUnOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ2ZvdW5kcnknCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBrZXk9J3NyYyc6CitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBzaW5nbGUgdmFsdWUgZmllbGQgPSAnS3VzdHZha3QnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiB9IDogZW5kIG9mIG9iamVjdC4KK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IF0gZW5kIG9mIGFycmF5LgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogfSA6IGVuZCBvZiBvYmplY3QuCitEZWJ1ZzogcmV3cml0ZU9iak5vZGU6IHJld3JpdGluZyBmb3IgbGVtbWEgJ2thdWZlbicuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBhZnRlciByZXdyaXRlOiBub2RlPSd7IkB0eXBlIjoia29yYWw6dGVybSIsImZvdW5kcnkiOiJ0dCIsImtleSI6WyJHZWthdWZ0IiwiS2F1ZmUiLCJLYXVmZW4iLCJLYXVmZW5kIiwiS2F1ZmVuZGUiLCJLYXVmZW5kZW4iLCJLYXVmZW5kZXIiLCJLYXVmZW5kZXMiLCJLYXVmZXQiLCJLYXVmbiIsIkthdWZzdCIsIkthdWZ0IiwiS2F1ZnRlIiwiS2F1ZnRlbiIsIlp1a2F1ZmUiLCJnZWthdWZ0Iiwia2F1ZiIsImthdWZlIiwia2F1ZmVuIiwia2F1ZmVuZCIsImthdWZlbmRlIiwia2F1ZmVuZGVtIiwia2F1ZmVuZGVuIiwia2F1ZmVuZGVyIiwia2F1ZmVuZGVzIiwia2F1ZmVzdCIsImthdWZldCIsImthdWZuIiwia2F1ZnN0Iiwia2F1ZnQiLCJrYXVmdGUiLCJrYXVmdGVuIiwia2F1ZnRlc3QiLCJrYXVmdGV0Iiwia2F1ZnRzdCIsInp1a2F1ZmUiLCJ6dWthdWZ0ZSJdLCJsYXllciI6Im9ydGgiLCJtYXRjaCI6Im1hdGNoOmVxIiwicmV3cml0ZXMiOlt7IkB0eXBlIjoia29yYWw6cmV3cml0ZSIsIm9wZXJhdGlvbiI6Im9wZXJhdGlvbjppbmplY3Rpb24iLCJzY29wZSI6ImZvdW5kcnkiLCJzcmMiOiJLdXN0dmFrdCJ9XSwiZGVzYyI6IiZrYXVmZW4iLCJoaWRlIjoia2V5In0nLgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogfSA6IGVuZCBvZiBvYmplY3QuCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiBdIGVuZCBvZiBhcnJheS4KK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IGtleT0nb3BlcmF0aW9uJzoKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IHNpbmdsZSB2YWx1ZSBmaWVsZCA9ICdvcGVyYXRpb246Y2xhc3MnCitEZWJ1Zzp0cmF2ZXJzZUpzb25UcmVlOiB9IDogZW5kIG9mIG9iamVjdC4KK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IF0gZW5kIG9mIGFycmF5LgorRGVidWc6dHJhdmVyc2VKc29uVHJlZToga2V5PSdvcGVyYXRpb24nOgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogc2luZ2xlIHZhbHVlIGZpZWxkID0gJ29wZXJhdGlvbjpzZXF1ZW5jZScKK0RlYnVnOnRyYXZlcnNlSnNvblRyZWU6IH0gOiBlbmQgb2Ygb2JqZWN0LgorRGVidWc6dHJhdmVyc2VKc29uVHJlZTogfSA6IGVuZCBvZiBvYmplY3QuCitEZWJ1Zzogc2ltdWxhdGVXb3JkZm9ybVNlcnZpY2VzOiByZWNlaXZpbmcgcmV3cml0dGVuIHF1ZXJ5IGZyb20gV29yZGZvcm1TZXJ2aWNlcy4uLgpkaWZmIC0tZ2l0IGEvUHJvamVjdC1UZXN0cy9SZWFkbWUudHh0IGIvUHJvamVjdC1UZXN0cy9SZWFkbWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYTczN2MKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9qZWN0LVRlc3RzL1JlYWRtZS50eHQKQEAgLTAsMCArMSwyMSBAQAorS29tcGlsYXRpb24gdm9uIFByb2plY3QtVGVzdHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1VwZGF0ZTogMjIuMDQuMjAvRkIKKworUHJvamVrdGU6CisKKzEuIFByb2plY3QtVGVzdHMgPiB0YXJnZXQvVGVzdEdsZW1tU2VydmljZXMuamFyCisyLiBQcm9qZWN0IEdsZW1tQ2xpZW50ID4gdGFyZ2V0IC4uLiBHbGVtbUNsaWVudC5jbGFzcworCitDb21waWxpZXJlbjoKKworIC0gUHJvamVjdCBjbGVhbgorIC0gUHJvamVjdCBidWlsZAorIC0gUHJvamVjdCBQcm9qZWN0LVRlc3RzOiBSdW4gQXMgQnVpbGQgbWl0IEdvYWwgPSBwYWNrYWdlLgorCitFcnpldWd0OgorCisgLSBQcm9qZWt0ICJQcm9qZWN0LVRlc3RzIiA+IHRhcmdldCA+IFRlc3RHbGVtbUNsaWVudC5qYXIuCisgLSBEaWVzZSBWb3JnZWhlbnN3ZWlzZSBrb3BpZXJ0IEdsZW1tQ2xpZW50LmNsYXNzIGluIFByb2plY3QtVGVzdHMuIEVzIHdpcmQga2VpbmUgR2xlbW1DbGllbnQuamFyIGVyemV1Z3QuCisgLSBFcnpldWdlbiB2b24gR2xlbW1DbGllbnQtMC4wLjEtU05BUFNIT1QuamFyOiBQcm9qZWt0ICJHbGVtbUNsaWVudCIgLSBSdW4gQXMgYnVpbGQgbWl0IEdvYWwgPSBwYWNrYWdlLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Byb2plY3QtVGVzdHMvcG9tLnhtbCBiL1Byb2plY3QtVGVzdHMvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWMyNjljCi0tLSAvZGV2L251bGwKKysrIGIvUHJvamVjdC1UZXN0cy9wb20ueG1sCkBAIC0wLDAgKzEsODIgQEAKKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIAorCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgIDxncm91cElkPmRlLmtvcmFwLnNlcnZpY2VzPC9ncm91cElkPgorICA8YXJ0aWZhY3RJZD50ZXN0czwvYXJ0aWZhY3RJZD4KKyAgPHZlcnNpb24+MC4xPC92ZXJzaW9uPgorICA8IS0tICA+cGFja2FnaW5nPndhcjwvcGFja2FnaW5nLS0+CisgIDxuYW1lPkpzb24gVGVzdCBNZXRob2RzPC9uYW1lPgorICAKKyAgPGRlc2NyaXB0aW9uPlRlc3RzIGZvciBKc29uIFBhcnNpbmc8L2Rlc2NyaXB0aW9uPgorICAKKyAgPGRlcGVuZGVuY2llcz4KKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+CisgICAgICA8dmVyc2lvbj4zLjguMTwvdmVyc2lvbj4KKyAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICA8L2RlcGVuZGVuY3k+CisgICA8ZGVwZW5kZW5jeT4KKyAgICA8Z3JvdXBJZD5jb20uZmFzdGVyeG1sLmphY2tzb24uY29yZTwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5qYWNrc29uLWNvcmU8L2FydGlmYWN0SWQ+CisgICAgPHZlcnNpb24+Mi45LjY8L3ZlcnNpb24+CisgICAgPHNjb3BlPmNvbXBpbGU8L3Njb3BlPgorICAgPC9kZXBlbmRlbmN5PgorCTxkZXBlbmRlbmN5PgorCSAgPGdyb3VwSWQ+Y29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmU8L2dyb3VwSWQ+CisJICA8YXJ0aWZhY3RJZD5qYWNrc29uLWFubm90YXRpb25zPC9hcnRpZmFjdElkPgorCSAgPHZlcnNpb24+Mi45LjY8L3ZlcnNpb24+CisJPC9kZXBlbmRlbmN5PgorCTxkZXBlbmRlbmN5PgorCSAgPGdyb3VwSWQ+Y29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmU8L2dyb3VwSWQ+CisJICA8YXJ0aWZhY3RJZD5qYWNrc29uLWRhdGFiaW5kPC9hcnRpZmFjdElkPgorCSAgPHZlcnNpb24+Mi45LjY8L3ZlcnNpb24+CisJICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgorCTwvZGVwZW5kZW5jeT4KKwk8ZGVwZW5kZW5jeT4KKwkJPGdyb3VwSWQ+ZGUua29yYXAuanNvbjwvZ3JvdXBJZD4KKwkJPGFydGlmYWN0SWQ+SnNvblRyYXZlcnNlPC9hcnRpZmFjdElkPgorCQk8dmVyc2lvbj4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisJPC9kZXBlbmRlbmN5PgorCTxkZXBlbmRlbmN5PgorCQk8Z3JvdXBJZD5kZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ8L2dyb3VwSWQ+CisJCTxhcnRpZmFjdElkPkdsZW1tQ2xpZW50PC9hcnRpZmFjdElkPgorCQk8dmVyc2lvbj4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisJPC9kZXBlbmRlbmN5PgorCTxkZXBlbmRlbmN5PgorCQk8Z3JvdXBJZD5kZS5rb3JhcC5zZXJ2aWNlczwvZ3JvdXBJZD4KKwkJPGFydGlmYWN0SWQ+VXRpbHM8L2FydGlmYWN0SWQ+CisJCTx2ZXJzaW9uPjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKwk8L2RlcGVuZGVuY3k+CisJPGRlcGVuZGVuY3k+CisJCTxncm91cElkPmRlLmtvcmFwLnNlcnZpY2VzPC9ncm91cElkPgorCQk8YXJ0aWZhY3RJZD53Zm9ybVNlcnZpY2VKYXI8L2FydGlmYWN0SWQ+CisJCTx2ZXJzaW9uPjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKwk8L2RlcGVuZGVuY3k+CisgIDwvZGVwZW5kZW5jaWVzPgorICAKKyAgPGJ1aWxkPgorICAgIDxzb3VyY2VEaXJlY3Rvcnk+c3JjPC9zb3VyY2VEaXJlY3Rvcnk+CisgICAgPHBsdWdpbnM+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1jb21waWxlci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjMuNy4wPC92ZXJzaW9uPgorICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8c291cmNlPjEuODwvc291cmNlPgorICAgICAgICAgIDx0YXJnZXQ+MS44PC90YXJnZXQ+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvcGx1Z2luPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4td2FyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+My4yLjE8L3ZlcnNpb24+CisgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgIDxmYWlsT25NaXNzaW5nV2ViWG1sPmZhbHNlPC9mYWlsT25NaXNzaW5nV2ViWG1sPgorICAgICAgICAgIDx3YXJTb3VyY2VEaXJlY3Rvcnk+V2ViQ29udGVudDwvd2FyU291cmNlRGlyZWN0b3J5PgorICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICA8L3BsdWdpbj4KKyAgICA8L3BsdWdpbnM+CisgICAgPGZpbmFsTmFtZT5UZXN0R2xlbW1TZXJ2aWNlczwvZmluYWxOYW1lPgorICA8L2J1aWxkPgorICAKKzwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Qcm9qZWN0LVRlc3RzL3F1ZXJ5LmluLnByZXR0eS5qc29uIGIvUHJvamVjdC1UZXN0cy9xdWVyeS5pbi5wcmV0dHkuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTMyMjdjCi0tLSAvZGV2L251bGwKKysrIGIvUHJvamVjdC1UZXN0cy9xdWVyeS5pbi5wcmV0dHkuanNvbgpAQCAtMCwwICsxLDE2MiBAQAoreworICAiQGNvbnRleHQiIDogImh0dHA6Ly9rb3JhcC5pZHMtbWFubmhlaW0uZGUvbnMvS29yYWxRdWVyeS92MC4zL2NvbnRleHQuanNvbmxkIiwKKyAgImNvbGxlY3Rpb24iIDogeworICAgICJAdHlwZSIgOiAia29yYWw6ZG9jR3JvdXAiLAorICAgICJvcGVyYW5kcyIgOiBbIHsKKyAgICAgICJAdHlwZSIgOiAia29yYWw6ZG9jIiwKKyAgICAgICJrZXkiIDogImF2YWlsYWJpbGl0eSIsCisgICAgICAibWF0Y2giIDogIm1hdGNoOmVxIiwKKyAgICAgICJ0eXBlIiA6ICJ0eXBlOnJlZ2V4IiwKKyAgICAgICJ2YWx1ZSIgOiAiQ0MtQlkuKiIKKyAgICB9LCB7CisgICAgICAiQHR5cGUiIDogImtvcmFsOmRvY0dyb3VwIiwKKyAgICAgICJvcGVyYW5kcyIgOiBbIHsKKyAgICAgICAgIkB0eXBlIiA6ICJrb3JhbDpkb2MiLAorICAgICAgICAia2V5IiA6ICJhdmFpbGFiaWxpdHkiLAorICAgICAgICAibWF0Y2giIDogIm1hdGNoOmVxIiwKKyAgICAgICAgInR5cGUiIDogInR5cGU6cmVnZXgiLAorICAgICAgICAidmFsdWUiIDogIkNDLUJZLioiCisgICAgICB9LCB7CisgICAgICAgICJAdHlwZSIgOiAia29yYWw6ZG9jR3JvdXAiLAorICAgICAgICAib3BlcmFuZHMiIDogWyB7CisgICAgICAgICAgIkB0eXBlIiA6ICJrb3JhbDpkb2MiLAorICAgICAgICAgICJrZXkiIDogImF2YWlsYWJpbGl0eSIsCisgICAgICAgICAgIm1hdGNoIiA6ICJtYXRjaDplcSIsCisgICAgICAgICAgInR5cGUiIDogInR5cGU6cmVnZXgiLAorICAgICAgICAgICJ2YWx1ZSIgOiAiQUNBLioiCisgICAgICAgIH0sIHsKKyAgICAgICAgICAiQHR5cGUiIDogImtvcmFsOmRvY0dyb3VwIiwKKyAgICAgICAgICAib3BlcmFuZHMiIDogWyB7CisgICAgICAgICAgICAiQHR5cGUiIDogImtvcmFsOmRvYyIsCisgICAgICAgICAgICAia2V5IiA6ICJhdmFpbGFiaWxpdHkiLAorICAgICAgICAgICAgIm1hdGNoIiA6ICJtYXRjaDplcSIsCisgICAgICAgICAgICAidHlwZSIgOiAidHlwZTpyZWdleCIsCisgICAgICAgICAgICAidmFsdWUiIDogIlFBTy1OQyIKKyAgICAgICAgICB9LCB7CisgICAgICAgICAgICAiQHR5cGUiIDogImtvcmFsOmRvYyIsCisgICAgICAgICAgICAia2V5IiA6ICJhdmFpbGFiaWxpdHkiLAorICAgICAgICAgICAgIm1hdGNoIiA6ICJtYXRjaDplcSIsCisgICAgICAgICAgICAidHlwZSIgOiAidHlwZTpyZWdleCIsCisgICAgICAgICAgICAidmFsdWUiIDogIlFBTy4qIgorICAgICAgICAgIH0gXSwKKyAgICAgICAgICAib3BlcmF0aW9uIiA6ICJvcGVyYXRpb246b3IiCisgICAgICAgIH0gXSwKKyAgICAgICAgIm9wZXJhdGlvbiIgOiAib3BlcmF0aW9uOm9yIgorICAgICAgfSBdLAorICAgICAgIm9wZXJhdGlvbiIgOiAib3BlcmF0aW9uOm9yIgorICAgIH0gXSwKKyAgICAib3BlcmF0aW9uIiA6ICJvcGVyYXRpb246YW5kIiwKKyAgICAicmV3cml0ZXMiIDogWyB7CisgICAgICAiQHR5cGUiIDogImtvcmFsOnJld3JpdGUiLAorICAgICAgIm9wZXJhdGlvbiIgOiAib3BlcmF0aW9uOmluc2VydGlvbiIsCisgICAgICAic2NvcGUiIDogImF2YWlsYWJpbGl0eShGUkVFKSIsCisgICAgICAic3JjIiA6ICJLdXN0dmFrdCIKKyAgICB9IF0KKyAgfSwKKyAgIm1hdGNoZXMiIDogWyAiLi4uIiBdLAorICAibWV0YSIgOiB7CisgICAgImJlbmNobWFyayIgOiAiNS4wODAxMDA2OCBzIiwKKyAgICAiY29udGV4dCIgOiB7CisgICAgICAibGVmdCIgOiBbICJ0b2tlbiIsIDQwIF0sCisgICAgICAicmlnaHQiIDogWyAidG9rZW4iLCA0MCBdCisgICAgfSwKKyAgICAiY291bnQiIDogMjUsCisgICAgImN1dE9mZiIgOiB0cnVlLAorICAgICJmaWVsZHMiIDogWyAiSUQiLCAiVUlEIiwgInRleHRTaWdsZSIsICJjb3JwdXNJRCIsICJhdXRob3IiLCAidGl0bGUiLCAic3ViVGl0bGUiLCAidGV4dENsYXNzIiwgInB1YlBsYWNlIiwgInB1YkRhdGUiLCAiYXZhaWxhYmlsaXR5IiwgImxheWVySW5mb3MiLCAiZG9jU2lnbGUiLCAiY29ycHVzU2lnbGUiIF0sCisgICAgIml0ZW1zUGVyUGFnZSIgOiAyNSwKKyAgICAic2VyaWFsUXVlcnkiIDogInNwYW5EaXN0YW5jZSh7MTI5OiBzcGFuTmV4dChzcGFuTmV4dCh0b2tlbnM6dHQvbDpyZW5uZW4sIHRva2Vuczp0dC9sOnNjaGxhZmVuKSwgdG9rZW5zOnR0L2w6bGF1ZmVuKX0sIHsxMjk6IHRva2Vuczp0dC9sOmthdWZlbn0sIFsod1swOjJdLCBub3RPcmRlcmVkLCBub3RFeGNsdWRlZCldKSIsCisgICAgInN0YXJ0SW5kZXgiIDogMCwKKyAgICAidGltZW91dCIgOiAxMDAwMCwKKyAgICAidG90YWxSZXN1bHRzIiA6IC0xLAorICAgICJ2ZXJzaW9uIiA6ICIwLjU5LjEiCisgIH0sCisgICJxdWVyeSIgOiB7CisgICAgIkB0eXBlIiA6ICJrb3JhbDpncm91cCIsCisgICAgImRpc3RhbmNlcyIgOiBbIHsKKyAgICAgICJAdHlwZSIgOiAiY29zbWFzOmRpc3RhbmNlIiwKKyAgICAgICJib3VuZGFyeSIgOiB7CisgICAgICAgICJAdHlwZSIgOiAia29yYWw6Ym91bmRhcnkiLAorICAgICAgICAibWF4IiA6IDIsCisgICAgICAgICJtaW4iIDogMAorICAgICAgfSwKKyAgICAgICJrZXkiIDogInciCisgICAgfSBdLAorICAgICJpbk9yZGVyIiA6IGZhbHNlLAorICAgICJvcGVyYW5kcyIgOiBbIHsKKyAgICAgICJAdHlwZSIgOiAia29yYWw6Z3JvdXAiLAorICAgICAgImNsYXNzT3V0IiA6IDEyOSwKKyAgICAgICJvcGVyYW5kcyIgOiBbIHsKKyAgICAgICAgIkB0eXBlIiA6ICJrb3JhbDpncm91cCIsCisgICAgICAgICJvcGVyYW5kcyIgOiBbIHsKKyAgICAgICAgICAiQHR5cGUiIDogImtvcmFsOnRva2VuIiwKKyAgICAgICAgICAid3JhcCIgOiB7CisgICAgICAgICAgICAiQHR5cGUiIDogImtvcmFsOnRlcm0iLAorICAgICAgICAgICAgImZvdW5kcnkiIDogInR0IiwKKyAgICAgICAgICAgICJrZXkiIDogIkdGPjImcmVubmVuIiwKKyAgICAgICAgICAgICJsYXllciIgOiAibGVtbWEiLAorICAgICAgICAgICAgIm1hdGNoIiA6ICJtYXRjaDplcSIsCisgICAgICAgICAgICAicmV3cml0ZXMiIDogWyB7CisgICAgICAgICAgICAgICJAdHlwZSIgOiAia29yYWw6cmV3cml0ZSIsCisgICAgICAgICAgICAgICJvcGVyYXRpb24iIDogIm9wZXJhdGlvbjppbmplY3Rpb24iLAorICAgICAgICAgICAgICAic2NvcGUiIDogImZvdW5kcnkiLAorICAgICAgICAgICAgICAic3JjIiA6ICJLdXN0dmFrdCIKKyAgICAgICAgICAgIH0gXQorICAgICAgICAgIH0KKyAgICAgICAgfSwgeworICAgICAgICAgICJAdHlwZSIgOiAia29yYWw6dG9rZW4iLAorICAgICAgICAgICJ3cmFwIiA6IHsKKyAgICAgICAgICAgICJAdHlwZSIgOiAia29yYWw6dGVybSIsCisgICAgICAgICAgICAiZm91bmRyeSIgOiAidHQiLAorICAgICAgICAgICAgImtleSIgOiAic2NobGFmZW4iLAorICAgICAgICAgICAgImxheWVyIiA6ICJsZW1tYSIsCisgICAgICAgICAgICAibWF0Y2giIDogIm1hdGNoOmVxIiwKKyAgICAgICAgICAgICJyZXdyaXRlcyIgOiBbIHsKKyAgICAgICAgICAgICAgIkB0eXBlIiA6ICJrb3JhbDpyZXdyaXRlIiwKKyAgICAgICAgICAgICAgIm9wZXJhdGlvbiIgOiAib3BlcmF0aW9uOmluamVjdGlvbiIsCisgICAgICAgICAgICAgICJzY29wZSIgOiAiZm91bmRyeSIsCisgICAgICAgICAgICAgICJzcmMiIDogIkt1c3R2YWt0IgorICAgICAgICAgICAgfSBdCisgICAgICAgICAgfQorICAgICAgICB9LCB7CisgICAgICAgICAgIkB0eXBlIiA6ICJrb3JhbDp0b2tlbiIsCisgICAgICAgICAgIndyYXAiIDogeworICAgICAgICAgICAgIkB0eXBlIiA6ICJrb3JhbDp0ZXJtIiwKKyAgICAgICAgICAgICJmb3VuZHJ5IiA6ICJ0dCIsCisgICAgICAgICAgICAia2V5IiA6ICJsYXVmZW4iLAorICAgICAgICAgICAgImxheWVyIiA6ICJsZW1tYSIsCisgICAgICAgICAgICAibWF0Y2giIDogIm1hdGNoOmVxIiwKKyAgICAgICAgICAgICJyZXdyaXRlcyIgOiBbIHsKKyAgICAgICAgICAgICAgIkB0eXBlIiA6ICJrb3JhbDpyZXdyaXRlIiwKKyAgICAgICAgICAgICAgIm9wZXJhdGlvbiIgOiAib3BlcmF0aW9uOmluamVjdGlvbiIsCisgICAgICAgICAgICAgICJzY29wZSIgOiAiZm91bmRyeSIsCisgICAgICAgICAgICAgICJzcmMiIDogIkt1c3R2YWt0IgorICAgICAgICAgICAgfSBdCisgICAgICAgICAgfQorICAgICAgICB9IF0sCisgICAgICAgICJvcGVyYXRpb24iIDogIm9wZXJhdGlvbjpzZXF1ZW5jZSIKKyAgICAgIH0gXSwKKyAgICAgICJvcGVyYXRpb24iIDogIm9wZXJhdGlvbjpjbGFzcyIKKyAgICB9LCB7CisgICAgICAiQHR5cGUiIDogImtvcmFsOmdyb3VwIiwKKyAgICAgICJjbGFzc091dCIgOiAxMjksCisgICAgICAib3BlcmFuZHMiIDogWyB7CisgICAgICAgICJAdHlwZSIgOiAia29yYWw6dG9rZW4iLAorICAgICAgICAid3JhcCIgOiB7CisgICAgICAgICAgIkB0eXBlIiA6ICJrb3JhbDp0ZXJtIiwKKyAgICAgICAgICAiZm91bmRyeSIgOiAidHQiLAorICAgICAgICAgICJrZXkiIDogImthdWZlbiIsCisgICAgICAgICAgImxheWVyIiA6ICJsZW1tYSIsCisgICAgICAgICAgIm1hdGNoIiA6ICJtYXRjaDplcSIsCisgICAgICAgICAgInJld3JpdGVzIiA6IFsgeworICAgICAgICAgICAgIkB0eXBlIiA6ICJrb3JhbDpyZXdyaXRlIiwKKyAgICAgICAgICAgICJvcGVyYXRpb24iIDogIm9wZXJhdGlvbjppbmplY3Rpb24iLAorICAgICAgICAgICAgInNjb3BlIiA6ICJmb3VuZHJ5IiwKKyAgICAgICAgICAgICJzcmMiIDogIkt1c3R2YWt0IgorICAgICAgICAgIH0gXQorICAgICAgICB9CisgICAgICB9IF0sCisgICAgICAib3BlcmF0aW9uIiA6ICJvcGVyYXRpb246Y2xhc3MiCisgICAgfSBdLAorICAgICJvcGVyYXRpb24iIDogIm9wZXJhdGlvbjpzZXF1ZW5jZSIKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Byb2plY3QtVGVzdHMvcXVlcnkuanNvbiBiL1Byb2plY3QtVGVzdHMvcXVlcnkuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWExYzM1Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvamVjdC1UZXN0cy9xdWVyeS5qc29uCkBAIC0wLDAgKzEsMjIwIEBACit7CisgICJAY29udGV4dCI6ICJodHRwOi8va29yYXAuaWRzLW1hbm5oZWltLmRlL25zL0tvcmFsUXVlcnkvdjAuMy9jb250ZXh0Lmpzb25sZCIsCisgICJjb2xsZWN0aW9uIjogeworICAgICJAdHlwZSI6ICJrb3JhbDpkb2NHcm91cCIsCisgICAgIm9wZXJhbmRzIjogWworICAgICAgeworICAgICAgICAiQHR5cGUiOiAia29yYWw6ZG9jIiwKKyAgICAgICAgImtleSI6ICJhdmFpbGFiaWxpdHkiLAorICAgICAgICAibWF0Y2giOiAibWF0Y2g6ZXEiLAorICAgICAgICAidHlwZSI6ICJ0eXBlOnJlZ2V4IiwKKyAgICAgICAgInZhbHVlIjogIkNDLUJZLioiCisgICAgICB9LAorICAgICAgeworICAgICAgICAiQHR5cGUiOiAia29yYWw6ZG9jR3JvdXAiLAorICAgICAgICAib3BlcmFuZHMiOiBbCisgICAgICAgICAgeworICAgICAgICAgICAgIkB0eXBlIjogImtvcmFsOmRvYyIsCisgICAgICAgICAgICAia2V5IjogImF2YWlsYWJpbGl0eSIsCisgICAgICAgICAgICAibWF0Y2giOiAibWF0Y2g6ZXEiLAorICAgICAgICAgICAgInR5cGUiOiAidHlwZTpyZWdleCIsCisgICAgICAgICAgICAidmFsdWUiOiAiQ0MtQlkuKiIKKyAgICAgICAgICB9LAorICAgICAgICAgIHsKKyAgICAgICAgICAgICJAdHlwZSI6ICJrb3JhbDpkb2NHcm91cCIsCisgICAgICAgICAgICAib3BlcmFuZHMiOiBbCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiQHR5cGUiOiAia29yYWw6ZG9jIiwKKyAgICAgICAgICAgICAgICAia2V5IjogImF2YWlsYWJpbGl0eSIsCisgICAgICAgICAgICAgICAgIm1hdGNoIjogIm1hdGNoOmVxIiwKKyAgICAgICAgICAgICAgICAidHlwZSI6ICJ0eXBlOnJlZ2V4IiwKKyAgICAgICAgICAgICAgICAidmFsdWUiOiAiQUNBLioiCisgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiQHR5cGUiOiAia29yYWw6ZG9jR3JvdXAiLAorICAgICAgICAgICAgICAgICJvcGVyYW5kcyI6IFsKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIkB0eXBlIjogImtvcmFsOmRvYyIsCisgICAgICAgICAgICAgICAgICAgICJrZXkiOiAiYXZhaWxhYmlsaXR5IiwKKyAgICAgICAgICAgICAgICAgICAgIm1hdGNoIjogIm1hdGNoOmVxIiwKKyAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAidHlwZTpyZWdleCIsCisgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICJRQU8tTkMiCisgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAia29yYWw6ZG9jIiwKKyAgICAgICAgICAgICAgICAgICAgImtleSI6ICJhdmFpbGFiaWxpdHkiLAorICAgICAgICAgICAgICAgICAgICAibWF0Y2giOiAibWF0Y2g6ZXEiLAorICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJ0eXBlOnJlZ2V4IiwKKyAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogIlFBTy4qIgorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgIm9wZXJhdGlvbiI6ICJvcGVyYXRpb246b3IiCisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAib3BlcmF0aW9uIjogIm9wZXJhdGlvbjpvciIKKyAgICAgICAgICB9CisgICAgICAgIF0sCisgICAgICAgICJvcGVyYXRpb24iOiAib3BlcmF0aW9uOm9yIgorICAgICAgfQorICAgIF0sCisgICAgIm9wZXJhdGlvbiI6ICJvcGVyYXRpb246YW5kIiwKKyAgICAicmV3cml0ZXMiOiBbCisgICAgICB7CisgICAgICAgICJAdHlwZSI6ICJrb3JhbDpyZXdyaXRlIiwKKyAgICAgICAgIm9wZXJhdGlvbiI6ICJvcGVyYXRpb246aW5zZXJ0aW9uIiwKKyAgICAgICAgInNjb3BlIjogImF2YWlsYWJpbGl0eShGUkVFKSIsCisgICAgICAgICJzcmMiOiAiS3VzdHZha3QiCisgICAgICB9CisgICAgXQorICB9LAorICAibWF0Y2hlcyI6IFsKKyAgICAiLi4uIgorICBdLAorICAibWV0YSI6IHsKKyAgICAiYmVuY2htYXJrIjogIjUuMDgwMTAwNjggcyIsCisgICAgImNvbnRleHQiOiB7CisgICAgICAibGVmdCI6IFsKKyAgICAgICAgInRva2VuIiwKKyAgICAgICAgNDAKKyAgICAgIF0sCisgICAgICAicmlnaHQiOiBbCisgICAgICAgICJ0b2tlbiIsCisgICAgICAgIDQwCisgICAgICBdCisgICAgfSwKKyAgICAiY291bnQiOiAyNSwKKyAgICAiY3V0T2ZmIjogdHJ1ZSwKKyAgICAiZmllbGRzIjogWworICAgICAgIklEIiwKKyAgICAgICJVSUQiLAorICAgICAgInRleHRTaWdsZSIsCisgICAgICAiY29ycHVzSUQiLAorICAgICAgImF1dGhvciIsCisgICAgICAidGl0bGUiLAorICAgICAgInN1YlRpdGxlIiwKKyAgICAgICJ0ZXh0Q2xhc3MiLAorICAgICAgInB1YlBsYWNlIiwKKyAgICAgICJwdWJEYXRlIiwKKyAgICAgICJhdmFpbGFiaWxpdHkiLAorICAgICAgImxheWVySW5mb3MiLAorICAgICAgImRvY1NpZ2xlIiwKKyAgICAgICJjb3JwdXNTaWdsZSIKKyAgICBdLAorICAgICJpdGVtc1BlclBhZ2UiOiAyNSwKKyAgICAic2VyaWFsUXVlcnkiOiAic3BhbkRpc3RhbmNlKHsxMjk6IHNwYW5OZXh0KHNwYW5OZXh0KHRva2Vuczp0dC9sOnJlbm5lbiwgdG9rZW5zOnR0L2w6c2NobGFmZW4pLCB0b2tlbnM6dHQvbDpsYXVmZW4pfSwgezEyOTogdG9rZW5zOnR0L2w6a2F1ZmVufSwgWyh3WzA6Ml0sIG5vdE9yZGVyZWQsIG5vdEV4Y2x1ZGVkKV0pIiwKKyAgICAic3RhcnRJbmRleCI6IDAsCisgICAgInRpbWVvdXQiOiAxMDAwMCwKKyAgICAidG90YWxSZXN1bHRzIjogLTEsCisgICAgInZlcnNpb24iOiAiMC41OS4xIgorICB9LAorICAicXVlcnkiOiB7CisgICAgIkB0eXBlIjogImtvcmFsOmdyb3VwIiwKKyAgICAiZGlzdGFuY2VzIjogWworICAgICAgeworICAgICAgICAiQHR5cGUiOiAiY29zbWFzOmRpc3RhbmNlIiwKKyAgICAgICAgImJvdW5kYXJ5IjogeworICAgICAgICAgICJAdHlwZSI6ICJrb3JhbDpib3VuZGFyeSIsCisgICAgICAgICAgIm1heCI6IDIsCisgICAgICAgICAgIm1pbiI6IDAKKyAgICAgICAgfSwKKyAgICAgICAgImtleSI6ICJ3IgorICAgICAgfQorICAgIF0sCisgICAgImluT3JkZXIiOiBmYWxzZSwKKyAgICAib3BlcmFuZHMiOiBbCisgICAgICB7CisgICAgICAgICJAdHlwZSI6ICJrb3JhbDpncm91cCIsCisgICAgICAgICJjbGFzc091dCI6IDEyOSwKKyAgICAgICAgIm9wZXJhbmRzIjogWworICAgICAgICAgIHsKKyAgICAgICAgICAgICJAdHlwZSI6ICJrb3JhbDpncm91cCIsCisgICAgICAgICAgICAib3BlcmFuZHMiOiBbCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiQHR5cGUiOiAia29yYWw6dG9rZW4iLAorICAgICAgICAgICAgICAgICJ3cmFwIjogeworICAgICAgICAgICAgICAgICAgIkB0eXBlIjogImtvcmFsOnRlcm0iLAorICAgICAgICAgICAgICAgICAgImZvdW5kcnkiOiAidHQiLAorICAgICAgICAgICAgICAgICAgImtleSI6ICJHRj4yJnJlbm5lbiIsCisgICAgICAgICAgICAgICAgICAibGF5ZXIiOiAibGVtbWEiLAorICAgICAgICAgICAgICAgICAgIm1hdGNoIjogIm1hdGNoOmVxIiwKKyAgICAgICAgICAgICAgICAgICJyZXdyaXRlcyI6IFsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJrb3JhbDpyZXdyaXRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAib3BlcmF0aW9uIjogIm9wZXJhdGlvbjppbmplY3Rpb24iLAorICAgICAgICAgICAgICAgICAgICAgICJzY29wZSI6ICJmb3VuZHJ5IiwKKyAgICAgICAgICAgICAgICAgICAgICAic3JjIjogIkt1c3R2YWt0IgorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIkB0eXBlIjogImtvcmFsOnRva2VuIiwKKyAgICAgICAgICAgICAgICAid3JhcCI6IHsKKyAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJrb3JhbDp0ZXJtIiwKKyAgICAgICAgICAgICAgICAgICJmb3VuZHJ5IjogInR0IiwKKyAgICAgICAgICAgICAgICAgICJrZXkiOiAic2NobGFmZW4iLAorICAgICAgICAgICAgICAgICAgImxheWVyIjogImxlbW1hIiwKKyAgICAgICAgICAgICAgICAgICJtYXRjaCI6ICJtYXRjaDplcSIsCisgICAgICAgICAgICAgICAgICAicmV3cml0ZXMiOiBbCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAia29yYWw6cmV3cml0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhdGlvbiI6ICJvcGVyYXRpb246aW5qZWN0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiOiAiZm91bmRyeSIsCisgICAgICAgICAgICAgICAgICAgICAgInNyYyI6ICJLdXN0dmFrdCIKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJrb3JhbDp0b2tlbiIsCisgICAgICAgICAgICAgICAgIndyYXAiOiB7CisgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAia29yYWw6dGVybSIsCisgICAgICAgICAgICAgICAgICAiZm91bmRyeSI6ICJ0dCIsCisgICAgICAgICAgICAgICAgICAia2V5IjogImxhdWZlbiIsCisgICAgICAgICAgICAgICAgICAibGF5ZXIiOiAibGVtbWEiLAorICAgICAgICAgICAgICAgICAgIm1hdGNoIjogIm1hdGNoOmVxIiwKKyAgICAgICAgICAgICAgICAgICJyZXdyaXRlcyI6IFsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJrb3JhbDpyZXdyaXRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAib3BlcmF0aW9uIjogIm9wZXJhdGlvbjppbmplY3Rpb24iLAorICAgICAgICAgICAgICAgICAgICAgICJzY29wZSI6ICJmb3VuZHJ5IiwKKyAgICAgICAgICAgICAgICAgICAgICAic3JjIjogIkt1c3R2YWt0IgorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgIm9wZXJhdGlvbiI6ICJvcGVyYXRpb246c2VxdWVuY2UiCisgICAgICAgICAgfQorICAgICAgICBdLAorICAgICAgICAib3BlcmF0aW9uIjogIm9wZXJhdGlvbjpjbGFzcyIKKyAgICAgIH0sCisgICAgICB7CisgICAgICAgICJAdHlwZSI6ICJrb3JhbDpncm91cCIsCisgICAgICAgICJjbGFzc091dCI6IDEyOSwKKyAgICAgICAgIm9wZXJhbmRzIjogWworICAgICAgICAgIHsKKyAgICAgICAgICAgICJAdHlwZSI6ICJrb3JhbDp0b2tlbiIsCisgICAgICAgICAgICAid3JhcCI6IHsKKyAgICAgICAgICAgICAgIkB0eXBlIjogImtvcmFsOnRlcm0iLAorICAgICAgICAgICAgICAiZm91bmRyeSI6ICJ0dCIsCisgICAgICAgICAgICAgICJrZXkiOiAia2F1ZmVuIiwKKyAgICAgICAgICAgICAgImxheWVyIjogImxlbW1hIiwKKyAgICAgICAgICAgICAgIm1hdGNoIjogIm1hdGNoOmVxIiwKKyAgICAgICAgICAgICAgInJld3JpdGVzIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJrb3JhbDpyZXdyaXRlIiwKKyAgICAgICAgICAgICAgICAgICJvcGVyYXRpb24iOiAib3BlcmF0aW9uOmluamVjdGlvbiIsCisgICAgICAgICAgICAgICAgICAic2NvcGUiOiAiZm91bmRyeSIsCisgICAgICAgICAgICAgICAgICAic3JjIjogIkt1c3R2YWt0IgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgXSwKKyAgICAgICAgIm9wZXJhdGlvbiI6ICJvcGVyYXRpb246Y2xhc3MiCisgICAgICB9CisgICAgXSwKKyAgICAib3BlcmF0aW9uIjogIm9wZXJhdGlvbjpzZXF1ZW5jZSIKKyAgfQorfQpkaWZmIC0tZ2l0IGEvUHJvamVjdC1UZXN0cy9xdWVyeS5vdXQucHJldHR5Lmpzb24gYi9Qcm9qZWN0LVRlc3RzL3F1ZXJ5Lm91dC5wcmV0dHkuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTMyMjdjCi0tLSAvZGV2L251bGwKKysrIGIvUHJvamVjdC1UZXN0cy9xdWVyeS5vdXQucHJldHR5Lmpzb24KQEAgLTAsMCArMSwxNjIgQEAKK3sKKyAgIkBjb250ZXh0IiA6ICJodHRwOi8va29yYXAuaWRzLW1hbm5oZWltLmRlL25zL0tvcmFsUXVlcnkvdjAuMy9jb250ZXh0Lmpzb25sZCIsCisgICJjb2xsZWN0aW9uIiA6IHsKKyAgICAiQHR5cGUiIDogImtvcmFsOmRvY0dyb3VwIiwKKyAgICAib3BlcmFuZHMiIDogWyB7CisgICAgICAiQHR5cGUiIDogImtvcmFsOmRvYyIsCisgICAgICAia2V5IiA6ICJhdmFpbGFiaWxpdHkiLAorICAgICAgIm1hdGNoIiA6ICJtYXRjaDplcSIsCisgICAgICAidHlwZSIgOiAidHlwZTpyZWdleCIsCisgICAgICAidmFsdWUiIDogIkNDLUJZLioiCisgICAgfSwgeworICAgICAgIkB0eXBlIiA6ICJrb3JhbDpkb2NHcm91cCIsCisgICAgICAib3BlcmFuZHMiIDogWyB7CisgICAgICAgICJAdHlwZSIgOiAia29yYWw6ZG9jIiwKKyAgICAgICAgImtleSIgOiAiYXZhaWxhYmlsaXR5IiwKKyAgICAgICAgIm1hdGNoIiA6ICJtYXRjaDplcSIsCisgICAgICAgICJ0eXBlIiA6ICJ0eXBlOnJlZ2V4IiwKKyAgICAgICAgInZhbHVlIiA6ICJDQy1CWS4qIgorICAgICAgfSwgeworICAgICAgICAiQHR5cGUiIDogImtvcmFsOmRvY0dyb3VwIiwKKyAgICAgICAgIm9wZXJhbmRzIiA6IFsgeworICAgICAgICAgICJAdHlwZSIgOiAia29yYWw6ZG9jIiwKKyAgICAgICAgICAia2V5IiA6ICJhdmFpbGFiaWxpdHkiLAorICAgICAgICAgICJtYXRjaCIgOiAibWF0Y2g6ZXEiLAorICAgICAgICAgICJ0eXBlIiA6ICJ0eXBlOnJlZ2V4IiwKKyAgICAgICAgICAidmFsdWUiIDogIkFDQS4qIgorICAgICAgICB9LCB7CisgICAgICAgICAgIkB0eXBlIiA6ICJrb3JhbDpkb2NHcm91cCIsCisgICAgICAgICAgIm9wZXJhbmRzIiA6IFsgeworICAgICAgICAgICAgIkB0eXBlIiA6ICJrb3JhbDpkb2MiLAorICAgICAgICAgICAgImtleSIgOiAiYXZhaWxhYmlsaXR5IiwKKyAgICAgICAgICAgICJtYXRjaCIgOiAibWF0Y2g6ZXEiLAorICAgICAgICAgICAgInR5cGUiIDogInR5cGU6cmVnZXgiLAorICAgICAgICAgICAgInZhbHVlIiA6ICJRQU8tTkMiCisgICAgICAgICAgfSwgeworICAgICAgICAgICAgIkB0eXBlIiA6ICJrb3JhbDpkb2MiLAorICAgICAgICAgICAgImtleSIgOiAiYXZhaWxhYmlsaXR5IiwKKyAgICAgICAgICAgICJtYXRjaCIgOiAibWF0Y2g6ZXEiLAorICAgICAgICAgICAgInR5cGUiIDogInR5cGU6cmVnZXgiLAorICAgICAgICAgICAgInZhbHVlIiA6ICJRQU8uKiIKKyAgICAgICAgICB9IF0sCisgICAgICAgICAgIm9wZXJhdGlvbiIgOiAib3BlcmF0aW9uOm9yIgorICAgICAgICB9IF0sCisgICAgICAgICJvcGVyYXRpb24iIDogIm9wZXJhdGlvbjpvciIKKyAgICAgIH0gXSwKKyAgICAgICJvcGVyYXRpb24iIDogIm9wZXJhdGlvbjpvciIKKyAgICB9IF0sCisgICAgIm9wZXJhdGlvbiIgOiAib3BlcmF0aW9uOmFuZCIsCisgICAgInJld3JpdGVzIiA6IFsgeworICAgICAgIkB0eXBlIiA6ICJrb3JhbDpyZXdyaXRlIiwKKyAgICAgICJvcGVyYXRpb24iIDogIm9wZXJhdGlvbjppbnNlcnRpb24iLAorICAgICAgInNjb3BlIiA6ICJhdmFpbGFiaWxpdHkoRlJFRSkiLAorICAgICAgInNyYyIgOiAiS3VzdHZha3QiCisgICAgfSBdCisgIH0sCisgICJtYXRjaGVzIiA6IFsgIi4uLiIgXSwKKyAgIm1ldGEiIDogeworICAgICJiZW5jaG1hcmsiIDogIjUuMDgwMTAwNjggcyIsCisgICAgImNvbnRleHQiIDogeworICAgICAgImxlZnQiIDogWyAidG9rZW4iLCA0MCBdLAorICAgICAgInJpZ2h0IiA6IFsgInRva2VuIiwgNDAgXQorICAgIH0sCisgICAgImNvdW50IiA6IDI1LAorICAgICJjdXRPZmYiIDogdHJ1ZSwKKyAgICAiZmllbGRzIiA6IFsgIklEIiwgIlVJRCIsICJ0ZXh0U2lnbGUiLCAiY29ycHVzSUQiLCAiYXV0aG9yIiwgInRpdGxlIiwgInN1YlRpdGxlIiwgInRleHRDbGFzcyIsICJwdWJQbGFjZSIsICJwdWJEYXRlIiwgImF2YWlsYWJpbGl0eSIsICJsYXllckluZm9zIiwgImRvY1NpZ2xlIiwgImNvcnB1c1NpZ2xlIiBdLAorICAgICJpdGVtc1BlclBhZ2UiIDogMjUsCisgICAgInNlcmlhbFF1ZXJ5IiA6ICJzcGFuRGlzdGFuY2UoezEyOTogc3Bhbk5leHQoc3Bhbk5leHQodG9rZW5zOnR0L2w6cmVubmVuLCB0b2tlbnM6dHQvbDpzY2hsYWZlbiksIHRva2Vuczp0dC9sOmxhdWZlbil9LCB7MTI5OiB0b2tlbnM6dHQvbDprYXVmZW59LCBbKHdbMDoyXSwgbm90T3JkZXJlZCwgbm90RXhjbHVkZWQpXSkiLAorICAgICJzdGFydEluZGV4IiA6IDAsCisgICAgInRpbWVvdXQiIDogMTAwMDAsCisgICAgInRvdGFsUmVzdWx0cyIgOiAtMSwKKyAgICAidmVyc2lvbiIgOiAiMC41OS4xIgorICB9LAorICAicXVlcnkiIDogeworICAgICJAdHlwZSIgOiAia29yYWw6Z3JvdXAiLAorICAgICJkaXN0YW5jZXMiIDogWyB7CisgICAgICAiQHR5cGUiIDogImNvc21hczpkaXN0YW5jZSIsCisgICAgICAiYm91bmRhcnkiIDogeworICAgICAgICAiQHR5cGUiIDogImtvcmFsOmJvdW5kYXJ5IiwKKyAgICAgICAgIm1heCIgOiAyLAorICAgICAgICAibWluIiA6IDAKKyAgICAgIH0sCisgICAgICAia2V5IiA6ICJ3IgorICAgIH0gXSwKKyAgICAiaW5PcmRlciIgOiBmYWxzZSwKKyAgICAib3BlcmFuZHMiIDogWyB7CisgICAgICAiQHR5cGUiIDogImtvcmFsOmdyb3VwIiwKKyAgICAgICJjbGFzc091dCIgOiAxMjksCisgICAgICAib3BlcmFuZHMiIDogWyB7CisgICAgICAgICJAdHlwZSIgOiAia29yYWw6Z3JvdXAiLAorICAgICAgICAib3BlcmFuZHMiIDogWyB7CisgICAgICAgICAgIkB0eXBlIiA6ICJrb3JhbDp0b2tlbiIsCisgICAgICAgICAgIndyYXAiIDogeworICAgICAgICAgICAgIkB0eXBlIiA6ICJrb3JhbDp0ZXJtIiwKKyAgICAgICAgICAgICJmb3VuZHJ5IiA6ICJ0dCIsCisgICAgICAgICAgICAia2V5IiA6ICJHRj4yJnJlbm5lbiIsCisgICAgICAgICAgICAibGF5ZXIiIDogImxlbW1hIiwKKyAgICAgICAgICAgICJtYXRjaCIgOiAibWF0Y2g6ZXEiLAorICAgICAgICAgICAgInJld3JpdGVzIiA6IFsgeworICAgICAgICAgICAgICAiQHR5cGUiIDogImtvcmFsOnJld3JpdGUiLAorICAgICAgICAgICAgICAib3BlcmF0aW9uIiA6ICJvcGVyYXRpb246aW5qZWN0aW9uIiwKKyAgICAgICAgICAgICAgInNjb3BlIiA6ICJmb3VuZHJ5IiwKKyAgICAgICAgICAgICAgInNyYyIgOiAiS3VzdHZha3QiCisgICAgICAgICAgICB9IF0KKyAgICAgICAgICB9CisgICAgICAgIH0sIHsKKyAgICAgICAgICAiQHR5cGUiIDogImtvcmFsOnRva2VuIiwKKyAgICAgICAgICAid3JhcCIgOiB7CisgICAgICAgICAgICAiQHR5cGUiIDogImtvcmFsOnRlcm0iLAorICAgICAgICAgICAgImZvdW5kcnkiIDogInR0IiwKKyAgICAgICAgICAgICJrZXkiIDogInNjaGxhZmVuIiwKKyAgICAgICAgICAgICJsYXllciIgOiAibGVtbWEiLAorICAgICAgICAgICAgIm1hdGNoIiA6ICJtYXRjaDplcSIsCisgICAgICAgICAgICAicmV3cml0ZXMiIDogWyB7CisgICAgICAgICAgICAgICJAdHlwZSIgOiAia29yYWw6cmV3cml0ZSIsCisgICAgICAgICAgICAgICJvcGVyYXRpb24iIDogIm9wZXJhdGlvbjppbmplY3Rpb24iLAorICAgICAgICAgICAgICAic2NvcGUiIDogImZvdW5kcnkiLAorICAgICAgICAgICAgICAic3JjIiA6ICJLdXN0dmFrdCIKKyAgICAgICAgICAgIH0gXQorICAgICAgICAgIH0KKyAgICAgICAgfSwgeworICAgICAgICAgICJAdHlwZSIgOiAia29yYWw6dG9rZW4iLAorICAgICAgICAgICJ3cmFwIiA6IHsKKyAgICAgICAgICAgICJAdHlwZSIgOiAia29yYWw6dGVybSIsCisgICAgICAgICAgICAiZm91bmRyeSIgOiAidHQiLAorICAgICAgICAgICAgImtleSIgOiAibGF1ZmVuIiwKKyAgICAgICAgICAgICJsYXllciIgOiAibGVtbWEiLAorICAgICAgICAgICAgIm1hdGNoIiA6ICJtYXRjaDplcSIsCisgICAgICAgICAgICAicmV3cml0ZXMiIDogWyB7CisgICAgICAgICAgICAgICJAdHlwZSIgOiAia29yYWw6cmV3cml0ZSIsCisgICAgICAgICAgICAgICJvcGVyYXRpb24iIDogIm9wZXJhdGlvbjppbmplY3Rpb24iLAorICAgICAgICAgICAgICAic2NvcGUiIDogImZvdW5kcnkiLAorICAgICAgICAgICAgICAic3JjIiA6ICJLdXN0dmFrdCIKKyAgICAgICAgICAgIH0gXQorICAgICAgICAgIH0KKyAgICAgICAgfSBdLAorICAgICAgICAib3BlcmF0aW9uIiA6ICJvcGVyYXRpb246c2VxdWVuY2UiCisgICAgICB9IF0sCisgICAgICAib3BlcmF0aW9uIiA6ICJvcGVyYXRpb246Y2xhc3MiCisgICAgfSwgeworICAgICAgIkB0eXBlIiA6ICJrb3JhbDpncm91cCIsCisgICAgICAiY2xhc3NPdXQiIDogMTI5LAorICAgICAgIm9wZXJhbmRzIiA6IFsgeworICAgICAgICAiQHR5cGUiIDogImtvcmFsOnRva2VuIiwKKyAgICAgICAgIndyYXAiIDogeworICAgICAgICAgICJAdHlwZSIgOiAia29yYWw6dGVybSIsCisgICAgICAgICAgImZvdW5kcnkiIDogInR0IiwKKyAgICAgICAgICAia2V5IiA6ICJrYXVmZW4iLAorICAgICAgICAgICJsYXllciIgOiAibGVtbWEiLAorICAgICAgICAgICJtYXRjaCIgOiAibWF0Y2g6ZXEiLAorICAgICAgICAgICJyZXdyaXRlcyIgOiBbIHsKKyAgICAgICAgICAgICJAdHlwZSIgOiAia29yYWw6cmV3cml0ZSIsCisgICAgICAgICAgICAib3BlcmF0aW9uIiA6ICJvcGVyYXRpb246aW5qZWN0aW9uIiwKKyAgICAgICAgICAgICJzY29wZSIgOiAiZm91bmRyeSIsCisgICAgICAgICAgICAic3JjIiA6ICJLdXN0dmFrdCIKKyAgICAgICAgICB9IF0KKyAgICAgICAgfQorICAgICAgfSBdLAorICAgICAgIm9wZXJhdGlvbiIgOiAib3BlcmF0aW9uOmNsYXNzIgorICAgIH0gXSwKKyAgICAib3BlcmF0aW9uIiA6ICJvcGVyYXRpb246c2VxdWVuY2UiCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Qcm9qZWN0LVRlc3RzL3NyYy90ZXN0L1Rlc3RKc29uLmphdmEgYi9Qcm9qZWN0LVRlc3RzL3NyYy90ZXN0L1Rlc3RKc29uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE2MGZmNgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2plY3QtVGVzdHMvc3JjL3Rlc3QvVGVzdEpzb24uamF2YQpAQCAtMCwwICsxLDIxNCBAQAorLyogCisgKiBTZXQgb2YgbWV0aG9kcyBmb3IgdGVzdGluZyBKc29uIHBhcnNpbmcgbWV0aG9kcywgd29yZGZvcm0gc2VydmljZXMgYW5kIEdsZW1tIHNlcnZpY2VzLgorICogCisgKiAwMy4wNC4yMC9GQgorICovCisKK3BhY2thZ2UgdGVzdDsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aDsKK2ltcG9ydCBqYXZhLm5pby5maWxlLlBhdGhzOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5kYXRhYmluZC5Kc29uTm9kZTsKK2ltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uZGF0YWJpbmQuT2JqZWN0TWFwcGVyOworCitpbXBvcnQgZGUua29yYXAuanNvbi5Kc29uVHJhdmVyc2U7CitpbXBvcnQgZGUua29yYXAuanNvbi5UcmF2ZXJzZWRQYXRoOworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudC5HbGVtbUNsaWVudDsKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy5Xb3JkZm9ybVNlcnZpY2VzOworCitwdWJsaWMgY2xhc3MgVGVzdEpzb24KKworeworCXN0YXRpYyBTdHJpbmcgaW5wdXRGaWxlbmFtZSA9ICJxdWVyeS5pbi5wcmV0dHkuanNvbiI7CisJc3RhdGljIFN0cmluZyBvdXRwdXRGaWxlbmFtZSA9ICJxdWVyeS5vdXQucHJldHR5Lmpzb24iOworCisJZmluYWwgc3RhdGljIGJvb2xlYW4gYlNpbXVsYXRlV29yZGZvcm1TZXJ2aWNlcyA9IHRydWU7CisJCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKKwkKKwl7CisJRmlsZQorCQlpbkZpbGUgPSBuZXcgRmlsZShpbnB1dEZpbGVuYW1lKTsKKwlGaWxlCisJCW91dEZpbGUgPSBuZXcgRmlsZShvdXRwdXRGaWxlbmFtZSk7CisgICAgT2JqZWN0TWFwcGVyCisJCW9iak1hcHBlciA9IG51bGw7CisJSnNvbk5vZGUKKwkJanNvbk5vZGUgPSBudWxsOworCVRyYXZlcnNlZFBhdGgKKwkJdFBhdGgJID0gbnVsbDsKKwlpbnQKKwkJbW9kZQkgPSBKc29uVHJhdmVyc2UuUkVXUklURTsgCS8vIEpzb25UcmF2ZXJzZS5SRVdSSVRFIG9yIFJFV1JJVEVfRVhQCisJCisJaWYoIGJTaW11bGF0ZVdvcmRmb3JtU2VydmljZXMgKQorCXsKKwkJU3lzdGVtLm91dC5wcmludGYoIlRlc3RKc29uOiBzdGFydGluZyBzaW11bGF0aW9uIG9mIFdvcmRmb3JtU2VydmljZXMuLi5cbiIpOworCQlzaW11bGF0ZVdvcmRmb3JtU2VydmljZXMoaW5wdXRGaWxlbmFtZSwgb3V0cHV0RmlsZW5hbWUpOworCQlyZXR1cm47CisJfQorCQorCVN5c3RlbS5vdXQucHJpbnRmKCJUZXN0SnNvbjogdGVzdCBvbiAnJXMnLi4uXG4iLCBpbnB1dEZpbGVuYW1lKTsKKwkKKwlvYmpNYXBwZXIgPSBuZXcgT2JqZWN0TWFwcGVyKCk7CisJCisJLy8gZ2V0IGZ1bGwgcXVlcnkgYXMgYSBKc29uTm9kZSB0cmVlOgorCXRyeSB7CisJCS8vIGdldCBmdWxsIHF1ZXJ5IGZyb20gZmlsZSBhcyBhIEpzb25Ob2RlIHRyZWU6CisJCWpzb25Ob2RlID0gb2JqTWFwcGVyLnJlYWRUcmVlKGluRmlsZSk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCJUZXN0SnNvbjogcmVhZGluZyBmcm9tIGlucHV0IGZpbGU6IG9rLlxuIik7CisJCQorCQkvLyB0cmF2ZXJzZSBxdWVyeSBhbmQgY29sbGVjdCBsZW1tYSBzdWJxdWVyaWVzIGluIGEgVHJhdmVyc2VkUGF0aCBvYmplY3Q6CisJCXRQYXRoID0gbmV3IFRyYXZlcnNlZFBhdGgob2JqTWFwcGVyKTsKKwkJSnNvblRyYXZlcnNlLnRyYXZlcnNlSnNvblRyZWUoanNvbk5vZGUsIHRQYXRoLCBKc29uVHJhdmVyc2UuQ09MTEVDVCk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogVGVzdEpzb246IGdlZnVuZGVuZSBMZW1tYXRhOiAjOiAlZCwgbGlzdDogJyVzJy5cbiIsIHRQYXRoLmdldExlbW1hQ291bnQoKSwgdFBhdGguZ2V0TGVtbWF0YSgpKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisKKwkvLyBFeGl0IGlmIG5vIGxlbW1hIHN1YnF1ZXJpZXMgZm91bmQ6CisJaWYoIHRQYXRoID09IG51bGwgfHwgdFBhdGguZ2V0TGVtbWFDb3VudCgpID09IDAgKQorCQl7CisJCVN5c3RlbS5vdXQucHJpbnRmKCJUZXN0SnNvbjoga2VpbmUgbGVtbWF0YSBnZWZ1bmRlbiA+IFJld3JpdGUg/GJlcnNwcmluZ2VuLlxuIik7CisJCXJldHVybjsKKwkJfQorCisJLy8gQ2FsbCBHbGVtbVNlcnZpY2VzIHRvIHJlc29sdmUgbGVtbWEtU3VicXVlcmllcy4KKwkvLyBUaGlzIHJldHVybnMgZm9yIGVhY2ggbGVtbWEgYSByZWZlcmVuY2UgdG8gYSBsaXN0IG9mIHdvcmRmb3JtIGluc3RhbmNpYXRpb25zCisJLy8gKD0gaW5zdGFudGlhdGlvbiBsaXN0KS4gCisJLy8gVGhpcyBsaXN0IGlzIHN1Ym1pdHRlZCB0byB0cmF2ZXJzSnNvblRyZWUoKSB3aXRoIHRoZSB1c2Ugb2YgdGhlIHRQYXRoIG9iamVjdC4KKwkKKwkvLyBTaW11bGF0ZXMgYnVpbGRpbmcgb2YgZXhwYW5zaW9uIGxpc3RzLCBzdG9yaW5nIHRoZW0gaW4gdFBhdGg6CisJaWYoIG1vZGUgPT0gSnNvblRyYXZlcnNlLlJFV1JJVEUpCisJCXsKKwkJc2ltdWxhdGVHbGVtbVNlcnZpY2VzQ29ubmVjdCh0UGF0aCk7CisJCXNpbXVsYXRlR2xlbW1TZXJ2aWNlcyh0UGF0aCk7CisJCX0KKwllbHNlCisJCXNpbXVsYXRlR2xlbW1TZXJ2aWNlc1dmcyh0UGF0aCk7CisJCisJLy8gUmV3cml0ZSBLb3JhbFF1ZXJ5OiB1c2UgZWl0aGVyIEpzb25UcmF2ZXJzZS5SRVdSSVRFIG9yIC5SRVdSSVRFX0VYUDoKKwkKKwlKc29uVHJhdmVyc2UudHJhdmVyc2VKc29uVHJlZShqc29uTm9kZSwgdFBhdGgsIG1vZGUpOworCQkKKwkvLyByZXR1cm4gcmV3cml0dG4gSnNvbiBUcmVlIHRvIGZpbGU6CisJdHJ5IHsKKwkJb2JqTWFwcGVyLndyaXRlcldpdGhEZWZhdWx0UHJldHR5UHJpbnRlcigpLndyaXRlVmFsdWUob3V0RmlsZSwganNvbk5vZGUpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCisJfSAvLyBtYWluCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHNpbXVsYXRlV29yZGZvcm1TZXJ2aWNlczoKKwkgKiAKKwkgKiAtIGNhbGxzIHNhbWUgbWV0aG9kZSB0byBwYXJzZSBhbmQgcmV3cml0ZSBLb3JhbFF1ZXJ5IHRoYXQgd29yZGZvcm1TZXJ2aWNlcyBkby4KKwkgKiAKKwkgKiAyNC4wNC4yMC9GQiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJc3RhdGljIHZvaWQgc2ltdWxhdGVXb3JkZm9ybVNlcnZpY2VzKFN0cmluZyBpbnB1dEZpbGVuYW1lLCBTdHJpbmcgb3V0cHV0RmlsZW5hbWUpICAKKwkKKwl7CisJZmluYWwgU3RyaW5nIGZ1bmMgPSAic2ltdWxhdGVXb3JkZm9ybVNlcnZpY2VzIjsKKwlTdHJpbmcKKwkJcXVlcnkJCT0gbnVsbCwKKwkJbmV3UXVlcnkJPSBudWxsOworCisgICAgdHJ5IHsKKwkJcXVlcnkgPSBVdGlscy5yZWFkRnJvbUlucHV0U3RyZWFtKCIuLyIgKyBpbnB1dEZpbGVuYW1lKTsKKwkJfSAKKyAgICBjYXRjaCAoSU9FeGNlcHRpb24gZTEpIHsKKwkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybjsKKwkJfQorICAgIAorICAgIFN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNlbmRpbmcgcXVlcnkgdG8gV29yZGZvcm1TZXJ2aWNlcy4uLlxuIiwgIGZ1bmMpOworICAgIAorCW5ld1F1ZXJ5ID0gV29yZGZvcm1TZXJ2aWNlcy5kb1BPU1RfaGFuZGxlV29yZGZvcm1RdWVyaWVzKHF1ZXJ5KSA7CisJCQorICAgIFN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlY2VpdmluZyByZXdyaXR0ZW4gcXVlcnkgZnJvbSBXb3JkZm9ybVNlcnZpY2VzLi4uXG4iLCAgZnVuYyk7CisgICAgCisgICAgVXRpbHMud3JpdGVUb091dHB1dFN0cmVhbSgiLi8iICsgb3V0cHV0RmlsZW5hbWUsIG5ld1F1ZXJ5KTsKKworCX0gLy8gc2ltdWxhdGVXb3JkZm9ybVNlcnZpY2VzCisJCisJCisJLyogc2ltdWxhdGVHbGVtbVNlcnZpY2VzQ2xpZW50CisJICogCisJICogMTQuMDQuMjAvRkIKKwkgKiAKKwkgKi8KKwkKKwlzdGF0aWMgaW50IHNpbXVsYXRlR2xlbW1TZXJ2aWNlc0Nvbm5lY3QoVHJhdmVyc2VkUGF0aCB0UGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIGZ1bmMgPSAic2ltdWxhdGVHbGVtbVNlcnZpY2VzQ29ubmVjdCI7CisJR2xlbW1DbGllbnQKKwkJZ2xlbW1DbGllbnQgPSBuZXcgR2xlbW1DbGllbnQoKTsKKwkKKwlnbGVtbUNsaWVudC5HbGVtbUNvbm5lY3QoKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgIGZ1bmMpOworCQorCXJldHVybiAwOworCX0gLy8gc2ltdWxhdGVHbGVtbVNlcnZpY2VzQ2xpZW50CisJCisJLyogc2ltdWxhdGVHbGVtbVNlcnZpY2VzCisJICogCisJICogaW5wdXQ6IGxpc3Qgb2YgbGVtbWF0YQorCSAqIG91dHB1dDogbGlzdCBvZiBsZW1tYXRhIChzYW1lIG9yZGVyKSB3aXRoIHJlZmVyZW5jZXMgdG8gZXhwYW5zaW9uIGxpc3RzLgorCSAqIDA3LjA0LjIwL0ZCCisJICovCisJCisJc3RhdGljIHZvaWQgc2ltdWxhdGVHbGVtbVNlcnZpY2VzKFRyYXZlcnNlZFBhdGggdFBhdGgpCisJCisJeworCQlmb3IoaW50IGk9MDsgaTx0UGF0aC5nZXRMZW1tYUNvdW50KCk7IGkrKykKKwkJCXsKKwkJCXRQYXRoLnNldFJlZigicmVmLSIgKyB0UGF0aC5nZXRMZW1tYShpKSArICI6IiArIGkpOworCQkJfQorCQorCVN5c3RlbS5vdXQucHJpbnRmKCJ0UGF0aC5yZWZzOiAjPSVkIGxpc3Q9JyVzJy5cbiIsIHRQYXRoLmdldFJlZnNDb3VudCgpLCB0UGF0aC5nZXRSZWZzYXNTdHJpbmcoKSk7CisJCQorCX0gLy8gc2ltdWxhdGVHbGVtbVNlcnZpY2VzCisJCisJLyogc2ltdWxhdGVHbGVtbVNlcnZpY2VzV2ZzCisJICogCisJICogaW5wdXQ6IGxpc3Qgb2YgbGVtbWF0YQorCSAqIG91dHB1dDogbGlzdCBvZiBleHBhbnNpb24gbGlzdHMgKD0gd29yZGZvcm1zKSwgc2FtZSBvcmRlci4KKwkgKiAwOC4wNC4yMC9GQgorCSAqLworCQorCXN0YXRpYyB2b2lkIHNpbXVsYXRlR2xlbW1TZXJ2aWNlc1dmcyhUcmF2ZXJzZWRQYXRoIHRQYXRoKQorCQorCXsKKwkJZm9yKGludCBpPTA7IGk8dFBhdGguZ2V0TGVtbWFDb3VudCgpOyBpKyspCisJCQl7CisJCQlMaXN0PFN0cmluZz4KKwkJCQlleHBMaXN0ID0gbmV3IEFycmF5TGlzdChpKzEpOworCQkJCisJCQlmb3IoaW50IGo9MDsgajxpKzE7IGorKykKKwkJCQl7CisJCQkJZXhwTGlzdC5hZGQodFBhdGguZ2V0TGVtbWEoaSkgKyBqKTsKKwkJCQl9CisJCQkKKwkJCXRQYXRoLmFkZEV4cExpc3QoZXhwTGlzdCk7IAorCQkJfQorCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1Zzogc2ltdWxhdGVkR2xlbW1TZXJ2aWNlc1dmczogJWQgZXhwYW5zaW9uIGxpc3RzIGFkZGVkLlxuIiwgdFBhdGguZ2V0TGVtbWFDb3VudCgpKTsKKwkJCisJfSAvLyBzaW11bGF0ZUdsZW1tU2VydmljZXNXZnMKKwkKKwkJCit9IC8vIFRlc3RKc29uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvVXRpbHMvLmNsYXNzcGF0aCBiL1V0aWxzLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZmNWEzOAotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxzLy5jbGFzc3BhdGgKQEAgLTAsMCArMSwyNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgb3V0cHV0PSJ0YXJnZXQvY2xhc3NlcyIgcGF0aD0ic3JjIj4KKwkJPGF0dHJpYnV0ZXM+CisJCQk8YXR0cmlidXRlIG5hbWU9Im9wdGlvbmFsIiB2YWx1ZT0idHJ1ZSIvPgorCQkJPGF0dHJpYnV0ZSBuYW1lPSJtYXZlbi5wb21kZXJpdmVkIiB2YWx1ZT0idHJ1ZSIvPgorCQk8L2F0dHJpYnV0ZXM+CisJPC9jbGFzc3BhdGhlbnRyeT4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5tMmUuTUFWRU4yX0NMQVNTUEFUSF9DT05UQUlORVIiPgorCQk8YXR0cmlidXRlcz4KKwkJCTxhdHRyaWJ1dGUgbmFtZT0ibWF2ZW4ucG9tZGVyaXZlZCIgdmFsdWU9InRydWUiLz4KKwkJCTxhdHRyaWJ1dGUgbmFtZT0ib3JnLmVjbGlwc2UuanN0LmNvbXBvbmVudC5ub25kZXBlbmRlbmN5IiB2YWx1ZT0iIi8+CisJCTwvYXR0cmlidXRlcz4KKwk8L2NsYXNzcGF0aGVudHJ5PgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS5jb250YWluZXIvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQucnVudGltZVRhcmdldC9BcGFjaGUgVG9tY2F0IHY5LjAiPgorCQk8YXR0cmlidXRlcz4KKwkJCTxhdHRyaWJ1dGUgbmFtZT0ib3duZXIucHJvamVjdC5mYWNldHMiIHZhbHVlPSJqc3QudXRpbGl0eSIvPgorCQk8L2F0dHJpYnV0ZXM+CisJPC9jbGFzc3BhdGhlbnRyeT4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL2pkazEuOC4wXzIzMSI+CisJCTxhdHRyaWJ1dGVzPgorCQkJPGF0dHJpYnV0ZSBuYW1lPSJvd25lci5wcm9qZWN0LmZhY2V0cyIgdmFsdWU9ImphdmEiLz4KKwkJPC9hdHRyaWJ1dGVzPgorCTwvY2xhc3NwYXRoZW50cnk+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0idGFyZ2V0L2NsYXNzZXMiLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvVXRpbHMvLnByb2plY3QgYi9VdGlscy8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTMzYTdlCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbHMvLnByb2plY3QKQEAgLTAsMCArMSwzNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+VXRpbHM8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5idWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLnZhbGlkYXRpb25idWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLm0yZS5jb3JlLm1hdmVuMkJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmplbS53b3JrYmVuY2guSmF2YUVNRk5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLndzdC5jb21tb24ubW9kdWxlY29yZS5Nb2R1bGVDb3JlTmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UubTJlLmNvcmUubWF2ZW4yTmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLm5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvVXRpbHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvVXRpbHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNGEzYWQKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlscy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSw5IEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuOAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjgKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucmVsZWFzZT1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuOApkaWZmIC0tZ2l0IGEvVXRpbHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLm0yZS5jb3JlLnByZWZzIGIvVXRpbHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLm0yZS5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4OTdhN2YKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlscy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubTJlLmNvcmUucHJlZnMKQEAgLTAsMCArMSw0IEBACithY3RpdmVQcm9maWxlcz0KK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCityZXNvbHZlV29ya3NwYWNlUHJvamVjdHM9dHJ1ZQordmVyc2lvbj0xCmRpZmYgLS1naXQgYS9VdGlscy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnQgYi9VdGlscy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJkMjExYgotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PHByb2plY3QtbW9kdWxlcyBpZD0ibW9kdWxlQ29yZUlkIiBwcm9qZWN0LXZlcnNpb249IjEuNS4wIj4KKyAgICA8d2ItbW9kdWxlIGRlcGxveS1uYW1lPSJVdGlscyI+CisgICAgICAgIDx3Yi1yZXNvdXJjZSBkZXBsb3ktcGF0aD0iLyIgc291cmNlLXBhdGg9Ii9zcmMiLz4KKyAgICA8L3diLW1vZHVsZT4KKzwvcHJvamVjdC1tb2R1bGVzPgpkaWZmIC0tZ2l0IGEvVXRpbHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnhtbCBiL1V0aWxzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VjYTNlMQotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS54bWwKQEAgLTAsMCArMSw2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGZhY2V0ZWQtcHJvamVjdD4KKyAgPHJ1bnRpbWUgbmFtZT0iQXBhY2hlIFRvbWNhdCB2OS4wIi8+CisgIDxpbnN0YWxsZWQgZmFjZXQ9ImphdmEiIHZlcnNpb249IjEuOCIvPgorICA8aW5zdGFsbGVkIGZhY2V0PSJqc3QudXRpbGl0eSIgdmVyc2lvbj0iMS4wIi8+Cis8L2ZhY2V0ZWQtcHJvamVjdD4KZGlmZiAtLWdpdCBhL1V0aWxzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5wcmVmcyBiL1V0aWxzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGNhZDhjCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLnByZWZzCkBAIC0wLDAgKzEsMiBAQAorZGlzYWJsZWQ9MDZ0YXJnZXQKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS9VdGlscy9wb20ueG1sIGIvVXRpbHMvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmQ0NmQzCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbHMvcG9tLnhtbApAQCAtMCwwICsxLDMxIEBACis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICA8Z3JvdXBJZD5kZS5rb3JhcC5zZXJ2aWNlczwvZ3JvdXBJZD4KKyAgPGFydGlmYWN0SWQ+dXRpbHM8L2FydGlmYWN0SWQ+CisgIDx2ZXJzaW9uPjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgPHBhY2thZ2luZz5qYXI8L3BhY2thZ2luZz4KKyAgPG5hbWU+dXRpbHM8L25hbWU+CisgIDxkZXNjcmlwdGlvbj5VdGlsaXR5cyBmb3IgdGhlIEtvckFwIFNlcnZpY2VzLjwvZGVzY3JpcHRpb24+CisgIDxidWlsZD4KKyAgICA8c291cmNlRGlyZWN0b3J5PnNyYzwvc291cmNlRGlyZWN0b3J5PgorICAgIDxwbHVnaW5zPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tY29tcGlsZXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4zLjcuMDwvdmVyc2lvbj4KKyAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgPHNvdXJjZT4xLjg8L3NvdXJjZT4KKyAgICAgICAgICA8dGFyZ2V0PjEuODwvdGFyZ2V0PgorICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICA8L3BsdWdpbj4KKyAgICA8L3BsdWdpbnM+CisgIDwvYnVpbGQ+CisgIAorICA8ZGVwZW5kZW5jaWVzPgorICAgIDwhLS0gaHR0cHM6Ly9tdm5yZXBvc2l0b3J5LmNvbS9hcnRpZmFjdC9jb21tb25zLWlvL2NvbW1vbnMtaW8gLS0+CisgICAgPGRlcGVuZGVuY3k+CisgICAgICA8Z3JvdXBJZD5jb21tb25zLWlvPC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy1pbzwvYXJ0aWZhY3RJZD4KKyAgICAgIDx2ZXJzaW9uPjIuNjwvdmVyc2lvbj4KKyAgICA8L2RlcGVuZGVuY3k+CisgIDwvZGVwZW5kZW5jaWVzPgorPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1V0aWxzL3NyYy9kZS9rb3JhcC9zZXJ2aWNlcy91dGlscy9VdGlscy5qYXZhIGIvVXRpbHMvc3JjL2RlL2tvcmFwL3NlcnZpY2VzL3V0aWxzL1V0aWxzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU4NTg2NAotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxzL3NyYy9kZS9rb3JhcC9zZXJ2aWNlcy91dGlscy9VdGlscy5qYXZhCkBAIC0wLDAgKzEsMjc2IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzOworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aHM7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKKworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKKworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5pby5GaWxlVXRpbHM7CisKKworcHVibGljIGZpbmFsIGNsYXNzIFV0aWxzCit7CisJCisJLyoKKwkgKiBzZXQgRXJyIGFuZCBPdXQgU3RyZWFtcy4KKwkgKiAKKwkgKiAxMi4xMi4xOS9GQgorCSAqIFRoZSBQcmludFdyaXRlciBjbGFzcyBzaG91bGQgYmUgdXNlZCBpbiBzaXR1YXRpb25zIHRoYXQgcmVxdWlyZSB3cml0aW5nIGNoYXJhY3RlcnMgcmF0aGVyIHRoYW4gYnl0ZXMuCisJICogMDUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwdWJsaWMgc3RhdGljIHZvaWQgc2V0U3RkRmlsZVN0cmVhbXMoU3RyaW5nIGZuYW1lRXJyLCBTdHJpbmcgZm5hbWVPdXQpCisJCisJeworCUZpbGVPdXRwdXRTdHJlYW0KKwkJZm9zT3V0LCBmb3NFcnI7CisKKwl0cnkgeyAvLyBvcGVuIGluIGFwcGVuZCBtb2RlOgorCQlmb3NFcnIgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShmbmFtZUVyciwgdHJ1ZSk7CisJCVN5c3RlbS5zZXRFcnIobmV3IFByaW50U3RyZWFtKGZvc0VycikpOworCQlmb3NPdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShmbmFtZU91dCwgdHJ1ZSk7CisJCVN5c3RlbS5zZXRPdXQobmV3IFByaW50U3RyZWFtKGZvc091dCkpOworCQl9IAorCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCisJfSAvLyBzZXRTdGRGaWxlU3RyZWFtcworCQorCS8qCisJICogc2V0TG9nU3RyZWFtOgorCSAqIAorCSAqIC0gb3BlbiBhIFByaW50U3RyZWFtIGZvciBmbmFtZS4KKwkgKiAKKwkgKiAyNS4xMC4yMS9GQgorCSAqLworCQorCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gc2V0TG9nU3RyZWFtKFN0cmluZyBmbmFtZSkKKwkKKwl7CisJUHJpbnRTdHJlYW0KKwkJZiA9IG51bGw7CisJCisJdHJ5IHsKKwkJZiA9IG5ldyBQcmludFN0cmVhbShuZXcgRmlsZU91dHB1dFN0cmVhbShmbmFtZSwgdHJ1ZSkpOworCQl9IAorCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlmID0gU3lzdGVtLm91dDsKKwkJZi5wcmludGYoIkVycm9yOiBzZXRMb2dTdHJlYW06IGNhbm5vdCBjcmVhdGUgUHJpbnRTdHJlYW0gZm9yICclcychXG4iLCBmbmFtZSk7CisJCX0KKwkKKwlyZXR1cm4gZjsKKwl9IC8vIHNldExvZ1N0cmVhbQorCisJLyoKKwkgKiBleGVjdXRlU2hlbGxTY3JpcHQuCisJICogMTIuMTIuMTkvRkIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGludCBleGVjdXRlU2hlbGxTY3JpcHQoU3RyaW5nIGZuYW1lU2NyaXB0LCBTdHJpbmcgYXJnLCBmaW5hbCBQcmludFN0cmVhbSBmb3V0LCBmaW5hbCBQcmludFN0cmVhbSBmZXJyKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAiZXhlY3V0ZVNoZWxsU2NyaXB0IjsKKwlQcm9jZXNzQnVpbGRlciAJCisJCWJ1aWxkZXI7CisgICAgUHJvY2VzcyAKKyAgICAJcHJvY2VzcyA9IG51bGw7CisgICAgaW50IAorICAgIAlzdGF0dXM7CisgICAgCisgICAgZm91dC5wcmludGYoIkRlYnVnOiAlczogc2NyaXB0IG5hbWUgPSAnJXMnLi4uXG4iLCBmdW5jLCBmbmFtZVNjcmlwdCk7CisJZm91dC5wcmludGYoIkRlYnVnOiAlczogc2NyaXB0IGFyZyAgPSAnJXMnLi4uXG4iLCBmdW5jLCBhcmcpOworCQkKKwlpZiAoIW5ldyBGaWxlKGZuYW1lU2NyaXB0KS5jYW5FeGVjdXRlKCkpIHsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGYoIkdsZW1tVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0OiBjYW5ub3QgZmluZCBzaGVsbCBzY3JpcHQgJyVzJyFcbiIsIGZuYW1lU2NyaXB0KTsKKyAgICAgICAgcmV0dXJuIDE7CisJfQorCQorCWJ1aWxkZXIgPSBuZXcgUHJvY2Vzc0J1aWxkZXIoZm5hbWVTY3JpcHQsIGFyZyk7CisgICAgcHJvY2VzcyA9IG51bGw7CisgICAgCisgICAgdHJ5IHsKKyAgICAgICAgcHJvY2VzcyA9IGJ1aWxkZXIuc3RhcnQoKTsKKyAgICAgICAgc3RhdHVzID0gcHJvY2Vzcy53YWl0Rm9yKCk7CisgICAgICAgIAorICAgICAgICBmb3V0LnByaW50bG4oIkRlYnVnOiBzY3JpcHQgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LlxuIik7CisKKyAgICAgICAgLy9JbnB1dFN0cmVhbSBpcyA9IHByb2Nlc3MuZ2V0SW5wdXRTdHJlYW0oKTsKKyAgICAgICAgLy9JbnB1dFN0cmVhbVJlYWRlciBpc3IgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpOworICAgICAgICAvL0J1ZmZlcmVkUmVhZGVyIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKGlzcik7CisgICAgICAgIC8vU3RyaW5nIGxpbmU7CisgICAgICAgIC8vd2hpbGUgKChsaW5lID0gYnIucmVhZExpbmUoKSkgIT0gbnVsbCkgeworICAgICAgICAvLyAgICBTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7CisgICAgICAgIC8vfQorICAgIAl9CisgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAJZmVyci5wcmludGYoIkVycm9yOiBleGVjdXRlU2hlbGxTY3JpcHQ6ICclcycgZmFpbGVkIGR1ZSB0byBJT0V4Y2VwdGlvbiFcbiIsIGZuYW1lU2NyaXB0KTsgCisgICAgCWUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgCXJldHVybiAxOworICAgIH0KKyAgICBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworICAgIAlmZXJyLnByaW50ZigiRXJyb3I6IGV4ZWN1dGVTaGVsbFNjcmlwdDogJyVzJyBmYWlsZWQgZHVlIHRvIEludGVycnVwdCFcbiIsIGZuYW1lU2NyaXB0KTsgCisgICAgCWUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgCXJldHVybiAxOworICAgIH0KKyAgICAgICAgCisJLy8gT0sKKwlyZXR1cm4gMDsKKwkJCisJfQorCisJLyoKKwkgKiByZWFkRnJvbUlucHV0U3RyZWFtOgorCSAqIAorCSAqIC0gcmVhZHMgZnVsbCBjb250ZW50IG9mIGEgZmlsZSBpbnRvIGEgc3RyaW5nIGFuZCByZXR1cm4gdGhhdCBzdHJpbmcuCisJICogLSBvbmx5IGFwcGx5IG9uIHNtYWxsIGZpbGVzLgorCSAqIAorCSAqIDI3LjA0LjIwL0ZCCisJICovCisJCisJcHVibGljIHN0YXRpYyBTdHJpbmcgcmVhZEZyb21JbnB1dFN0cmVhbShTdHJpbmcgZmlsZW5hbWUpCisJCQkgIHRocm93cyBJT0V4Y2VwdGlvbiAKKwkKKwl7CisgICAgYnl0ZVtdCisgICAgCWVuY29kZWQ7CisgICAgCisgICAgZW5jb2RlZCA9IEZpbGVzLnJlYWRBbGxCeXRlcyhQYXRocy5nZXQoZmlsZW5hbWUpKTsKKyAgICByZXR1cm4gbmV3IFN0cmluZyhlbmNvZGVkKTsKKyAgICAKKwkvKiBhbHRlcm5hdGl2ZTogIAorICAgIHRyeSAoQnVmZmVyZWRSZWFkZXIgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlucykpKSAKKyAgICAJeworICAgICAgICBTdHJpbmcgbGluZTsKKyAgICAgICAgd2hpbGUgKChsaW5lID0gYnIucmVhZExpbmUoKSkgIT0gbnVsbCkgCisgICAgICAgIAl7CisgICAgICAgICAgICByZXN1bHRTdHJpbmdCdWlsZGVyLmFwcGVuZChsaW5lKS5hcHBlbmQoIlxuIik7CisgICAgICAgIAl9CisgICAgCX0KKyAgICByZXR1cm4gcmVzdWx0U3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgICovCisJCisJfSAvLyByZWFkRnJvbUlucHV0U3RyZWFtCisKKwkvKgorCSAqIHdyaXRlVG9PdXRwdXRTdHJlYW06CisJICogLSB3cml0ZXMgYSBTdHJpbmcgdG8gZmlsZS4KKwkgKiAyNy4wNC4xMC9GQgorCSAqLworCQorCXB1YmxpYyBzdGF0aWMgdm9pZCB3cml0ZVRvT3V0cHV0U3RyZWFtKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIHMsIGZpbmFsIFByaW50U3RyZWFtIGZvdXQpCisJCisJeworCWZpbmFsIFN0cmluZyBmdW5jID0gIndyaXRlVG9PdXRwdXRTdHJlYW0iOworCUZpbGUKKwkJZmlsZSA9IG5ldyBGaWxlKGZpbGVuYW1lKTsKKwkKKwl0cnkgeworCQlGaWxlVXRpbHMud3JpdGVTdHJpbmdUb0ZpbGUoZmlsZSwgcywgKFN0cmluZyludWxsLCBmYWxzZSk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZm91dC5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHdyaXRlIHRvIGZpbGUgJyVzJyFcbiIsIGZ1bmMsIGZpbGVuYW1lKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQorCX0gLy8gd3JpdGVUb091dHB1dFN0cmVhbQorCQorCS8qCisJICogbG9hZFByb3BlcnRpZXMKKwkgKiAKKwkgKiAtIGxvYWQgcHJvcGVydGllcyB1c2luZyBJbnB1dFN0cmVhbSBpcy4KKwkgKiAtIElucHV0U3RyZWFtIG11c3QgYmUgb3BlbmVkIGJ5IGNhbGxpbmcgU2VydmljZXMgdXNpbmcgdGhlaXIgU2VydmxldCBDb250ZXh0LgorCSAqIC0gbmFtZSB1c2VkIHRvIG9wZW4gSW5wdXRTdHJlYW0gaXMgZm5hbWVQcm9wcyAodXNlZCBoZXJlIG9ubHkgZm9yIGxvZ2dpbmcpLgorCSAqIC0gcmVhbFBhdGggb25seSBhdmFpbGFibGUgaWYgZm5hbWVzUHJvcHMgd2FzIGZvdW5kICh1c2VkIGhlcmUgb25seSBmb3IgbG9nZ2luZykuCisJICogLSBiUHJpbnQ6IGlmIHRydWU6IGxvZyBwcm9wZXJ0aWVzIGZvdW5kLgorCSAqIFJldHVybnM6CisJICogLSBzZXQgb2YgbG9hZGVkIHByb3BlcnRpZXMuIE1heSB0aGUgbnVsbCBpZiBmbmFtZVByb3BzIHdlcmUgbm90IGZvdW5kLgorCSAqIDE1LjEwLjIxL0ZCCisJICogTm90ZXM6CisJICogLSBhcyBsb25nIGFzIHRoZSBwcm9wZXJ0aWVzIGFyZSBsb2FkaW5nLCB3ZSBkb24ndCBrbm93IHdoZXJlIHRvIHJlZGlyZWN0CisJICogICBTeXN0ZW0ub3V0L2Vyciwgc28gd2UgaGF2ZSB0byB3cml0ZSB0byBTeXN0ZW0ub3V0L2Vyci4KKwkgKiAyNy4xMC4yMS9GQgorCSAqLworCQorCXB1YmxpYyBzdGF0aWMgUHJvcGVydGllcyBsb2FkUHJvcGVydGllcyhJbnB1dFN0cmVhbSBpcywgU3RyaW5nIGZuYW1lUHJvcHMsIFN0cmluZyByZWFsUGF0aCwgYm9vbGVhbiBiUHJpbnQpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gIlV0aWxzLmxvYWRQcm9wZXJ0aWVzIjsKKwlQcm9wZXJ0aWVzCisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkKKwkvKiBkb2VzIG5vdCBmaW5kIHRoZSBwcm9wZXJ0aWVzIGZpbGU6CisJICogaW5Qcm9wID0gR2xlbW1TZXJ2aWNlcy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpLmdldFJlc291cmNlQXNTdHJlYW0ocHJvcE5hbWUpOworCSAqIGluUHJvcCA9IEh0dHBTZXJ2bGV0UmVxdWVzdC5jbGFzcy5nZXRSZXNvdXJjZUFzU3RyZWFtKHByb3BOYW1lKTsKKwkgKi8KKwkKKwlpZiggaXMgPT0gbnVsbCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGxvYWQgJyVzJyAocmVhbFBhdGg9JyVzJykhXG4iLCBmdW5jLCBmbmFtZVByb3BzLCByZWFsUGF0aCk7CisJCXJldHVybiBwcm9wczsgLy8gcmV0dXJuIGVtcHR5IGxpc3Qgb2YgcHJvcHMuCisJCX0KKwkKKwl0cnkgeworCQlwcm9wcy5sb2FkKGlzKTsKKwkJU2V0PEVudHJ5PE9iamVjdCxPYmplY3Q+PgorCQkJcHJvcHNTZXQgPSBwcm9wcy5lbnRyeVNldCgpOworCQkKKwkJZm9yKEVudHJ5PE9iamVjdCwgT2JqZWN0PiBwcm9wRW50cnkgOiBwcm9wc1NldCkKKwkJCXsKKwkJCWlmKCBiUHJpbnQgKQorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AgJXMgPSAnJXMnLlxuIiwgZnVuYywgcHJvcEVudHJ5LmdldEtleSgpLCBwcm9wRW50cnkuZ2V0VmFsdWUoKSk7CisJCQl9CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGxvYWQgcHJvcHMgZnJvbSAnJXMnISIsICBmdW5jLCBmbmFtZVByb3BzKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCisJcmV0dXJuIHByb3BzOwkKKwl9IC8vIGxvYWRQcm9wZXJ0aWVzCisJCisJLyoKKwkgKiBnZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzCisJICogCisJICogaWYga2V5IHByb3AgaXMgZm91bmQgaW4gcHJvcHMsIHJldHVybiB2YWwgZm91bmQuCisJICogZWxzZSByZXR1cm4gZGVmYXVsdCB2YWx1ZSBwcm9wRGVmYXVsdC4KKwkgKiAKKwkgKiAxNS4xMC4yMS9GQgorCSAqIE5vdGVzOgorCSAqIC0gaWYgbG9naW5nIGlzIHJlYWN0aXZhdGVkIGhlcmUsIGRvIG5vdCB1c2UgU3lzdGVtLm91dC9lcnIgYXMgdGhleSBhcmUgc2V0IEpWTS13aWRlLgorCSAqLworCQorCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldENvbnN0YW50RnJvbVByb3BlcnRpZXMoUHJvcGVydGllcyBwcm9wcywgU3RyaW5nIHByb3AsIFN0cmluZyBwcm9wRGVmYXVsdCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW5pdF9Db25zdGFudEZyb21Qcm9wZXJ0aWVzIjsKKwlTdHJpbmcKKwkJdmFsID0gKFN0cmluZylwcm9wcy5nZXRQcm9wZXJ0eShwcm9wKTsKKwkKKwlpZiggdmFsICE9IG51bGwgKQorCQl7CisJCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogJXMgPSAnJXMnIChmcm9tIHByb3BlcnRpZXMpLlxuIiwgIGZ1bmMsIHByb3AsIHZhbCk7CisJCXJldHVybiB2YWw7CisJCX0JCisJZWxzZQorCQl7CisJCS8vU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogc2V0IGNvbnN0YW50ICVzID0gJyVzJyAoZnJvbSBkZWZhdWx0KSFcbiIsIGZ1bmMsIHByb3AsIHByb3BEZWZhdWx0KTsKKwkJcmV0dXJuIHByb3BEZWZhdWx0OworCQl9CisJCisJfSAvLyBpbml0X0NvbnN0YW50RnJvbVByb3BlcnRpZXMKKwkKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dmb3JtU2VydmljZUphci8uY2xhc3NwYXRoIGIvV2Zvcm1TZXJ2aWNlSmFyLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIwM2VkMQotLS0gL2Rldi9udWxsCisrKyBiL1dmb3JtU2VydmljZUphci8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsMjYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy1XZm9ybVNlcnZpY2VzIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjLUpzb25UcmF2ZXJzZSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy1HbGVtbVNlcnZpY2VzIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjLUdsZW1tQ2xpZW50Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KYXZhU0UtMS44Ij4KKwkJPGF0dHJpYnV0ZXM+CisJCQk8YXR0cmlidXRlIG5hbWU9Im1hdmVuLnBvbWRlcml2ZWQiIHZhbHVlPSJ0cnVlIi8+CisJCTwvYXR0cmlidXRlcz4KKwk8L2NsYXNzcGF0aGVudHJ5PgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLm0yZS5NQVZFTjJfQ0xBU1NQQVRIX0NPTlRBSU5FUiI+CisJCTxhdHRyaWJ1dGVzPgorCQkJPGF0dHJpYnV0ZSBuYW1lPSJtYXZlbi5wb21kZXJpdmVkIiB2YWx1ZT0idHJ1ZSIvPgorCQk8L2F0dHJpYnV0ZXM+CisJPC9jbGFzc3BhdGhlbnRyeT4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ibGliIiBwYXRoPSIvVXRpbHMvdGFyZ2V0L1V0aWxzLTAuMS1TTkFQU0hPVC5qYXIiLz4KKwk8Y2xhc3NwYXRoZW50cnkgY29tYmluZWFjY2Vzc3J1bGVzPSJmYWxzZSIga2luZD0ic3JjIiBwYXRoPSIvVXRpbHMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBvdXRwdXQ9InRhcmdldC9jbGFzc2VzIiBwYXRoPSJzcmMiPgorCQk8YXR0cmlidXRlcz4KKwkJCTxhdHRyaWJ1dGUgbmFtZT0ib3B0aW9uYWwiIHZhbHVlPSJ0cnVlIi8+CisJCQk8YXR0cmlidXRlIG5hbWU9Im1hdmVuLnBvbWRlcml2ZWQiIHZhbHVlPSJ0cnVlIi8+CisJCTwvYXR0cmlidXRlcz4KKwk8L2NsYXNzcGF0aGVudHJ5PgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9InRhcmdldC9jbGFzc2VzIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL1dmb3JtU2VydmljZUphci8ucHJvamVjdCBiL1dmb3JtU2VydmljZUphci8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjk3MzFhCi0tLSAvZGV2L251bGwKKysrIGIvV2Zvcm1TZXJ2aWNlSmFyLy5wcm9qZWN0CkBAIC0wLDAgKzEsNDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPndmb3JtU2VydmljZUphcjwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLm0yZS5jb3JlLm1hdmVuMkJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLm0yZS5jb3JlLm1hdmVuMk5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+CisJPGxpbmtlZFJlc291cmNlcz4KKwkJPGxpbms+CisJCQk8bmFtZT5zcmMtR2xlbW1DbGllbnQ8L25hbWU+CisJCQk8dHlwZT4yPC90eXBlPgorCQkJPGxvY2F0aW9uPkM6L215SURTL0RhdGVuL0tvckFQL1NlcnZpY2VzL0dsZW1tQ2xpZW50L3NyYzwvbG9jYXRpb24+CisJCTwvbGluaz4KKwkJPGxpbms+CisJCQk8bmFtZT5zcmMtR2xlbW1TZXJ2aWNlczwvbmFtZT4KKwkJCTx0eXBlPjI8L3R5cGU+CisJCQk8bG9jYXRpb24+QzovbXlJRFMvRGF0ZW4vS29yQVAvU2VydmljZXMvR2xlbW1TZXJ2aWNlcy9zcmM8L2xvY2F0aW9uPgorCQk8L2xpbms+CisJCTxsaW5rPgorCQkJPG5hbWU+c3JjLUpzb25UcmF2ZXJzZTwvbmFtZT4KKwkJCTx0eXBlPjI8L3R5cGU+CisJCQk8bG9jYXRpb24+QzovbXlJRFMvRGF0ZW4vS29yQVAvU2VydmljZXMvSnNvblRyYXZlcnNlL3NyYzwvbG9jYXRpb24+CisJCTwvbGluaz4KKwkJPGxpbms+CisJCQk8bmFtZT5zcmMtV2Zvcm1TZXJ2aWNlczwvbmFtZT4KKwkJCTx0eXBlPjI8L3R5cGU+CisJCQk8bG9jYXRpb24+QzovbXlJRFMvRGF0ZW4vS29yQVAvU2VydmljZXMvV2Zvcm1TZXJ2aWNlcy9zcmM8L2xvY2F0aW9uPgorCQk8L2xpbms+CisJPC9saW5rZWRSZXNvdXJjZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL1dmb3JtU2VydmljZUphci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9XZm9ybVNlcnZpY2VKYXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OTQ3ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9XZm9ybVNlcnZpY2VKYXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsNiBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS44CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuOAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucmVsZWFzZT1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuOApkaWZmIC0tZ2l0IGEvV2Zvcm1TZXJ2aWNlSmFyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5tMmUuY29yZS5wcmVmcyBiL1dmb3JtU2VydmljZUphci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubTJlLmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg5N2E3ZgotLS0gL2Rldi9udWxsCisrKyBiL1dmb3JtU2VydmljZUphci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubTJlLmNvcmUucHJlZnMKQEAgLTAsMCArMSw0IEBACithY3RpdmVQcm9maWxlcz0KK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCityZXNvbHZlV29ya3NwYWNlUHJvamVjdHM9dHJ1ZQordmVyc2lvbj0xCmRpZmYgLS1naXQgYS9XZm9ybVNlcnZpY2VKYXIvcG9tLnhtbCBiL1dmb3JtU2VydmljZUphci9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMWZmODIKLS0tIC9kZXYvbnVsbAorKysgYi9XZm9ybVNlcnZpY2VKYXIvcG9tLnhtbApAQCAtMCwwICsxLDUzIEBACis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICA8Z3JvdXBJZD5kZS5rb3JhcC5zZXJ2aWNlczwvZ3JvdXBJZD4KKyAgPGFydGlmYWN0SWQ+d2Zvcm1TZXJ2aWNlSmFyPC9hcnRpZmFjdElkPgorICA8dmVyc2lvbj4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgIDxuYW1lPldmb3JtU2VydmljZXMtSmFyPC9uYW1lPgorICA8ZGVzY3JpcHRpb24+SkFSIGZvciBXZm9ybVNlcnZpY2VzIFNvdXJjZXM8L2Rlc2NyaXB0aW9uPgorICAKKyA8ZGVwZW5kZW5jaWVzPgorICAgIDxkZXBlbmRlbmN5PgorICAgIDxncm91cElkPmphdmF4LnNlcnZsZXQ8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+c2VydmxldC1hcGk8L2FydGlmYWN0SWQ+CisgICAgPHZlcnNpb24+Mi41PC92ZXJzaW9uPgorICAgPC9kZXBlbmRlbmN5PgorICAgPCEtLSBodHRwczovL212bnJlcG9zaXRvcnkuY29tL2FydGlmYWN0L2phdmF4LndzLnJzL2phdmF4LndzLnJzLWFwaSAtLT4KKyAgIDxkZXBlbmRlbmN5PgorICAgIDxncm91cElkPmphdmF4LndzLnJzPC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPmphdmF4LndzLnJzLWFwaTwvYXJ0aWZhY3RJZD4KKyAgICA8dmVyc2lvbj4yLjA8L3ZlcnNpb24+CisgICA8L2RlcGVuZGVuY3k+CisgICA8ZGVwZW5kZW5jeT4KKyAgICAgPGdyb3VwSWQ+Y29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmU8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+amFja3Nvbi1jb3JlPC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjIuOS42PC92ZXJzaW9uPgorICAgIDxzY29wZT5jb21waWxlPC9zY29wZT4KKyAgIDwvZGVwZW5kZW5jeT4KKwk8ZGVwZW5kZW5jeT4KKwkgIDxncm91cElkPmNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlPC9ncm91cElkPgorCSAgPGFydGlmYWN0SWQ+amFja3Nvbi1hbm5vdGF0aW9uczwvYXJ0aWZhY3RJZD4KKwkgIDx2ZXJzaW9uPjIuOS42PC92ZXJzaW9uPgorCTwvZGVwZW5kZW5jeT4KKwk8ZGVwZW5kZW5jeT4KKwkgIDxncm91cElkPmNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlPC9ncm91cElkPgorCSAgPGFydGlmYWN0SWQ+amFja3Nvbi1kYXRhYmluZDwvYXJ0aWZhY3RJZD4KKwkgIDx2ZXJzaW9uPjIuOS42PC92ZXJzaW9uPgorCSAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KKwk8L2RlcGVuZGVuY3k+CisgIDwvZGVwZW5kZW5jaWVzPgorICAKKyAgPGJ1aWxkPgorICAgIDxzb3VyY2VEaXJlY3Rvcnk+c3JjPC9zb3VyY2VEaXJlY3Rvcnk+CisgICAgPHBsdWdpbnM+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1jb21waWxlci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjMuNy4wPC92ZXJzaW9uPgorICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8c291cmNlPjEuODwvc291cmNlPgorICAgICAgICAgIDx0YXJnZXQ+MS44PC90YXJnZXQ+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvcGx1Z2luPgorICAgIDwvcGx1Z2lucz4KKyAgPC9idWlsZD4KKzwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZm9ybVNlcnZpY2VzLy5jbGFzc3BhdGggYi9XZm9ybVNlcnZpY2VzLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMzM2Q5NwotLS0gL2Rldi9udWxsCisrKyBiL1dmb3JtU2VydmljZXMvLmNsYXNzcGF0aApAQCAtMCwwICsxLDMxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBvdXRwdXQ9InRhcmdldC9jbGFzc2VzIiBwYXRoPSJzcmMiPgorCQk8YXR0cmlidXRlcz4KKwkJCTxhdHRyaWJ1dGUgbmFtZT0ib3B0aW9uYWwiIHZhbHVlPSJ0cnVlIi8+CisJCQk8YXR0cmlidXRlIG5hbWU9Im1hdmVuLnBvbWRlcml2ZWQiIHZhbHVlPSJ0cnVlIi8+CisJCTwvYXR0cmlidXRlcz4KKwk8L2NsYXNzcGF0aGVudHJ5PgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9Impzb24iLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzZXJ2aWNlcyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSmF2YVNFLTEuOCI+CisJCTxhdHRyaWJ1dGVzPgorCQkJPGF0dHJpYnV0ZSBuYW1lPSJtYXZlbi5wb21kZXJpdmVkIiB2YWx1ZT0idHJ1ZSIvPgorCQk8L2F0dHJpYnV0ZXM+CisJPC9jbGFzc3BhdGhlbnRyeT4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUuY29udGFpbmVyL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnJ1bnRpbWVUYXJnZXQvQXBhY2hlIFRvbWNhdCB2OS4wIj4KKwkJPGF0dHJpYnV0ZXM+CisJCQk8YXR0cmlidXRlIG5hbWU9Im93bmVyLnByb2plY3QuZmFjZXRzIiB2YWx1ZT0ianN0LndlYiIvPgorCQk8L2F0dHJpYnV0ZXM+CisJPC9jbGFzc3BhdGhlbnRyeT4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5tMmUuTUFWRU4yX0NMQVNTUEFUSF9DT05UQUlORVIiPgorCQk8YXR0cmlidXRlcz4KKwkJCTxhdHRyaWJ1dGUgbmFtZT0ibWF2ZW4ucG9tZGVyaXZlZCIgdmFsdWU9InRydWUiLz4KKwkJPC9hdHRyaWJ1dGVzPgorCTwvY2xhc3NwYXRoZW50cnk+CisJPGNsYXNzcGF0aGVudHJ5IGNvbWJpbmVhY2Nlc3NydWxlcz0iZmFsc2UiIGV4cG9ydGVkPSJ0cnVlIiBraW5kPSJzcmMiIHBhdGg9Ii9Kc29uVHJhdmVyc2UiLz4KKwk8Y2xhc3NwYXRoZW50cnkgY29tYmluZWFjY2Vzc3J1bGVzPSJmYWxzZSIga2luZD0ic3JjIiBwYXRoPSIvR2xlbW1DbGllbnQiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ibGliIiBwYXRoPSJDOi9Vc2Vycy9GcmFuY2svLm0yL3JlcG9zaXRvcnkvZGUva29yYXAvanNvbi9Kc29uVHJhdmVyc2UvMC4xLVNOQVBTSE9UL0pzb25UcmF2ZXJzZS0wLjEtU05BUFNIT1QuamFyIi8+CisJPGNsYXNzcGF0aGVudHJ5IGNvbWJpbmVhY2Nlc3NydWxlcz0iZmFsc2UiIGtpbmQ9InNyYyIgcGF0aD0iL3V0aWxzIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0idGFyZ2V0L2NsYXNzZXMiLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvV2Zvcm1TZXJ2aWNlcy8ucHJvamVjdCBiL1dmb3JtU2VydmljZXMvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU2ZGIyNAotLS0gL2Rldi9udWxsCisrKyBiL1dmb3JtU2VydmljZXMvLnByb2plY3QKQEAgLTAsMCArMSw1NyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+d2Zvcm1TZXJ2aWNlczwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCQk8cHJvamVjdD51dGlsczwvcHJvamVjdD4KKwkJPHByb2plY3Q+SnNvblRyYXZlcnNlPC9wcm9qZWN0PgorCQk8cHJvamVjdD5HbGVtbUNsaWVudDwvcHJvamVjdD4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5idWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLnZhbGlkYXRpb25idWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLm0yZS5jb3JlLm1hdmVuMkJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLm0yZS5jb3JlLm1hdmVuMk5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmplbS53b3JrYmVuY2guSmF2YUVNRk5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLndzdC5jb21tb24ubW9kdWxlY29yZS5Nb2R1bGVDb3JlTmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUubmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUuanNOYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+CisJPGxpbmtlZFJlc291cmNlcz4KKwkJPGxpbms+CisJCQk8bmFtZT5qc29uPC9uYW1lPgorCQkJPHR5cGU+MjwvdHlwZT4KKwkJCTxsb2NhdGlvbj5DOi9teUlEUy9EYXRlbi9Lb3JBUC9TZXJ2aWNlcy1icmFuY2gtMC4xL0pzb25UcmF2ZXJzZS9zcmMvZGUva29yYXAvanNvbjwvbG9jYXRpb24+CisJCTwvbGluaz4KKwkJPGxpbms+CisJCQk8bmFtZT5zZXJ2aWNlczwvbmFtZT4KKwkJCTx0eXBlPjI8L3R5cGU+CisJCQk8bG9jYXRpb24+QzovbXlJRFMvRGF0ZW4vS29yQVAvU2VydmljZXMtYnJhbmNoLTAuMS9HbGVtbVNlcnZpY2VzL3NyYy9kZS9rb3JhcC9zZXJ2aWNlczwvbG9jYXRpb24+CisJCTwvbGluaz4KKwkJPGxpbms+CisJCQk8bmFtZT5zcmMtR2xlbW1TZXJ2aWNlczwvbmFtZT4KKwkJCTx0eXBlPjI8L3R5cGU+CisJCQk8bG9jYXRpb24+QzovbXlJRFMvRGF0ZW4vS29yQVAvU2VydmljZXMvR2xlbW1TZXJ2aWNlcy9zcmM8L2xvY2F0aW9uPgorCQk8L2xpbms+CisJPC9saW5rZWRSZXNvdXJjZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL1dmb3JtU2VydmljZXMvLnNldHRpbmdzLy5qc2R0c2NvcGUgYi9XZm9ybVNlcnZpY2VzLy5zZXR0aW5ncy8uanNkdHNjb3BlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZTY2NmQKLS0tIC9kZXYvbnVsbAorKysgYi9XZm9ybVNlcnZpY2VzLy5zZXR0aW5ncy8uanNkdHNjb3BlCkBAIC0wLDAgKzEsMTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBleGNsdWRpbmc9IioqL2Jvd2VyX2NvbXBvbmVudHMvKnwqKi9ub2RlX21vZHVsZXMvKnwqKi8qLm1pbi5qcyIga2luZD0ic3JjIiBwYXRoPSJXZWJDb250ZW50Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS53c3QuanNkdC5sYXVuY2hpbmcuV2ViUHJvamVjdCI+CisJCTxhdHRyaWJ1dGVzPgorCQkJPGF0dHJpYnV0ZSBuYW1lPSJoaWRlIiB2YWx1ZT0idHJ1ZSIvPgorCQk8L2F0dHJpYnV0ZXM+CisJPC9jbGFzc3BhdGhlbnRyeT4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS53c3QuanNkdC5sYXVuY2hpbmcuYmFzZUJyb3dzZXJMaWJyYXJ5Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL1dmb3JtU2VydmljZXMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvV2Zvcm1TZXJ2aWNlcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU0YTNhZAotLS0gL2Rldi9udWxsCisrKyBiL1dmb3JtU2VydmljZXMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsOSBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjgKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS44CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnJlbGVhc2U9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjgKZGlmZiAtLWdpdCBhL1dmb3JtU2VydmljZXMvLnNldHRpbmdzL29yZy5lY2xpcHNlLm0yZS5jb3JlLnByZWZzIGIvV2Zvcm1TZXJ2aWNlcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubTJlLmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg5N2E3ZgotLS0gL2Rldi9udWxsCisrKyBiL1dmb3JtU2VydmljZXMvLnNldHRpbmdzL29yZy5lY2xpcHNlLm0yZS5jb3JlLnByZWZzCkBAIC0wLDAgKzEsNCBAQAorYWN0aXZlUHJvZmlsZXM9CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorcmVzb2x2ZVdvcmtzcGFjZVByb2plY3RzPXRydWUKK3ZlcnNpb249MQpkaWZmIC0tZ2l0IGEvV2Zvcm1TZXJ2aWNlcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnQgYi9XZm9ybVNlcnZpY2VzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDhmNzBlCi0tLSAvZGV2L251bGwKKysrIGIvV2Zvcm1TZXJ2aWNlcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnQKQEAgLTAsMCArMSwyMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48cHJvamVjdC1tb2R1bGVzIGlkPSJtb2R1bGVDb3JlSWQiIHByb2plY3QtdmVyc2lvbj0iMS41LjAiPgorICAgIDx3Yi1tb2R1bGUgZGVwbG95LW5hbWU9Indmb3JtU2VydmljZXMtMC4xLVNOQVBTSE9UIj4KKyAgICAgICAgPHdiLXJlc291cmNlIGRlcGxveS1wYXRoPSIvIiBzb3VyY2UtcGF0aD0iL3RhcmdldC9tMmUtd3RwL3dlYi1yZXNvdXJjZXMiLz4KKyAgICAgICAgPHdiLXJlc291cmNlIGRlcGxveS1wYXRoPSIvIiBzb3VyY2UtcGF0aD0iL1dlYkNvbnRlbnQiIHRhZz0iZGVmYXVsdFJvb3RTb3VyY2UiLz4KKyAgICAgICAgPHdiLXJlc291cmNlIGRlcGxveS1wYXRoPSIvV0VCLUlORi9jbGFzc2VzIiBzb3VyY2UtcGF0aD0iL3NyYyIvPgorICAgICAgICA8d2ItcmVzb3VyY2UgZGVwbG95LXBhdGg9Ii9XRUItSU5GL2NsYXNzZXMiIHNvdXJjZS1wYXRoPSIvc2VydmljZXMiLz4KKyAgICAgICAgPHdiLXJlc291cmNlIGRlcGxveS1wYXRoPSIvV0VCLUlORi9jbGFzc2VzIiBzb3VyY2UtcGF0aD0iL2pzb24iLz4KKyAgICAgICAgPGRlcGVuZGVudC1tb2R1bGUgYXJjaGl2ZU5hbWU9InV0aWxzLTAuMS1TTkFQU0hPVC5qYXIiIGRlcGxveS1wYXRoPSIvV0VCLUlORi9saWIiIGhhbmRsZT0ibW9kdWxlOi9yZXNvdXJjZS91dGlscy91dGlscyI+CisgICAgICAgICAgICA8ZGVwZW5kZW5jeS10eXBlPnVzZXM8L2RlcGVuZGVuY3ktdHlwZT4KKyAgICAgICAgPC9kZXBlbmRlbnQtbW9kdWxlPgorICAgICAgICA8ZGVwZW5kZW50LW1vZHVsZSBhcmNoaXZlTmFtZT0iSnNvblRyYXZlcnNlLTAuMS1TTkFQU0hPVC5qYXIiIGRlcGxveS1wYXRoPSIvV0VCLUlORi9saWIiIGhhbmRsZT0ibW9kdWxlOi9yZXNvdXJjZS9Kc29uVHJhdmVyc2UvSnNvblRyYXZlcnNlIj4KKyAgICAgICAgICAgIDxkZXBlbmRlbmN5LXR5cGU+dXNlczwvZGVwZW5kZW5jeS10eXBlPgorICAgICAgICA8L2RlcGVuZGVudC1tb2R1bGU+CisgICAgICAgIDxkZXBlbmRlbnQtbW9kdWxlIGFyY2hpdmVOYW1lPSJHbGVtbUNsaWVudC0wLjItVGVzdC5qYXIiIGRlcGxveS1wYXRoPSIvV0VCLUlORi9saWIiIGhhbmRsZT0ibW9kdWxlOi9yZXNvdXJjZS9HbGVtbUNsaWVudC9HbGVtbUNsaWVudCI+CisgICAgICAgICAgICA8ZGVwZW5kZW5jeS10eXBlPnVzZXM8L2RlcGVuZGVuY3ktdHlwZT4KKyAgICAgICAgPC9kZXBlbmRlbnQtbW9kdWxlPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iamF2YS1vdXRwdXQtcGF0aCIgdmFsdWU9Ii93Zm9ybVNlcnZpY2VzL2J1aWxkL2NsYXNzZXMiLz4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNvbnRleHQtcm9vdCIgdmFsdWU9Indmb3JtU2VydmljZXMiLz4KKyAgICA8L3diLW1vZHVsZT4KKzwvcHJvamVjdC1tb2R1bGVzPgpkaWZmIC0tZ2l0IGEvV2Zvcm1TZXJ2aWNlcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUueG1sIGIvV2Zvcm1TZXJ2aWNlcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MTI0ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9XZm9ybVNlcnZpY2VzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS54bWwKQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxmYWNldGVkLXByb2plY3Q+CisgIDxydW50aW1lIG5hbWU9IkFwYWNoZSBUb21jYXQgdjkuMCIvPgorICA8Zml4ZWQgZmFjZXQ9ImpzdC53ZWIiLz4KKyAgPGZpeGVkIGZhY2V0PSJ3c3QuanNkdC53ZWIiLz4KKyAgPGZpeGVkIGZhY2V0PSJqYXZhIi8+CisgIDxpbnN0YWxsZWQgZmFjZXQ9ImphdmEiIHZlcnNpb249IjEuOCIvPgorICA8aW5zdGFsbGVkIGZhY2V0PSJqc3Qud2ViIiB2ZXJzaW9uPSI0LjAiLz4KKyAgPGluc3RhbGxlZCBmYWNldD0id3N0LmpzZHQud2ViIiB2ZXJzaW9uPSIxLjAiLz4KKzwvZmFjZXRlZC1wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvV2Zvcm1TZXJ2aWNlcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuc3VwZXJUeXBlLmNvbnRhaW5lciBiL1dmb3JtU2VydmljZXMvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5qc2R0LnVpLnN1cGVyVHlwZS5jb250YWluZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JkNWQwYQotLS0gL2Rldi9udWxsCisrKyBiL1dmb3JtU2VydmljZXMvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5qc2R0LnVpLnN1cGVyVHlwZS5jb250YWluZXIKQEAgLTAsMCArMSBAQAorb3JnLmVjbGlwc2Uud3N0LmpzZHQubGF1bmNoaW5nLmJhc2VCcm93c2VyTGlicmFyeQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dmb3JtU2VydmljZXMvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5qc2R0LnVpLnN1cGVyVHlwZS5uYW1lIGIvV2Zvcm1TZXJ2aWNlcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuc3VwZXJUeXBlLm5hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDViZDcxYgotLS0gL2Rldi9udWxsCisrKyBiL1dmb3JtU2VydmljZXMvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5qc2R0LnVpLnN1cGVyVHlwZS5uYW1lCkBAIC0wLDAgKzEgQEAKK1dpbmRvdwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dmb3JtU2VydmljZXMvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLnByZWZzIGIvV2Zvcm1TZXJ2aWNlcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24ucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRjYWQ4YwotLS0gL2Rldi9udWxsCisrKyBiL1dmb3JtU2VydmljZXMvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLnByZWZzCkBAIC0wLDAgKzEsMiBAQAorZGlzYWJsZWQ9MDZ0YXJnZXQKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS9XZm9ybVNlcnZpY2VzL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9XZm9ybVNlcnZpY2VzL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU0MjcyZQotLS0gL2Rldi9udWxsCisrKyBiL1dmb3JtU2VydmljZXMvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDMgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQ2xhc3MtUGF0aDogCisKZGlmZiAtLWdpdCBhL1dmb3JtU2VydmljZXMvV2ViQ29udGVudC9XRUItSU5GL1dmb3JtU2VydmljZXMucHJvcGVydGllcyBiL1dmb3JtU2VydmljZXMvV2ViQ29udGVudC9XRUItSU5GL1dmb3JtU2VydmljZXMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGY0MDY3Ci0tLSAvZGV2L251bGwKKysrIGIvV2Zvcm1TZXJ2aWNlcy9XZWJDb250ZW50L1dFQi1JTkYvV2Zvcm1TZXJ2aWNlcy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjIgQEAKKyMgV29yZGZvcm1TZXJ2aWNlcyBwcm9wZXJ0aWVzOgorIyBleHBlY3RlZCBpbiAvV0VCLUlORi8uCisKKyMjIEdlbmVyYWwgcHJvcGVydGllczoKK0dTX1dvcmtpbmdQYXRoID0gL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvd29yay1saXZlCisKKyMjIExvZ2luZzoKKworIyBmbmFtZU91dCA9IEdTX1dvcmtpbmdQYXRoICsgIi9XZm9ybW1TZXJ2aWNlcy5sb2ciOworI2ZuYW1lT3V0ID0gV2Zvcm1TZXJ2aWNlcy10LmxvZworZm5hbWVPdXQgPSBXZm9ybVNlcnZpY2VzLmxvZworIyBmbmFtZUVyciA9IEdTX1dvcmtpbmdQYXRoICsgIi9XZm9ybVNlcnZpY2VzLmVyciI7CisjZm5hbWVFcnIgPSBXZm9ybVNlcnZpY2VzLXQuZXJyCitmbmFtZUVyciA9IFdmb3JtU2VydmljZXMuZXJyCisKKyMjIENvbW11bmljYXRpbmcgd2l0aCB0aGUgR2xlbW1TZXJ2aWNlcworVVJMR2xlbW1TZXJ2ZXIJCT0gaHR0cDovL2MwcjRmdAorR2xlbW1Qb3J0CQkJPSA0MDkxMworI1VSTEdsZW1tU2VydmljZXMJPSBHbGVtbVNlcnZpY2VzLTAuMi1UZXN0CitVUkxHbGVtbVNlcnZpY2VzCT0gR2xlbW1TZXJ2aWNlcworTGVtbWFSZXF1ZXN0UGF0aAk9IGluZGV4L2luZm8vbGVtbWEKKwkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZm9ybVNlcnZpY2VzL1dlYkNvbnRlbnQvV0VCLUlORi9wbHVnaW4uaHRtbCBiL1dmb3JtU2VydmljZXMvV2ViQ29udGVudC9XRUItSU5GL3BsdWdpbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MzYwNjcKLS0tIC9kZXYvbnVsbAorKysgYi9XZm9ybVNlcnZpY2VzL1dlYkNvbnRlbnQvV0VCLUlORi9wbHVnaW4uaHRtbApAQCAtMCwwICsxLDM4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorIDxoZWFkPgorICA8dGl0bGU+V29yZGZvcm0gU2VydmljZXMgKGluY2x1ZGluZyBHbGVtbSBTZXJ2aWNlcyk8L3RpdGxlPgorICA8IS0tIGxvYWQgY2xpZW50IGphdmFzY3JpcHQgbGlicmFyeSAtLT4KKyAgPCEtLSAgbGl2ZS12ZXJzaW9uOiBzY3JpcHQgc3JjPSJodHRwczovL2tvcmFwLmlkcy1tYW5uaGVpbS5kZS9qcy9rb3JhcC1wbHVnaW4tMC4yLmpzIgorICAgICAgICAgIGRhdGEtc2VydmVyPSJodHRwczovL2tvcmFwLmlkcy1tYW5uaGVpbS5kZS8iPjwvc2NyaXB0IC0tPgorICA8IS0tICBUZXN0dmVyc2lvbjogLS0+CisgIDxzY3JpcHQgc3JjPSJodHRwczovL2tvcmFwLmlkcy1tYW5uaGVpbS5kZS9pbnN0YW5jZS90ZXN0L2pzL2tvcmFwLXBsdWdpbi0wLjIuanMiCisgICAgICAgICAgZGF0YS1zZXJ2ZXI9Imh0dHBzOi8va29yYXAuaWRzLW1hbm5oZWltLmRlL2luc3RhbmNlL3Rlc3QiPjwvc2NyaXB0PgorIDwvaGVhZD4KKyA8Ym9keT4KKyAgPHNjcmlwdD4KKyAgICAgICBsZXQgZGF0YSA9IHsKKyAgICAgICAgICdhY3Rpb24nIDogJ3BpcGUnLAorICAgICAgICAgPCEtLSBLb3JhbFF1ZXJ5IG1pdCBQT1NUIFJlcXVlc3QgYW4gZGllc2VuIHNlcnZpY2Ugc2NoaWNrZW47IGRhaGludGVyIHN0ZWh0IGRlciBXb3JkZm9ybSBTZXJ2aWNlLCBkYWhpbnRlciBkZXIgR2xlbW0gU2VydmljZS4gLS0+CisgICAgICAgICA8IS0tIG9obmUgcHJveHk6ICdzZXJ2aWNlJyA6ICdodHRwOi8vYzByNGZ0Lmlkcy1tYW5uaGVpbS5kZTo0MDkxMy93Zm9ybVNlcnZpY2VzLTAuMS1TTkFQU0hPVC93Zm9ybVNlcnZpY2VzL3F1ZXJ5JyAtLT4KKyAgICAgICAgIDwhLS0gbWl0IHByb3h5IDogJ3NlcnZpY2UnIDogJ2h0dHBzOi8va29yYXAuaWRzLW1hbm5oZWltLmRlL3Byb3h5L2MwcjRmdC93Zm9ybVNlcnZpY2VzLTAuMS1TTkFQU0hPVC93Zm9ybVNlcnZpY2VzL3F1ZXJ5JyAtLT4KKyAgICAgICAgIDwhLS0gYWIgVmVyc2lvbiAwLjIgZGVyIFdmb3JtU2VydmljZXMgZW50aMOkbHQgZGllIFVSTCB6dSBkZW4gU2VydmljZXMga2VpbmUgVmVyc2lvbnNudW1tZXIgbWVocjogLS0+CisgICAgICAgICAnc2VydmljZScgOiAnaHR0cHM6Ly9rb3JhcC5pZHMtbWFubmhlaW0uZGUvcHJveHkvYzByNGZ0L3dmb3JtU2VydmljZXMvd2Zvcm1TZXJ2aWNlcy9xdWVyeScKKyAgICAgICB9OworCisgICAgICAgZnVuY3Rpb24gcGx1Z2luaXQgKHApIHsKKyAgICAgICAgIHAub25NZXNzYWdlID0gZnVuY3Rpb24obXNnKSB7CisgICAgICAgICAgIGlmIChtc2cua2V5ID09ICdnbGVtbScpIHsKKyAgICAgICAgICAgICBpZiAobXNnLnZhbHVlKSB7CisgICAgICAgICAgICAgICBkYXRhWydqb2InXSA9ICdhZGQnOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgIGRhdGFbJ2pvYiddID0gJ2RlbCc7CisgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICBLb3JBUGx1Z2luLnNlbmRNc2coZGF0YSk7CisgICAgICAgICAgIH07CisgICAgICAgICB9OworICAgICAgIH07CisgICAgIDwvc2NyaXB0PgorICAgPC9ib2R5PgorPC9odG1sPiAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZm9ybVNlcnZpY2VzL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sIGIvV2Zvcm1TZXJ2aWNlcy9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjNhZTk3Ci0tLSAvZGV2L251bGwKKysrIGIvV2Zvcm1TZXJ2aWNlcy9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbApAQCAtMCwwICsxLDQ1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorCis8IS0tIGtvcGllcnQgYXVzIGh0dHBzOi8vYmxvZy5kZWphdnUuc2svcmVnaXN0ZXJpbmctcmVzb3VyY2VzLWFuZC1wcm92aWRlcnMtaW4tamVyc2V5LTIvICwgMDkuMTIuMTkvRkIgLS0+CisKKzx3ZWItYXBwIHZlcnNpb249IjIuNSIKKyAgICAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisKKyAgICA8c2VydmxldD4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5Xb3JkZm9ybVNlcnZpY2VzIG1pdCBKZXJzZXkgUkVTVDwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5vcmcuZ2xhc3NmaXNoLmplcnNleS5zZXJ2bGV0LlNlcnZsZXRDb250YWluZXI8L3NlcnZsZXQtY2xhc3M+CisKKyAgICAgICAgPCEtLSBSZWdpc3RlciBKQVgtUlMgQXBwbGljYXRpb24sIGlmIG5lZWRlZC4gLS0+CisgICAgICAgIDwhLS0gaW5pdC1wYXJhbT4KKyAgICAgICAgICAgIDxwYXJhbS1uYW1lPmphdmF4LndzLnJzLkFwcGxpY2F0aW9uPC9wYXJhbS1uYW1lPgorICAgICAgICAgICAgPHBhcmFtLXZhbHVlPm15LnBhY2thZ2UuTXlBcHBsaWNhdGlvbjwvcGFyYW0tdmFsdWU+CisgICAgICAgIDwvaW5pdC1wYXJhbSAtLT4KKworICAgICAgICA8IS0tIFJlZ2lzdGVyIHJlc291cmNlcyBhbmQgcHJvdmlkZXJzIHVuZGVyIG15LnBhY2thZ2UuIC0tPgorICAgICAgICA8aW5pdC1wYXJhbT4KKyAgICAgICAgICAgIDxwYXJhbS1uYW1lPmplcnNleS5jb25maWcuc2VydmVyLnByb3ZpZGVyLnBhY2thZ2VzPC9wYXJhbS1uYW1lPgorICAgICAgICAgICAgPHBhcmFtLXZhbHVlPmRlLmtvcmFwLnNlcnZpY2VzPC9wYXJhbS12YWx1ZT4KKyAgICAgICAgPC9pbml0LXBhcmFtPgorCisgICAgICAgIDwhLS0gUmVnaXN0ZXIgbXkgY3VzdG9tIHByb3ZpZGVyIChub3QgbmVlZGVkIGlmIGl0J3MgaW4gbXkucGFja2FnZSkgQU5EIExvZ2dpbmdGaWx0ZXIuIC0tPgorICAgICAgICA8aW5pdC1wYXJhbT4KKyAgICAgICAgICAgIDxwYXJhbS1uYW1lPmplcnNleS5jb25maWcuc2VydmVyLnByb3ZpZGVyLmNsYXNzbmFtZXM8L3BhcmFtLW5hbWU+CisgICAgICAgICAgICA8cGFyYW0tdmFsdWU+ZGUua29yYXAuc2VydmljZXM8L3BhcmFtLXZhbHVlPgorICAgICAgICA8L2luaXQtcGFyYW0+CisKKyAgICAgICAgPCEtLSBFbmFibGUgVHJhY2luZyBzdXBwb3J0LiAtLT4KKyAgICAgICAgPGluaXQtcGFyYW0+CisgICAgICAgICAgICA8cGFyYW0tbmFtZT5qZXJzZXkuY29uZmlnLnNlcnZlci50cmFjaW5nPC9wYXJhbS1uYW1lPgorICAgICAgICAgICAgPHBhcmFtLXZhbHVlPkFMTDwvcGFyYW0tdmFsdWU+CisgICAgICAgIDwvaW5pdC1wYXJhbT4KKworICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjE8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CisKKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPldvcmRmb3JtU2VydmljZXMgbWl0IEplcnNleSBSRVNUPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vKjwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+Cis8L3dlYi1hcHA+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2Zvcm1TZXJ2aWNlcy9wb20ueG1sIGIvV2Zvcm1TZXJ2aWNlcy9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZWIyOTcKLS0tIC9kZXYvbnVsbAorKysgYi9XZm9ybVNlcnZpY2VzL3BvbS54bWwKQEAgLTAsMCArMSw4MyBAQAorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgPGdyb3VwSWQ+ZGUua29yYXAuc2VydmljZXM8L2dyb3VwSWQ+CisgIDxhcnRpZmFjdElkPndmb3JtU2VydmljZXM8L2FydGlmYWN0SWQ+CisgIDwhLS0gdmVyc2lvbj4wLjItVGVzdDwvdmVyc2lvbi0tPgorICA8dmVyc2lvbj4wLjItbGl2ZTwvdmVyc2lvbj4KKyAgPG5hbWU+d2Zvcm1TZXJ2aWNlczwvbmFtZT4KKyAgPGRlc2NyaXB0aW9uPldvcmRmb3JtIFNlcnZpY2VzIGZvciBSZXdyaXRpbmcgV29yZGZvcm0gUXVlcmllcyBhbmQgSGFuZGxpbmcgV29yZGZvcm0gTGlzdHMuPC9kZXNjcmlwdGlvbj4KKyAgPGJ1aWxkPgorICAgIDxzb3VyY2VEaXJlY3Rvcnk+c3JjPC9zb3VyY2VEaXJlY3Rvcnk+CisgICAgPHBsdWdpbnM+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1jb21waWxlci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjMuNy4wPC92ZXJzaW9uPgorICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8c291cmNlPjEuODwvc291cmNlPgorICAgICAgICAgIDx0YXJnZXQ+MS44PC90YXJnZXQ+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvcGx1Z2luPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4td2FyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+My4yLjE8L3ZlcnNpb24+CisgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgIDx3YXJTb3VyY2VEaXJlY3Rvcnk+V2ViQ29udGVudDwvd2FyU291cmNlRGlyZWN0b3J5PgorICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICA8L3BsdWdpbj4KKyAgICA8L3BsdWdpbnM+CisgIDwvYnVpbGQ+CisgIAorICAgIDxkZXBlbmRlbmNpZXM+CisgICAgPGRlcGVuZGVuY3k+CisgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KKyAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgorICAgICAgPHZlcnNpb24+My44LjE8L3ZlcnNpb24+CisgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgPC9kZXBlbmRlbmN5PgorICAgPGRlcGVuZGVuY3k+CisgICAgPGdyb3VwSWQ+amF2YXguc2VydmxldDwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5zZXJ2bGV0LWFwaTwvYXJ0aWZhY3RJZD4KKyAgICA8dmVyc2lvbj4yLjU8L3ZlcnNpb24+CisgICA8L2RlcGVuZGVuY3k+CisgICA8IS0tIGh0dHBzOi8vbXZucmVwb3NpdG9yeS5jb20vYXJ0aWZhY3QvamF2YXgud3MucnMvamF2YXgud3MucnMtYXBpIC0tPgorICAgPGRlcGVuZGVuY3k+CisgICAgPGdyb3VwSWQ+amF2YXgud3MucnM8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+amF2YXgud3MucnMtYXBpPC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjIuMDwvdmVyc2lvbj4KKyAgIDwvZGVwZW5kZW5jeT4KKyAgIDxkZXBlbmRlbmN5PgorICAgIDxncm91cElkPmNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlPC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPmphY2tzb24tY29yZTwvYXJ0aWZhY3RJZD4KKyAgICA8dmVyc2lvbj4yLjkuNjwvdmVyc2lvbj4KKyAgICA8c2NvcGU+Y29tcGlsZTwvc2NvcGU+CisgICA8L2RlcGVuZGVuY3k+CisJPGRlcGVuZGVuY3k+CisJICA8Z3JvdXBJZD5jb20uZmFzdGVyeG1sLmphY2tzb24uY29yZTwvZ3JvdXBJZD4KKwkgIDxhcnRpZmFjdElkPmphY2tzb24tYW5ub3RhdGlvbnM8L2FydGlmYWN0SWQ+CisJICA8dmVyc2lvbj4yLjkuNjwvdmVyc2lvbj4KKwk8L2RlcGVuZGVuY3k+CisJPGRlcGVuZGVuY3k+CisJICA8Z3JvdXBJZD5jb20uZmFzdGVyeG1sLmphY2tzb24uY29yZTwvZ3JvdXBJZD4KKwkgIDxhcnRpZmFjdElkPmphY2tzb24tZGF0YWJpbmQ8L2FydGlmYWN0SWQ+CisJICA8dmVyc2lvbj4yLjkuNjwvdmVyc2lvbj4KKwkgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+CisJPC9kZXBlbmRlbmN5PgorCTxkZXBlbmRlbmN5PgorCQk8Z3JvdXBJZD5kZS5rb3JhcC5zZXJ2aWNlczwvZ3JvdXBJZD4KKwkJPGFydGlmYWN0SWQ+dXRpbHM8L2FydGlmYWN0SWQ+CisJCTx2ZXJzaW9uPjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKwk8L2RlcGVuZGVuY3k+CisJPGRlcGVuZGVuY3k+CisJCTxncm91cElkPmRlLmtvcmFwLmpzb248L2dyb3VwSWQ+CisJCTxhcnRpZmFjdElkPkpzb25UcmF2ZXJzZTwvYXJ0aWZhY3RJZD4KKwkgICA8dmVyc2lvbj4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisJPC9kZXBlbmRlbmN5PgorCTxkZXBlbmRlbmN5PgorCQk8Z3JvdXBJZD5kZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ8L2dyb3VwSWQ+CisJCTxhcnRpZmFjdElkPkdsZW1tQ2xpZW50PC9hcnRpZmFjdElkPgorCQk8dmVyc2lvbj4wLjItVGVzdDwvdmVyc2lvbj4KKwk8L2RlcGVuZGVuY3k+CisgICAgPC9kZXBlbmRlbmNpZXM+CisgIAorICAgIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+Cis8L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2Zvcm1TZXJ2aWNlcy9zcmMvZGUva29yYXAvc2VydmljZXMvV29yZGZvcm1SZXdyaXRlLmphdmEgYi9XZm9ybVNlcnZpY2VzL3NyYy9kZS9rb3JhcC9zZXJ2aWNlcy9Xb3JkZm9ybVJld3JpdGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTc1Zjg0Ci0tLSAvZGV2L251bGwKKysrIGIvV2Zvcm1TZXJ2aWNlcy9zcmMvZGUva29yYXAvc2VydmljZXMvV29yZGZvcm1SZXdyaXRlLmphdmEKQEAgLTAsMCArMSwxMjkgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uZGF0YWJpbmQuSnNvbk5vZGU7CitpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmRhdGFiaW5kLk9iamVjdE1hcHBlcjsKKworaW1wb3J0IGRlLmtvcmFwLmpzb24uSnNvblRyYXZlcnNlOworaW1wb3J0IGRlLmtvcmFwLmpzb24uVHJhdmVyc2VkUGF0aDsKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQuR2xlbW1DbGllbnQ7CitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CitpbXBvcnQgZGUua29yYXAuc2VydmljZXMuTGVtbWFSZXNwb25zZTsKKworcHVibGljIGNsYXNzIFdvcmRmb3JtUmV3cml0ZSB7CisKKworCS8qIAorCSAqIHRyYXZlcnNlX2FuZF9yZXdyaXRlX0tvcmFsUXVlcnk6CisJICogUGFyYW1ldGVyczoKKwkgKiBxdWVyeSAgICAgOiBKU09OIEtvcmFsUXVlcnkuCisJICogcHJvcHMJIDogd2Zvcm1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqIAorCSAqIE5vdGVzOgorCSAqIC0gCisJICogUmV0dXJucwk6IDAgPSByZXdyaXRlIGRvbmUuIDEgPSBubyByZXdyaXRlIG5lZWRlZC4gPiAxOiBlcnJvciEKKwkgKiAtIHJld3JpdGVuIG5ldyBRdWVyeSBpZiByZXdyaXR0ZW4gZG9uZS4KKwkgKiAtIG51bGwgKyBubyBleGNlcHRpb246IG5vIHJld3JpdGluZyBuZWVkZWQuCisJICogLSBudWxsICsgZXhjZXB0aW9uICAgOiBlcnJvci4KKwkgKiAwNC4wMy4yMC9GQiAyNy4wNC4yMC9GQiAKKwkgKi8KKwkJIAorCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHRyYXZlcnNlX2FuZF9yZXdyaXRlX0tvcmFsUXVlcnkoCisJCQlTdHJpbmcgCQlxdWVyeSwgCisJCQlQcm9wZXJ0aWVzIAlwcm9wcywgCisJCQlQcmludFN0cmVhbQlmb3V0LAorCQkJUHJpbnRTdHJlYW0gZmVyciApCisJCQorCQkJCQl0aHJvd3MgSU9FeGNlcHRpb24KKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidHJhdmVyc2VfYW5kX3Jld3JpdGVfS29yYWxRdWVyeSI7CisJT2JqZWN0TWFwcGVyCisJCW9iak1hcHBlciA9IG51bGw7CisJSnNvbk5vZGUKKwkJanNvbk5vZGUgPSBudWxsOworCVRyYXZlcnNlZFBhdGgKKwkJdFBhdGggCT0gbnVsbDsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbVJlc3AJPSBudWxsOworCWZpbmFsIGJvb2xlYW4KKwkJYkRlYnVnID0gdHJ1ZTsKKwlpbnQKKwkJbW9kZSA9IEpzb25UcmF2ZXJzZS5SRVdSSVRFX0VYUDsgLy8gcmV3cml0ZSBsZW1tYSBxdWVyeSBieSBleHBhbnNpb24gbGlzdC4KKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkeSBmb3IgdHJhdmVyc2luZyBxdWVyeS4uLlxuIiwgZnVuYyk7CisJCisJb2JqTWFwcGVyID0gbmV3IE9iamVjdE1hcHBlcigpOworCQorCS8vIGdldCBmdWxsIHF1ZXJ5IGFzIGEgSnNvbk5vZGUgdHJlZToKKwl0cnkgeworCQlqc29uTm9kZSA9IG9iak1hcHBlci5yZWFkVHJlZShxdWVyeSk7CisJCQorCQkvLyB0cmF2ZXJzZSBxdWVyeSBhbmQgY29sbGVjdCBsZW1tYSBzdWJxdWVyaWVzIGluIGEgVHJhdmVyc2VkUGF0aCBvYmplY3Q6CisJCXRQYXRoID0gbmV3IFRyYXZlcnNlZFBhdGgob2JqTWFwcGVyKTsKKwkJSnNvblRyYXZlcnNlLnRyYXZlcnNlSnNvblRyZWUoanNvbk5vZGUsIHRQYXRoLCBKc29uVHJhdmVyc2UuQ09MTEVDVCwgZm91dCwgZmVycik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJdGhyb3cgZTsKKwkJfQorCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHF1ZXJ5IHRyYXZlcnNlZC5cbiIsIGZ1bmMpOworCQorCS8vIEV4aXQgaWYgbm8gbGVtbWEgc3VicXVlcmllcyBmb3VuZDoKKwlpZiggdFBhdGggPT0gbnVsbCB8fCB0UGF0aC5nZXRMZW1tYUNvdW50KCkgPT0gMCApCisJCXsKKwkJZm91dC5wcmludGYoIkluZm86ICVzOiBubyBsZW1tYSBzdWJxdWVyeSBmb3VuZCAtPiBubyByZXdyaXRlIG5lZWRlZC5cbiIsIGZ1bmMpOworCQlyZXR1cm4gbnVsbDsgLy8gbm8gcmV3cml0ZS4KKwkJfQorCisJLyogLSAtIC0gQ2FsbCBHbGVtbVNlcnZpY2VzIHRvIHJlc29sdmUgbGVtbWEtU3VicXVlcmllcyAtIC0gLSAKKwkgKiAKKwkgKiBUaGlzIHJldHVybnMgZm9yIGVhY2ggbGVtbWEgYSByZWZlcmVuY2UgdG8gYSBsaXN0IG9mIHdvcmRmb3JtIGluc3RhbnRpYXRpb25zCisJICogKD0gaW5zdGFudGlhdGlvbiBsaXN0KS4KKwkgKi8gCisJCisJR2xlbW1DbGllbnQKKwkJZ2xlbW1DbGllbnQgPSBuZXcgR2xlbW1DbGllbnQocHJvcHMsIGZvdXQsIGZlcnIpOworCQorCWZvcihpbnQgaT0wOyBpPHRQYXRoLmdldExlbW1hQ291bnQoKTsgaSsrKQorCQl7CisJCWxlbVJlc3AgPSBnbGVtbUNsaWVudC5zZW5kUXVlcnkodFBhdGguZ2V0TGVtbWEoaSkpOworCQl0UGF0aC5hZGRMZW1tYVJlc3BvbnNlKGxlbVJlc3ApOworCQkKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJzogJWQgd2ZzIGZvdW5kOiAlcy5cbiIsIGZ1bmMsIAorCQkJCXRQYXRoLmdldExlbW1hKGkpLAorCQkJCWxlbVJlc3AuaGVhZF9uV2ZzLAorCQkJCWxlbVJlc3AucHJpbnRQYXJ0aWFsTGlzdCgpKTsKKwkJfQorCisJLy8gVE9ETyBnbGVtbUNsaWVudC5jbG9zZSA/CisJCisJLyoKKwkgKiAgLSAtIC0gUmV3cml0aW5nIEtvcmFsUXVlcnkgd2l0aCBsaXN0cyBvZiB3b3JkZm9ybXM6CisJICogIAorCSAqIC0gUmV3cml0ZSBLb3JhbFF1ZXJ5OiB1c2UgZWl0aGVyIEpzb25UcmF2ZXJzZS5SRVdSSVRFIG9yIC5SRVdSSVRFX0VYUDoKKwkgKiAtIFJFV1JJVEVfRVhQID0gcmV3cml0ZSB3aXRoIGV4cGFuc2lvbiBsaXN0cy4KKwkgKi8KKwkKKwlKc29uVHJhdmVyc2UudHJhdmVyc2VKc29uVHJlZShqc29uTm9kZSwgdFBhdGgsIEpzb25UcmF2ZXJzZS5SRVdSSVRFX0VYUCwgZm91dCwgZmVycik7IAorCQorCS8vIE9LOiByZXR1cm4gbmV3UXVlcnkgZm9ybWF0ZWQgaW4gcHJldHR5IGpzb246CisJZm91dC5wcmludGYoIkRlYnVnOiAlczogcmV0dXJuaW5nIE9LIHdpdGgganNvbk5vZGUgYXMgYSBTdHJpbmcuXG4iLCBmdW5jKTsKKwkKKwlyZXR1cm4gb2JqTWFwcGVyLndyaXRlcldpdGhEZWZhdWx0UHJldHR5UHJpbnRlcigpLndyaXRlVmFsdWVBc1N0cmluZyhqc29uTm9kZSk7CisJCQorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcmV0dXJuaW5nIE9LIGFuZCBudWxsIFN0cmluZy5cbiIsIGZ1bmMpOworCQorCS8vcmV0dXJuIG51bGw7IC8vIE9LCisKKwl9IC8vIHRyYXZlcnNlX2FuZF9yZXdyaXRlX0tvcmFsUXVlcnkKKworCisKK30gLy8gY2xhc3MgV29yZGZvcm1SZXdyaXRlCisKZGlmZiAtLWdpdCBhL1dmb3JtU2VydmljZXMvc3JjL2RlL2tvcmFwL3NlcnZpY2VzL1dvcmRmb3JtU2VydmljZXMuamF2YSBiL1dmb3JtU2VydmljZXMvc3JjL2RlL2tvcmFwL3NlcnZpY2VzL1dvcmRmb3JtU2VydmljZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTI2MzUwCi0tLSAvZGV2L251bGwKKysrIGIvV2Zvcm1TZXJ2aWNlcy9zcmMvZGUva29yYXAvc2VydmljZXMvV29yZGZvcm1TZXJ2aWNlcy5qYXZhCkBAIC0wLDAgKzEsMjg0IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuVXJpSW5mbzsKKworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0OworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy5Xb3JkZm9ybVJld3JpdGU7CitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKKworLyoKKyAqIHYtMC4xOiAyOS4wNi4yMC9GQjogMXN0IHZlcnNpb24uCisgKiB2LTAuMTogMjguMTAuMjEvRkI6IAorICogCQktIHdyaXRlcyByZXF1ZXN0IHRpbWUgdG8gbG9nOworICoJCS0gcmVzZXRzIGZuYW1lT3V0L0VyciBhZnRlciBjYWxsIHRvIEdsZW1tU2VydmljZXMuIAorICogTm90ZXM6CisgKiAtIFdoZW4gc3VibWl0dGluZyBhIEtvcmFsUXVlcnkgW1VURi04XSB0byB0aGUgV2Zvcm1TZXJ2aWNlcyAoaWYgcmVkaXJlY3RlZAorICogICB0byB0aGUgR2xlbW1TZXJ2aWNlcywgb25seSBjaGFycyB0aGF0IG1heSBiZSB0cmFuc2xhdGVkIHRvIElTTzg4NTktMSAoPUxhdDEpCisgKiAgIHdpbGwgYmUgcHJvY2Vzc2VkIGNvcnJlY3RseS4gR2xlbW0gYmVoaW5kIHRoZSBzY2VuZSBjYW4gb25seSB0cmVhdAorICogICBHZXJtYW4gd29yZHMsIHNvIHRoaXMgcmVzdHJpY3Rpb24gaXMgT0suCisgKi8KKworQFBhdGgoIi93Zm9ybVNlcnZpY2VzIikKKworcHVibGljIGNsYXNzIFdvcmRmb3JtU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgc3RhdGljIFN0cmluZyB2ZXJzaW9uRGF0ZQkJCT0gIjI4LjEwLjIxIjsKKwlmaW5hbCBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdmVyc2lvbiAgICAgCQk9ICIwLjIiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIAkJZm5hbWVQcm9wcwkJCT0gIi9XRUItSU5GL1dmb3JtU2VydmljZXMucHJvcGVydGllcyI7CisJICAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIEdTX1dvcmtpbmdQYXRoIAkJPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOyAvLyBsaW51eAorCSAgICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBmbmFtZU91dCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi93Zm9ybVNlcnZpY2VzLXQubG9nIjsKKwkgICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVFcnIJIAkJPSBHU19Xb3JraW5nUGF0aCArICIvd2Zvcm1TZXJ2aWNlcy10LmVyciI7CisJZmluYWwgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZpbGVuYW1lX3BsdWdpbkhUTUwJPSAiV0VCLUlORi9wbHVnaW4uaHRtbCI7CisKKwlAQ29udGV4dCAKKwlwcml2YXRlIFNlcnZsZXRDb250ZXh0IHNlcnZsZXRDb250ZXh0OworCQorCVByb3BlcnRpZXMKKwkJcHJvcHMgPSBudWxsOyAvLyBwcm9wZXJ0aWVzIGluIFdFQi1JTkYvV2Zvcm1TZXJ2aWNlcy5wcm9wZXJ0aWVzCisJCisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmb3V0CT0gbnVsbDsKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZlcnIJPSBudWxsOwkJCisJCQorCS8qCisJICogIGxvZ19SZXF1ZXN0OgorCSAqICAKKwkgKiAgLSB3cml0ZSBpbmZvIGFib3V0IEFQSSBSZXF1ZXN0LgorCSAqICBQYXJhbWV0ZXJzOgorCSAqICByZXF1ZXN0UGF0aAk6IHBhdGggb2Ygd2ViYXBwIGFkZHJlc3NlZCBieSB0aGUgcmVxdWVzdC4KKwkgKiAgZnVuYwkJOiBuYW1lIG9mIHRoZSBmdW5jdGlvbiB3aGljaCBpbXBsZW1lbnRzIHRoZSByZXF1ZXN0LgorCSAqICAKKwkgKiAgMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgbG9nX1JlcXVlc3QoU3RyaW5nIHJlcXVlc3RQYXRoLCBTdHJpbmcgZnVuYykKKwkKKwl7CisJLy8gdHJhbnNmb3JtICJkYXRlVHRpbWUiIC0+ICJkYXRlIHRpbWUiOgorCQorCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCWZvdXQucHJpbnRmKCIjIyMgJXM6ICVzIDogdmVycz0nJXMnLCB2ZGF0ZT0nJXMnIHJlcXVlc3Q9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RQYXRoLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgCisJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwl9IC8vIGxvZ19SZXF1ZXN0CisJCQorCS8qIAorIAkgKiAKKwkgKiAtIGFmdGVyIGxvYWRQcm9wZXJ0aWVzLCBzZXRzIHRoZSBjbGFzcyB2YXJpYWJsZSB3aXRoIGxvYWRlZCBwcm9wZXJ0eSB2YWx1ZXMuCisJICogCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCUdTX1dvcmtpbmdQYXRoIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJHU19Xb3JraW5nUGF0aCIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyIpOworCWZuYW1lT3V0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZU91dCIsIAkgICAiV2Zvcm1TZXJ2aWNlcy10LmxvZyIpOworCWZuYW1lT3V0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVPdXQ7CisJZm5hbWVFcnIJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lRXJyIiwgCSAgICJXZm9ybVNlcnZpY2VzLXQuZXJyIik7CisJZm5hbWVFcnIJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUVycjsKKwkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisJICogCisJICogLSBsb2FkIEdsZW1tU2VydmljZXMucHJvcGVydGllcywgc2V0cyBHbGVtbVNlcnZpY2VzIGNvbnN0YW50cworCSAqICAgYW5kIGxvZ3MgdGhlIHJlcXVlc3QuCisJICogLSBsb2FkIHByb3BlcnRpZXMgYW5kIHNldCBjb25zdGFudHMgYmVmb3JlIGxvZ2dpbmcgYW55dGhpbmcsIGJlY2F1c2UKKwkgKiAgIGxvZ2dpbmcgd2lsbCBiZSBkb25lIGludG8gdGhlIGxhc3Qgc3Rkb3V0L3N0ZGVyciBvcGVuZWQgaW4gZ2xhc3NmaXNoJ3MgSlZNLAorCSAqICAgZS5nLiBpbiB0aGUgbG9nIG9mIGFub3RoZXIgU2VydmljZS4KKwkgKiAgICAKKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBpbml0X2FuZF9sb2dfUmVxdWVzdChTdHJpbmcgZnVuYywgU3RyaW5nIHJlcXVlc3RQYXRoKQorCQorCXsKKwlTdHJpbmcKKwkJcmVhbFBhdGggPSBzZXJ2bGV0Q29udGV4dC5nZXRSZWFsUGF0aChmbmFtZVByb3BzKTsKKworCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAoaWYgbGFzdCBwYXJhbSA9IHRydWUpOgorCXByb3BzID0gVXRpbHMubG9hZFByb3BlcnRpZXMoc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSwgZm5hbWVQcm9wcywgcmVhbFBhdGgsIGZhbHNlKTsKKwkKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zIGZvciBHbGVtbVNlcnZpY2VzOgorCS8vIFV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCisJLy8gb3BlbiBmb3V0IGFuZCBmZXJyIGFzIHJlcGxhY2VtZW50IGZvciBzdGRvdXQvc3RkZXJyIGZvciB1c2UgaW4gR2xlbW1TZXJ2aWNlcy4KKwkvLyBkbyBub3QgdXNlIG9yIHJlZGlyZWN0IFN5c3RlbS5vdXQgYW5kIFN5c3RlbS5lcnIsIGFzIHRoZXkgd2lsbCBiZSByZWRpcmVjdGVkCisJLy8gYnkgb3RoZXIgU2VydmljZXMgaW4gdGhlIHNhbWUgZ2xhc3NmaXNoIEpWTSwgZS5nLiBieSB0aGUgV2Zvcm1TZXJ2aWNlcy4KKwlmb3V0ID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lT3V0KTsKKwlmZXJyID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lRXJyKTsKKwkKKwlsb2dfUmVxdWVzdChyZXF1ZXN0UGF0aCwgZnVuYyk7CisKKwl9IC8vIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIEdFVDogL3dmb3JtU2VydmljZXMvc3RhdHVzLworCSAqIAorCSAqIHJldHVybnMgc3RhdHVzIG9mIFdvcmRmb3JtIFNlcnZpY2VzIGluIEhUTUwuCisJICogCisJICogUGFyYW1ldGVyczoKKwkgKiAgLQorCSAqIE5vdGVzOgorCSAqIC0gCisJICogMTIuMDYuMjAvRkIgCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwlTdHJpbmcKKwkJc3RhdHVzOworCisJaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi93Zm9ybVNlcnZpY2VzL3N0YXR1cy8iKTsKKwkKKwlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCSAgIAkiIDxoMz5Xb3JkZm9ybSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+ICAgICA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+RGF0ZSAgIDwvYj4gICAgIDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICAgICAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnByb3BlcnRpZXM8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAiICIpLAorCQkJCQkJCXNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcykgPT0gbnVsbCA/ICJub3QgZm91bmQiIDoKKwkJCQkJCQkJcHJvcHMuaXNFbXB0eSgpID8gImVtcHR5IiA6ICJsb2FkZWQiKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKworCXJldHVybiBzdGF0dXM7CisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiBHRVQ6IC93Zm9ybVNlcnZpY2VzL3BsdWdpbi5odG1sCisJICogCisJICogcmV0dXJucyBwbHVnaW4uaHRtbCBmaWxlIGZvciByZWdpc3RyYXRpb24gaW4gS2FsYW1hci4KKwkgKiAKKwkgKiBQYXJhbWV0ZXJzOgorCSAqICAtCisJICogTm90ZXM6CisJICogLSAKKwkgKiAyOS4wNi4yMC9GQiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKworCUBQYXRoKCJwbHVnaW4uaHRtbCIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3BsdWdpbkhUTUwoQENvbnRleHQgU2VydmxldENvbnRleHQgc2VydmxldENvbnRleHQpCisJCisJeworCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3BsdWdpbkhUTUwiOworCVN0cmluZworCQlwbHVnaW5IVE1MOworCVN0cmluZworCQl3ZWJBcHBSb290OworCisJaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi93Zm9ybVNlcnZpY2VzL3BsdWdpbi5odG1sIik7CisJCisJd2ViQXBwUm9vdCA9IHNlcnZsZXRDb250ZXh0LmdldFJlYWxQYXRoKCIvIik7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogUm9vdCBQYXRoIG9mIHdlYkFwcCA9ICclcycuXG4iLCAgZnVuYywgd2ViQXBwUm9vdCk7CisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbG9hZGluZyA9ICclcycuXG4iLCAgZnVuYywgd2ViQXBwUm9vdCArIGZpbGVuYW1lX3BsdWdpbkhUTUwpOworCQorCXRyeSB7CisJCXBsdWdpbkhUTUwgPSBVdGlscy5yZWFkRnJvbUlucHV0U3RyZWFtKHdlYkFwcFJvb3QgKyBmaWxlbmFtZV9wbHVnaW5IVE1MKTsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbG9hZGluZyBwbHVnaW4uaHRtbDogT0snLlxuIiwgIGZ1bmMpOworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBwbHVnaW4uaHRtbCA9ICclcycuXG4iLCAgZnVuYywgcGx1Z2luSFRNTCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcGx1Z2luSFRNTCA9IFN0cmluZy5mb3JtYXQoIjxodG1sPlxuPGJvZHk+PGgzPndmb3JtU2VydmljZXMgRXJyb3I6IGNhbm5vdCBsb2FkIHBsdWdpbi5odG1sITwvaDM+PC9ib2R5PjwvaHRtbD5cbiIpOworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsb2FkaW5nIHBsdWdpbi5odG1sOiBmYWlsZWQhXG4iLCAgZnVuYyk7CisJCX0KKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJcmV0dXJuIHBsdWdpbkhUTUw7CisJCQorCX0gLy8gZG9HRVRfcGx1Z2luSFRNTAorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogUE9TVDogL3dmb3JtU2VydmljZXMvcXVlcnkvOiBhcHBsaWNhdGlvbi9qc29uLgorCSAqIHN1Ym1pdHMgYSBLb3JhbCBRdWVyeSB3aGljaCBtaWdodCBjb250YWluIDEgb3IgbW9yZSBsZW1tYSBzdWJxdWVyaWVzIFtVVEYtOF0uCisJICogRWFjaCBzdWJxdWVyeSBpcyBzZWFyY2hlZCBpbiB0aGUgR2xlbW0gREIgYW5kIHRoZSByZXN1bHRpbmcgd29yZGZvcm0gbGlzdCByZXdyaXRlcworCSAqIHRoZSBvcmlnaW5hbCBzdWJxdWVyeS4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqICBxdWVyeSAgICA6IGNvbnRlbnQgb2YgUE9TVCBib2R5OiBmdWxsIEtvcmFsUXVlcnkgaW4gSnNvbi4KKwkgKiBOb3RlczoKKwkgKiAtIEhUVFAgUE9TVCBCb2R5IGNhbiBiZSByZWFkIG9uY2Ugb25seS4gUHJvYmFibHkgSmVyc2V5IHJlYWRzIGl0IG9uY2UgYW5kCisJICogICBwYXNzZXMgaXQgdG8gdGhlIFBPU1QgbWV0aG9kLCBpLmUuIFN0cmluZyBxdWVyeS4KKwkgKiAtIGlmIHdlIHRyeSB0byByZWFkIHRoZSBQT1NUIEJvZHkgYnkgZWl0aGVyIEh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRSZWFkZXIoKQorCSAqICAgb3IgSHR0cFNlcnZsZXRSZXF1ZXN0LmdldElucHV0U3RyZWFtKCksIHdlIGdldCBhbiBleGNlcHRpb24sIGFzIHRoaXMgCisJICogICB3b3VsZCBiZSB0aGUgMm5kIGFjY2VzcyB0byB0aGUgYm9keSBkYXRhLgorCSAqIDE3LjAyLjIwL0ZCIAorCSAqIDIwLjAyLjIwL0ZCIEJvZHkgRGF0YSBhY2Nlc3MgYnkgcGFyYW1ldGVyIHF1ZXJ5LgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCUBQYXRoKCJxdWVyeSIpIAorCUBQT1NUIAorCUBDb25zdW1lcygiYXBwbGljYXRpb24vanNvbiIpIAorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9QT1NUX2hhbmRsZVdvcmRmb3JtUXVlcmllcyhTdHJpbmcgcXVlcnkpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9QT1NUX2hhbmRsZVdvcmRmb3JtUXVlcmllcyI7CisJU3RyaW5nCisJCW5ld1F1ZXJ5ID0gIiI7CisJCisJaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi93Zm9ybVNlcnZpY2VzL3F1ZXJ5LyIpOworCQorCXRyeQl7CisJCW5ld1F1ZXJ5ID0gV29yZGZvcm1SZXdyaXRlLnRyYXZlcnNlX2FuZF9yZXdyaXRlX0tvcmFsUXVlcnkocXVlcnksIHByb3BzLCBmb3V0LCBmZXJyKTsKKwkJaWYoIG5ld1F1ZXJ5ID09IG51bGwgKQorCQkJeworCQkJZm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisJCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBub3RoaW5nIHRvIHJld3JpdGUuXG4iLCBmdW5jKTsKKwkJCXJldHVybiBxdWVyeTsgLy8gbm90aGluZyB0byByZXdyaXRlLCByZXR1cm4gb3JpZ2luYWwgcXVlcnkuCisJCQl9CisJCX0KKwljYXRjaCggRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEV4Y2VwdGlvbiBvY2N1cmVkOiByZXR1cm5pbmcgdW5yZXdyaXR0ZW4gcXVlcnkhXG4iLCBmdW5jKTsKKwkJcmV0dXJuIHF1ZXJ5OyAvLyBlcnJvciBvY2N1cmVkLCBidXQgcmV0dXJuaW5nIG9yaWdpbmFsLCB1bnJld3JpdHRlbiBxdWVyeS4KKwkJfQorCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGVuZGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJldHVybmluZyByZXdyaXR0ZW4gcXVlcnk6IHNpemU9JWQgY2hhcnMuXG4iLCBmdW5jLCBuZXdRdWVyeS5sZW5ndGgoKSk7CisJCisJcmV0dXJuIG5ld1F1ZXJ5OworCQorCX0gLy8gZG9QT1NUX2hhbmRsZVdvcmRmb3JtUXVlcmllcworCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5iYWtfMC5sb2cgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5iYWtfMC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBmOGEwOQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLmJha18wLmxvZwpAQCAtMCwwICsxLDExNTk2IEBACishU0VTU0lPTiAyMDIxLTA5LTI4IDA5OjA3OjE4LjE1NyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNsaXBzZS5idWlsZElkPTQuOC4wLkkyMDE4MDYxMS0wNTAwCitqYXZhLnZlcnNpb249MS44LjBfMjMxCitqYXZhLnZlbmRvcj1PcmFjbGUgQ29ycG9yYXRpb24KK0Jvb3RMb2FkZXIgY29uc3RhbnRzOiBPUz13aW4zMiwgQVJDSD14ODZfNjQsIFdTPXdpbjMyLCBOTD1kZV9ERQorRnJhbWV3b3JrIGFyZ3VtZW50czogIC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdCAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKK0NvbW1hbmQtbGluZSBhcmd1bWVudHM6ICAtb3Mgd2luMzIgLXdzIHdpbjMyIC1hcmNoIHg4Nl82NCAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QgLWRhdGEgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXHdzcC1Lb3JBUC1TZXJ2aWNlcyAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKKworVGhpcyBpcyBhIGNvbnRpbnVhdGlvbiBvZiBsb2cgZmlsZSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcd3NwLUtvckFQLVNlcnZpY2VzXC5tZXRhZGF0YVwuYmFrXzAubG9nCitDcmVhdGVkIFRpbWU6IDIwMjEtMDktMjggMDk6MDc6MjguOTA5CisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUgMiAwIDIwMjEtMDktMjggMDk6MDc6MjguOTE3CishTUVTU0FHRSBCdWlsdGluIExGUyBzdXBwb3J0IG5vdCBwcmVzZW50L2RldGVjdGVkCishU1RBQ0sgMAoramF2YS5sYW5nLkNsYXNzTm90Rm91bmRFeGNlcHRpb246IG9yZy5lY2xpcHNlLmpnaXQubGZzLkJ1aWx0aW5MRlMgY2Fubm90IGJlIGZvdW5kIGJ5IG9yZy5lY2xpcHNlLmVnaXQuY29yZV81LjAuMC4yMDE4MDYxMzE1NTAtcgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo1MDgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUwKE5hdGl2ZSBNZXRob2QpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUoQ2xhc3MuamF2YToyNjQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5yZWdpc3RlckJ1aWx0aW5MRlMoQWN0aXZhdG9yLmphdmE6Mjc5KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MjEyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLnNvdXJjZXMuU2luZ2xlU291cmNlUGFja2FnZS5sb2FkQ2xhc3MoU2luZ2xlU291cmNlUGFja2FnZS5qYXZhOjM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3IkUmVwb3NpdG9yeUNoYW5nZVNjYW5uZXIuPGluaXQ+KEFjdGl2YXRvci5qYXZhOjkyMSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zZXR1cFJlcG9DaGFuZ2VTY2FubmVyKEFjdGl2YXRvci5qYXZhOjEwMzQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLldvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5nZXRTb3VyY2VQcm92aWRlcnMoV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmphdmE6MTc0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLlNvdXJjZVByb3ZpZGVyU2VydmljZS5yZWFkUmVnaXN0cnkoU291cmNlUHJvdmlkZXJTZXJ2aWNlLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaCQzNC5ydW5XaXRoRXhjZXB0aW9uKFdvcmtiZW5jaC5qYXZhOjIzNzgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZyRTdGFydHVwUnVubmFibGUucnVuKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTozMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TeW5jaHJvbml6ZXIuc3luY0V4ZWMoU3luY2hyb25pemVyLmphdmE6MjMzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlVJU3luY2hyb25pemVyLnN5bmNFeGVjKFVJU3luY2hyb25pemVyLmphdmE6MTQ0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc3luY0V4ZWMoRGlzcGxheS5qYXZhOjQ1NjcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZy5ydW5XaXRob3V0RXhjZXB0aW9ucyhTdGFydHVwVGhyZWFkaW5nLmphdmE6OTUpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXRpYWxpemVEZWZhdWx0U2VydmljZXMoV29ya2JlbmNoLmphdmE6MjM3MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdChXb3JrYmVuY2guamF2YToxNjU0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5ydW5VSShXb3JrYmVuY2guamF2YToyODU5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkMyhXb3JrYmVuY2guamF2YTo2NTQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goV29ya2JlbmNoLmphdmE6NTk3KQorCWF0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUkuY3JlYXRlQW5kUnVuV29ya2JlbmNoKFBsYXRmb3JtVUkuamF2YToxNDgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERUFwcGxpY2F0aW9uLnN0YXJ0KElERUFwcGxpY2F0aW9uLmphdmE6MTUyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuYXBwLkVjbGlwc2VBcHBIYW5kbGUucnVuKEVjbGlwc2VBcHBIYW5kbGUuamF2YToxOTYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnJ1bkFwcGxpY2F0aW9uKEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEzNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIuc3RhcnQoRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjM4OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YToyNDMpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKE5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjYyKQorCWF0IHN1bi5yZWZsZWN0LkRlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKERlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuamF2YTo0MykKKwlhdCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuaW52b2tlKE1ldGhvZC5qYXZhOjQ5OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uaW52b2tlRnJhbWV3b3JrKE1haW4uamF2YTo2NTYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmJhc2ljUnVuKE1haW4uamF2YTo1OTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLnJ1bihNYWluLmphdmE6MTQ5OCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQudWkgMiAwIDIwMjEtMDktMjggMDk6MDc6NTkuMzYwCishTUVTU0FHRSBXYXJuaW5nOiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgSE9NRSBpcyBub3Qgc2V0LiBUaGUgZm9sbG93aW5nIGRpcmVjdG9yeSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIEdpdAordXNlciBnbG9iYWwgY29uZmlndXJhdGlvbiBhbmQgdG8gZGVmaW5lIHRoZSBkZWZhdWx0IGxvY2F0aW9uIHRvIHN0b3JlIHJlcG9zaXRvcmllczogJ0M6XFVzZXJzXEZyYW5jaycuIElmIHRoaXMgaXMKK25vdCBjb3JyZWN0IHBsZWFzZSBzZXQgdGhlIEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIHJlc3RhcnQgRWNsaXBzZS4gT3RoZXJ3aXNlIEdpdCBmb3IgV2luZG93cyBhbmQKK0VHaXQgbWlnaHQgYmVoYXZlIGRpZmZlcmVudGx5IHNpbmNlIHRoZXkgc2VlIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCitUaGlzIHdhcm5pbmcgY2FuIGJlIHN3aXRjaGVkIG9mZiBvbiB0aGUgVGVhbSA+IEdpdCA+IENvbmZpcm1hdGlvbnMgYW5kIFdhcm5pbmdzIHByZWZlcmVuY2UgcGFnZS4KKworIUVOVFJZIG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlIDIgMTcgMjAyMS0wOS0yOCAwOTowODowMi4xMDQKKyFNRVNTQUdFIFNlcnZlciDigJhvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXLigJkgZmFpbGVkIHdpdGggZXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJC4gOyB2ZXJzaW9uOiAyLjAuNy52MjAxNzA5MDYtMTMyNworIVNUQUNLIDAKK2NvbS5nb29nbGUuZ3Nvbi5Kc29uU3ludGF4RXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMjQpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg4OCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODUzKQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4MDIpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLmpzb24uSnNvbi5kZXNlcmlhbGl6ZShKc29uLmphdmE6OTEpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuSU8ucmVmcmVzaENvbmZpZ3VyYXRpb24oSU8uamF2YTo2NikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5TZXJ2ZXJDb25uZWN0aW9uLnN0YXJ0VXAoU2VydmVyQ29ubmVjdGlvbi5qYXZhOjEyNCkKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RJZGxlU2VydmljZSREZWxlZ2F0ZVNlcnZpY2UkMS5ydW4oQWJzdHJhY3RJZGxlU2VydmljZS5qYXZhOjYyKQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5DYWxsYWJsZXMkNC5ydW4oQ2FsbGFibGVzLmphdmE6MTIyKQorCWF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uc3RyZWFtLkpzb25SZWFkZXIuYmVnaW5PYmplY3QoSnNvblJlYWRlci5qYXZhOjM4NSkKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjEzKQorCS4uLiA5IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpIDQgMCAyMDIxLTA5LTI4IDA5OjA4OjEzLjc1OQorIU1FU1NBR0UgUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKyFTVEFDSyAwCitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRLbm93blJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NDgwKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyJEFydGlmYWN0LmdldEtub3duUmVwb3NpdG9yaWVzKENhY2hpbmdSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjYyMykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5jb3JlLlAyVXRpbC5nZXRLbm93blJlcG9zaXRvcmllcyhQMlV0aWwuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5wMi5pbXBsLlAyVGFza0ltcGwuaXNOZWVkZWQoUDJUYXNrSW1wbC5qYXZhOjcwMSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5pbnRlcm5hbC5jb3JlLlNldHVwVGFza1BlcmZvcm1lci5pbml0TmVlZGVkU2V0dXBUYXNrcyhTZXR1cFRhc2tQZXJmb3JtZXIuamF2YToyMjczKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4ucGVyZm9ybVN0YXJ0dXAoU2V0dXBVSVBsdWdpbi5qYXZhOjY3OSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLmFjY2VzcyQ1KFNldHVwVUlQbHVnaW4uamF2YTo0MTUpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbiQxJDEucnVuKFNldHVwVUlQbHVnaW4uamF2YToyNTIpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcyA0IDU2NyAyMDIxLTA5LTI4IDA5OjA5OjU0LjI4OAorIU1FU1NBR0UgVGhlIHByb2plY3QgZGVzY3JpcHRpb24gZmlsZSAoLnByb2plY3QpIGZvciAnR2xlbW1DbGllbnQnIGlzIG1pc3NpbmcuICBUaGlzIGZpbGUgY29udGFpbnMgaW1wb3J0YW50IGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcm9qZWN0LiAgVGhlIHByb2plY3Qgd2lsbCBub3QgZnVuY3Rpb24gcHJvcGVybHkgdW50aWwgdGhpcyBmaWxlIGlzIHJlc3RvcmVkLgorIVNUQUNLIDAKK2phdmEubGFuZy5FeGNlcHRpb246IFRoZSBwcm9qZWN0IGRlc2NyaXB0aW9uIGZpbGUgKC5wcm9qZWN0KSBmb3IgJ0dsZW1tQ2xpZW50JyBpcyBtaXNzaW5nLiAgVGhpcyBmaWxlIGNvbnRhaW5zIGltcG9ydGFudCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvamVjdC4gIFRoZSBwcm9qZWN0IHdpbGwgbm90IGZ1bmN0aW9uIHByb3Blcmx5IHVudGlsIHRoaXMgZmlsZSBpcyByZXN0b3JlZC4KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5SZXNvdXJjZUV4Y2VwdGlvbi5wcm92aWRlU3RhY2tUcmFjZShSZXNvdXJjZUV4Y2VwdGlvbi5qYXZhOjM5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLlJlc291cmNlRXhjZXB0aW9uLjxpbml0PihSZXNvdXJjZUV4Y2VwdGlvbi5qYXZhOjM1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwubG9jYWxzdG9yZS5GaWxlU3lzdGVtUmVzb3VyY2VNYW5hZ2VyLnJlYWQoRmlsZVN5c3RlbVJlc291cmNlTWFuYWdlci5qYXZhOjkwMykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5TYXZlTWFuYWdlci5yZXN0b3JlTWV0YUluZm8oU2F2ZU1hbmFnZXIuamF2YTo4ODYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuU2F2ZU1hbmFnZXIucmVzdG9yZShTYXZlTWFuYWdlci5qYXZhOjc1NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Qcm9qZWN0Lm9wZW4oUHJvamVjdC5qYXZhOjEwNjEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuUHJvamVjdC5vcGVuKFByb2plY3QuamF2YToxMTA3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuT3BlblJlc291cmNlQWN0aW9uJDEuZG9PcGVuV2l0aFJlZmVyZW5jZXMoT3BlblJlc291cmNlQWN0aW9uLmphdmE6MjMzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuT3BlblJlc291cmNlQWN0aW9uJDEucnVuSW5Xb3Jrc3BhY2UoT3BlblJlc291cmNlQWN0aW9uLmphdmE6Mjc5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLkludGVybmFsV29ya3NwYWNlSm9iLnJ1bihJbnRlcm5hbFdvcmtzcGFjZUpvYi5qYXZhOjM5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorIVNFU1NJT04gMjAyMS0wOS0yOCAwOToyMDo0MC42NTEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VjbGlwc2UuYnVpbGRJZD00LjguMC5JMjAxODA2MTEtMDUwMAoramF2YS52ZXJzaW9uPTEuOC4wXzIzMQoramF2YS52ZW5kb3I9T3JhY2xlIENvcnBvcmF0aW9uCitCb290TG9hZGVyIGNvbnN0YW50czogT1M9d2luMzIsIEFSQ0g9eDg2XzY0LCBXUz13aW4zMiwgTkw9ZGVfREUKK0ZyYW1ld29yayBhcmd1bWVudHM6ICAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0IC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdCAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKK0NvbW1hbmQtbGluZSBhcmd1bWVudHM6ICAtb3Mgd2luMzIgLXdzIHdpbjMyIC1hcmNoIHg4Nl82NCAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0IC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdCAtZGF0YSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcd3NwLUtvckFQLVNlcnZpY2VzIC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorCishRU5UUlkgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMgNCAwIDIwMjEtMDktMjggMDk6MjA6NDYuMTI3CishTUVTU0FHRSBGcmFtZXdvcmtFdmVudCBFUlJPUgorIVNUQUNLIDAKK29yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb246IEV4Y2VwdGlvbiBpbiBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoKSBvZiBidW5kbGUgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo4MDApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJLi4uIDEyIG1vcmUKK1Jvb3QgZXhjZXB0aW9uOgoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQuY29yZSAyIDAgMjAyMS0wOS0yOCAwOToyMDo1Mi4zNDIKKyFNRVNTQUdFIEJ1aWx0aW4gTEZTIHN1cHBvcnQgbm90IHByZXNlbnQvZGV0ZWN0ZWQKKyFTVEFDSyAwCitqYXZhLmxhbmcuQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbjogb3JnLmVjbGlwc2UuamdpdC5sZnMuQnVpbHRpbkxGUyBjYW5ub3QgYmUgZm91bmQgYnkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlXzUuMC4wLjIwMTgwNjEzMTU1MC1yCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjUwOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZShDbGFzcy5qYXZhOjI2NCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnJlZ2lzdGVyQnVpbHRpbkxGUyhBY3RpdmF0b3IuamF2YToyNzkpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToyMTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuc291cmNlcy5TaW5nbGVTb3VyY2VQYWNrYWdlLmxvYWRDbGFzcyhTaW5nbGVTb3VyY2VQYWNrYWdlLmphdmE6MzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvciRSZXBvc2l0b3J5Q2hhbmdlU2Nhbm5lci48aW5pdD4oQWN0aXZhdG9yLmphdmE6OTIxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnNldHVwUmVwb0NoYW5nZVNjYW5uZXIoQWN0aXZhdG9yLmphdmE6MTAzNCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmdldFNvdXJjZVByb3ZpZGVycyhXb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuamF2YToxNzQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuU291cmNlUHJvdmlkZXJTZXJ2aWNlLnJlYWRSZWdpc3RyeShTb3VyY2VQcm92aWRlclNlcnZpY2UuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoJDM0LnJ1bldpdGhFeGNlcHRpb24oV29ya2JlbmNoLmphdmE6MjM3OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nJFN0YXJ0dXBSdW5uYWJsZS5ydW4oU3RhcnR1cFRocmVhZGluZy5qYXZhOjMyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlN5bmNocm9uaXplci5zeW5jRXhlYyhTeW5jaHJvbml6ZXIuamF2YToyMzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuVUlTeW5jaHJvbml6ZXIuc3luY0V4ZWMoVUlTeW5jaHJvbml6ZXIuamF2YToxNDQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zeW5jRXhlYyhEaXNwbGF5LmphdmE6NDU2NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nLnJ1bldpdGhvdXRFeGNlcHRpb25zKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTo5NSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdGlhbGl6ZURlZmF1bHRTZXJ2aWNlcyhXb3JrYmVuY2guamF2YToyMzczKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0KFdvcmtiZW5jaC5qYXZhOjE2NTQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLnJ1blVJKFdvcmtiZW5jaC5qYXZhOjI4NTkpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQzKFdvcmtiZW5jaC5qYXZhOjY1NCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChXb3JrYmVuY2guamF2YTo1OTcpCisJYXQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSS5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goUGxhdGZvcm1VSS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFQXBwbGljYXRpb24uc3RhcnQoSURFQXBwbGljYXRpb24uamF2YToxNTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5hcHAuRWNsaXBzZUFwcEhhbmRsZS5ydW4oRWNsaXBzZUFwcEhhbmRsZS5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIucnVuQXBwbGljYXRpb24oRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5zdGFydChFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6Mzg4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjI0MykKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NjIpCisJYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjQzKQorCWF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6NDk4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5pbnZva2VGcmFtZXdvcmsoTWFpbi5qYXZhOjY1NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uYmFzaWNSdW4oTWFpbi5qYXZhOjU5MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4ucnVuKE1haW4uamF2YToxNDk4KQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC51aSAyIDAgMjAyMS0wOS0yOCAwOToyMToxNi45NzgKKyFNRVNTQUdFIFdhcm5pbmc6IFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBIT01FIGlzIG5vdCBzZXQuIFRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5IHdpbGwgYmUgdXNlZCB0byBzdG9yZSB0aGUgR2l0Cit1c2VyIGdsb2JhbCBjb25maWd1cmF0aW9uIGFuZCB0byBkZWZpbmUgdGhlIGRlZmF1bHQgbG9jYXRpb24gdG8gc3RvcmUgcmVwb3NpdG9yaWVzOiAnQzpcVXNlcnNcRnJhbmNrJy4gSWYgdGhpcyBpcworbm90IGNvcnJlY3QgcGxlYXNlIHNldCB0aGUgSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgcmVzdGFydCBFY2xpcHNlLiBPdGhlcndpc2UgR2l0IGZvciBXaW5kb3dzIGFuZAorRUdpdCBtaWdodCBiZWhhdmUgZGlmZmVyZW50bHkgc2luY2UgdGhleSBzZWUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KK1RoaXMgd2FybmluZyBjYW4gYmUgc3dpdGNoZWQgb2ZmIG9uIHRoZSBUZWFtID4gR2l0ID4gQ29uZmlybWF0aW9ucyBhbmQgV2FybmluZ3MgcHJlZmVyZW5jZSBwYWdlLgorCishRU5UUlkgb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUgMiAxNyAyMDIxLTA5LTI4IDA5OjIxOjIwLjQ2MworIU1FU1NBR0UgU2VydmVyIOKAmG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlcuKAmSBmYWlsZWQgd2l0aCBleGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkLiA7IHZlcnNpb246IDIuMC43LnYyMDE3MDkwNi0xMzI3CishU1RBQ0sgMAorY29tLmdvb2dsZS5nc29uLkpzb25TeW50YXhFeGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIyNCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODg4KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4NTMpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjgwMikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIuanNvbi5Kc29uLmRlc2VyaWFsaXplKEpzb24uamF2YTo5MSkKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5JTy5yZWZyZXNoQ29uZmlndXJhdGlvbihJTy5qYXZhOjY2KQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLlNlcnZlckNvbm5lY3Rpb24uc3RhcnRVcChTZXJ2ZXJDb25uZWN0aW9uLmphdmE6MTI0KQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdElkbGVTZXJ2aWNlJERlbGVnYXRlU2VydmljZSQxLnJ1bihBYnN0cmFjdElkbGVTZXJ2aWNlLmphdmE6NjIpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkNhbGxhYmxlcyQ0LnJ1bihDYWxsYWJsZXMuamF2YToxMjIpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5zdHJlYW0uSnNvblJlYWRlci5iZWdpbk9iamVjdChKc29uUmVhZGVyLmphdmE6Mzg1KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMTMpCisJLi4uIDkgbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkgNCAwIDIwMjEtMDktMjggMDk6MjE6MzIuMTI2CishTUVTU0FHRSBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorIVNUQUNLIDAKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldEtub3duUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo0ODApCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5DYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIkQXJ0aWZhY3QuZ2V0S25vd25SZXBvc2l0b3JpZXMoQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjIzKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmNvcmUuUDJVdGlsLmdldEtub3duUmVwb3NpdG9yaWVzKFAyVXRpbC5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnAyLmltcGwuUDJUYXNrSW1wbC5pc05lZWRlZChQMlRhc2tJbXBsLmphdmE6NzAxKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLmludGVybmFsLmNvcmUuU2V0dXBUYXNrUGVyZm9ybWVyLmluaXROZWVkZWRTZXR1cFRhc2tzKFNldHVwVGFza1BlcmZvcm1lci5qYXZhOjIyNzMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5wZXJmb3JtU3RhcnR1cChTZXR1cFVJUGx1Z2luLmphdmE6Njc5KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4uYWNjZXNzJDUoU2V0dXBVSVBsdWdpbi5qYXZhOjQxNSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luJDEkMS5ydW4oU2V0dXBVSVBsdWdpbi5qYXZhOjI1MikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzIDQgNTY3IDIwMjEtMDktMjggMDk6MjE6MzguMzc0CishTUVTU0FHRSBUaGUgcHJvamVjdCBkZXNjcmlwdGlvbiBmaWxlICgucHJvamVjdCkgZm9yICdHbGVtbUNsaWVudCcgaXMgbWlzc2luZy4gIFRoaXMgZmlsZSBjb250YWlucyBpbXBvcnRhbnQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb2plY3QuICBUaGUgcHJvamVjdCB3aWxsIG5vdCBmdW5jdGlvbiBwcm9wZXJseSB1bnRpbCB0aGlzIGZpbGUgaXMgcmVzdG9yZWQuCishU1RBQ0sgMAoramF2YS5sYW5nLkV4Y2VwdGlvbjogVGhlIHByb2plY3QgZGVzY3JpcHRpb24gZmlsZSAoLnByb2plY3QpIGZvciAnR2xlbW1DbGllbnQnIGlzIG1pc3NpbmcuICBUaGlzIGZpbGUgY29udGFpbnMgaW1wb3J0YW50IGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcm9qZWN0LiAgVGhlIHByb2plY3Qgd2lsbCBub3QgZnVuY3Rpb24gcHJvcGVybHkgdW50aWwgdGhpcyBmaWxlIGlzIHJlc3RvcmVkLgorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLlJlc291cmNlRXhjZXB0aW9uLnByb3ZpZGVTdGFja1RyYWNlKFJlc291cmNlRXhjZXB0aW9uLmphdmE6MzkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuUmVzb3VyY2VFeGNlcHRpb24uPGluaXQ+KFJlc291cmNlRXhjZXB0aW9uLmphdmE6MzUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5sb2NhbHN0b3JlLkZpbGVTeXN0ZW1SZXNvdXJjZU1hbmFnZXIucmVhZChGaWxlU3lzdGVtUmVzb3VyY2VNYW5hZ2VyLmphdmE6OTAzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLlNhdmVNYW5hZ2VyLnJlc3RvcmVNZXRhSW5mbyhTYXZlTWFuYWdlci5qYXZhOjg4NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5TYXZlTWFuYWdlci5yZXN0b3JlKFNhdmVNYW5hZ2VyLmphdmE6NzU3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLlByb2plY3Qub3BlbihQcm9qZWN0LmphdmE6MTA2MSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Qcm9qZWN0Lm9wZW4oUHJvamVjdC5qYXZhOjExMDcpCisJYXQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5PcGVuUmVzb3VyY2VBY3Rpb24kMS5kb09wZW5XaXRoUmVmZXJlbmNlcyhPcGVuUmVzb3VyY2VBY3Rpb24uamF2YToyMzMpCisJYXQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5PcGVuUmVzb3VyY2VBY3Rpb24kMS5ydW5JbldvcmtzcGFjZShPcGVuUmVzb3VyY2VBY3Rpb24uamF2YToyNzkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuSW50ZXJuYWxXb3Jrc3BhY2VKb2IucnVuKEludGVybmFsV29ya3NwYWNlSm9iLmphdmE6MzkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciA0IDAgMjAyMS0wOS0yOCAwOToyMzo0NS4zNDgKKyFNRVNTQUdFIENvdWxkIG5vdCBkb3dubG9hZCBzb3VyY2VzIGZvciBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1QKKyFTVEFDSyAxCitvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjogQ291bGQgbm90IHJlc29sdmUgYXJ0aWZhY3QgZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6amFyOnNvdXJjZXM6MC4xLVNOQVBTSE9UCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YTo3NzYpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjc0MykKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3MjApCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWQoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6Mjc5KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkQXR0YWNobWVudHMoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjU0KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkTWF2ZW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjIxKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxNjEpCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNykKKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE1MSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwuZXhlY3V0ZShNYXZlbkltcGwuamF2YToxMzU1KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCitDb250YWluczogTWlzc2luZyBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTpqYXI6c291cmNlczowLjEtU05BUFNIT1QKKyFTVUJFTlRSWSAxIG9yZy5lY2xpcHNlLm0yZS5jb3JlIDQgLTEgMjAyMS0wOS0yOCAwOToyMzo0NS4zNTEKKyFNRVNTQUdFIENvdWxkIG5vdCByZXNvbHZlIGFydGlmYWN0IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOmphcjpzb3VyY2VzOjAuMS1TTkFQU0hPVAorIVNVQkVOVFJZIDIgb3JnLmVjbGlwc2UubTJlLmNvcmUgNCAtMSAyMDIxLTA5LTI4IDA5OjIzOjQ1LjM1MQorIU1FU1NBR0UgTWlzc2luZyBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTpqYXI6c291cmNlczowLjEtU05BUFNIT1QKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDQgMCAyMDIxLTA5LTI4IDA5OjIzOjQ5LjQ5MworIU1FU1NBR0UgQ291bGQgbm90IGRvd25sb2FkIGphdmFkb2MgZm9yIGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVAorIVNUQUNLIDEKK29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOiBDb3VsZCBub3QgcmVzb2x2ZSBhcnRpZmFjdCBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTpqYXI6amF2YWRvYzowLjEtU05BUFNIT1QKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjc3NikKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzQzKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjcyMCkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNzkpCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRBdHRhY2htZW50cyhEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNjUpCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRNYXZlbihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyMjEpCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjE2MSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM3KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTUxKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5leGVjdXRlKE1hdmVuSW1wbC5qYXZhOjEzNTUpCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKK0NvbnRhaW5zOiBNaXNzaW5nIGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOmphcjpqYXZhZG9jOjAuMS1TTkFQU0hPVAorIVNVQkVOVFJZIDEgb3JnLmVjbGlwc2UubTJlLmNvcmUgNCAtMSAyMDIxLTA5LTI4IDA5OjIzOjQ5LjQ5MworIU1FU1NBR0UgQ291bGQgbm90IHJlc29sdmUgYXJ0aWZhY3QgZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6amFyOmphdmFkb2M6MC4xLVNOQVBTSE9UCishU1VCRU5UUlkgMiBvcmcuZWNsaXBzZS5tMmUuY29yZSA0IC0xIDIwMjEtMDktMjggMDk6MjM6NDkuNDkzCishTUVTU0FHRSBNaXNzaW5nIGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOmphcjpqYXZhZG9jOjAuMS1TTkFQU0hPVAorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgNCAwIDIwMjEtMDktMjggMDk6Mjc6MDMuMTk1CishTUVTU0FHRSBVbmFibGUgdG8gY29uZmlndXJlIEdsZW1tU2VydmljZXMKKyFTVEFDSyAwCitvcmcuZWNsaXBzZS5tMmUud3RwLk1hcmtlZEV4Y2VwdGlvbjogVW5hYmxlIHRvIGNvbmZpZ3VyZSBHbGVtbVNlcnZpY2VzCisJYXQgb3JnLmVjbGlwc2UubTJlLnd0cC5BYnN0cmFjdFByb2plY3RDb25maWd1cmF0b3JEZWxlZ2F0ZS5jb25maWd1cmVQcm9qZWN0KEFic3RyYWN0UHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmphdmE6OTkpCisJYXQgb3JnLmVjbGlwc2UubTJlLnd0cC5XVFBQcm9qZWN0Q29uZmlndXJhdG9yLmNvbmZpZ3VyZShXVFBQcm9qZWN0Q29uZmlndXJhdG9yLmphdmE6NjgpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUucHJvamVjdC5jb25maWd1cmF0b3IuQWJzdHJhY3RMaWZlY3ljbGVNYXBwaW5nLmNvbmZpZ3VyZShBYnN0cmFjdExpZmVjeWNsZU1hcHBpbmcuamF2YToxMjApCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIkMy5jYWxsKFByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5qYXZhOjUwOCkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciQzLmNhbGwoUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE1MSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci51cGRhdGVQcm9qZWN0Q29uZmlndXJhdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YTo1MDEpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuY29uZmlndXJlTmV3TWF2ZW5Qcm9qZWN0cyhQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YToyODgpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIkMS5jYWxsKFByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5qYXZhOjE3NSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciQxLmNhbGwoUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE1MSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwuZXhlY3V0ZShNYXZlbkltcGwuamF2YToxMzU1KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLnByb2plY3QuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmltcG9ydFByb2plY3RzKFByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5qYXZhOjE0MykKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS51aS5pbnRlcm5hbC53aXphcmRzLkltcG9ydE1hdmVuUHJvamVjdHNKb2IkMS5kb0NyZWF0ZU1hdmVuUHJvamVjdHMoSW1wb3J0TWF2ZW5Qcm9qZWN0c0pvYi5qYXZhOjY4KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLnVpLmludGVybmFsLndpemFyZHMuQWJzdHJhY3RDcmVhdGVNYXZlblByb2plY3RzT3BlcmF0aW9uLnJ1bihBYnN0cmFjdENyZWF0ZU1hdmVuUHJvamVjdHNPcGVyYXRpb24uamF2YTo3MykKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS51aS5pbnRlcm5hbC53aXphcmRzLkltcG9ydE1hdmVuUHJvamVjdHNKb2IucnVuSW5Xb3Jrc3BhY2UoSW1wb3J0TWF2ZW5Qcm9qZWN0c0pvYi5qYXZhOjc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLkludGVybmFsV29ya3NwYWNlSm9iLnJ1bihJbnRlcm5hbFdvcmtzcGFjZUpvYi5qYXZhOjM5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjogT25lIG9yIG1vcmUgY29uc3RyYWludHMgaGF2ZSBub3QgYmVlbiBzYXRpc2ZpZWQuCisJYXQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuaW50ZXJuYWwuRmFjZXRlZFByb2plY3QubW9kaWZ5SW50ZXJuYWwoRmFjZXRlZFByb2plY3QuamF2YTozNjMpCisJYXQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuaW50ZXJuYWwuRmFjZXRlZFByb2plY3QubWVyZ2VDaGFuZ2VzSW50ZXJuYWwoRmFjZXRlZFByb2plY3QuamF2YToxMTgxKQorCWF0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmludGVybmFsLkZhY2V0ZWRQcm9qZWN0LmFjY2VzcyQyKEZhY2V0ZWRQcm9qZWN0LmphdmE6MTExNykKKwlhdCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5pbnRlcm5hbC5GYWNldGVkUHJvamVjdCQxLnJ1bihGYWNldGVkUHJvamVjdC5qYXZhOjMyNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIyODkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMzE2KQorCWF0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmludGVybmFsLkZhY2V0ZWRQcm9qZWN0Lm1vZGlmeShGYWNldGVkUHJvamVjdC5qYXZhOjMzOSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUud3RwLldlYlByb2plY3RDb25maWd1cmF0b3JEZWxlZ2F0ZS5jb25maWd1cmUoV2ViUHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmphdmE6MTM2KQorCWF0IG9yZy5lY2xpcHNlLm0yZS53dHAuQWJzdHJhY3RQcm9qZWN0Q29uZmlndXJhdG9yRGVsZWdhdGUuY29uZmlndXJlUHJvamVjdChBYnN0cmFjdFByb2plY3RDb25maWd1cmF0b3JEZWxlZ2F0ZS5qYXZhOjk1KQorCS4uLiAyMCBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciA0IDAgMjAyMS0wOS0yOCAwOTo0NjoxNi42NTEKKyFNRVNTQUdFIENvdWxkIG5vdCBkb3dubG9hZCBzb3VyY2VzIGZvciBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UCishU1RBQ0sgMQorb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb246IENvdWxkIG5vdCByZXNvbHZlIGFydGlmYWN0IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjpqYXI6c291cmNlczowLjEtU05BUFNIT1QKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjc3NikKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzQzKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjcyMCkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNzkpCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRBdHRhY2htZW50cyhEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNTQpCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRNYXZlbihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyMjEpCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjE2MSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM3KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTUxKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5leGVjdXRlKE1hdmVuSW1wbC5qYXZhOjEzNTUpCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKK0NvbnRhaW5zOiBNaXNzaW5nIGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjpqYXI6c291cmNlczowLjEtU05BUFNIT1QKKyFTVUJFTlRSWSAxIG9yZy5lY2xpcHNlLm0yZS5jb3JlIDQgLTEgMjAyMS0wOS0yOCAwOTo0NjoxNi42NTUKKyFNRVNTQUdFIENvdWxkIG5vdCByZXNvbHZlIGFydGlmYWN0IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjpqYXI6c291cmNlczowLjEtU05BUFNIT1QKKyFTVUJFTlRSWSAyIG9yZy5lY2xpcHNlLm0yZS5jb3JlIDQgLTEgMjAyMS0wOS0yOCAwOTo0NjoxNi42NTUKKyFNRVNTQUdFIE1pc3NpbmcgZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOmphcjpzb3VyY2VzOjAuMS1TTkFQU0hPVAorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgNCAwIDIwMjEtMDktMjggMDk6NDY6MTYuNjc5CishTUVTU0FHRSBDb3VsZCBub3QgZG93bmxvYWQgamF2YWRvYyBmb3IgZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVAorIVNUQUNLIDEKK29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOiBDb3VsZCBub3QgcmVzb2x2ZSBhcnRpZmFjdCBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6amFyOmphdmFkb2M6MC4xLVNOQVBTSE9UCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YTo3NzYpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjc0MykKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3MjApCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWQoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6Mjc5KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkQXR0YWNobWVudHMoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjY1KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkTWF2ZW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjIxKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxNjEpCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNykKKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE1MSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwuZXhlY3V0ZShNYXZlbkltcGwuamF2YToxMzU1KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCitDb250YWluczogTWlzc2luZyBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6amFyOmphdmFkb2M6MC4xLVNOQVBTSE9UCishU1VCRU5UUlkgMSBvcmcuZWNsaXBzZS5tMmUuY29yZSA0IC0xIDIwMjEtMDktMjggMDk6NDY6MTYuNjc5CishTUVTU0FHRSBDb3VsZCBub3QgcmVzb2x2ZSBhcnRpZmFjdCBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6amFyOmphdmFkb2M6MC4xLVNOQVBTSE9UCishU1VCRU5UUlkgMiBvcmcuZWNsaXBzZS5tMmUuY29yZSA0IC0xIDIwMjEtMDktMjggMDk6NDY6MTYuNjc5CishTUVTU0FHRSBNaXNzaW5nIGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjpqYXI6amF2YWRvYzowLjEtU05BUFNIT1QKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDQgMCAyMDIxLTA5LTI4IDA5OjQ3OjI1LjM3MQorIU1FU1NBR0UgVW5hYmxlIHRvIGNvbmZpZ3VyZSB3Zm9ybVNlcnZpY2VzCishU1RBQ0sgMAorb3JnLmVjbGlwc2UubTJlLnd0cC5NYXJrZWRFeGNlcHRpb246IFVuYWJsZSB0byBjb25maWd1cmUgd2Zvcm1TZXJ2aWNlcworCWF0IG9yZy5lY2xpcHNlLm0yZS53dHAuQWJzdHJhY3RQcm9qZWN0Q29uZmlndXJhdG9yRGVsZWdhdGUuY29uZmlndXJlUHJvamVjdChBYnN0cmFjdFByb2plY3RDb25maWd1cmF0b3JEZWxlZ2F0ZS5qYXZhOjk5KQorCWF0IG9yZy5lY2xpcHNlLm0yZS53dHAuV1RQUHJvamVjdENvbmZpZ3VyYXRvci5jb25maWd1cmUoV1RQUHJvamVjdENvbmZpZ3VyYXRvci5qYXZhOjY4KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLnByb2plY3QuY29uZmlndXJhdG9yLkFic3RyYWN0TGlmZWN5Y2xlTWFwcGluZy5jb25maWd1cmUoQWJzdHJhY3RMaWZlY3ljbGVNYXBwaW5nLmphdmE6MTIwKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLnByb2plY3QuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyJDMuY2FsbChQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YTo1MDgpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIkMy5jYWxsKFByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNTEpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIudXBkYXRlUHJvamVjdENvbmZpZ3VyYXRpb24oUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6NTAxKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLnByb2plY3QuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmNvbmZpZ3VyZU5ld01hdmVuUHJvamVjdHMoUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6Mjg4KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLnByb2plY3QuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyJDEuY2FsbChQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YToxNzUpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIkMS5jYWxsKFByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNTEpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLmV4ZWN1dGUoTWF2ZW5JbXBsLmphdmE6MTM1NSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5pbXBvcnRQcm9qZWN0cyhQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YToxNDMpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUudWkuaW50ZXJuYWwud2l6YXJkcy5JbXBvcnRNYXZlblByb2plY3RzSm9iJDEuZG9DcmVhdGVNYXZlblByb2plY3RzKEltcG9ydE1hdmVuUHJvamVjdHNKb2IuamF2YTo2OCkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS51aS5pbnRlcm5hbC53aXphcmRzLkFic3RyYWN0Q3JlYXRlTWF2ZW5Qcm9qZWN0c09wZXJhdGlvbi5ydW4oQWJzdHJhY3RDcmVhdGVNYXZlblByb2plY3RzT3BlcmF0aW9uLmphdmE6NzMpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUudWkuaW50ZXJuYWwud2l6YXJkcy5JbXBvcnRNYXZlblByb2plY3RzSm9iLnJ1bkluV29ya3NwYWNlKEltcG9ydE1hdmVuUHJvamVjdHNKb2IuamF2YTo3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5JbnRlcm5hbFdvcmtzcGFjZUpvYi5ydW4oSW50ZXJuYWxXb3Jrc3BhY2VKb2IuamF2YTozOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb246IE9uZSBvciBtb3JlIGNvbnN0cmFpbnRzIGhhdmUgbm90IGJlZW4gc2F0aXNmaWVkLgorCWF0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmludGVybmFsLkZhY2V0ZWRQcm9qZWN0Lm1vZGlmeUludGVybmFsKEZhY2V0ZWRQcm9qZWN0LmphdmE6MzYzKQorCWF0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmludGVybmFsLkZhY2V0ZWRQcm9qZWN0Lm1lcmdlQ2hhbmdlc0ludGVybmFsKEZhY2V0ZWRQcm9qZWN0LmphdmE6MTE4MSkKKwlhdCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5pbnRlcm5hbC5GYWNldGVkUHJvamVjdC5hY2Nlc3MkMihGYWNldGVkUHJvamVjdC5qYXZhOjExMTcpCisJYXQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuaW50ZXJuYWwuRmFjZXRlZFByb2plY3QkMS5ydW4oRmFjZXRlZFByb2plY3QuamF2YTozMjQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMjg5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjMxNikKKwlhdCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5pbnRlcm5hbC5GYWNldGVkUHJvamVjdC5tb2RpZnkoRmFjZXRlZFByb2plY3QuamF2YTozMzkpCisJYXQgb3JnLmVjbGlwc2UubTJlLnd0cC5XZWJQcm9qZWN0Q29uZmlndXJhdG9yRGVsZWdhdGUuY29uZmlndXJlKFdlYlByb2plY3RDb25maWd1cmF0b3JEZWxlZ2F0ZS5qYXZhOjEzNikKKwlhdCBvcmcuZWNsaXBzZS5tMmUud3RwLkFic3RyYWN0UHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmNvbmZpZ3VyZVByb2plY3QoQWJzdHJhY3RQcm9qZWN0Q29uZmlndXJhdG9yRGVsZWdhdGUuamF2YTo5NSkKKwkuLi4gMjAgbW9yZQorIVNFU1NJT04gMjAyMS0wOS0yOCAxMTowNjozNi43NDYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VjbGlwc2UuYnVpbGRJZD00LjguMC5JMjAxODA2MTEtMDUwMAoramF2YS52ZXJzaW9uPTEuOC4wXzIzMQoramF2YS52ZW5kb3I9T3JhY2xlIENvcnBvcmF0aW9uCitCb290TG9hZGVyIGNvbnN0YW50czogT1M9d2luMzIsIEFSQ0g9eDg2XzY0LCBXUz13aW4zMiwgTkw9ZGVfREUKK0ZyYW1ld29yayBhcmd1bWVudHM6ICAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKK0NvbW1hbmQtbGluZSBhcmd1bWVudHM6ICAtb3Mgd2luMzIgLXdzIHdpbjMyIC1hcmNoIHg4Nl82NCAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zIDQgMCAyMDIxLTA5LTI4IDExOjA2OjQxLjEzMworIU1FU1NBR0UgRnJhbWV3b3JrRXZlbnQgRVJST1IKKyFTVEFDSyAwCitvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOiBFeGNlcHRpb24gaW4gb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KCkgb2YgYnVuZGxlIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zLgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6ODAwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCS4uLiAxMiBtb3JlCitSb290IGV4Y2VwdGlvbjoKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUgMiAwIDIwMjEtMDktMjggMTE6MDY6NTUuNTY1CishTUVTU0FHRSBCdWlsdGluIExGUyBzdXBwb3J0IG5vdCBwcmVzZW50L2RldGVjdGVkCishU1RBQ0sgMAoramF2YS5sYW5nLkNsYXNzTm90Rm91bmRFeGNlcHRpb246IG9yZy5lY2xpcHNlLmpnaXQubGZzLkJ1aWx0aW5MRlMgY2Fubm90IGJlIGZvdW5kIGJ5IG9yZy5lY2xpcHNlLmVnaXQuY29yZV81LjAuMC4yMDE4MDYxMzE1NTAtcgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo1MDgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUwKE5hdGl2ZSBNZXRob2QpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUoQ2xhc3MuamF2YToyNjQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5yZWdpc3RlckJ1aWx0aW5MRlMoQWN0aXZhdG9yLmphdmE6Mjc5KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MjEyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLnNvdXJjZXMuU2luZ2xlU291cmNlUGFja2FnZS5sb2FkQ2xhc3MoU2luZ2xlU291cmNlUGFja2FnZS5qYXZhOjM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3IkUmVwb3NpdG9yeUNoYW5nZVNjYW5uZXIuPGluaXQ+KEFjdGl2YXRvci5qYXZhOjkyMSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zZXR1cFJlcG9DaGFuZ2VTY2FubmVyKEFjdGl2YXRvci5qYXZhOjEwMzQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLldvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5nZXRTb3VyY2VQcm92aWRlcnMoV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmphdmE6MTc0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLlNvdXJjZVByb3ZpZGVyU2VydmljZS5yZWFkUmVnaXN0cnkoU291cmNlUHJvdmlkZXJTZXJ2aWNlLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaCQzNC5ydW5XaXRoRXhjZXB0aW9uKFdvcmtiZW5jaC5qYXZhOjIzNzgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZyRTdGFydHVwUnVubmFibGUucnVuKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTozMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TeW5jaHJvbml6ZXIuc3luY0V4ZWMoU3luY2hyb25pemVyLmphdmE6MjMzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlVJU3luY2hyb25pemVyLnN5bmNFeGVjKFVJU3luY2hyb25pemVyLmphdmE6MTQ0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc3luY0V4ZWMoRGlzcGxheS5qYXZhOjQ1NjcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZy5ydW5XaXRob3V0RXhjZXB0aW9ucyhTdGFydHVwVGhyZWFkaW5nLmphdmE6OTUpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXRpYWxpemVEZWZhdWx0U2VydmljZXMoV29ya2JlbmNoLmphdmE6MjM3MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdChXb3JrYmVuY2guamF2YToxNjU0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5ydW5VSShXb3JrYmVuY2guamF2YToyODU5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkMyhXb3JrYmVuY2guamF2YTo2NTQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goV29ya2JlbmNoLmphdmE6NTk3KQorCWF0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUkuY3JlYXRlQW5kUnVuV29ya2JlbmNoKFBsYXRmb3JtVUkuamF2YToxNDgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERUFwcGxpY2F0aW9uLnN0YXJ0KElERUFwcGxpY2F0aW9uLmphdmE6MTUyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuYXBwLkVjbGlwc2VBcHBIYW5kbGUucnVuKEVjbGlwc2VBcHBIYW5kbGUuamF2YToxOTYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnJ1bkFwcGxpY2F0aW9uKEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEzNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIuc3RhcnQoRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjM4OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YToyNDMpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKE5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjYyKQorCWF0IHN1bi5yZWZsZWN0LkRlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKERlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuamF2YTo0MykKKwlhdCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuaW52b2tlKE1ldGhvZC5qYXZhOjQ5OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uaW52b2tlRnJhbWV3b3JrKE1haW4uamF2YTo2NTYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmJhc2ljUnVuKE1haW4uamF2YTo1OTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLnJ1bihNYWluLmphdmE6MTQ5OCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQudWkgMiAwIDIwMjEtMDktMjggMTE6MDc6MTMuMTA2CishTUVTU0FHRSBXYXJuaW5nOiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgSE9NRSBpcyBub3Qgc2V0LiBUaGUgZm9sbG93aW5nIGRpcmVjdG9yeSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIEdpdAordXNlciBnbG9iYWwgY29uZmlndXJhdGlvbiBhbmQgdG8gZGVmaW5lIHRoZSBkZWZhdWx0IGxvY2F0aW9uIHRvIHN0b3JlIHJlcG9zaXRvcmllczogJ0M6XFVzZXJzXEZyYW5jaycuIElmIHRoaXMgaXMKK25vdCBjb3JyZWN0IHBsZWFzZSBzZXQgdGhlIEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIHJlc3RhcnQgRWNsaXBzZS4gT3RoZXJ3aXNlIEdpdCBmb3IgV2luZG93cyBhbmQKK0VHaXQgbWlnaHQgYmVoYXZlIGRpZmZlcmVudGx5IHNpbmNlIHRoZXkgc2VlIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCitUaGlzIHdhcm5pbmcgY2FuIGJlIHN3aXRjaGVkIG9mZiBvbiB0aGUgVGVhbSA+IEdpdCA+IENvbmZpcm1hdGlvbnMgYW5kIFdhcm5pbmdzIHByZWZlcmVuY2UgcGFnZS4KKworIUVOVFJZIG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlIDIgMTcgMjAyMS0wOS0yOCAxMTowNzoxNi40OTMKKyFNRVNTQUdFIFNlcnZlciDigJhvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXLigJkgZmFpbGVkIHdpdGggZXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJC4gOyB2ZXJzaW9uOiAyLjAuNy52MjAxNzA5MDYtMTMyNworIVNUQUNLIDAKK2NvbS5nb29nbGUuZ3Nvbi5Kc29uU3ludGF4RXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMjQpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg4OCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODUzKQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4MDIpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLmpzb24uSnNvbi5kZXNlcmlhbGl6ZShKc29uLmphdmE6OTEpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuSU8ucmVmcmVzaENvbmZpZ3VyYXRpb24oSU8uamF2YTo2NikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5TZXJ2ZXJDb25uZWN0aW9uLnN0YXJ0VXAoU2VydmVyQ29ubmVjdGlvbi5qYXZhOjEyNCkKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RJZGxlU2VydmljZSREZWxlZ2F0ZVNlcnZpY2UkMS5ydW4oQWJzdHJhY3RJZGxlU2VydmljZS5qYXZhOjYyKQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5DYWxsYWJsZXMkNC5ydW4oQ2FsbGFibGVzLmphdmE6MTIyKQorCWF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uc3RyZWFtLkpzb25SZWFkZXIuYmVnaW5PYmplY3QoSnNvblJlYWRlci5qYXZhOjM4NSkKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjEzKQorCS4uLiA5IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpIDQgMCAyMDIxLTA5LTI4IDExOjA3OjMwLjAyMworIU1FU1NBR0UgUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKyFTVEFDSyAwCitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRLbm93blJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NDgwKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyJEFydGlmYWN0LmdldEtub3duUmVwb3NpdG9yaWVzKENhY2hpbmdSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjYyMykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5jb3JlLlAyVXRpbC5nZXRLbm93blJlcG9zaXRvcmllcyhQMlV0aWwuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5wMi5pbXBsLlAyVGFza0ltcGwuaXNOZWVkZWQoUDJUYXNrSW1wbC5qYXZhOjcwMSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5pbnRlcm5hbC5jb3JlLlNldHVwVGFza1BlcmZvcm1lci5pbml0TmVlZGVkU2V0dXBUYXNrcyhTZXR1cFRhc2tQZXJmb3JtZXIuamF2YToyMjczKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4ucGVyZm9ybVN0YXJ0dXAoU2V0dXBVSVBsdWdpbi5qYXZhOjY3OSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLmFjY2VzcyQ1KFNldHVwVUlQbHVnaW4uamF2YTo0MTUpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbiQxJDEucnVuKFNldHVwVUlQbHVnaW4uamF2YToyNTIpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCishU0VTU0lPTiAyMDIxLTA5LTI5IDE2OjIwOjI1LjM3NyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNsaXBzZS5idWlsZElkPTQuOC4wLkkyMDE4MDYxMS0wNTAwCitqYXZhLnZlcnNpb249MS44LjBfMjMxCitqYXZhLnZlbmRvcj1PcmFjbGUgQ29ycG9yYXRpb24KK0Jvb3RMb2FkZXIgY29uc3RhbnRzOiBPUz13aW4zMiwgQVJDSD14ODZfNjQsIFdTPXdpbjMyLCBOTD1kZV9ERQorRnJhbWV3b3JrIGFyZ3VtZW50czogIC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorQ29tbWFuZC1saW5lIGFyZ3VtZW50czogIC1vcyB3aW4zMiAtd3Mgd2luMzIgLWFyY2ggeDg2XzY0IC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorCishRU5UUlkgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMgNCAwIDIwMjEtMDktMjkgMTY6MjA6MzYuMjE5CishTUVTU0FHRSBGcmFtZXdvcmtFdmVudCBFUlJPUgorIVNUQUNLIDAKK29yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb246IEV4Y2VwdGlvbiBpbiBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoKSBvZiBidW5kbGUgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo4MDApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJLi4uIDEyIG1vcmUKK1Jvb3QgZXhjZXB0aW9uOgoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQuY29yZSAyIDAgMjAyMS0wOS0yOSAxNjoyMDo1OS4xNTkKKyFNRVNTQUdFIEJ1aWx0aW4gTEZTIHN1cHBvcnQgbm90IHByZXNlbnQvZGV0ZWN0ZWQKKyFTVEFDSyAwCitqYXZhLmxhbmcuQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbjogb3JnLmVjbGlwc2UuamdpdC5sZnMuQnVpbHRpbkxGUyBjYW5ub3QgYmUgZm91bmQgYnkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlXzUuMC4wLjIwMTgwNjEzMTU1MC1yCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjUwOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZShDbGFzcy5qYXZhOjI2NCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnJlZ2lzdGVyQnVpbHRpbkxGUyhBY3RpdmF0b3IuamF2YToyNzkpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToyMTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuc291cmNlcy5TaW5nbGVTb3VyY2VQYWNrYWdlLmxvYWRDbGFzcyhTaW5nbGVTb3VyY2VQYWNrYWdlLmphdmE6MzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvciRSZXBvc2l0b3J5Q2hhbmdlU2Nhbm5lci48aW5pdD4oQWN0aXZhdG9yLmphdmE6OTIxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnNldHVwUmVwb0NoYW5nZVNjYW5uZXIoQWN0aXZhdG9yLmphdmE6MTAzNCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmdldFNvdXJjZVByb3ZpZGVycyhXb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuamF2YToxNzQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuU291cmNlUHJvdmlkZXJTZXJ2aWNlLnJlYWRSZWdpc3RyeShTb3VyY2VQcm92aWRlclNlcnZpY2UuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoJDM0LnJ1bldpdGhFeGNlcHRpb24oV29ya2JlbmNoLmphdmE6MjM3OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nJFN0YXJ0dXBSdW5uYWJsZS5ydW4oU3RhcnR1cFRocmVhZGluZy5qYXZhOjMyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlN5bmNocm9uaXplci5zeW5jRXhlYyhTeW5jaHJvbml6ZXIuamF2YToyMzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuVUlTeW5jaHJvbml6ZXIuc3luY0V4ZWMoVUlTeW5jaHJvbml6ZXIuamF2YToxNDQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zeW5jRXhlYyhEaXNwbGF5LmphdmE6NDU2NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nLnJ1bldpdGhvdXRFeGNlcHRpb25zKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTo5NSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdGlhbGl6ZURlZmF1bHRTZXJ2aWNlcyhXb3JrYmVuY2guamF2YToyMzczKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0KFdvcmtiZW5jaC5qYXZhOjE2NTQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLnJ1blVJKFdvcmtiZW5jaC5qYXZhOjI4NTkpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQzKFdvcmtiZW5jaC5qYXZhOjY1NCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChXb3JrYmVuY2guamF2YTo1OTcpCisJYXQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSS5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goUGxhdGZvcm1VSS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFQXBwbGljYXRpb24uc3RhcnQoSURFQXBwbGljYXRpb24uamF2YToxNTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5hcHAuRWNsaXBzZUFwcEhhbmRsZS5ydW4oRWNsaXBzZUFwcEhhbmRsZS5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIucnVuQXBwbGljYXRpb24oRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5zdGFydChFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6Mzg4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjI0MykKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NjIpCisJYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjQzKQorCWF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6NDk4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5pbnZva2VGcmFtZXdvcmsoTWFpbi5qYXZhOjY1NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uYmFzaWNSdW4oTWFpbi5qYXZhOjU5MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4ucnVuKE1haW4uamF2YToxNDk4KQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC51aSAyIDAgMjAyMS0wOS0yOSAxNjoyMTo1Ni4wNTgKKyFNRVNTQUdFIFdhcm5pbmc6IFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBIT01FIGlzIG5vdCBzZXQuIFRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5IHdpbGwgYmUgdXNlZCB0byBzdG9yZSB0aGUgR2l0Cit1c2VyIGdsb2JhbCBjb25maWd1cmF0aW9uIGFuZCB0byBkZWZpbmUgdGhlIGRlZmF1bHQgbG9jYXRpb24gdG8gc3RvcmUgcmVwb3NpdG9yaWVzOiAnQzpcVXNlcnNcRnJhbmNrJy4gSWYgdGhpcyBpcworbm90IGNvcnJlY3QgcGxlYXNlIHNldCB0aGUgSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgcmVzdGFydCBFY2xpcHNlLiBPdGhlcndpc2UgR2l0IGZvciBXaW5kb3dzIGFuZAorRUdpdCBtaWdodCBiZWhhdmUgZGlmZmVyZW50bHkgc2luY2UgdGhleSBzZWUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KK1RoaXMgd2FybmluZyBjYW4gYmUgc3dpdGNoZWQgb2ZmIG9uIHRoZSBUZWFtID4gR2l0ID4gQ29uZmlybWF0aW9ucyBhbmQgV2FybmluZ3MgcHJlZmVyZW5jZSBwYWdlLgorCishRU5UUlkgb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUgMiAxNyAyMDIxLTA5LTI5IDE2OjIyOjAxLjM5NgorIU1FU1NBR0UgU2VydmVyIOKAmG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlcuKAmSBmYWlsZWQgd2l0aCBleGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkLiA7IHZlcnNpb246IDIuMC43LnYyMDE3MDkwNi0xMzI3CishU1RBQ0sgMAorY29tLmdvb2dsZS5nc29uLkpzb25TeW50YXhFeGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIyNCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODg4KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4NTMpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjgwMikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIuanNvbi5Kc29uLmRlc2VyaWFsaXplKEpzb24uamF2YTo5MSkKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5JTy5yZWZyZXNoQ29uZmlndXJhdGlvbihJTy5qYXZhOjY2KQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLlNlcnZlckNvbm5lY3Rpb24uc3RhcnRVcChTZXJ2ZXJDb25uZWN0aW9uLmphdmE6MTI0KQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdElkbGVTZXJ2aWNlJERlbGVnYXRlU2VydmljZSQxLnJ1bihBYnN0cmFjdElkbGVTZXJ2aWNlLmphdmE6NjIpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkNhbGxhYmxlcyQ0LnJ1bihDYWxsYWJsZXMuamF2YToxMjIpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5zdHJlYW0uSnNvblJlYWRlci5iZWdpbk9iamVjdChKc29uUmVhZGVyLmphdmE6Mzg1KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMTMpCisJLi4uIDkgbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkgNCAwIDIwMjEtMDktMjkgMTY6MjI6MjAuNjI5CishTUVTU0FHRSBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorIVNUQUNLIDAKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldEtub3duUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo0ODApCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5DYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIkQXJ0aWZhY3QuZ2V0S25vd25SZXBvc2l0b3JpZXMoQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjIzKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmNvcmUuUDJVdGlsLmdldEtub3duUmVwb3NpdG9yaWVzKFAyVXRpbC5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnAyLmltcGwuUDJUYXNrSW1wbC5pc05lZWRlZChQMlRhc2tJbXBsLmphdmE6NzAxKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLmludGVybmFsLmNvcmUuU2V0dXBUYXNrUGVyZm9ybWVyLmluaXROZWVkZWRTZXR1cFRhc2tzKFNldHVwVGFza1BlcmZvcm1lci5qYXZhOjIyNzMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5wZXJmb3JtU3RhcnR1cChTZXR1cFVJUGx1Z2luLmphdmE6Njc5KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4uYWNjZXNzJDUoU2V0dXBVSVBsdWdpbi5qYXZhOjQxNSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luJDEkMS5ydW4oU2V0dXBVSVBsdWdpbi5qYXZhOjI1MikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKyFTRVNTSU9OIDIwMjEtMDktMzAgMTM6MDA6NTguMzY3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2xpcHNlLmJ1aWxkSWQ9NC44LjAuSTIwMTgwNjExLTA1MDAKK2phdmEudmVyc2lvbj0xLjguMF8yMzEKK2phdmEudmVuZG9yPU9yYWNsZSBDb3Jwb3JhdGlvbgorQm9vdExvYWRlciBjb25zdGFudHM6IE9TPXdpbjMyLCBBUkNIPXg4Nl82NCwgV1M9d2luMzIsIE5MPWRlX0RFCitGcmFtZXdvcmsgYXJndW1lbnRzOiAgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CitDb21tYW5kLWxpbmUgYXJndW1lbnRzOiAgLW9zIHdpbjMyIC13cyB3aW4zMiAtYXJjaCB4ODZfNjQgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucyA0IDAgMjAyMS0wOS0zMCAxMzowMTowOS4yNDEKKyFNRVNTQUdFIEZyYW1ld29ya0V2ZW50IEVSUk9SCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogRXhjZXB0aW9uIGluIG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydCgpIG9mIGJ1bmRsZSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucy4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjgwMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwkuLi4gMTIgbW9yZQorUm9vdCBleGNlcHRpb246CitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlIDIgMCAyMDIxLTA5LTMwIDEzOjAxOjU5LjcwNworIU1FU1NBR0UgQnVpbHRpbiBMRlMgc3VwcG9ydCBub3QgcHJlc2VudC9kZXRlY3RlZAorIVNUQUNLIDAKK2phdmEubGFuZy5DbGFzc05vdEZvdW5kRXhjZXB0aW9uOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5CdWlsdGluTEZTIGNhbm5vdCBiZSBmb3VuZCBieSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmVfNS4wLjAuMjAxODA2MTMxNTUwLXIKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NTA4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lMChOYXRpdmUgTWV0aG9kKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lKENsYXNzLmphdmE6MjY0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3IucmVnaXN0ZXJCdWlsdGluTEZTKEFjdGl2YXRvci5qYXZhOjI3OSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjIxMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5zb3VyY2VzLlNpbmdsZVNvdXJjZVBhY2thZ2UubG9hZENsYXNzKFNpbmdsZVNvdXJjZVBhY2thZ2UuamF2YTozNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yJFJlcG9zaXRvcnlDaGFuZ2VTY2FubmVyLjxpbml0PihBY3RpdmF0b3IuamF2YTo5MjEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc2V0dXBSZXBvQ2hhbmdlU2Nhbm5lcihBY3RpdmF0b3IuamF2YToxMDM0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUubG9hZENsYXNzKEVxdWlub3hCdW5kbGUuamF2YTo2MDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5vc2dpLlJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oUmVnaXN0cnlTdHJhdGVneU9TR0kuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5FeHRlbnNpb25SZWdpc3RyeS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEV4dGVuc2lvblJlZ2lzdHJ5LmphdmE6OTMxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudC5qYXZhOjI0MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuamF2YTo2MCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Xb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuZ2V0U291cmNlUHJvdmlkZXJzKFdvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5qYXZhOjE3NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Tb3VyY2VQcm92aWRlclNlcnZpY2UucmVhZFJlZ2lzdHJ5KFNvdXJjZVByb3ZpZGVyU2VydmljZS5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gkMzQucnVuV2l0aEV4Y2VwdGlvbihXb3JrYmVuY2guamF2YToyMzc4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmckU3RhcnR1cFJ1bm5hYmxlLnJ1bihTdGFydHVwVGhyZWFkaW5nLmphdmE6MzIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3luY2hyb25pemVyLnN5bmNFeGVjKFN5bmNocm9uaXplci5qYXZhOjIzMykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5VSVN5bmNocm9uaXplci5zeW5jRXhlYyhVSVN5bmNocm9uaXplci5qYXZhOjE0NCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnN5bmNFeGVjKERpc3BsYXkuamF2YTo0NTY3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmcucnVuV2l0aG91dEV4Y2VwdGlvbnMoU3RhcnR1cFRocmVhZGluZy5qYXZhOjk1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0aWFsaXplRGVmYXVsdFNlcnZpY2VzKFdvcmtiZW5jaC5qYXZhOjIzNzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXQoV29ya2JlbmNoLmphdmE6MTY1NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gucnVuVUkoV29ya2JlbmNoLmphdmE6Mjg1OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjU0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LnVpIDIgMCAyMDIxLTA5LTMwIDEzOjAyOjU5LjYxOAorIU1FU1NBR0UgV2FybmluZzogVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEhPTUUgaXMgbm90IHNldC4gVGhlIGZvbGxvd2luZyBkaXJlY3Rvcnkgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBHaXQKK3VzZXIgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gYW5kIHRvIGRlZmluZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiB0byBzdG9yZSByZXBvc2l0b3JpZXM6ICdDOlxVc2Vyc1xGcmFuY2snLiBJZiB0aGlzIGlzCitub3QgY29ycmVjdCBwbGVhc2Ugc2V0IHRoZSBIT01FIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCByZXN0YXJ0IEVjbGlwc2UuIE90aGVyd2lzZSBHaXQgZm9yIFdpbmRvd3MgYW5kCitFR2l0IG1pZ2h0IGJlaGF2ZSBkaWZmZXJlbnRseSBzaW5jZSB0aGV5IHNlZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLgorVGhpcyB3YXJuaW5nIGNhbiBiZSBzd2l0Y2hlZCBvZmYgb24gdGhlIFRlYW0gPiBHaXQgPiBDb25maXJtYXRpb25zIGFuZCBXYXJuaW5ncyBwcmVmZXJlbmNlIHBhZ2UuCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZSAyIDE3IDIwMjEtMDktMzAgMTM6MDM6MDIuMzY1CishTUVTU0FHRSBTZXJ2ZXIg4oCYb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVy4oCZIGZhaWxlZCB3aXRoIGV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQuIDsgdmVyc2lvbjogMi4wLjcudjIwMTcwOTA2LTEzMjcKKyFTVEFDSyAwCitjb20uZ29vZ2xlLmdzb24uSnNvblN5bnRheEV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjI0KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4ODgpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg1MykKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODAyKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5qc29uLkpzb24uZGVzZXJpYWxpemUoSnNvbi5qYXZhOjkxKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLklPLnJlZnJlc2hDb25maWd1cmF0aW9uKElPLmphdmE6NjYpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuU2VydmVyQ29ubmVjdGlvbi5zdGFydFVwKFNlcnZlckNvbm5lY3Rpb24uamF2YToxMjQpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0SWRsZVNlcnZpY2UkRGVsZWdhdGVTZXJ2aWNlJDEucnVuKEFic3RyYWN0SWRsZVNlcnZpY2UuamF2YTo2MikKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQ2FsbGFibGVzJDQucnVuKENhbGxhYmxlcy5qYXZhOjEyMikKKwlhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLnN0cmVhbS5Kc29uUmVhZGVyLmJlZ2luT2JqZWN0KEpzb25SZWFkZXIuamF2YTozODUpCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIxMykKKwkuLi4gOSBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aSA0IDAgMjAyMS0wOS0zMCAxMzowMzoxNy4zMTkKKyFNRVNTQUdFIFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCishU1RBQ0sgMAoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0S25vd25SZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjQ4MCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkNhY2hpbmdSZXBvc2l0b3J5TWFuYWdlciRBcnRpZmFjdC5nZXRLbm93blJlcG9zaXRvcmllcyhDYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2MjMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuY29yZS5QMlV0aWwuZ2V0S25vd25SZXBvc2l0b3JpZXMoUDJVdGlsLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAucDIuaW1wbC5QMlRhc2tJbXBsLmlzTmVlZGVkKFAyVGFza0ltcGwuamF2YTo3MDEpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAuaW50ZXJuYWwuY29yZS5TZXR1cFRhc2tQZXJmb3JtZXIuaW5pdE5lZWRlZFNldHVwVGFza3MoU2V0dXBUYXNrUGVyZm9ybWVyLmphdmE6MjI3MykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLnBlcmZvcm1TdGFydHVwKFNldHVwVUlQbHVnaW4uamF2YTo2NzkpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5hY2Nlc3MkNShTZXR1cFVJUGx1Z2luLmphdmE6NDE1KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4kMSQxLnJ1bihTZXR1cFVJUGx1Z2luLmphdmE6MjUyKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMDktMzAgMTM6MTM6MTguOTY3CishTUVTU0FHRSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKKyFTVEFDSyAwCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkKKwkuLi4gOCBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcCAxIDAgMjAyMS0wOS0zMCAxMzoxMzoxOC45NzAKKyFNRVNTQUdFIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wIGNvdWxkIG5vdCBiZSByZXNvbHZlZCBmcm9tIHRoZSBtb2RlbCByZXBvc2l0b3JpZXMuIEFyZSB5b3Ugb2ZmbGluZT8KKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTA5LTMwIDE3OjU2OjM0Ljk3NgorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMDktMzAgMTc6NTY6MzQuOTg0CishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0wOS0zMCAxNzo1NjozNy4xODMKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTA5LTMwIDE3OjU2OjM3LjE5MQorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMDktMzAgMTc6NTY6MzcuNzIxCishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0wOS0zMCAxNzo1NjozNy43MjgKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTA5LTMwIDE3OjU2OjM4LjI3NQorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMDktMzAgMTc6NTY6NDMuMTM0CishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0wOS0zMCAxNzo1Njo0My4xNDAKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTA5LTMwIDE3OjU2OjQzLjMyMQorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMDktMzAgMTc6NTY6NDMuMzMxCishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0wOS0zMCAxNzo1Njo0My41OTIKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTA5LTMwIDE3OjU2OjQzLjYwOAorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMDktMzAgMTc6NTY6NDMuNjIyCishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0wOS0zMCAxNzo1Njo0My45NzQKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTA5LTMwIDE3OjU2OjQzLjk4NQorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorIVNFU1NJT04gMjAyMS0xMC0wNSAwOTo0ODo0Mi40ODIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VjbGlwc2UuYnVpbGRJZD00LjguMC5JMjAxODA2MTEtMDUwMAoramF2YS52ZXJzaW9uPTEuOC4wXzIzMQoramF2YS52ZW5kb3I9T3JhY2xlIENvcnBvcmF0aW9uCitCb290TG9hZGVyIGNvbnN0YW50czogT1M9d2luMzIsIEFSQ0g9eDg2XzY0LCBXUz13aW4zMiwgTkw9ZGVfREUKK0ZyYW1ld29yayBhcmd1bWVudHM6ICAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CitDb21tYW5kLWxpbmUgYXJndW1lbnRzOiAgLW9zIHdpbjMyIC13cyB3aW4zMiAtYXJjaCB4ODZfNjQgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0IC1kYXRhIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVx3c3AtS29yQVAtU2VydmljZXMgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucyA0IDAgMjAyMS0xMC0wNSAwOTo0ODo0Ny43MDUKKyFNRVNTQUdFIEZyYW1ld29ya0V2ZW50IEVSUk9SCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogRXhjZXB0aW9uIGluIG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydCgpIG9mIGJ1bmRsZSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucy4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjgwMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwkuLi4gMTIgbW9yZQorUm9vdCBleGNlcHRpb246CitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlIDIgMCAyMDIxLTEwLTA1IDA5OjQ4OjU1LjA2MgorIU1FU1NBR0UgQnVpbHRpbiBMRlMgc3VwcG9ydCBub3QgcHJlc2VudC9kZXRlY3RlZAorIVNUQUNLIDAKK2phdmEubGFuZy5DbGFzc05vdEZvdW5kRXhjZXB0aW9uOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5CdWlsdGluTEZTIGNhbm5vdCBiZSBmb3VuZCBieSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmVfNS4wLjAuMjAxODA2MTMxNTUwLXIKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NTA4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lMChOYXRpdmUgTWV0aG9kKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lKENsYXNzLmphdmE6MjY0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3IucmVnaXN0ZXJCdWlsdGluTEZTKEFjdGl2YXRvci5qYXZhOjI3OSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjIxMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5zb3VyY2VzLlNpbmdsZVNvdXJjZVBhY2thZ2UubG9hZENsYXNzKFNpbmdsZVNvdXJjZVBhY2thZ2UuamF2YTozNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yJFJlcG9zaXRvcnlDaGFuZ2VTY2FubmVyLjxpbml0PihBY3RpdmF0b3IuamF2YTo5MjEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc2V0dXBSZXBvQ2hhbmdlU2Nhbm5lcihBY3RpdmF0b3IuamF2YToxMDM0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUubG9hZENsYXNzKEVxdWlub3hCdW5kbGUuamF2YTo2MDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5vc2dpLlJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oUmVnaXN0cnlTdHJhdGVneU9TR0kuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5FeHRlbnNpb25SZWdpc3RyeS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEV4dGVuc2lvblJlZ2lzdHJ5LmphdmE6OTMxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudC5qYXZhOjI0MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuamF2YTo2MCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Xb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuZ2V0U291cmNlUHJvdmlkZXJzKFdvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5qYXZhOjE3NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Tb3VyY2VQcm92aWRlclNlcnZpY2UucmVhZFJlZ2lzdHJ5KFNvdXJjZVByb3ZpZGVyU2VydmljZS5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gkMzQucnVuV2l0aEV4Y2VwdGlvbihXb3JrYmVuY2guamF2YToyMzc4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmckU3RhcnR1cFJ1bm5hYmxlLnJ1bihTdGFydHVwVGhyZWFkaW5nLmphdmE6MzIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3luY2hyb25pemVyLnN5bmNFeGVjKFN5bmNocm9uaXplci5qYXZhOjIzMykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5VSVN5bmNocm9uaXplci5zeW5jRXhlYyhVSVN5bmNocm9uaXplci5qYXZhOjE0NCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnN5bmNFeGVjKERpc3BsYXkuamF2YTo0NTY3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmcucnVuV2l0aG91dEV4Y2VwdGlvbnMoU3RhcnR1cFRocmVhZGluZy5qYXZhOjk1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0aWFsaXplRGVmYXVsdFNlcnZpY2VzKFdvcmtiZW5jaC5qYXZhOjIzNzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXQoV29ya2JlbmNoLmphdmE6MTY1NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gucnVuVUkoV29ya2JlbmNoLmphdmE6Mjg1OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjU0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LnVpIDIgMCAyMDIxLTEwLTA1IDA5OjQ5OjQzLjIxNworIU1FU1NBR0UgV2FybmluZzogVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEhPTUUgaXMgbm90IHNldC4gVGhlIGZvbGxvd2luZyBkaXJlY3Rvcnkgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBHaXQKK3VzZXIgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gYW5kIHRvIGRlZmluZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiB0byBzdG9yZSByZXBvc2l0b3JpZXM6ICdDOlxVc2Vyc1xGcmFuY2snLiBJZiB0aGlzIGlzCitub3QgY29ycmVjdCBwbGVhc2Ugc2V0IHRoZSBIT01FIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCByZXN0YXJ0IEVjbGlwc2UuIE90aGVyd2lzZSBHaXQgZm9yIFdpbmRvd3MgYW5kCitFR2l0IG1pZ2h0IGJlaGF2ZSBkaWZmZXJlbnRseSBzaW5jZSB0aGV5IHNlZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLgorVGhpcyB3YXJuaW5nIGNhbiBiZSBzd2l0Y2hlZCBvZmYgb24gdGhlIFRlYW0gPiBHaXQgPiBDb25maXJtYXRpb25zIGFuZCBXYXJuaW5ncyBwcmVmZXJlbmNlIHBhZ2UuCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZSAyIDE3IDIwMjEtMTAtMDUgMDk6NDk6NDYuMzMxCishTUVTU0FHRSBTZXJ2ZXIg4oCYb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVy4oCZIGZhaWxlZCB3aXRoIGV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQuIDsgdmVyc2lvbjogMi4wLjcudjIwMTcwOTA2LTEzMjcKKyFTVEFDSyAwCitjb20uZ29vZ2xlLmdzb24uSnNvblN5bnRheEV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjI0KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4ODgpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg1MykKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODAyKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5qc29uLkpzb24uZGVzZXJpYWxpemUoSnNvbi5qYXZhOjkxKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLklPLnJlZnJlc2hDb25maWd1cmF0aW9uKElPLmphdmE6NjYpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuU2VydmVyQ29ubmVjdGlvbi5zdGFydFVwKFNlcnZlckNvbm5lY3Rpb24uamF2YToxMjQpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0SWRsZVNlcnZpY2UkRGVsZWdhdGVTZXJ2aWNlJDEucnVuKEFic3RyYWN0SWRsZVNlcnZpY2UuamF2YTo2MikKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQ2FsbGFibGVzJDQucnVuKENhbGxhYmxlcy5qYXZhOjEyMikKKwlhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLnN0cmVhbS5Kc29uUmVhZGVyLmJlZ2luT2JqZWN0KEpzb25SZWFkZXIuamF2YTozODUpCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIxMykKKwkuLi4gOSBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aSA0IDAgMjAyMS0xMC0wNSAwOTo1MDowMC43MzMKKyFNRVNTQUdFIFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCishU1RBQ0sgMAoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0S25vd25SZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjQ4MCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkNhY2hpbmdSZXBvc2l0b3J5TWFuYWdlciRBcnRpZmFjdC5nZXRLbm93blJlcG9zaXRvcmllcyhDYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2MjMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuY29yZS5QMlV0aWwuZ2V0S25vd25SZXBvc2l0b3JpZXMoUDJVdGlsLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAucDIuaW1wbC5QMlRhc2tJbXBsLmlzTmVlZGVkKFAyVGFza0ltcGwuamF2YTo3MDEpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAuaW50ZXJuYWwuY29yZS5TZXR1cFRhc2tQZXJmb3JtZXIuaW5pdE5lZWRlZFNldHVwVGFza3MoU2V0dXBUYXNrUGVyZm9ybWVyLmphdmE6MjI3MykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLnBlcmZvcm1TdGFydHVwKFNldHVwVUlQbHVnaW4uamF2YTo2NzkpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5hY2Nlc3MkNShTZXR1cFVJUGx1Z2luLmphdmE6NDE1KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4kMSQxLnJ1bihTZXR1cFVJUGx1Z2luLmphdmE6MjUyKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorIVNFU1NJT04gMjAyMS0xMC0wNSAxMDowMTo1MS43MzIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VjbGlwc2UuYnVpbGRJZD00LjguMC5JMjAxODA2MTEtMDUwMAoramF2YS52ZXJzaW9uPTEuOC4wXzIzMQoramF2YS52ZW5kb3I9T3JhY2xlIENvcnBvcmF0aW9uCitCb290TG9hZGVyIGNvbnN0YW50czogT1M9d2luMzIsIEFSQ0g9eDg2XzY0LCBXUz13aW4zMiwgTkw9ZGVfREUKK0ZyYW1ld29yayBhcmd1bWVudHM6ICAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKK0NvbW1hbmQtbGluZSBhcmd1bWVudHM6ICAtb3Mgd2luMzIgLXdzIHdpbjMyIC1hcmNoIHg4Nl82NCAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zIDQgMCAyMDIxLTEwLTA1IDEwOjAxOjU2LjE1MgorIU1FU1NBR0UgRnJhbWV3b3JrRXZlbnQgRVJST1IKKyFTVEFDSyAwCitvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOiBFeGNlcHRpb24gaW4gb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KCkgb2YgYnVuZGxlIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zLgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6ODAwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCS4uLiAxMiBtb3JlCitSb290IGV4Y2VwdGlvbjoKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUgMiAwIDIwMjEtMTAtMDUgMTA6MDI6NTQuNzQzCishTUVTU0FHRSBCdWlsdGluIExGUyBzdXBwb3J0IG5vdCBwcmVzZW50L2RldGVjdGVkCishU1RBQ0sgMAoramF2YS5sYW5nLkNsYXNzTm90Rm91bmRFeGNlcHRpb246IG9yZy5lY2xpcHNlLmpnaXQubGZzLkJ1aWx0aW5MRlMgY2Fubm90IGJlIGZvdW5kIGJ5IG9yZy5lY2xpcHNlLmVnaXQuY29yZV81LjAuMC4yMDE4MDYxMzE1NTAtcgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo1MDgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUwKE5hdGl2ZSBNZXRob2QpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUoQ2xhc3MuamF2YToyNjQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5yZWdpc3RlckJ1aWx0aW5MRlMoQWN0aXZhdG9yLmphdmE6Mjc5KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MjEyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLnNvdXJjZXMuU2luZ2xlU291cmNlUGFja2FnZS5sb2FkQ2xhc3MoU2luZ2xlU291cmNlUGFja2FnZS5qYXZhOjM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3IkUmVwb3NpdG9yeUNoYW5nZVNjYW5uZXIuPGluaXQ+KEFjdGl2YXRvci5qYXZhOjkyMSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zZXR1cFJlcG9DaGFuZ2VTY2FubmVyKEFjdGl2YXRvci5qYXZhOjEwMzQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLldvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5nZXRTb3VyY2VQcm92aWRlcnMoV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmphdmE6MTc0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLlNvdXJjZVByb3ZpZGVyU2VydmljZS5yZWFkUmVnaXN0cnkoU291cmNlUHJvdmlkZXJTZXJ2aWNlLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaCQzNC5ydW5XaXRoRXhjZXB0aW9uKFdvcmtiZW5jaC5qYXZhOjIzNzgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZyRTdGFydHVwUnVubmFibGUucnVuKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTozMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TeW5jaHJvbml6ZXIuc3luY0V4ZWMoU3luY2hyb25pemVyLmphdmE6MjMzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlVJU3luY2hyb25pemVyLnN5bmNFeGVjKFVJU3luY2hyb25pemVyLmphdmE6MTQ0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc3luY0V4ZWMoRGlzcGxheS5qYXZhOjQ1NjcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZy5ydW5XaXRob3V0RXhjZXB0aW9ucyhTdGFydHVwVGhyZWFkaW5nLmphdmE6OTUpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXRpYWxpemVEZWZhdWx0U2VydmljZXMoV29ya2JlbmNoLmphdmE6MjM3MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdChXb3JrYmVuY2guamF2YToxNjU0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5ydW5VSShXb3JrYmVuY2guamF2YToyODU5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkMyhXb3JrYmVuY2guamF2YTo2NTQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goV29ya2JlbmNoLmphdmE6NTk3KQorCWF0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUkuY3JlYXRlQW5kUnVuV29ya2JlbmNoKFBsYXRmb3JtVUkuamF2YToxNDgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERUFwcGxpY2F0aW9uLnN0YXJ0KElERUFwcGxpY2F0aW9uLmphdmE6MTUyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuYXBwLkVjbGlwc2VBcHBIYW5kbGUucnVuKEVjbGlwc2VBcHBIYW5kbGUuamF2YToxOTYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnJ1bkFwcGxpY2F0aW9uKEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEzNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIuc3RhcnQoRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjM4OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YToyNDMpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKE5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjYyKQorCWF0IHN1bi5yZWZsZWN0LkRlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKERlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuamF2YTo0MykKKwlhdCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuaW52b2tlKE1ldGhvZC5qYXZhOjQ5OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uaW52b2tlRnJhbWV3b3JrKE1haW4uamF2YTo2NTYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmJhc2ljUnVuKE1haW4uamF2YTo1OTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLnJ1bihNYWluLmphdmE6MTQ5OCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQudWkgMiAwIDIwMjEtMTAtMDUgMTA6MDM6MTkuMjc4CishTUVTU0FHRSBXYXJuaW5nOiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgSE9NRSBpcyBub3Qgc2V0LiBUaGUgZm9sbG93aW5nIGRpcmVjdG9yeSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIEdpdAordXNlciBnbG9iYWwgY29uZmlndXJhdGlvbiBhbmQgdG8gZGVmaW5lIHRoZSBkZWZhdWx0IGxvY2F0aW9uIHRvIHN0b3JlIHJlcG9zaXRvcmllczogJ0M6XFVzZXJzXEZyYW5jaycuIElmIHRoaXMgaXMKK25vdCBjb3JyZWN0IHBsZWFzZSBzZXQgdGhlIEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIHJlc3RhcnQgRWNsaXBzZS4gT3RoZXJ3aXNlIEdpdCBmb3IgV2luZG93cyBhbmQKK0VHaXQgbWlnaHQgYmVoYXZlIGRpZmZlcmVudGx5IHNpbmNlIHRoZXkgc2VlIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCitUaGlzIHdhcm5pbmcgY2FuIGJlIHN3aXRjaGVkIG9mZiBvbiB0aGUgVGVhbSA+IEdpdCA+IENvbmZpcm1hdGlvbnMgYW5kIFdhcm5pbmdzIHByZWZlcmVuY2UgcGFnZS4KKworIUVOVFJZIG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlIDIgMTcgMjAyMS0xMC0wNSAxMDowMzoyMi4xMDEKKyFNRVNTQUdFIFNlcnZlciDigJhvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXLigJkgZmFpbGVkIHdpdGggZXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJC4gOyB2ZXJzaW9uOiAyLjAuNy52MjAxNzA5MDYtMTMyNworIVNUQUNLIDAKK2NvbS5nb29nbGUuZ3Nvbi5Kc29uU3ludGF4RXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMjQpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg4OCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODUzKQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4MDIpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLmpzb24uSnNvbi5kZXNlcmlhbGl6ZShKc29uLmphdmE6OTEpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuSU8ucmVmcmVzaENvbmZpZ3VyYXRpb24oSU8uamF2YTo2NikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5TZXJ2ZXJDb25uZWN0aW9uLnN0YXJ0VXAoU2VydmVyQ29ubmVjdGlvbi5qYXZhOjEyNCkKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RJZGxlU2VydmljZSREZWxlZ2F0ZVNlcnZpY2UkMS5ydW4oQWJzdHJhY3RJZGxlU2VydmljZS5qYXZhOjYyKQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5DYWxsYWJsZXMkNC5ydW4oQ2FsbGFibGVzLmphdmE6MTIyKQorCWF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uc3RyZWFtLkpzb25SZWFkZXIuYmVnaW5PYmplY3QoSnNvblJlYWRlci5qYXZhOjM4NSkKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjEzKQorCS4uLiA5IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpIDQgMCAyMDIxLTEwLTA1IDEwOjAzOjM2LjgwOQorIU1FU1NBR0UgUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKyFTVEFDSyAwCitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRLbm93blJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NDgwKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyJEFydGlmYWN0LmdldEtub3duUmVwb3NpdG9yaWVzKENhY2hpbmdSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjYyMykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5jb3JlLlAyVXRpbC5nZXRLbm93blJlcG9zaXRvcmllcyhQMlV0aWwuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5wMi5pbXBsLlAyVGFza0ltcGwuaXNOZWVkZWQoUDJUYXNrSW1wbC5qYXZhOjcwMSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5pbnRlcm5hbC5jb3JlLlNldHVwVGFza1BlcmZvcm1lci5pbml0TmVlZGVkU2V0dXBUYXNrcyhTZXR1cFRhc2tQZXJmb3JtZXIuamF2YToyMjczKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4ucGVyZm9ybVN0YXJ0dXAoU2V0dXBVSVBsdWdpbi5qYXZhOjY3OSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLmFjY2VzcyQ1KFNldHVwVUlQbHVnaW4uamF2YTo0MTUpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbiQxJDEucnVuKFNldHVwVUlQbHVnaW4uamF2YToyNTIpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0wNSAxMTozNzoxNy45MDIKKyFNRVNTQUdFIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorIVNUQUNLIDAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKQorCS4uLiA4IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwIDEgMCAyMDIxLTEwLTA1IDExOjM3OjE3LjkwNgorIU1FU1NBR0Ugb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAgY291bGQgbm90IGJlIHJlc29sdmVkIGZyb20gdGhlIG1vZGVsIHJlcG9zaXRvcmllcy4gQXJlIHlvdSBvZmZsaW5lPworCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMDUgMTM6Mjc6NTIuNDMxCishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0wNSAxMzoyNzo1Mi40MzkKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTA1IDEzOjI3OjU0LjE0OQorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMDUgMTM6Mjc6NTQuMTU4CishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0wNSAxMzoyNzo1NS4xNTIKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTA1IDEzOjI3OjU1LjE1OAorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMDUgMTM6Mjg6MDAuMTc2CishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0wNSAxMzoyODowMC4xOTQKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTA1IDEzOjI4OjAwLjU4NAorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMDUgMTM6Mjg6MDAuNTg5CishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCishU0VTU0lPTiAyMDIxLTEwLTA1IDIyOjM2OjM2Ljk4MiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNsaXBzZS5idWlsZElkPTQuOC4wLkkyMDE4MDYxMS0wNTAwCitqYXZhLnZlcnNpb249MS44LjBfMjMxCitqYXZhLnZlbmRvcj1PcmFjbGUgQ29ycG9yYXRpb24KK0Jvb3RMb2FkZXIgY29uc3RhbnRzOiBPUz13aW4zMiwgQVJDSD14ODZfNjQsIFdTPXdpbjMyLCBOTD1kZV9ERQorRnJhbWV3b3JrIGFyZ3VtZW50czogIC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorQ29tbWFuZC1saW5lIGFyZ3VtZW50czogIC1vcyB3aW4zMiAtd3Mgd2luMzIgLWFyY2ggeDg2XzY0IC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorCishRU5UUlkgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMgNCAwIDIwMjEtMTAtMDUgMjI6MzY6NTYuNDQ5CishTUVTU0FHRSBGcmFtZXdvcmtFdmVudCBFUlJPUgorIVNUQUNLIDAKK29yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb246IEV4Y2VwdGlvbiBpbiBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoKSBvZiBidW5kbGUgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo4MDApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJLi4uIDEyIG1vcmUKK1Jvb3QgZXhjZXB0aW9uOgoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQuY29yZSAyIDAgMjAyMS0xMC0wNSAyMjozNzoyNS40NDkKKyFNRVNTQUdFIEJ1aWx0aW4gTEZTIHN1cHBvcnQgbm90IHByZXNlbnQvZGV0ZWN0ZWQKKyFTVEFDSyAwCitqYXZhLmxhbmcuQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbjogb3JnLmVjbGlwc2UuamdpdC5sZnMuQnVpbHRpbkxGUyBjYW5ub3QgYmUgZm91bmQgYnkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlXzUuMC4wLjIwMTgwNjEzMTU1MC1yCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjUwOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZShDbGFzcy5qYXZhOjI2NCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnJlZ2lzdGVyQnVpbHRpbkxGUyhBY3RpdmF0b3IuamF2YToyNzkpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToyMTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuc291cmNlcy5TaW5nbGVTb3VyY2VQYWNrYWdlLmxvYWRDbGFzcyhTaW5nbGVTb3VyY2VQYWNrYWdlLmphdmE6MzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvciRSZXBvc2l0b3J5Q2hhbmdlU2Nhbm5lci48aW5pdD4oQWN0aXZhdG9yLmphdmE6OTIxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnNldHVwUmVwb0NoYW5nZVNjYW5uZXIoQWN0aXZhdG9yLmphdmE6MTAzNCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmdldFNvdXJjZVByb3ZpZGVycyhXb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuamF2YToxNzQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuU291cmNlUHJvdmlkZXJTZXJ2aWNlLnJlYWRSZWdpc3RyeShTb3VyY2VQcm92aWRlclNlcnZpY2UuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoJDM0LnJ1bldpdGhFeGNlcHRpb24oV29ya2JlbmNoLmphdmE6MjM3OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nJFN0YXJ0dXBSdW5uYWJsZS5ydW4oU3RhcnR1cFRocmVhZGluZy5qYXZhOjMyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlN5bmNocm9uaXplci5zeW5jRXhlYyhTeW5jaHJvbml6ZXIuamF2YToyMzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuVUlTeW5jaHJvbml6ZXIuc3luY0V4ZWMoVUlTeW5jaHJvbml6ZXIuamF2YToxNDQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zeW5jRXhlYyhEaXNwbGF5LmphdmE6NDU2NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nLnJ1bldpdGhvdXRFeGNlcHRpb25zKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTo5NSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdGlhbGl6ZURlZmF1bHRTZXJ2aWNlcyhXb3JrYmVuY2guamF2YToyMzczKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0KFdvcmtiZW5jaC5qYXZhOjE2NTQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLnJ1blVJKFdvcmtiZW5jaC5qYXZhOjI4NTkpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQzKFdvcmtiZW5jaC5qYXZhOjY1NCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChXb3JrYmVuY2guamF2YTo1OTcpCisJYXQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSS5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goUGxhdGZvcm1VSS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFQXBwbGljYXRpb24uc3RhcnQoSURFQXBwbGljYXRpb24uamF2YToxNTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5hcHAuRWNsaXBzZUFwcEhhbmRsZS5ydW4oRWNsaXBzZUFwcEhhbmRsZS5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIucnVuQXBwbGljYXRpb24oRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5zdGFydChFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6Mzg4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjI0MykKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NjIpCisJYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjQzKQorCWF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6NDk4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5pbnZva2VGcmFtZXdvcmsoTWFpbi5qYXZhOjY1NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uYmFzaWNSdW4oTWFpbi5qYXZhOjU5MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4ucnVuKE1haW4uamF2YToxNDk4KQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC51aSAyIDAgMjAyMS0xMC0wNSAyMjozODoxNy44NjAKKyFNRVNTQUdFIFdhcm5pbmc6IFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBIT01FIGlzIG5vdCBzZXQuIFRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5IHdpbGwgYmUgdXNlZCB0byBzdG9yZSB0aGUgR2l0Cit1c2VyIGdsb2JhbCBjb25maWd1cmF0aW9uIGFuZCB0byBkZWZpbmUgdGhlIGRlZmF1bHQgbG9jYXRpb24gdG8gc3RvcmUgcmVwb3NpdG9yaWVzOiAnQzpcVXNlcnNcRnJhbmNrJy4gSWYgdGhpcyBpcworbm90IGNvcnJlY3QgcGxlYXNlIHNldCB0aGUgSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgcmVzdGFydCBFY2xpcHNlLiBPdGhlcndpc2UgR2l0IGZvciBXaW5kb3dzIGFuZAorRUdpdCBtaWdodCBiZWhhdmUgZGlmZmVyZW50bHkgc2luY2UgdGhleSBzZWUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KK1RoaXMgd2FybmluZyBjYW4gYmUgc3dpdGNoZWQgb2ZmIG9uIHRoZSBUZWFtID4gR2l0ID4gQ29uZmlybWF0aW9ucyBhbmQgV2FybmluZ3MgcHJlZmVyZW5jZSBwYWdlLgorCishRU5UUlkgb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUgMiAxNyAyMDIxLTEwLTA1IDIyOjM4OjI0LjQ4MworIU1FU1NBR0UgU2VydmVyIOKAmG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlcuKAmSBmYWlsZWQgd2l0aCBleGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkLiA7IHZlcnNpb246IDIuMC43LnYyMDE3MDkwNi0xMzI3CishU1RBQ0sgMAorY29tLmdvb2dsZS5nc29uLkpzb25TeW50YXhFeGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIyNCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODg4KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4NTMpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjgwMikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIuanNvbi5Kc29uLmRlc2VyaWFsaXplKEpzb24uamF2YTo5MSkKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5JTy5yZWZyZXNoQ29uZmlndXJhdGlvbihJTy5qYXZhOjY2KQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLlNlcnZlckNvbm5lY3Rpb24uc3RhcnRVcChTZXJ2ZXJDb25uZWN0aW9uLmphdmE6MTI0KQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdElkbGVTZXJ2aWNlJERlbGVnYXRlU2VydmljZSQxLnJ1bihBYnN0cmFjdElkbGVTZXJ2aWNlLmphdmE6NjIpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkNhbGxhYmxlcyQ0LnJ1bihDYWxsYWJsZXMuamF2YToxMjIpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5zdHJlYW0uSnNvblJlYWRlci5iZWdpbk9iamVjdChKc29uUmVhZGVyLmphdmE6Mzg1KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMTMpCisJLi4uIDkgbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkgNCAwIDIwMjEtMTAtMDUgMjI6Mzg6MzkuNjkwCishTUVTU0FHRSBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorIVNUQUNLIDAKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldEtub3duUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo0ODApCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5DYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIkQXJ0aWZhY3QuZ2V0S25vd25SZXBvc2l0b3JpZXMoQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjIzKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmNvcmUuUDJVdGlsLmdldEtub3duUmVwb3NpdG9yaWVzKFAyVXRpbC5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnAyLmltcGwuUDJUYXNrSW1wbC5pc05lZWRlZChQMlRhc2tJbXBsLmphdmE6NzAxKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLmludGVybmFsLmNvcmUuU2V0dXBUYXNrUGVyZm9ybWVyLmluaXROZWVkZWRTZXR1cFRhc2tzKFNldHVwVGFza1BlcmZvcm1lci5qYXZhOjIyNzMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5wZXJmb3JtU3RhcnR1cChTZXR1cFVJUGx1Z2luLmphdmE6Njc5KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4uYWNjZXNzJDUoU2V0dXBVSVBsdWdpbi5qYXZhOjQxNSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luJDEkMS5ydW4oU2V0dXBVSVBsdWdpbi5qYXZhOjI1MikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKyFTRVNTSU9OIDIwMjEtMTAtMDYgMTI6NDc6MjguNTQwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2xpcHNlLmJ1aWxkSWQ9NC44LjAuSTIwMTgwNjExLTA1MDAKK2phdmEudmVyc2lvbj0xLjguMF8yMzEKK2phdmEudmVuZG9yPU9yYWNsZSBDb3Jwb3JhdGlvbgorQm9vdExvYWRlciBjb25zdGFudHM6IE9TPXdpbjMyLCBBUkNIPXg4Nl82NCwgV1M9d2luMzIsIE5MPWRlX0RFCitGcmFtZXdvcmsgYXJndW1lbnRzOiAgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CitDb21tYW5kLWxpbmUgYXJndW1lbnRzOiAgLW9zIHdpbjMyIC13cyB3aW4zMiAtYXJjaCB4ODZfNjQgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucyA0IDAgMjAyMS0xMC0wNiAxMjo0NzozMy41NjQKKyFNRVNTQUdFIEZyYW1ld29ya0V2ZW50IEVSUk9SCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogRXhjZXB0aW9uIGluIG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydCgpIG9mIGJ1bmRsZSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucy4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjgwMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwkuLi4gMTIgbW9yZQorUm9vdCBleGNlcHRpb246CitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlIDIgMCAyMDIxLTEwLTA2IDEyOjQ3OjQ2LjYwNAorIU1FU1NBR0UgQnVpbHRpbiBMRlMgc3VwcG9ydCBub3QgcHJlc2VudC9kZXRlY3RlZAorIVNUQUNLIDAKK2phdmEubGFuZy5DbGFzc05vdEZvdW5kRXhjZXB0aW9uOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5CdWlsdGluTEZTIGNhbm5vdCBiZSBmb3VuZCBieSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmVfNS4wLjAuMjAxODA2MTMxNTUwLXIKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NTA4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lMChOYXRpdmUgTWV0aG9kKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lKENsYXNzLmphdmE6MjY0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3IucmVnaXN0ZXJCdWlsdGluTEZTKEFjdGl2YXRvci5qYXZhOjI3OSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjIxMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5zb3VyY2VzLlNpbmdsZVNvdXJjZVBhY2thZ2UubG9hZENsYXNzKFNpbmdsZVNvdXJjZVBhY2thZ2UuamF2YTozNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yJFJlcG9zaXRvcnlDaGFuZ2VTY2FubmVyLjxpbml0PihBY3RpdmF0b3IuamF2YTo5MjEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc2V0dXBSZXBvQ2hhbmdlU2Nhbm5lcihBY3RpdmF0b3IuamF2YToxMDM0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUubG9hZENsYXNzKEVxdWlub3hCdW5kbGUuamF2YTo2MDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5vc2dpLlJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oUmVnaXN0cnlTdHJhdGVneU9TR0kuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5FeHRlbnNpb25SZWdpc3RyeS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEV4dGVuc2lvblJlZ2lzdHJ5LmphdmE6OTMxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudC5qYXZhOjI0MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuamF2YTo2MCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Xb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuZ2V0U291cmNlUHJvdmlkZXJzKFdvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5qYXZhOjE3NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Tb3VyY2VQcm92aWRlclNlcnZpY2UucmVhZFJlZ2lzdHJ5KFNvdXJjZVByb3ZpZGVyU2VydmljZS5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gkMzQucnVuV2l0aEV4Y2VwdGlvbihXb3JrYmVuY2guamF2YToyMzc4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmckU3RhcnR1cFJ1bm5hYmxlLnJ1bihTdGFydHVwVGhyZWFkaW5nLmphdmE6MzIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3luY2hyb25pemVyLnN5bmNFeGVjKFN5bmNocm9uaXplci5qYXZhOjIzMykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5VSVN5bmNocm9uaXplci5zeW5jRXhlYyhVSVN5bmNocm9uaXplci5qYXZhOjE0NCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnN5bmNFeGVjKERpc3BsYXkuamF2YTo0NTY3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmcucnVuV2l0aG91dEV4Y2VwdGlvbnMoU3RhcnR1cFRocmVhZGluZy5qYXZhOjk1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0aWFsaXplRGVmYXVsdFNlcnZpY2VzKFdvcmtiZW5jaC5qYXZhOjIzNzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXQoV29ya2JlbmNoLmphdmE6MTY1NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gucnVuVUkoV29ya2JlbmNoLmphdmE6Mjg1OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjU0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LnVpIDIgMCAyMDIxLTEwLTA2IDEyOjQ4OjI0Ljg4NAorIU1FU1NBR0UgV2FybmluZzogVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEhPTUUgaXMgbm90IHNldC4gVGhlIGZvbGxvd2luZyBkaXJlY3Rvcnkgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBHaXQKK3VzZXIgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gYW5kIHRvIGRlZmluZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiB0byBzdG9yZSByZXBvc2l0b3JpZXM6ICdDOlxVc2Vyc1xGcmFuY2snLiBJZiB0aGlzIGlzCitub3QgY29ycmVjdCBwbGVhc2Ugc2V0IHRoZSBIT01FIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCByZXN0YXJ0IEVjbGlwc2UuIE90aGVyd2lzZSBHaXQgZm9yIFdpbmRvd3MgYW5kCitFR2l0IG1pZ2h0IGJlaGF2ZSBkaWZmZXJlbnRseSBzaW5jZSB0aGV5IHNlZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLgorVGhpcyB3YXJuaW5nIGNhbiBiZSBzd2l0Y2hlZCBvZmYgb24gdGhlIFRlYW0gPiBHaXQgPiBDb25maXJtYXRpb25zIGFuZCBXYXJuaW5ncyBwcmVmZXJlbmNlIHBhZ2UuCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZSAyIDE3IDIwMjEtMTAtMDYgMTI6NDg6MjcuMDc1CishTUVTU0FHRSBTZXJ2ZXIg4oCYb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVy4oCZIGZhaWxlZCB3aXRoIGV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQuIDsgdmVyc2lvbjogMi4wLjcudjIwMTcwOTA2LTEzMjcKKyFTVEFDSyAwCitjb20uZ29vZ2xlLmdzb24uSnNvblN5bnRheEV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjI0KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4ODgpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg1MykKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODAyKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5qc29uLkpzb24uZGVzZXJpYWxpemUoSnNvbi5qYXZhOjkxKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLklPLnJlZnJlc2hDb25maWd1cmF0aW9uKElPLmphdmE6NjYpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuU2VydmVyQ29ubmVjdGlvbi5zdGFydFVwKFNlcnZlckNvbm5lY3Rpb24uamF2YToxMjQpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0SWRsZVNlcnZpY2UkRGVsZWdhdGVTZXJ2aWNlJDEucnVuKEFic3RyYWN0SWRsZVNlcnZpY2UuamF2YTo2MikKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQ2FsbGFibGVzJDQucnVuKENhbGxhYmxlcy5qYXZhOjEyMikKKwlhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLnN0cmVhbS5Kc29uUmVhZGVyLmJlZ2luT2JqZWN0KEpzb25SZWFkZXIuamF2YTozODUpCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIxMykKKwkuLi4gOSBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aSA0IDAgMjAyMS0xMC0wNiAxMjo0ODo0MC41MTcKKyFNRVNTQUdFIFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCishU1RBQ0sgMAoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0S25vd25SZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjQ4MCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkNhY2hpbmdSZXBvc2l0b3J5TWFuYWdlciRBcnRpZmFjdC5nZXRLbm93blJlcG9zaXRvcmllcyhDYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2MjMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuY29yZS5QMlV0aWwuZ2V0S25vd25SZXBvc2l0b3JpZXMoUDJVdGlsLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAucDIuaW1wbC5QMlRhc2tJbXBsLmlzTmVlZGVkKFAyVGFza0ltcGwuamF2YTo3MDEpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAuaW50ZXJuYWwuY29yZS5TZXR1cFRhc2tQZXJmb3JtZXIuaW5pdE5lZWRlZFNldHVwVGFza3MoU2V0dXBUYXNrUGVyZm9ybWVyLmphdmE6MjI3MykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLnBlcmZvcm1TdGFydHVwKFNldHVwVUlQbHVnaW4uamF2YTo2NzkpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5hY2Nlc3MkNShTZXR1cFVJUGx1Z2luLmphdmE6NDE1KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4kMSQxLnJ1bihTZXR1cFVJUGx1Z2luLmphdmE6MjUyKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMDYgMTk6NDQ6MjMuOTEyCishTUVTU0FHRSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKKyFTVEFDSyAwCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkKKwkuLi4gOCBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcCAxIDAgMjAyMS0xMC0wNiAxOTo0NDoyMy45MTYKKyFNRVNTQUdFIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wIGNvdWxkIG5vdCBiZSByZXNvbHZlZCBmcm9tIHRoZSBtb2RlbCByZXBvc2l0b3JpZXMuIEFyZSB5b3Ugb2ZmbGluZT8KKyFTRVNTSU9OIDIwMjEtMTAtMDcgMTA6MTg6MTMuMjk1IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2xpcHNlLmJ1aWxkSWQ9NC44LjAuSTIwMTgwNjExLTA1MDAKK2phdmEudmVyc2lvbj0xLjguMF8yMzEKK2phdmEudmVuZG9yPU9yYWNsZSBDb3Jwb3JhdGlvbgorQm9vdExvYWRlciBjb25zdGFudHM6IE9TPXdpbjMyLCBBUkNIPXg4Nl82NCwgV1M9d2luMzIsIE5MPWRlX0RFCitGcmFtZXdvcmsgYXJndW1lbnRzOiAgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CitDb21tYW5kLWxpbmUgYXJndW1lbnRzOiAgLW9zIHdpbjMyIC13cyB3aW4zMiAtYXJjaCB4ODZfNjQgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucyA0IDAgMjAyMS0xMC0wNyAxMDoxODoyNC4wMTMKKyFNRVNTQUdFIEZyYW1ld29ya0V2ZW50IEVSUk9SCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogRXhjZXB0aW9uIGluIG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydCgpIG9mIGJ1bmRsZSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucy4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjgwMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwkuLi4gMTIgbW9yZQorUm9vdCBleGNlcHRpb246CitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlIDIgMCAyMDIxLTEwLTA3IDEwOjE4OjQ0LjE0OQorIU1FU1NBR0UgQnVpbHRpbiBMRlMgc3VwcG9ydCBub3QgcHJlc2VudC9kZXRlY3RlZAorIVNUQUNLIDAKK2phdmEubGFuZy5DbGFzc05vdEZvdW5kRXhjZXB0aW9uOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5CdWlsdGluTEZTIGNhbm5vdCBiZSBmb3VuZCBieSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmVfNS4wLjAuMjAxODA2MTMxNTUwLXIKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NTA4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lMChOYXRpdmUgTWV0aG9kKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lKENsYXNzLmphdmE6MjY0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3IucmVnaXN0ZXJCdWlsdGluTEZTKEFjdGl2YXRvci5qYXZhOjI3OSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjIxMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5zb3VyY2VzLlNpbmdsZVNvdXJjZVBhY2thZ2UubG9hZENsYXNzKFNpbmdsZVNvdXJjZVBhY2thZ2UuamF2YTozNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yJFJlcG9zaXRvcnlDaGFuZ2VTY2FubmVyLjxpbml0PihBY3RpdmF0b3IuamF2YTo5MjEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc2V0dXBSZXBvQ2hhbmdlU2Nhbm5lcihBY3RpdmF0b3IuamF2YToxMDM0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUubG9hZENsYXNzKEVxdWlub3hCdW5kbGUuamF2YTo2MDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5vc2dpLlJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oUmVnaXN0cnlTdHJhdGVneU9TR0kuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5FeHRlbnNpb25SZWdpc3RyeS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEV4dGVuc2lvblJlZ2lzdHJ5LmphdmE6OTMxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudC5qYXZhOjI0MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuamF2YTo2MCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Xb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuZ2V0U291cmNlUHJvdmlkZXJzKFdvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5qYXZhOjE3NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Tb3VyY2VQcm92aWRlclNlcnZpY2UucmVhZFJlZ2lzdHJ5KFNvdXJjZVByb3ZpZGVyU2VydmljZS5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gkMzQucnVuV2l0aEV4Y2VwdGlvbihXb3JrYmVuY2guamF2YToyMzc4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmckU3RhcnR1cFJ1bm5hYmxlLnJ1bihTdGFydHVwVGhyZWFkaW5nLmphdmE6MzIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3luY2hyb25pemVyLnN5bmNFeGVjKFN5bmNocm9uaXplci5qYXZhOjIzMykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5VSVN5bmNocm9uaXplci5zeW5jRXhlYyhVSVN5bmNocm9uaXplci5qYXZhOjE0NCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnN5bmNFeGVjKERpc3BsYXkuamF2YTo0NTY3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmcucnVuV2l0aG91dEV4Y2VwdGlvbnMoU3RhcnR1cFRocmVhZGluZy5qYXZhOjk1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0aWFsaXplRGVmYXVsdFNlcnZpY2VzKFdvcmtiZW5jaC5qYXZhOjIzNzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXQoV29ya2JlbmNoLmphdmE6MTY1NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gucnVuVUkoV29ya2JlbmNoLmphdmE6Mjg1OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjU0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LnVpIDIgMCAyMDIxLTEwLTA3IDEwOjE5OjM1LjAyMworIU1FU1NBR0UgV2FybmluZzogVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEhPTUUgaXMgbm90IHNldC4gVGhlIGZvbGxvd2luZyBkaXJlY3Rvcnkgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBHaXQKK3VzZXIgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gYW5kIHRvIGRlZmluZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiB0byBzdG9yZSByZXBvc2l0b3JpZXM6ICdDOlxVc2Vyc1xGcmFuY2snLiBJZiB0aGlzIGlzCitub3QgY29ycmVjdCBwbGVhc2Ugc2V0IHRoZSBIT01FIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCByZXN0YXJ0IEVjbGlwc2UuIE90aGVyd2lzZSBHaXQgZm9yIFdpbmRvd3MgYW5kCitFR2l0IG1pZ2h0IGJlaGF2ZSBkaWZmZXJlbnRseSBzaW5jZSB0aGV5IHNlZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLgorVGhpcyB3YXJuaW5nIGNhbiBiZSBzd2l0Y2hlZCBvZmYgb24gdGhlIFRlYW0gPiBHaXQgPiBDb25maXJtYXRpb25zIGFuZCBXYXJuaW5ncyBwcmVmZXJlbmNlIHBhZ2UuCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZSAyIDE3IDIwMjEtMTAtMDcgMTA6MTk6NDAuMjQ0CishTUVTU0FHRSBTZXJ2ZXIg4oCYb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVy4oCZIGZhaWxlZCB3aXRoIGV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQuIDsgdmVyc2lvbjogMi4wLjcudjIwMTcwOTA2LTEzMjcKKyFTVEFDSyAwCitjb20uZ29vZ2xlLmdzb24uSnNvblN5bnRheEV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjI0KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4ODgpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg1MykKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODAyKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5qc29uLkpzb24uZGVzZXJpYWxpemUoSnNvbi5qYXZhOjkxKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLklPLnJlZnJlc2hDb25maWd1cmF0aW9uKElPLmphdmE6NjYpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuU2VydmVyQ29ubmVjdGlvbi5zdGFydFVwKFNlcnZlckNvbm5lY3Rpb24uamF2YToxMjQpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0SWRsZVNlcnZpY2UkRGVsZWdhdGVTZXJ2aWNlJDEucnVuKEFic3RyYWN0SWRsZVNlcnZpY2UuamF2YTo2MikKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQ2FsbGFibGVzJDQucnVuKENhbGxhYmxlcy5qYXZhOjEyMikKKwlhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLnN0cmVhbS5Kc29uUmVhZGVyLmJlZ2luT2JqZWN0KEpzb25SZWFkZXIuamF2YTozODUpCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIxMykKKwkuLi4gOSBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aSA0IDAgMjAyMS0xMC0wNyAxMDoxOTo1MS45ODkKKyFNRVNTQUdFIFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCishU1RBQ0sgMAoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0S25vd25SZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjQ4MCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkNhY2hpbmdSZXBvc2l0b3J5TWFuYWdlciRBcnRpZmFjdC5nZXRLbm93blJlcG9zaXRvcmllcyhDYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2MjMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuY29yZS5QMlV0aWwuZ2V0S25vd25SZXBvc2l0b3JpZXMoUDJVdGlsLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAucDIuaW1wbC5QMlRhc2tJbXBsLmlzTmVlZGVkKFAyVGFza0ltcGwuamF2YTo3MDEpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAuaW50ZXJuYWwuY29yZS5TZXR1cFRhc2tQZXJmb3JtZXIuaW5pdE5lZWRlZFNldHVwVGFza3MoU2V0dXBUYXNrUGVyZm9ybWVyLmphdmE6MjI3MykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLnBlcmZvcm1TdGFydHVwKFNldHVwVUlQbHVnaW4uamF2YTo2NzkpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5hY2Nlc3MkNShTZXR1cFVJUGx1Z2luLmphdmE6NDE1KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4kMSQxLnJ1bihTZXR1cFVJUGx1Z2luLmphdmE6MjUyKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMDcgMTg6MDA6NTAuMTc3CishTUVTU0FHRSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKKyFTVEFDSyAwCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkKKwkuLi4gOCBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcCAxIDAgMjAyMS0xMC0wNyAxODowMDo1MC4xODIKKyFNRVNTQUdFIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wIGNvdWxkIG5vdCBiZSByZXNvbHZlZCBmcm9tIHRoZSBtb2RlbCByZXBvc2l0b3JpZXMuIEFyZSB5b3Ugb2ZmbGluZT8KKyFTRVNTSU9OIDIwMjEtMTAtMDggMTE6NTk6MDEuMjY4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2xpcHNlLmJ1aWxkSWQ9NC44LjAuSTIwMTgwNjExLTA1MDAKK2phdmEudmVyc2lvbj0xLjguMF8yMzEKK2phdmEudmVuZG9yPU9yYWNsZSBDb3Jwb3JhdGlvbgorQm9vdExvYWRlciBjb25zdGFudHM6IE9TPXdpbjMyLCBBUkNIPXg4Nl82NCwgV1M9d2luMzIsIE5MPWRlX0RFCitGcmFtZXdvcmsgYXJndW1lbnRzOiAgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CitDb21tYW5kLWxpbmUgYXJndW1lbnRzOiAgLW9zIHdpbjMyIC13cyB3aW4zMiAtYXJjaCB4ODZfNjQgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucyA0IDAgMjAyMS0xMC0wOCAxMTo1OToxMi40ODQKKyFNRVNTQUdFIEZyYW1ld29ya0V2ZW50IEVSUk9SCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogRXhjZXB0aW9uIGluIG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydCgpIG9mIGJ1bmRsZSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucy4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjgwMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwkuLi4gMTIgbW9yZQorUm9vdCBleGNlcHRpb246CitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlIDIgMCAyMDIxLTEwLTA4IDExOjU5OjMzLjkzOQorIU1FU1NBR0UgQnVpbHRpbiBMRlMgc3VwcG9ydCBub3QgcHJlc2VudC9kZXRlY3RlZAorIVNUQUNLIDAKK2phdmEubGFuZy5DbGFzc05vdEZvdW5kRXhjZXB0aW9uOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5CdWlsdGluTEZTIGNhbm5vdCBiZSBmb3VuZCBieSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmVfNS4wLjAuMjAxODA2MTMxNTUwLXIKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NTA4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lMChOYXRpdmUgTWV0aG9kKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lKENsYXNzLmphdmE6MjY0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3IucmVnaXN0ZXJCdWlsdGluTEZTKEFjdGl2YXRvci5qYXZhOjI3OSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjIxMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5zb3VyY2VzLlNpbmdsZVNvdXJjZVBhY2thZ2UubG9hZENsYXNzKFNpbmdsZVNvdXJjZVBhY2thZ2UuamF2YTozNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yJFJlcG9zaXRvcnlDaGFuZ2VTY2FubmVyLjxpbml0PihBY3RpdmF0b3IuamF2YTo5MjEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc2V0dXBSZXBvQ2hhbmdlU2Nhbm5lcihBY3RpdmF0b3IuamF2YToxMDM0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUubG9hZENsYXNzKEVxdWlub3hCdW5kbGUuamF2YTo2MDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5vc2dpLlJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oUmVnaXN0cnlTdHJhdGVneU9TR0kuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5FeHRlbnNpb25SZWdpc3RyeS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEV4dGVuc2lvblJlZ2lzdHJ5LmphdmE6OTMxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudC5qYXZhOjI0MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuamF2YTo2MCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Xb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuZ2V0U291cmNlUHJvdmlkZXJzKFdvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5qYXZhOjE3NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Tb3VyY2VQcm92aWRlclNlcnZpY2UucmVhZFJlZ2lzdHJ5KFNvdXJjZVByb3ZpZGVyU2VydmljZS5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gkMzQucnVuV2l0aEV4Y2VwdGlvbihXb3JrYmVuY2guamF2YToyMzc4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmckU3RhcnR1cFJ1bm5hYmxlLnJ1bihTdGFydHVwVGhyZWFkaW5nLmphdmE6MzIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3luY2hyb25pemVyLnN5bmNFeGVjKFN5bmNocm9uaXplci5qYXZhOjIzMykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5VSVN5bmNocm9uaXplci5zeW5jRXhlYyhVSVN5bmNocm9uaXplci5qYXZhOjE0NCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnN5bmNFeGVjKERpc3BsYXkuamF2YTo0NTY3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmcucnVuV2l0aG91dEV4Y2VwdGlvbnMoU3RhcnR1cFRocmVhZGluZy5qYXZhOjk1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0aWFsaXplRGVmYXVsdFNlcnZpY2VzKFdvcmtiZW5jaC5qYXZhOjIzNzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXQoV29ya2JlbmNoLmphdmE6MTY1NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gucnVuVUkoV29ya2JlbmNoLmphdmE6Mjg1OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjU0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LnVpIDIgMCAyMDIxLTEwLTA4IDEyOjAwOjMxLjU4MgorIU1FU1NBR0UgV2FybmluZzogVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEhPTUUgaXMgbm90IHNldC4gVGhlIGZvbGxvd2luZyBkaXJlY3Rvcnkgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBHaXQKK3VzZXIgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gYW5kIHRvIGRlZmluZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiB0byBzdG9yZSByZXBvc2l0b3JpZXM6ICdDOlxVc2Vyc1xGcmFuY2snLiBJZiB0aGlzIGlzCitub3QgY29ycmVjdCBwbGVhc2Ugc2V0IHRoZSBIT01FIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCByZXN0YXJ0IEVjbGlwc2UuIE90aGVyd2lzZSBHaXQgZm9yIFdpbmRvd3MgYW5kCitFR2l0IG1pZ2h0IGJlaGF2ZSBkaWZmZXJlbnRseSBzaW5jZSB0aGV5IHNlZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLgorVGhpcyB3YXJuaW5nIGNhbiBiZSBzd2l0Y2hlZCBvZmYgb24gdGhlIFRlYW0gPiBHaXQgPiBDb25maXJtYXRpb25zIGFuZCBXYXJuaW5ncyBwcmVmZXJlbmNlIHBhZ2UuCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZSAyIDE3IDIwMjEtMTAtMDggMTI6MDA6MzYuNjQ2CishTUVTU0FHRSBTZXJ2ZXIg4oCYb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVy4oCZIGZhaWxlZCB3aXRoIGV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQuIDsgdmVyc2lvbjogMi4wLjcudjIwMTcwOTA2LTEzMjcKKyFTVEFDSyAwCitjb20uZ29vZ2xlLmdzb24uSnNvblN5bnRheEV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjI0KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4ODgpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg1MykKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODAyKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5qc29uLkpzb24uZGVzZXJpYWxpemUoSnNvbi5qYXZhOjkxKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLklPLnJlZnJlc2hDb25maWd1cmF0aW9uKElPLmphdmE6NjYpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuU2VydmVyQ29ubmVjdGlvbi5zdGFydFVwKFNlcnZlckNvbm5lY3Rpb24uamF2YToxMjQpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0SWRsZVNlcnZpY2UkRGVsZWdhdGVTZXJ2aWNlJDEucnVuKEFic3RyYWN0SWRsZVNlcnZpY2UuamF2YTo2MikKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQ2FsbGFibGVzJDQucnVuKENhbGxhYmxlcy5qYXZhOjEyMikKKwlhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLnN0cmVhbS5Kc29uUmVhZGVyLmJlZ2luT2JqZWN0KEpzb25SZWFkZXIuamF2YTozODUpCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIxMykKKwkuLi4gOSBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aSA0IDAgMjAyMS0xMC0wOCAxMjowMDo1Mi4zOTgKKyFNRVNTQUdFIFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCishU1RBQ0sgMAoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0S25vd25SZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjQ4MCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkNhY2hpbmdSZXBvc2l0b3J5TWFuYWdlciRBcnRpZmFjdC5nZXRLbm93blJlcG9zaXRvcmllcyhDYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2MjMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuY29yZS5QMlV0aWwuZ2V0S25vd25SZXBvc2l0b3JpZXMoUDJVdGlsLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAucDIuaW1wbC5QMlRhc2tJbXBsLmlzTmVlZGVkKFAyVGFza0ltcGwuamF2YTo3MDEpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAuaW50ZXJuYWwuY29yZS5TZXR1cFRhc2tQZXJmb3JtZXIuaW5pdE5lZWRlZFNldHVwVGFza3MoU2V0dXBUYXNrUGVyZm9ybWVyLmphdmE6MjI3MykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLnBlcmZvcm1TdGFydHVwKFNldHVwVUlQbHVnaW4uamF2YTo2NzkpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5hY2Nlc3MkNShTZXR1cFVJUGx1Z2luLmphdmE6NDE1KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4kMSQxLnJ1bihTZXR1cFVJUGx1Z2luLmphdmE6MjUyKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMDggMTc6MjM6MjEuMDIyCishTUVTU0FHRSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKKyFTVEFDSyAwCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkKKwkuLi4gOCBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcCAxIDAgMjAyMS0xMC0wOCAxNzoyMzoyMS4wMjYKKyFNRVNTQUdFIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wIGNvdWxkIG5vdCBiZSByZXNvbHZlZCBmcm9tIHRoZSBtb2RlbCByZXBvc2l0b3JpZXMuIEFyZSB5b3Ugb2ZmbGluZT8KKyFTRVNTSU9OIDIwMjEtMTAtMTEgMDk6Mzg6MzIuMTk2IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2xpcHNlLmJ1aWxkSWQ9NC44LjAuSTIwMTgwNjExLTA1MDAKK2phdmEudmVyc2lvbj0xLjguMF8yMzEKK2phdmEudmVuZG9yPU9yYWNsZSBDb3Jwb3JhdGlvbgorQm9vdExvYWRlciBjb25zdGFudHM6IE9TPXdpbjMyLCBBUkNIPXg4Nl82NCwgV1M9d2luMzIsIE5MPWRlX0RFCitGcmFtZXdvcmsgYXJndW1lbnRzOiAgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CitDb21tYW5kLWxpbmUgYXJndW1lbnRzOiAgLW9zIHdpbjMyIC13cyB3aW4zMiAtYXJjaCB4ODZfNjQgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucyA0IDAgMjAyMS0xMC0xMSAwOTozODo0NC4xNzgKKyFNRVNTQUdFIEZyYW1ld29ya0V2ZW50IEVSUk9SCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogRXhjZXB0aW9uIGluIG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydCgpIG9mIGJ1bmRsZSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucy4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjgwMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwkuLi4gMTIgbW9yZQorUm9vdCBleGNlcHRpb246CitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlIDIgMCAyMDIxLTEwLTExIDA5OjM5OjA0LjMzNgorIU1FU1NBR0UgQnVpbHRpbiBMRlMgc3VwcG9ydCBub3QgcHJlc2VudC9kZXRlY3RlZAorIVNUQUNLIDAKK2phdmEubGFuZy5DbGFzc05vdEZvdW5kRXhjZXB0aW9uOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5CdWlsdGluTEZTIGNhbm5vdCBiZSBmb3VuZCBieSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmVfNS4wLjAuMjAxODA2MTMxNTUwLXIKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NTA4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lMChOYXRpdmUgTWV0aG9kKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lKENsYXNzLmphdmE6MjY0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3IucmVnaXN0ZXJCdWlsdGluTEZTKEFjdGl2YXRvci5qYXZhOjI3OSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjIxMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5zb3VyY2VzLlNpbmdsZVNvdXJjZVBhY2thZ2UubG9hZENsYXNzKFNpbmdsZVNvdXJjZVBhY2thZ2UuamF2YTozNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yJFJlcG9zaXRvcnlDaGFuZ2VTY2FubmVyLjxpbml0PihBY3RpdmF0b3IuamF2YTo5MjEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc2V0dXBSZXBvQ2hhbmdlU2Nhbm5lcihBY3RpdmF0b3IuamF2YToxMDM0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUubG9hZENsYXNzKEVxdWlub3hCdW5kbGUuamF2YTo2MDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5vc2dpLlJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oUmVnaXN0cnlTdHJhdGVneU9TR0kuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5FeHRlbnNpb25SZWdpc3RyeS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEV4dGVuc2lvblJlZ2lzdHJ5LmphdmE6OTMxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudC5qYXZhOjI0MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuamF2YTo2MCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Xb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuZ2V0U291cmNlUHJvdmlkZXJzKFdvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5qYXZhOjE3NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Tb3VyY2VQcm92aWRlclNlcnZpY2UucmVhZFJlZ2lzdHJ5KFNvdXJjZVByb3ZpZGVyU2VydmljZS5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gkMzQucnVuV2l0aEV4Y2VwdGlvbihXb3JrYmVuY2guamF2YToyMzc4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmckU3RhcnR1cFJ1bm5hYmxlLnJ1bihTdGFydHVwVGhyZWFkaW5nLmphdmE6MzIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3luY2hyb25pemVyLnN5bmNFeGVjKFN5bmNocm9uaXplci5qYXZhOjIzMykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5VSVN5bmNocm9uaXplci5zeW5jRXhlYyhVSVN5bmNocm9uaXplci5qYXZhOjE0NCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnN5bmNFeGVjKERpc3BsYXkuamF2YTo0NTY3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmcucnVuV2l0aG91dEV4Y2VwdGlvbnMoU3RhcnR1cFRocmVhZGluZy5qYXZhOjk1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0aWFsaXplRGVmYXVsdFNlcnZpY2VzKFdvcmtiZW5jaC5qYXZhOjIzNzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXQoV29ya2JlbmNoLmphdmE6MTY1NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gucnVuVUkoV29ya2JlbmNoLmphdmE6Mjg1OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjU0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LnVpIDIgMCAyMDIxLTEwLTExIDA5OjQwOjA1LjM2MQorIU1FU1NBR0UgV2FybmluZzogVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEhPTUUgaXMgbm90IHNldC4gVGhlIGZvbGxvd2luZyBkaXJlY3Rvcnkgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBHaXQKK3VzZXIgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gYW5kIHRvIGRlZmluZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiB0byBzdG9yZSByZXBvc2l0b3JpZXM6ICdDOlxVc2Vyc1xGcmFuY2snLiBJZiB0aGlzIGlzCitub3QgY29ycmVjdCBwbGVhc2Ugc2V0IHRoZSBIT01FIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCByZXN0YXJ0IEVjbGlwc2UuIE90aGVyd2lzZSBHaXQgZm9yIFdpbmRvd3MgYW5kCitFR2l0IG1pZ2h0IGJlaGF2ZSBkaWZmZXJlbnRseSBzaW5jZSB0aGV5IHNlZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLgorVGhpcyB3YXJuaW5nIGNhbiBiZSBzd2l0Y2hlZCBvZmYgb24gdGhlIFRlYW0gPiBHaXQgPiBDb25maXJtYXRpb25zIGFuZCBXYXJuaW5ncyBwcmVmZXJlbmNlIHBhZ2UuCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZSAyIDE3IDIwMjEtMTAtMTEgMDk6NDA6MTEuMTY3CishTUVTU0FHRSBTZXJ2ZXIg4oCYb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVy4oCZIGZhaWxlZCB3aXRoIGV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQuIDsgdmVyc2lvbjogMi4wLjcudjIwMTcwOTA2LTEzMjcKKyFTVEFDSyAwCitjb20uZ29vZ2xlLmdzb24uSnNvblN5bnRheEV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjI0KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4ODgpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg1MykKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODAyKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5qc29uLkpzb24uZGVzZXJpYWxpemUoSnNvbi5qYXZhOjkxKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLklPLnJlZnJlc2hDb25maWd1cmF0aW9uKElPLmphdmE6NjYpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuU2VydmVyQ29ubmVjdGlvbi5zdGFydFVwKFNlcnZlckNvbm5lY3Rpb24uamF2YToxMjQpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0SWRsZVNlcnZpY2UkRGVsZWdhdGVTZXJ2aWNlJDEucnVuKEFic3RyYWN0SWRsZVNlcnZpY2UuamF2YTo2MikKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQ2FsbGFibGVzJDQucnVuKENhbGxhYmxlcy5qYXZhOjEyMikKKwlhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLnN0cmVhbS5Kc29uUmVhZGVyLmJlZ2luT2JqZWN0KEpzb25SZWFkZXIuamF2YTozODUpCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIxMykKKwkuLi4gOSBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aSA0IDAgMjAyMS0xMC0xMSAwOTo0MDoyNi40MTYKKyFNRVNTQUdFIFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCishU1RBQ0sgMAoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0S25vd25SZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjQ4MCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkNhY2hpbmdSZXBvc2l0b3J5TWFuYWdlciRBcnRpZmFjdC5nZXRLbm93blJlcG9zaXRvcmllcyhDYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2MjMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuY29yZS5QMlV0aWwuZ2V0S25vd25SZXBvc2l0b3JpZXMoUDJVdGlsLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAucDIuaW1wbC5QMlRhc2tJbXBsLmlzTmVlZGVkKFAyVGFza0ltcGwuamF2YTo3MDEpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAuaW50ZXJuYWwuY29yZS5TZXR1cFRhc2tQZXJmb3JtZXIuaW5pdE5lZWRlZFNldHVwVGFza3MoU2V0dXBUYXNrUGVyZm9ybWVyLmphdmE6MjI3MykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLnBlcmZvcm1TdGFydHVwKFNldHVwVUlQbHVnaW4uamF2YTo2NzkpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5hY2Nlc3MkNShTZXR1cFVJUGx1Z2luLmphdmE6NDE1KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4kMSQxLnJ1bihTZXR1cFVJUGx1Z2luLmphdmE6MjUyKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMTEgMTc6MDY6MDguNTU3CishTUVTU0FHRSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKKyFTVEFDSyAwCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkKKwkuLi4gOCBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcCAxIDAgMjAyMS0xMC0xMSAxNzowNjowOC41NjUKKyFNRVNTQUdFIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wIGNvdWxkIG5vdCBiZSByZXNvbHZlZCBmcm9tIHRoZSBtb2RlbCByZXBvc2l0b3JpZXMuIEFyZSB5b3Ugb2ZmbGluZT8KKworIUVOVFJZIG9yZy5lY2xpcHNlLnVpIDQgMCAyMDIxLTEwLTE0IDAwOjE0OjE0Ljk1OQorIU1FU1NBR0UgVW5oYW5kbGVkIGV2ZW50IGxvb3AgZXhjZXB0aW9uCishU1RBQ0sgMAoramF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjogQXJndW1lbnQgbm90IHZhbGlkCisJYXQgb3JnLmVjbGlwc2Uuc3d0LlNXVC5lcnJvcihTV1QuamF2YTo0NTMzKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5TV1QuZXJyb3IoU1dULmphdmE6NDQ2NykKKwlhdCBvcmcuZWNsaXBzZS5zd3QuU1dULmVycm9yKFNXVC5qYXZhOjQ0MzgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkdDLnNldEZvcmVncm91bmQoR0MuamF2YTo0MzY5KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5yZW5kZXJlcnMuc3d0LkNUYWJSZW5kZXJpbmcuZHJhd0JhY2tncm91bmQoQ1RhYlJlbmRlcmluZy5qYXZhOjEwNzUpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuQ1RhYlJlbmRlcmluZy5kcmF3VW5zZWxlY3RlZFRhYkJhY2tncm91bmQoQ1RhYlJlbmRlcmluZy5qYXZhOjEwMDgpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuQ1RhYlJlbmRlcmluZy5kcmF3Q3VzdG9tQmFja2dyb3VuZChDVGFiUmVuZGVyaW5nLmphdmE6OTkwKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5yZW5kZXJlcnMuc3d0LkNUYWJSZW5kZXJpbmcuZHJhdyhDVGFiUmVuZGVyaW5nLmphdmE6MjE4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ1RhYkZvbGRlci51cGRhdGVCa0ltYWdlcyhDVGFiRm9sZGVyLmphdmE6Mzg4NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNUYWJGb2xkZXIuc2V0QnV0dG9uQm91bmRzKENUYWJGb2xkZXIuamF2YToyNjE5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ1RhYkZvbGRlci51cGRhdGVJdGVtcyhDVGFiRm9sZGVyLmphdmE6Mzc5NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNUYWJGb2xkZXIudXBkYXRlSXRlbXMoQ1RhYkZvbGRlci5qYXZhOjM3MjYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyLm9uUmVzaXplKENUYWJGb2xkZXIuamF2YToyMTE4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ1RhYkZvbGRlci5sYW1iZGEkMChDVGFiRm9sZGVyLmphdmE6MzM1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50VGFibGUuc2VuZEV2ZW50KEV2ZW50VGFibGUuamF2YTo4NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnNlbmRFdmVudChEaXNwbGF5LmphdmE6NDExOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDc2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA1NykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLnNlbmRSZXNpemUoQ29udHJvbC5qYXZhOjMwNjMpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnNlbmRSZXNpemUoQ29tcG9zaXRlLmphdmE6MTAzMykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUuc2V0Qm91bmRzSW5QaXhlbHMoQ29tcG9zaXRlLmphdmE6MTA4MykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLnNldEJvdW5kc0luUGl4ZWxzKENvbnRyb2wuamF2YTozMjMyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wuc2V0Qm91bmRzSW5QaXhlbHMoQ29udHJvbC5qYXZhOjMyMjgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC5zZXRCb3VuZHMoQ29udHJvbC5qYXZhOjMyMjMpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5GaWxsTGF5b3V0LmxheW91dChGaWxsTGF5b3V0LmphdmE6MjA0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS51cGRhdGVMYXlvdXQoQ29tcG9zaXRlLmphdmE6MTM1OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUuc2VuZFJlc2l6ZShDb21wb3NpdGUuamF2YToxMDM3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5zZXRCb3VuZHNJblBpeGVscyhDb21wb3NpdGUuamF2YToxMDgzKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wuc2V0Qm91bmRzSW5QaXhlbHMoQ29udHJvbC5qYXZhOjMyMzIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC5zZXRCb3VuZHNJblBpeGVscyhDb250cm9sLmphdmE6MzIyOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLnNldEJvdW5kcyhDb250cm9sLmphdmE6MzIyMykKKwlhdCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZpbGxMYXlvdXQubGF5b3V0KEZpbGxMYXlvdXQuamF2YToyMDQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnVwZGF0ZUxheW91dChDb21wb3NpdGUuamF2YToxMzU5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5zZW5kUmVzaXplKENvbXBvc2l0ZS5qYXZhOjEwMzcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnNldEJvdW5kc0luUGl4ZWxzKENvbXBvc2l0ZS5qYXZhOjEwODMpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC5zZXRCb3VuZHNJblBpeGVscyhDb250cm9sLmphdmE6MzIzMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLnNldEJvdW5kc0luUGl4ZWxzKENvbnRyb2wuamF2YTozMjI4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wuc2V0Qm91bmRzSW5QaXhlbHMoQ29udHJvbC5qYXZhOjMzMDQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC5zZXRCb3VuZHMoQ29udHJvbC5qYXZhOjMzMDApCisJYXQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuU2FzaExheW91dC5zZXRSZWN0YW5nbGUoU2FzaExheW91dC5qYXZhOjI4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC5TYXNoTGF5b3V0LnRpbGVTdWJOb2RlcyhTYXNoTGF5b3V0LmphdmE6MjI4KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5yZW5kZXJlcnMuc3d0LlNhc2hMYXlvdXQudGlsZVN1Yk5vZGVzKFNhc2hMYXlvdXQuamF2YToyNzEpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuU2FzaExheW91dC50aWxlU3ViTm9kZXMoU2FzaExheW91dC5qYXZhOjI3MSkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC5TYXNoTGF5b3V0LnRpbGVTdWJOb2RlcyhTYXNoTGF5b3V0LmphdmE6MjcxKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5yZW5kZXJlcnMuc3d0LlNhc2hMYXlvdXQubGF5b3V0KFNhc2hMYXlvdXQuamF2YToxNDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnVwZGF0ZUxheW91dChDb21wb3NpdGUuamF2YToxMzU5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5zZW5kUmVzaXplKENvbXBvc2l0ZS5qYXZhOjEwMzcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnNldEJvdW5kc0luUGl4ZWxzKENvbXBvc2l0ZS5qYXZhOjEwODMpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC5zZXRCb3VuZHNJblBpeGVscyhDb250cm9sLmphdmE6MzIzMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLnNldEJvdW5kc0luUGl4ZWxzKENvbnRyb2wuamF2YTozMjI4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wuc2V0Qm91bmRzKENvbnRyb2wuamF2YTozMjIzKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRmlsbExheW91dC5sYXlvdXQoRmlsbExheW91dC5qYXZhOjIwNCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUudXBkYXRlTGF5b3V0KENvbXBvc2l0ZS5qYXZhOjEzNTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLldNX1NJWkUoQ29tcG9zaXRlLmphdmE6MTc2MSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLndpbmRvd1Byb2MoQ29udHJvbC5qYXZhOjQ4NDApCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS53aW5kb3dQcm9jKERpc3BsYXkuamF2YTo0NzU3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EZWZXaW5kb3dQcm9jVyhOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EZWZXaW5kb3dQcm9jKE9TLmphdmE6MjI5OCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TY3JvbGxhYmxlLmNhbGxXaW5kb3dQcm9jKFNjcm9sbGFibGUuamF2YTo4OCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLldNX1dJTkRPV1BPU0NIQU5HRUQoQ29udHJvbC5qYXZhOjU2NjQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC53aW5kb3dQcm9jKENvbnRyb2wuamF2YTo0ODUzKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkud2luZG93UHJvYyhEaXNwbGF5LmphdmE6NDc1NykKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuU2V0V2luZG93UG9zKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC5zZXRCb3VuZHNJblBpeGVscyhDb250cm9sLmphdmE6MzI3MSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUuc2V0Qm91bmRzSW5QaXhlbHMoQ29tcG9zaXRlLmphdmE6MTA3NykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLnNldEJvdW5kc0luUGl4ZWxzKENvbnRyb2wuamF2YTozMjMyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wuc2V0Qm91bmRzSW5QaXhlbHMoQ29udHJvbC5qYXZhOjMyMjgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC5zZXRCb3VuZHNJblBpeGVscyhDb250cm9sLmphdmE6MzMwNCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLnNldEJvdW5kcyhDb250cm9sLmphdmE6MzMwMCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLlN0YWNrTGF5b3V0LmxheW91dChTdGFja0xheW91dC5qYXZhOjEyMykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUudXBkYXRlTGF5b3V0KENvbXBvc2l0ZS5qYXZhOjEzNTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLldNX1NJWkUoQ29tcG9zaXRlLmphdmE6MTc2MSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLndpbmRvd1Byb2MoQ29udHJvbC5qYXZhOjQ4NDApCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS53aW5kb3dQcm9jKERpc3BsYXkuamF2YTo0NzU3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EZWZXaW5kb3dQcm9jVyhOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EZWZXaW5kb3dQcm9jKE9TLmphdmE6MjI5OCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TY3JvbGxhYmxlLmNhbGxXaW5kb3dQcm9jKFNjcm9sbGFibGUuamF2YTo4OCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLldNX1dJTkRPV1BPU0NIQU5HRUQoQ29udHJvbC5qYXZhOjU2NjQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC53aW5kb3dQcm9jKENvbnRyb2wuamF2YTo0ODUzKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkud2luZG93UHJvYyhEaXNwbGF5LmphdmE6NDc1NykKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuU2V0V2luZG93UG9zKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC5zZXRCb3VuZHNJblBpeGVscyhDb250cm9sLmphdmE6MzI3MSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUuc2V0Qm91bmRzSW5QaXhlbHMoQ29tcG9zaXRlLmphdmE6MTA3NykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLnNldEJvdW5kc0luUGl4ZWxzKENvbnRyb2wuamF2YTozMjMyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wuc2V0Qm91bmRzSW5QaXhlbHMoQ29udHJvbC5qYXZhOjMyMjgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC5zZXRCb3VuZHNJblBpeGVscyhDb250cm9sLmphdmE6MzMwNCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLnNldEJvdW5kcyhDb250cm9sLmphdmE6MzMwMCkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC5TYXNoTGF5b3V0LnNldFJlY3RhbmdsZShTYXNoTGF5b3V0LmphdmE6MjgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5yZW5kZXJlcnMuc3d0LlNhc2hMYXlvdXQudGlsZVN1Yk5vZGVzKFNhc2hMYXlvdXQuamF2YToyMjgpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuU2FzaExheW91dC50aWxlU3ViTm9kZXMoU2FzaExheW91dC5qYXZhOjI3MSkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC5TYXNoTGF5b3V0LmxheW91dChTYXNoTGF5b3V0LmphdmE6MTQ1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS51cGRhdGVMYXlvdXQoQ29tcG9zaXRlLmphdmE6MTM1OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUuV01fU0laRShDb21wb3NpdGUuamF2YToxNzYxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wud2luZG93UHJvYyhDb250cm9sLmphdmE6NDg0MCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LndpbmRvd1Byb2MoRGlzcGxheS5qYXZhOjQ3NTcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLkRlZldpbmRvd1Byb2NXKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLkRlZldpbmRvd1Byb2MoT1MuamF2YToyMjk4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNjcm9sbGFibGUuY2FsbFdpbmRvd1Byb2MoU2Nyb2xsYWJsZS5qYXZhOjg4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wuV01fV0lORE9XUE9TQ0hBTkdFRChDb250cm9sLmphdmE6NTY2NCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLndpbmRvd1Byb2MoQ29udHJvbC5qYXZhOjQ4NTMpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS53aW5kb3dQcm9jKERpc3BsYXkuamF2YTo0NzU3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5TZXRXaW5kb3dQb3MoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLnNldEJvdW5kc0luUGl4ZWxzKENvbnRyb2wuamF2YTozMjcxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5zZXRCb3VuZHNJblBpeGVscyhDb21wb3NpdGUuamF2YToxMDc3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wuc2V0Qm91bmRzSW5QaXhlbHMoQ29udHJvbC5qYXZhOjMyMzIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC5zZXRCb3VuZHNJblBpeGVscyhDb250cm9sLmphdmE6MzIyOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLnNldEJvdW5kcyhDb250cm9sLmphdmE6MzIyMykKKwlhdCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZpbGxMYXlvdXQubGF5b3V0KEZpbGxMYXlvdXQuamF2YToyMDQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnVwZGF0ZUxheW91dChDb21wb3NpdGUuamF2YToxMzU5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5XTV9TSVpFKENvbXBvc2l0ZS5qYXZhOjE3NjEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC53aW5kb3dQcm9jKENvbnRyb2wuamF2YTo0ODQwKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkud2luZG93UHJvYyhEaXNwbGF5LmphdmE6NDc1NykKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuRGVmV2luZG93UHJvY1coTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuRGVmV2luZG93UHJvYyhPUy5qYXZhOjIyOTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2Nyb2xsYWJsZS5jYWxsV2luZG93UHJvYyhTY3JvbGxhYmxlLmphdmE6ODgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC5XTV9XSU5ET1dQT1NDSEFOR0VEKENvbnRyb2wuamF2YTo1NjY0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wud2luZG93UHJvYyhDb250cm9sLmphdmE6NDg1MykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LndpbmRvd1Byb2MoRGlzcGxheS5qYXZhOjQ3NjUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLkVuZERlZmVyV2luZG93UG9zKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlc2l6ZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjEwMDcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlc2l6ZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjk3MykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUuc2V0UmVzaXplQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6MTE4NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUuV01fU0laRShDb21wb3NpdGUuamF2YToxNzY1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhcy5XTV9TSVpFKENhbnZhcy5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EZWNvcmF0aW9ucy5XTV9TSVpFKERlY29yYXRpb25zLmphdmE6MTY2NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLndpbmRvd1Byb2MoQ29udHJvbC5qYXZhOjQ4NDApCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ2FudmFzLndpbmRvd1Byb2MoQ2FudmFzLmphdmE6MzQ1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLndpbmRvd1Byb2MoRGVjb3JhdGlvbnMuamF2YToxNDk5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLndpbmRvd1Byb2MoU2hlbGwuamF2YToyMTU5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkud2luZG93UHJvYyhEaXNwbGF5LmphdmE6NDc2NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuRGVmV2luZG93UHJvY1coTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuRGVmV2luZG93UHJvYyhPUy5qYXZhOjIyOTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGwuY2FsbFdpbmRvd1Byb2MoU2hlbGwuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC5XTV9XSU5ET1dQT1NDSEFOR0VEKENvbnRyb2wuamF2YTo1NjY0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhcy5XTV9XSU5ET1dQT1NDSEFOR0VEKENhbnZhcy5qYXZhOjQ1NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLndpbmRvd1Byb2MoQ29udHJvbC5qYXZhOjQ4NTMpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ2FudmFzLndpbmRvd1Byb2MoQ2FudmFzLmphdmE6MzQ1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLndpbmRvd1Byb2MoRGVjb3JhdGlvbnMuamF2YToxNDk5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLndpbmRvd1Byb2MoU2hlbGwuamF2YToyMTU5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkud2luZG93UHJvYyhEaXNwbGF5LmphdmE6NDc1NykKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuU2V0TWVudShOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLnNldE1lbnVCYXIoRGVjb3JhdGlvbnMuamF2YToxMDU2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnUucmVsZWFzZVBhcmVudChNZW51LmphdmE6OTQwKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxNykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuZGlzcG9zZShXaWRnZXQuamF2YTo0MjYpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuU1dUUGFydFJlbmRlcmVyLmRpc3Bvc2VXaWRnZXQoU1dUUGFydFJlbmRlcmVyLmphdmE6MTczKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5NTUpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93JDEuaGFuZGxlRXZlbnQoV29ya2JlbmNoV2luZG93LmphdmE6MzI5KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLnNlcnZpY2VzLmludGVybmFsLmV2ZW50cy5VSUV2ZW50SGFuZGxlciQxLnJ1bihVSUV2ZW50SGFuZGxlci5qYXZhOjQwKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlN5bmNocm9uaXplci5zeW5jRXhlYyhTeW5jaHJvbml6ZXIuamF2YToyMzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuVUlTeW5jaHJvbml6ZXIuc3luY0V4ZWMoVUlTeW5jaHJvbml6ZXIuamF2YToxNDQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zeW5jRXhlYyhEaXNwbGF5LmphdmE6NDU2NykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LkU0QXBwbGljYXRpb24kMS5zeW5jRXhlYyhFNEFwcGxpY2F0aW9uLmphdmE6MjEyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLnNlcnZpY2VzLmludGVybmFsLmV2ZW50cy5VSUV2ZW50SGFuZGxlci5oYW5kbGVFdmVudChVSUV2ZW50SGFuZGxlci5qYXZhOjM2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuZXZlbnQuRXZlbnRIYW5kbGVyV3JhcHBlci5oYW5kbGVFdmVudChFdmVudEhhbmRsZXJXcmFwcGVyLmphdmE6MjAxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuZXZlbnQuRXZlbnRIYW5kbGVyVHJhY2tlci5kaXNwYXRjaEV2ZW50KEV2ZW50SGFuZGxlclRyYWNrZXIuamF2YToxOTYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5ldmVudC5FdmVudEhhbmRsZXJUcmFja2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRIYW5kbGVyVHJhY2tlci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkxpc3RlbmVyUXVldWUuZGlzcGF0Y2hFdmVudFN5bmNocm9ub3VzKExpc3RlbmVyUXVldWUuamF2YToxNDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5ldmVudC5FdmVudEFkbWluSW1wbC5kaXNwYXRjaEV2ZW50KEV2ZW50QWRtaW5JbXBsLmphdmE6MTM1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuZXZlbnQuRXZlbnRBZG1pbkltcGwuc2VuZEV2ZW50KEV2ZW50QWRtaW5JbXBsLmphdmE6NzgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5ldmVudC5FdmVudENvbXBvbmVudC5zZW5kRXZlbnQoRXZlbnRDb21wb25lbnQuamF2YTozOSkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5zZXJ2aWNlcy5pbnRlcm5hbC5ldmVudHMuRXZlbnRCcm9rZXIuc2VuZChFdmVudEJyb2tlci5qYXZhOjUyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5VSUV2ZW50UHVibGlzaGVyLm5vdGlmeUNoYW5nZWQoVUlFdmVudFB1Ymxpc2hlci5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQmFzaWNOb3RpZmllckltcGwuZU5vdGlmeShCYXNpY05vdGlmaWVySW1wbC5qYXZhOjM3NCkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5tb2RlbC5hcHBsaWNhdGlvbi51aS5pbXBsLlVJRWxlbWVudEltcGwuc2V0V2lkZ2V0KFVJRWxlbWVudEltcGwuamF2YToyNjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuU1dUUGFydFJlbmRlcmVyLnVuYmluZFdpZGdldChTV1RQYXJ0UmVuZGVyZXIuamF2YToxNDgpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuU1dUUGFydFJlbmRlcmVyLmxhbWJkYSQwKFNXVFBhcnRSZW5kZXJlci5qYXZhOjEzNykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UeXBlZExpc3RlbmVyLmhhbmRsZUV2ZW50KFR5cGVkTGlzdGVuZXIuamF2YToxMjQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnRUYWJsZS5zZW5kRXZlbnQoRXZlbnRUYWJsZS5qYXZhOjg2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc2VuZEV2ZW50KERpc3BsYXkuamF2YTo0MTE4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA1MikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNzYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDU3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgwOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuZGlzcG9zZShXaWRnZXQuamF2YTo0MjYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGVjb3JhdGlvbnMuZGlzcG9zZShEZWNvcmF0aW9ucy5qYXZhOjQwNSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC5kaXNwb3NlKFNoZWxsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkucmVsZWFzZShEaXNwbGF5LmphdmE6MzU4NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuRGV2aWNlLmRpc3Bvc2UoRGV2aWNlLmphdmE6Mjk3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkubWVzc2FnZVByb2MoRGlzcGxheS5qYXZhOjMxMjApCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLkRlZldpbmRvd1Byb2NXKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLkRlZldpbmRvd1Byb2MoT1MuamF2YToyMjk4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLmNhbGxXaW5kb3dQcm9jKFNoZWxsLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wud2luZG93UHJvYyhDb250cm9sLmphdmE6NDg2MykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5DYW52YXMud2luZG93UHJvYyhDYW52YXMuamF2YTozNDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGVjb3JhdGlvbnMud2luZG93UHJvYyhEZWNvcmF0aW9ucy5qYXZhOjE0OTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGwud2luZG93UHJvYyhTaGVsbC5qYXZhOjIxNTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS53aW5kb3dQcm9jKERpc3BsYXkuamF2YTo0NzY1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5QZWVrTWVzc2FnZVcoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuUGVla01lc3NhZ2UoT1MuamF2YToyNzg3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkucmVhZEFuZERpc3BhdGNoKERpc3BsYXkuamF2YTozNTI5KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3cucnVuRXZlbnRMb29wKFdpbmRvdy5qYXZhOjgxOCkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93Lm9wZW4oV2luZG93LmphdmE6Nzk0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVXb3JrYmVuY2hXaW5kb3dBZHZpc29yLnByb21wdE9uRXhpdChJREVXb3JrYmVuY2hXaW5kb3dBZHZpc29yLmphdmE6MjI0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVXb3JrYmVuY2hBZHZpc29yJDEuaGFuZGxlRXZlbnQoSURFV29ya2JlbmNoQWR2aXNvci5qYXZhOjE2NCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudFRhYmxlLnNlbmRFdmVudChFdmVudFRhYmxlLmphdmE6ODYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zZW5kRXZlbnQoRGlzcGxheS5qYXZhOjQxMTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zZW5kRXZlbnQoRGlzcGxheS5qYXZhOjQxMTApCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5tZXNzYWdlUHJvYyhEaXNwbGF5LmphdmE6MzEzMykKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuRGVmV2luZG93UHJvY1coTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuRGVmV2luZG93UHJvYyhPUy5qYXZhOjIyOTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGwuY2FsbFdpbmRvd1Byb2MoU2hlbGwuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC53aW5kb3dQcm9jKENvbnRyb2wuamF2YTo0ODYzKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhcy53aW5kb3dQcm9jKENhbnZhcy5qYXZhOjM0NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EZWNvcmF0aW9ucy53aW5kb3dQcm9jKERlY29yYXRpb25zLmphdmE6MTQ5OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC53aW5kb3dQcm9jKFNoZWxsLmphdmE6MjE1OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LndpbmRvd1Byb2MoRGlzcGxheS5qYXZhOjQ3NjUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLlBlZWtNZXNzYWdlVyhOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5QZWVrTWVzc2FnZShPUy5qYXZhOjI3ODcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5yZWFkQW5kRGlzcGF0Y2goRGlzcGxheS5qYXZhOjM1MjkpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDUucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YToxMTcwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YToxMDU5KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5FNFdvcmtiZW5jaC5jcmVhdGVBbmRSdW5VSShFNFdvcmtiZW5jaC5qYXZhOjE1MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCisKKyFFTlRSWSBvcmcuZWNsaXBzZS51aSA0IDAgMjAyMS0xMC0xNCAwMDoxNDoxNS45ODgKKyFNRVNTQUdFIFVuaGFuZGxlZCBldmVudCBsb29wIGV4Y2VwdGlvbgorIVNUQUNLIDAKK2phdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbgorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLk5hdmlnYXRpb25IaXN0b3J5LmdldERpc3BsYXkoTmF2aWdhdGlvbkhpc3RvcnkuamF2YToxNzYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuTmF2aWdhdGlvbkhpc3RvcnkubWFya0VkaXRvcihOYXZpZ2F0aW9uSGlzdG9yeS5qYXZhOjE5MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hQYWdlLnVwZGF0ZUFjdGl2ZUVkaXRvclNvdXJjZXMoV29ya2JlbmNoUGFnZS5qYXZhOjQzMykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hQYWdlLmZpcmVQYXJ0Q2xvc2VkKFdvcmtiZW5jaFBhZ2UuamF2YTo1MjU2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVBhcnQubGFtYmRhJDAoQ29tcGF0aWJpbGl0eVBhcnQuamF2YToxMDYpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuc2VydmljZXMuaW50ZXJuYWwuZXZlbnRzLlVJRXZlbnRIYW5kbGVyJDEucnVuKFVJRXZlbnRIYW5kbGVyLmphdmE6NDApCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3luY2hyb25pemVyLnN5bmNFeGVjKFN5bmNocm9uaXplci5qYXZhOjIzMykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5VSVN5bmNocm9uaXplci5zeW5jRXhlYyhVSVN5bmNocm9uaXplci5qYXZhOjE0NCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnN5bmNFeGVjKERpc3BsYXkuamF2YTo0NTY3KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuRTRBcHBsaWNhdGlvbiQxLnN5bmNFeGVjKEU0QXBwbGljYXRpb24uamF2YToyMTIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuc2VydmljZXMuaW50ZXJuYWwuZXZlbnRzLlVJRXZlbnRIYW5kbGVyLmhhbmRsZUV2ZW50KFVJRXZlbnRIYW5kbGVyLmphdmE6MzYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5ldmVudC5FdmVudEhhbmRsZXJXcmFwcGVyLmhhbmRsZUV2ZW50KEV2ZW50SGFuZGxlcldyYXBwZXIuamF2YToyMDEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5ldmVudC5FdmVudEhhbmRsZXJUcmFja2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRIYW5kbGVyVHJhY2tlci5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmV2ZW50LkV2ZW50SGFuZGxlclRyYWNrZXIuZGlzcGF0Y2hFdmVudChFdmVudEhhbmRsZXJUcmFja2VyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuTGlzdGVuZXJRdWV1ZS5kaXNwYXRjaEV2ZW50U3luY2hyb25vdXMoTGlzdGVuZXJRdWV1ZS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmV2ZW50LkV2ZW50QWRtaW5JbXBsLmRpc3BhdGNoRXZlbnQoRXZlbnRBZG1pbkltcGwuamF2YToxMzUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5ldmVudC5FdmVudEFkbWluSW1wbC5zZW5kRXZlbnQoRXZlbnRBZG1pbkltcGwuamF2YTo3OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmV2ZW50LkV2ZW50Q29tcG9uZW50LnNlbmRFdmVudChFdmVudENvbXBvbmVudC5qYXZhOjM5KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLnNlcnZpY2VzLmludGVybmFsLmV2ZW50cy5FdmVudEJyb2tlci5zZW5kKEV2ZW50QnJva2VyLmphdmE6NTIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLlVJRXZlbnRQdWJsaXNoZXIubm90aWZ5Q2hhbmdlZChVSUV2ZW50UHVibGlzaGVyLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5CYXNpY05vdGlmaWVySW1wbC5lTm90aWZ5KEJhc2ljTm90aWZpZXJJbXBsLmphdmE6Mzc0KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLm1vZGVsLmFwcGxpY2F0aW9uLnVpLmltcGwuVUlFbGVtZW50SW1wbC5zZXRXaWRnZXQoVUlFbGVtZW50SW1wbC5qYXZhOjI2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC5TV1RQYXJ0UmVuZGVyZXIudW5iaW5kV2lkZ2V0KFNXVFBhcnRSZW5kZXJlci5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC5TV1RQYXJ0UmVuZGVyZXIubGFtYmRhJDAoU1dUUGFydFJlbmRlcmVyLmphdmE6MTM3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlR5cGVkTGlzdGVuZXIuaGFuZGxlRXZlbnQoVHlwZWRMaXN0ZW5lci5qYXZhOjEyNCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudFRhYmxlLnNlbmRFdmVudChFdmVudFRhYmxlLmphdmE6ODYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zZW5kRXZlbnQoRGlzcGxheS5qYXZhOjQxMTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDUyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA3NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNTcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODA5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ2FudmFzLnJlbGVhc2VDaGlsZHJlbihDYW52YXMuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGVjb3JhdGlvbnMucmVsZWFzZUNoaWxkcmVuKERlY29yYXRpb25zLmphdmE6NzI4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLnJlbGVhc2VDaGlsZHJlbihTaGVsbC5qYXZhOjEzNDApCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5kaXNwb3NlKFdpZGdldC5qYXZhOjQyNikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EZWNvcmF0aW9ucy5kaXNwb3NlKERlY29yYXRpb25zLmphdmE6NDA1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLmRpc3Bvc2UoU2hlbGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5yZWxlYXNlKERpc3BsYXkuamF2YTozNTg1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5EZXZpY2UuZGlzcG9zZShEZXZpY2UuamF2YToyOTcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5tZXNzYWdlUHJvYyhEaXNwbGF5LmphdmE6MzEyMCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuRGVmV2luZG93UHJvY1coTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuRGVmV2luZG93UHJvYyhPUy5qYXZhOjIyOTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGwuY2FsbFdpbmRvd1Byb2MoU2hlbGwuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC53aW5kb3dQcm9jKENvbnRyb2wuamF2YTo0ODYzKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhcy53aW5kb3dQcm9jKENhbnZhcy5qYXZhOjM0NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EZWNvcmF0aW9ucy53aW5kb3dQcm9jKERlY29yYXRpb25zLmphdmE6MTQ5OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC53aW5kb3dQcm9jKFNoZWxsLmphdmE6MjE1OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LndpbmRvd1Byb2MoRGlzcGxheS5qYXZhOjQ3NjUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLlBlZWtNZXNzYWdlVyhOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5QZWVrTWVzc2FnZShPUy5qYXZhOjI3ODcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5yZWFkQW5kRGlzcGF0Y2goRGlzcGxheS5qYXZhOjM1MjkpCisJYXQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdy5ydW5FdmVudExvb3AoV2luZG93LmphdmE6ODE4KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3cub3BlbihXaW5kb3cuamF2YTo3OTQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERVdvcmtiZW5jaFdpbmRvd0Fkdmlzb3IucHJvbXB0T25FeGl0KElERVdvcmtiZW5jaFdpbmRvd0Fkdmlzb3IuamF2YToyMjQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERVdvcmtiZW5jaEFkdmlzb3IkMS5oYW5kbGVFdmVudChJREVXb3JrYmVuY2hBZHZpc29yLmphdmE6MTY0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50VGFibGUuc2VuZEV2ZW50KEV2ZW50VGFibGUuamF2YTo4NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnNlbmRFdmVudChEaXNwbGF5LmphdmE6NDExOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnNlbmRFdmVudChEaXNwbGF5LmphdmE6NDExMCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5Lm1lc3NhZ2VQcm9jKERpc3BsYXkuamF2YTozMTMzKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EZWZXaW5kb3dQcm9jVyhOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EZWZXaW5kb3dQcm9jKE9TLmphdmE6MjI5OCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC5jYWxsV2luZG93UHJvYyhTaGVsbC5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLndpbmRvd1Byb2MoQ29udHJvbC5qYXZhOjQ4NjMpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ2FudmFzLndpbmRvd1Byb2MoQ2FudmFzLmphdmE6MzQ1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLndpbmRvd1Byb2MoRGVjb3JhdGlvbnMuamF2YToxNDk5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLndpbmRvd1Byb2MoU2hlbGwuamF2YToyMTU5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkud2luZG93UHJvYyhEaXNwbGF5LmphdmE6NDc2NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuUGVla01lc3NhZ2VXKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLlBlZWtNZXNzYWdlKE9TLmphdmE6Mjc4NykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnJlYWRBbmREaXNwYXRjaChEaXNwbGF5LmphdmE6MzUyOSkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNS5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjExNzApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjEwNTkpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLkU0V29ya2JlbmNoLmNyZWF0ZUFuZFJ1blVJKEU0V29ya2JlbmNoLmphdmE6MTUzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkMyhXb3JrYmVuY2guamF2YTo2NjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goV29ya2JlbmNoLmphdmE6NTk3KQorCWF0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUkuY3JlYXRlQW5kUnVuV29ya2JlbmNoKFBsYXRmb3JtVUkuamF2YToxNDgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERUFwcGxpY2F0aW9uLnN0YXJ0KElERUFwcGxpY2F0aW9uLmphdmE6MTUyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuYXBwLkVjbGlwc2VBcHBIYW5kbGUucnVuKEVjbGlwc2VBcHBIYW5kbGUuamF2YToxOTYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnJ1bkFwcGxpY2F0aW9uKEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEzNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIuc3RhcnQoRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjM4OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YToyNDMpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKE5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjYyKQorCWF0IHN1bi5yZWZsZWN0LkRlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKERlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuamF2YTo0MykKKwlhdCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuaW52b2tlKE1ldGhvZC5qYXZhOjQ5OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uaW52b2tlRnJhbWV3b3JrKE1haW4uamF2YTo2NTYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmJhc2ljUnVuKE1haW4uamF2YTo1OTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLnJ1bihNYWluLmphdmE6MTQ5OCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLnVpIDQgMCAyMDIxLTEwLTE0IDAwOjE0OjE2LjA1NAorIU1FU1NBR0UgVW5oYW5kbGVkIGV2ZW50IGxvb3AgZXhjZXB0aW9uCishU1RBQ0sgMAoramF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjogQXJndW1lbnQgbm90IHZhbGlkCisJYXQgb3JnLmVjbGlwc2Uuc3d0LlNXVC5lcnJvcihTV1QuamF2YTo0NTMzKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5TV1QuZXJyb3IoU1dULmphdmE6NDQ2NykKKwlhdCBvcmcuZWNsaXBzZS5zd3QuU1dULmVycm9yKFNXVC5qYXZhOjQ0MzgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkdDLnNldEZvcmVncm91bmQoR0MuamF2YTo0MzY5KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5yZW5kZXJlcnMuc3d0LkNUYWJSZW5kZXJpbmcuZHJhd0JhY2tncm91bmQoQ1RhYlJlbmRlcmluZy5qYXZhOjEwNzUpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuQ1RhYlJlbmRlcmluZy5kcmF3VW5zZWxlY3RlZFRhYkJhY2tncm91bmQoQ1RhYlJlbmRlcmluZy5qYXZhOjEwMDgpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuQ1RhYlJlbmRlcmluZy5kcmF3Q3VzdG9tQmFja2dyb3VuZChDVGFiUmVuZGVyaW5nLmphdmE6OTkwKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5yZW5kZXJlcnMuc3d0LkNUYWJSZW5kZXJpbmcuZHJhdyhDVGFiUmVuZGVyaW5nLmphdmE6MjE4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ1RhYkZvbGRlci51cGRhdGVCa0ltYWdlcyhDVGFiRm9sZGVyLmphdmE6Mzg4NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNUYWJGb2xkZXIuc2V0QnV0dG9uQm91bmRzKENUYWJGb2xkZXIuamF2YToyNjE5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ1RhYkZvbGRlci51cGRhdGVJdGVtcyhDVGFiRm9sZGVyLmphdmE6Mzc5NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNUYWJGb2xkZXIudXBkYXRlSXRlbXMoQ1RhYkZvbGRlci5qYXZhOjM3MjYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyLm9uUmVzaXplKENUYWJGb2xkZXIuamF2YToyMTE4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ1RhYkZvbGRlci5sYW1iZGEkMChDVGFiRm9sZGVyLmphdmE6MzM1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50VGFibGUuc2VuZEV2ZW50KEV2ZW50VGFibGUuamF2YTo4NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnNlbmRFdmVudChEaXNwbGF5LmphdmE6NDExOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDc2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA1NykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLldNX1NJWkUoQ29udHJvbC5qYXZhOjU0MzIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2Nyb2xsYWJsZS5XTV9TSVpFKFNjcm9sbGFibGUuamF2YTozNTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLldNX1NJWkUoQ29tcG9zaXRlLmphdmE6MTc1MCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLndpbmRvd1Byb2MoQ29udHJvbC5qYXZhOjQ4NDApCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS53aW5kb3dQcm9jKERpc3BsYXkuamF2YTo0NzU3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EZWZXaW5kb3dQcm9jVyhOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EZWZXaW5kb3dQcm9jKE9TLmphdmE6MjI5OCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TY3JvbGxhYmxlLmNhbGxXaW5kb3dQcm9jKFNjcm9sbGFibGUuamF2YTo4OCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLldNX1dJTkRPV1BPU0NIQU5HRUQoQ29udHJvbC5qYXZhOjU2NjQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC53aW5kb3dQcm9jKENvbnRyb2wuamF2YTo0ODUzKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkud2luZG93UHJvYyhEaXNwbGF5LmphdmE6NDc2NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuU2V0V2luZG93UG9zKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC5zZXRCb3VuZHNJblBpeGVscyhDb250cm9sLmphdmE6MzI3MSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUuc2V0Qm91bmRzSW5QaXhlbHMoQ29tcG9zaXRlLmphdmE6MTA3NykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLnNldEJvdW5kc0luUGl4ZWxzKENvbnRyb2wuamF2YTozMjMyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wuc2V0U2l6ZUluUGl4ZWxzKENvbnRyb2wuamF2YTozNzc3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wuc2V0U2l6ZShDb250cm9sLmphdmE6MzgwNykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLnBhY2soQ29udHJvbC5qYXZhOjIyMDkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC5wYWNrKENvbnRyb2wuamF2YToyMTc5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQWN0aW9uQmFycy51cGRhdGVBY3Rpb25CYXJzKEFjdGlvbkJhcnMuamF2YTo4MSkKKwlhdCBvcmcuZWNsaXBzZS51aS5wYXJ0LlBhZ2VCb29rVmlldy5zaG93UGFnZVJlYyhQYWdlQm9va1ZpZXcuamF2YTo5NTgpCisJYXQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmUuc2hvd1BhZ2VSZWMoQ29udGVudE91dGxpbmUuamF2YToyMzgpCisJYXQgb3JnLmVjbGlwc2UudWkucGFydC5QYWdlQm9va1ZpZXcucGFydEhpZGRlbihQYWdlQm9va1ZpZXcuamF2YToxMDkwKQorCWF0IG9yZy5lY2xpcHNlLnVpLnBhcnQuUGFnZUJvb2tWaWV3JDEucGFydEhpZGRlbihQYWdlQm9va1ZpZXcuamF2YToxMDQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFBhZ2UkMjkucnVuKFdvcmtiZW5jaFBhZ2UuamF2YTo1NDA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoUGFnZS5maXJlUGFydEhpZGRlbihXb3JrYmVuY2hQYWdlLmphdmE6NTQwNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlQYXJ0LmxhbWJkYSQwKENvbXBhdGliaWxpdHlQYXJ0LmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLnNlcnZpY2VzLmludGVybmFsLmV2ZW50cy5VSUV2ZW50SGFuZGxlciQxLnJ1bihVSUV2ZW50SGFuZGxlci5qYXZhOjQwKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlN5bmNocm9uaXplci5zeW5jRXhlYyhTeW5jaHJvbml6ZXIuamF2YToyMzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuVUlTeW5jaHJvbml6ZXIuc3luY0V4ZWMoVUlTeW5jaHJvbml6ZXIuamF2YToxNDQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zeW5jRXhlYyhEaXNwbGF5LmphdmE6NDU2NykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LkU0QXBwbGljYXRpb24kMS5zeW5jRXhlYyhFNEFwcGxpY2F0aW9uLmphdmE6MjEyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLnNlcnZpY2VzLmludGVybmFsLmV2ZW50cy5VSUV2ZW50SGFuZGxlci5oYW5kbGVFdmVudChVSUV2ZW50SGFuZGxlci5qYXZhOjM2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuZXZlbnQuRXZlbnRIYW5kbGVyV3JhcHBlci5oYW5kbGVFdmVudChFdmVudEhhbmRsZXJXcmFwcGVyLmphdmE6MjAxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuZXZlbnQuRXZlbnRIYW5kbGVyVHJhY2tlci5kaXNwYXRjaEV2ZW50KEV2ZW50SGFuZGxlclRyYWNrZXIuamF2YToxOTYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5ldmVudC5FdmVudEhhbmRsZXJUcmFja2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRIYW5kbGVyVHJhY2tlci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkxpc3RlbmVyUXVldWUuZGlzcGF0Y2hFdmVudFN5bmNocm9ub3VzKExpc3RlbmVyUXVldWUuamF2YToxNDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5ldmVudC5FdmVudEFkbWluSW1wbC5kaXNwYXRjaEV2ZW50KEV2ZW50QWRtaW5JbXBsLmphdmE6MTM1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuZXZlbnQuRXZlbnRBZG1pbkltcGwuc2VuZEV2ZW50KEV2ZW50QWRtaW5JbXBsLmphdmE6NzgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5ldmVudC5FdmVudENvbXBvbmVudC5zZW5kRXZlbnQoRXZlbnRDb21wb25lbnQuamF2YTozOSkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5zZXJ2aWNlcy5pbnRlcm5hbC5ldmVudHMuRXZlbnRCcm9rZXIuc2VuZChFdmVudEJyb2tlci5qYXZhOjUyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5VSUV2ZW50UHVibGlzaGVyLm5vdGlmeUNoYW5nZWQoVUlFdmVudFB1Ymxpc2hlci5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQmFzaWNOb3RpZmllckltcGwuZU5vdGlmeShCYXNpY05vdGlmaWVySW1wbC5qYXZhOjM3NCkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5tb2RlbC5hcHBsaWNhdGlvbi51aS5pbXBsLlVJRWxlbWVudEltcGwuc2V0V2lkZ2V0KFVJRWxlbWVudEltcGwuamF2YToyNjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuU1dUUGFydFJlbmRlcmVyLnVuYmluZFdpZGdldChTV1RQYXJ0UmVuZGVyZXIuamF2YToxNDgpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuU1dUUGFydFJlbmRlcmVyLmxhbWJkYSQwKFNXVFBhcnRSZW5kZXJlci5qYXZhOjEzNykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UeXBlZExpc3RlbmVyLmhhbmRsZUV2ZW50KFR5cGVkTGlzdGVuZXIuamF2YToxMjQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnRUYWJsZS5zZW5kRXZlbnQoRXZlbnRUYWJsZS5qYXZhOjg2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc2VuZEV2ZW50KERpc3BsYXkuamF2YTo0MTE4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA1MikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNzYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDU3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgwOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhcy5yZWxlYXNlQ2hpbGRyZW4oQ2FudmFzLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLnJlbGVhc2VDaGlsZHJlbihEZWNvcmF0aW9ucy5qYXZhOjcyOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC5yZWxlYXNlQ2hpbGRyZW4oU2hlbGwuamF2YToxMzQwKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuZGlzcG9zZShXaWRnZXQuamF2YTo0MjYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGVjb3JhdGlvbnMuZGlzcG9zZShEZWNvcmF0aW9ucy5qYXZhOjQwNSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC5kaXNwb3NlKFNoZWxsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkucmVsZWFzZShEaXNwbGF5LmphdmE6MzU4NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuRGV2aWNlLmRpc3Bvc2UoRGV2aWNlLmphdmE6Mjk3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkubWVzc2FnZVByb2MoRGlzcGxheS5qYXZhOjMxMjApCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLkRlZldpbmRvd1Byb2NXKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLkRlZldpbmRvd1Byb2MoT1MuamF2YToyMjk4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLmNhbGxXaW5kb3dQcm9jKFNoZWxsLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wud2luZG93UHJvYyhDb250cm9sLmphdmE6NDg2MykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5DYW52YXMud2luZG93UHJvYyhDYW52YXMuamF2YTozNDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGVjb3JhdGlvbnMud2luZG93UHJvYyhEZWNvcmF0aW9ucy5qYXZhOjE0OTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGwud2luZG93UHJvYyhTaGVsbC5qYXZhOjIxNTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS53aW5kb3dQcm9jKERpc3BsYXkuamF2YTo0NzY1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5QZWVrTWVzc2FnZVcoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuUGVla01lc3NhZ2UoT1MuamF2YToyNzg3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkucmVhZEFuZERpc3BhdGNoKERpc3BsYXkuamF2YTozNTI5KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3cucnVuRXZlbnRMb29wKFdpbmRvdy5qYXZhOjgxOCkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93Lm9wZW4oV2luZG93LmphdmE6Nzk0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVXb3JrYmVuY2hXaW5kb3dBZHZpc29yLnByb21wdE9uRXhpdChJREVXb3JrYmVuY2hXaW5kb3dBZHZpc29yLmphdmE6MjI0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVXb3JrYmVuY2hBZHZpc29yJDEuaGFuZGxlRXZlbnQoSURFV29ya2JlbmNoQWR2aXNvci5qYXZhOjE2NCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudFRhYmxlLnNlbmRFdmVudChFdmVudFRhYmxlLmphdmE6ODYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zZW5kRXZlbnQoRGlzcGxheS5qYXZhOjQxMTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zZW5kRXZlbnQoRGlzcGxheS5qYXZhOjQxMTApCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5tZXNzYWdlUHJvYyhEaXNwbGF5LmphdmE6MzEzMykKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuRGVmV2luZG93UHJvY1coTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuRGVmV2luZG93UHJvYyhPUy5qYXZhOjIyOTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGwuY2FsbFdpbmRvd1Byb2MoU2hlbGwuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC53aW5kb3dQcm9jKENvbnRyb2wuamF2YTo0ODYzKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhcy53aW5kb3dQcm9jKENhbnZhcy5qYXZhOjM0NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EZWNvcmF0aW9ucy53aW5kb3dQcm9jKERlY29yYXRpb25zLmphdmE6MTQ5OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC53aW5kb3dQcm9jKFNoZWxsLmphdmE6MjE1OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LndpbmRvd1Byb2MoRGlzcGxheS5qYXZhOjQ3NjUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLlBlZWtNZXNzYWdlVyhOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5QZWVrTWVzc2FnZShPUy5qYXZhOjI3ODcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5yZWFkQW5kRGlzcGF0Y2goRGlzcGxheS5qYXZhOjM1MjkpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDUucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YToxMTcwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YToxMDU5KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5FNFdvcmtiZW5jaC5jcmVhdGVBbmRSdW5VSShFNFdvcmtiZW5jaC5qYXZhOjE1MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCishU0VTU0lPTiAyMDIxLTEwLTE0IDA4OjQ4OjA2LjI0NSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNsaXBzZS5idWlsZElkPTQuOC4wLkkyMDE4MDYxMS0wNTAwCitqYXZhLnZlcnNpb249MS44LjBfMjMxCitqYXZhLnZlbmRvcj1PcmFjbGUgQ29ycG9yYXRpb24KK0Jvb3RMb2FkZXIgY29uc3RhbnRzOiBPUz13aW4zMiwgQVJDSD14ODZfNjQsIFdTPXdpbjMyLCBOTD1kZV9ERQorRnJhbWV3b3JrIGFyZ3VtZW50czogIC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorQ29tbWFuZC1saW5lIGFyZ3VtZW50czogIC1vcyB3aW4zMiAtd3Mgd2luMzIgLWFyY2ggeDg2XzY0IC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorCishRU5UUlkgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMgNCAwIDIwMjEtMTAtMTQgMDg6NDg6MTYuOTY1CishTUVTU0FHRSBGcmFtZXdvcmtFdmVudCBFUlJPUgorIVNUQUNLIDAKK29yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb246IEV4Y2VwdGlvbiBpbiBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoKSBvZiBidW5kbGUgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo4MDApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJLi4uIDEyIG1vcmUKK1Jvb3QgZXhjZXB0aW9uOgoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzIDIgMTAwMzUgMjAyMS0xMC0xNCAwODo0ODoyNS43MDQKKyFNRVNTQUdFIFRoZSB3b3Jrc3BhY2UgZXhpdGVkIHdpdGggdW5zYXZlZCBjaGFuZ2VzIGluIHRoZSBwcmV2aW91cyBzZXNzaW9uOyByZWZyZXNoaW5nIHdvcmtzcGFjZSB0byByZWNvdmVyIGNoYW5nZXMuCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUgMiAwIDIwMjEtMTAtMTQgMDg6NDg6MzcuNzg1CishTUVTU0FHRSBCdWlsdGluIExGUyBzdXBwb3J0IG5vdCBwcmVzZW50L2RldGVjdGVkCishU1RBQ0sgMAoramF2YS5sYW5nLkNsYXNzTm90Rm91bmRFeGNlcHRpb246IG9yZy5lY2xpcHNlLmpnaXQubGZzLkJ1aWx0aW5MRlMgY2Fubm90IGJlIGZvdW5kIGJ5IG9yZy5lY2xpcHNlLmVnaXQuY29yZV81LjAuMC4yMDE4MDYxMzE1NTAtcgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo1MDgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUwKE5hdGl2ZSBNZXRob2QpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUoQ2xhc3MuamF2YToyNjQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5yZWdpc3RlckJ1aWx0aW5MRlMoQWN0aXZhdG9yLmphdmE6Mjc5KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MjEyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLnNvdXJjZXMuU2luZ2xlU291cmNlUGFja2FnZS5sb2FkQ2xhc3MoU2luZ2xlU291cmNlUGFja2FnZS5qYXZhOjM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3IkUmVwb3NpdG9yeUNoYW5nZVNjYW5uZXIuPGluaXQ+KEFjdGl2YXRvci5qYXZhOjkyMSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zZXR1cFJlcG9DaGFuZ2VTY2FubmVyKEFjdGl2YXRvci5qYXZhOjEwMzQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLldvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5nZXRTb3VyY2VQcm92aWRlcnMoV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmphdmE6MTc0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLlNvdXJjZVByb3ZpZGVyU2VydmljZS5yZWFkUmVnaXN0cnkoU291cmNlUHJvdmlkZXJTZXJ2aWNlLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaCQzNC5ydW5XaXRoRXhjZXB0aW9uKFdvcmtiZW5jaC5qYXZhOjIzNzgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZyRTdGFydHVwUnVubmFibGUucnVuKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTozMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TeW5jaHJvbml6ZXIuc3luY0V4ZWMoU3luY2hyb25pemVyLmphdmE6MjMzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlVJU3luY2hyb25pemVyLnN5bmNFeGVjKFVJU3luY2hyb25pemVyLmphdmE6MTQ0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc3luY0V4ZWMoRGlzcGxheS5qYXZhOjQ1NjcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZy5ydW5XaXRob3V0RXhjZXB0aW9ucyhTdGFydHVwVGhyZWFkaW5nLmphdmE6OTUpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXRpYWxpemVEZWZhdWx0U2VydmljZXMoV29ya2JlbmNoLmphdmE6MjM3MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdChXb3JrYmVuY2guamF2YToxNjU0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5ydW5VSShXb3JrYmVuY2guamF2YToyODU5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkMyhXb3JrYmVuY2guamF2YTo2NTQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goV29ya2JlbmNoLmphdmE6NTk3KQorCWF0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUkuY3JlYXRlQW5kUnVuV29ya2JlbmNoKFBsYXRmb3JtVUkuamF2YToxNDgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERUFwcGxpY2F0aW9uLnN0YXJ0KElERUFwcGxpY2F0aW9uLmphdmE6MTUyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuYXBwLkVjbGlwc2VBcHBIYW5kbGUucnVuKEVjbGlwc2VBcHBIYW5kbGUuamF2YToxOTYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnJ1bkFwcGxpY2F0aW9uKEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEzNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIuc3RhcnQoRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjM4OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YToyNDMpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKE5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjYyKQorCWF0IHN1bi5yZWZsZWN0LkRlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKERlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuamF2YTo0MykKKwlhdCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuaW52b2tlKE1ldGhvZC5qYXZhOjQ5OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uaW52b2tlRnJhbWV3b3JrKE1haW4uamF2YTo2NTYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmJhc2ljUnVuKE1haW4uamF2YTo1OTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLnJ1bihNYWluLmphdmE6MTQ5OCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQudWkgMiAwIDIwMjEtMTAtMTQgMDg6NDk6MzUuNDgyCishTUVTU0FHRSBXYXJuaW5nOiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgSE9NRSBpcyBub3Qgc2V0LiBUaGUgZm9sbG93aW5nIGRpcmVjdG9yeSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIEdpdAordXNlciBnbG9iYWwgY29uZmlndXJhdGlvbiBhbmQgdG8gZGVmaW5lIHRoZSBkZWZhdWx0IGxvY2F0aW9uIHRvIHN0b3JlIHJlcG9zaXRvcmllczogJ0M6XFVzZXJzXEZyYW5jaycuIElmIHRoaXMgaXMKK25vdCBjb3JyZWN0IHBsZWFzZSBzZXQgdGhlIEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIHJlc3RhcnQgRWNsaXBzZS4gT3RoZXJ3aXNlIEdpdCBmb3IgV2luZG93cyBhbmQKK0VHaXQgbWlnaHQgYmVoYXZlIGRpZmZlcmVudGx5IHNpbmNlIHRoZXkgc2VlIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCitUaGlzIHdhcm5pbmcgY2FuIGJlIHN3aXRjaGVkIG9mZiBvbiB0aGUgVGVhbSA+IEdpdCA+IENvbmZpcm1hdGlvbnMgYW5kIFdhcm5pbmdzIHByZWZlcmVuY2UgcGFnZS4KKworIUVOVFJZIG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlIDIgMTcgMjAyMS0xMC0xNCAwODo0OTo0MS45NTgKKyFNRVNTQUdFIFNlcnZlciDigJhvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXLigJkgZmFpbGVkIHdpdGggZXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJC4gOyB2ZXJzaW9uOiAyLjAuNy52MjAxNzA5MDYtMTMyNworIVNUQUNLIDAKK2NvbS5nb29nbGUuZ3Nvbi5Kc29uU3ludGF4RXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMjQpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg4OCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODUzKQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4MDIpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLmpzb24uSnNvbi5kZXNlcmlhbGl6ZShKc29uLmphdmE6OTEpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuSU8ucmVmcmVzaENvbmZpZ3VyYXRpb24oSU8uamF2YTo2NikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5TZXJ2ZXJDb25uZWN0aW9uLnN0YXJ0VXAoU2VydmVyQ29ubmVjdGlvbi5qYXZhOjEyNCkKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RJZGxlU2VydmljZSREZWxlZ2F0ZVNlcnZpY2UkMS5ydW4oQWJzdHJhY3RJZGxlU2VydmljZS5qYXZhOjYyKQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5DYWxsYWJsZXMkNC5ydW4oQ2FsbGFibGVzLmphdmE6MTIyKQorCWF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uc3RyZWFtLkpzb25SZWFkZXIuYmVnaW5PYmplY3QoSnNvblJlYWRlci5qYXZhOjM4NSkKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjEzKQorCS4uLiA5IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpIDQgMCAyMDIxLTEwLTE0IDA4OjQ5OjU3Ljg0MAorIU1FU1NBR0UgUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKyFTVEFDSyAwCitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRLbm93blJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NDgwKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyJEFydGlmYWN0LmdldEtub3duUmVwb3NpdG9yaWVzKENhY2hpbmdSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjYyMykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5jb3JlLlAyVXRpbC5nZXRLbm93blJlcG9zaXRvcmllcyhQMlV0aWwuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5wMi5pbXBsLlAyVGFza0ltcGwuaXNOZWVkZWQoUDJUYXNrSW1wbC5qYXZhOjcwMSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5pbnRlcm5hbC5jb3JlLlNldHVwVGFza1BlcmZvcm1lci5pbml0TmVlZGVkU2V0dXBUYXNrcyhTZXR1cFRhc2tQZXJmb3JtZXIuamF2YToyMjczKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4ucGVyZm9ybVN0YXJ0dXAoU2V0dXBVSVBsdWdpbi5qYXZhOjY3OSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLmFjY2VzcyQ1KFNldHVwVUlQbHVnaW4uamF2YTo0MTUpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbiQxJDEucnVuKFNldHVwVUlQbHVnaW4uamF2YToyNTIpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0xNCAwODo1MzoxMy41ODcKKyFNRVNTQUdFIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorIVNUQUNLIDAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKQorCS4uLiA4IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwIDEgMCAyMDIxLTEwLTE0IDA4OjUzOjEzLjU5MQorIU1FU1NBR0Ugb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAgY291bGQgbm90IGJlIHJlc29sdmVkIGZyb20gdGhlIG1vZGVsIHJlcG9zaXRvcmllcy4gQXJlIHlvdSBvZmZsaW5lPworIVNFU1NJT04gMjAyMS0xMC0xNSAwNzoxMDo0MS43ODggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VjbGlwc2UuYnVpbGRJZD00LjguMC5JMjAxODA2MTEtMDUwMAoramF2YS52ZXJzaW9uPTEuOC4wXzIzMQoramF2YS52ZW5kb3I9T3JhY2xlIENvcnBvcmF0aW9uCitCb290TG9hZGVyIGNvbnN0YW50czogT1M9d2luMzIsIEFSQ0g9eDg2XzY0LCBXUz13aW4zMiwgTkw9ZGVfREUKK0ZyYW1ld29yayBhcmd1bWVudHM6ICAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKK0NvbW1hbmQtbGluZSBhcmd1bWVudHM6ICAtb3Mgd2luMzIgLXdzIHdpbjMyIC1hcmNoIHg4Nl82NCAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zIDQgMCAyMDIxLTEwLTE1IDA3OjEwOjU0LjEzNgorIU1FU1NBR0UgRnJhbWV3b3JrRXZlbnQgRVJST1IKKyFTVEFDSyAwCitvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOiBFeGNlcHRpb24gaW4gb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KCkgb2YgYnVuZGxlIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zLgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6ODAwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCS4uLiAxMiBtb3JlCitSb290IGV4Y2VwdGlvbjoKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUgMiAwIDIwMjEtMTAtMTUgMDc6MTE6MTYuMTkyCishTUVTU0FHRSBCdWlsdGluIExGUyBzdXBwb3J0IG5vdCBwcmVzZW50L2RldGVjdGVkCishU1RBQ0sgMAoramF2YS5sYW5nLkNsYXNzTm90Rm91bmRFeGNlcHRpb246IG9yZy5lY2xpcHNlLmpnaXQubGZzLkJ1aWx0aW5MRlMgY2Fubm90IGJlIGZvdW5kIGJ5IG9yZy5lY2xpcHNlLmVnaXQuY29yZV81LjAuMC4yMDE4MDYxMzE1NTAtcgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo1MDgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUwKE5hdGl2ZSBNZXRob2QpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUoQ2xhc3MuamF2YToyNjQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5yZWdpc3RlckJ1aWx0aW5MRlMoQWN0aXZhdG9yLmphdmE6Mjc5KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MjEyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLnNvdXJjZXMuU2luZ2xlU291cmNlUGFja2FnZS5sb2FkQ2xhc3MoU2luZ2xlU291cmNlUGFja2FnZS5qYXZhOjM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3IkUmVwb3NpdG9yeUNoYW5nZVNjYW5uZXIuPGluaXQ+KEFjdGl2YXRvci5qYXZhOjkyMSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zZXR1cFJlcG9DaGFuZ2VTY2FubmVyKEFjdGl2YXRvci5qYXZhOjEwMzQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLldvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5nZXRTb3VyY2VQcm92aWRlcnMoV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmphdmE6MTc0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLlNvdXJjZVByb3ZpZGVyU2VydmljZS5yZWFkUmVnaXN0cnkoU291cmNlUHJvdmlkZXJTZXJ2aWNlLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaCQzNC5ydW5XaXRoRXhjZXB0aW9uKFdvcmtiZW5jaC5qYXZhOjIzNzgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZyRTdGFydHVwUnVubmFibGUucnVuKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTozMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TeW5jaHJvbml6ZXIuc3luY0V4ZWMoU3luY2hyb25pemVyLmphdmE6MjMzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlVJU3luY2hyb25pemVyLnN5bmNFeGVjKFVJU3luY2hyb25pemVyLmphdmE6MTQ0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc3luY0V4ZWMoRGlzcGxheS5qYXZhOjQ1NjcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZy5ydW5XaXRob3V0RXhjZXB0aW9ucyhTdGFydHVwVGhyZWFkaW5nLmphdmE6OTUpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXRpYWxpemVEZWZhdWx0U2VydmljZXMoV29ya2JlbmNoLmphdmE6MjM3MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdChXb3JrYmVuY2guamF2YToxNjU0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5ydW5VSShXb3JrYmVuY2guamF2YToyODU5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkMyhXb3JrYmVuY2guamF2YTo2NTQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goV29ya2JlbmNoLmphdmE6NTk3KQorCWF0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUkuY3JlYXRlQW5kUnVuV29ya2JlbmNoKFBsYXRmb3JtVUkuamF2YToxNDgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERUFwcGxpY2F0aW9uLnN0YXJ0KElERUFwcGxpY2F0aW9uLmphdmE6MTUyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuYXBwLkVjbGlwc2VBcHBIYW5kbGUucnVuKEVjbGlwc2VBcHBIYW5kbGUuamF2YToxOTYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnJ1bkFwcGxpY2F0aW9uKEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEzNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIuc3RhcnQoRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjM4OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YToyNDMpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKE5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjYyKQorCWF0IHN1bi5yZWZsZWN0LkRlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKERlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuamF2YTo0MykKKwlhdCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuaW52b2tlKE1ldGhvZC5qYXZhOjQ5OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uaW52b2tlRnJhbWV3b3JrKE1haW4uamF2YTo2NTYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmJhc2ljUnVuKE1haW4uamF2YTo1OTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLnJ1bihNYWluLmphdmE6MTQ5OCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQudWkgMiAwIDIwMjEtMTAtMTUgMDc6MTI6MjcuNTIyCishTUVTU0FHRSBXYXJuaW5nOiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgSE9NRSBpcyBub3Qgc2V0LiBUaGUgZm9sbG93aW5nIGRpcmVjdG9yeSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIEdpdAordXNlciBnbG9iYWwgY29uZmlndXJhdGlvbiBhbmQgdG8gZGVmaW5lIHRoZSBkZWZhdWx0IGxvY2F0aW9uIHRvIHN0b3JlIHJlcG9zaXRvcmllczogJ0M6XFVzZXJzXEZyYW5jaycuIElmIHRoaXMgaXMKK25vdCBjb3JyZWN0IHBsZWFzZSBzZXQgdGhlIEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIHJlc3RhcnQgRWNsaXBzZS4gT3RoZXJ3aXNlIEdpdCBmb3IgV2luZG93cyBhbmQKK0VHaXQgbWlnaHQgYmVoYXZlIGRpZmZlcmVudGx5IHNpbmNlIHRoZXkgc2VlIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCitUaGlzIHdhcm5pbmcgY2FuIGJlIHN3aXRjaGVkIG9mZiBvbiB0aGUgVGVhbSA+IEdpdCA+IENvbmZpcm1hdGlvbnMgYW5kIFdhcm5pbmdzIHByZWZlcmVuY2UgcGFnZS4KKworIUVOVFJZIG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlIDIgMTcgMjAyMS0xMC0xNSAwNzoxMjo0MC4xNTcKKyFNRVNTQUdFIFNlcnZlciDigJhvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXLigJkgZmFpbGVkIHdpdGggZXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJC4gOyB2ZXJzaW9uOiAyLjAuNy52MjAxNzA5MDYtMTMyNworIVNUQUNLIDAKK2NvbS5nb29nbGUuZ3Nvbi5Kc29uU3ludGF4RXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMjQpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg4OCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODUzKQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4MDIpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLmpzb24uSnNvbi5kZXNlcmlhbGl6ZShKc29uLmphdmE6OTEpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuSU8ucmVmcmVzaENvbmZpZ3VyYXRpb24oSU8uamF2YTo2NikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5TZXJ2ZXJDb25uZWN0aW9uLnN0YXJ0VXAoU2VydmVyQ29ubmVjdGlvbi5qYXZhOjEyNCkKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RJZGxlU2VydmljZSREZWxlZ2F0ZVNlcnZpY2UkMS5ydW4oQWJzdHJhY3RJZGxlU2VydmljZS5qYXZhOjYyKQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5DYWxsYWJsZXMkNC5ydW4oQ2FsbGFibGVzLmphdmE6MTIyKQorCWF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uc3RyZWFtLkpzb25SZWFkZXIuYmVnaW5PYmplY3QoSnNvblJlYWRlci5qYXZhOjM4NSkKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjEzKQorCS4uLiA5IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpIDQgMCAyMDIxLTEwLTE1IDA3OjEyOjQ5LjU0OQorIU1FU1NBR0UgUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKyFTVEFDSyAwCitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRLbm93blJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NDgwKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyJEFydGlmYWN0LmdldEtub3duUmVwb3NpdG9yaWVzKENhY2hpbmdSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjYyMykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5jb3JlLlAyVXRpbC5nZXRLbm93blJlcG9zaXRvcmllcyhQMlV0aWwuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5wMi5pbXBsLlAyVGFza0ltcGwuaXNOZWVkZWQoUDJUYXNrSW1wbC5qYXZhOjcwMSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5pbnRlcm5hbC5jb3JlLlNldHVwVGFza1BlcmZvcm1lci5pbml0TmVlZGVkU2V0dXBUYXNrcyhTZXR1cFRhc2tQZXJmb3JtZXIuamF2YToyMjczKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4ucGVyZm9ybVN0YXJ0dXAoU2V0dXBVSVBsdWdpbi5qYXZhOjY3OSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLmFjY2VzcyQ1KFNldHVwVUlQbHVnaW4uamF2YTo0MTUpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbiQxJDEucnVuKFNldHVwVUlQbHVnaW4uamF2YToyNTIpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0xNSAwNzoyOToyNy4zNjYKKyFNRVNTQUdFIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorIVNUQUNLIDAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKQorCS4uLiA4IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwIDEgMCAyMDIxLTEwLTE1IDA3OjI5OjI3LjM2NgorIU1FU1NBR0Ugb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAgY291bGQgbm90IGJlIHJlc29sdmVkIGZyb20gdGhlIG1vZGVsIHJlcG9zaXRvcmllcy4gQXJlIHlvdSBvZmZsaW5lPworCishRU5UUlkgb3JnLmVjbGlwc2UudWkgNCAwIDIwMjEtMTAtMTUgMDk6MDU6MDcuOTU2CishTUVTU0FHRSBVbmhhbmRsZWQgZXZlbnQgbG9vcCBleGNlcHRpb24KKyFTVEFDSyAwCitvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uOiBHcmFwaGljIGlzIGRpc3Bvc2VkCisJYXQgb3JnLmVjbGlwc2Uuc3d0LlNXVC5lcnJvcihTV1QuamF2YTo0NTUyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5TV1QuZXJyb3IoU1dULmphdmE6NDQ2NykKKwlhdCBvcmcuZWNsaXBzZS5zd3QuU1dULmVycm9yKFNXVC5qYXZhOjQ0MzgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlLmdldEJvdW5kcyhJbWFnZS5qYXZhOjEyNjMpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DTGFiZWwuZ2V0VG90YWxTaXplKENMYWJlbC5qYXZhOjI2NikKKwlhdCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNMYWJlbC5vblBhaW50KENMYWJlbC5qYXZhOjQyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNMYWJlbC5sYW1iZGEkMChDTGFiZWwuamF2YToxMTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHlwZWRMaXN0ZW5lci5oYW5kbGVFdmVudChUeXBlZExpc3RlbmVyLmphdmE6MjMxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50VGFibGUuc2VuZEV2ZW50KEV2ZW50VGFibGUuamF2YTo4NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnNlbmRFdmVudChEaXNwbGF5LmphdmE6NDExOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDc2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA2MSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUuV01fUEFJTlQoQ29tcG9zaXRlLmphdmE6MTU2MSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLndpbmRvd1Byb2MoQ29udHJvbC5qYXZhOjQ4MjIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ2FudmFzLndpbmRvd1Byb2MoQ2FudmFzLmphdmE6MzQ1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkud2luZG93UHJvYyhEaXNwbGF5LmphdmE6NDc2NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuVnRibENhbGwoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwub2xlLndpbjMyLklPbGVJblBsYWNlT2JqZWN0LkluUGxhY2VEZWFjdGl2YXRlKElPbGVJblBsYWNlT2JqZWN0LmphdmE6MjEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0Lm9sZS53aW4zMi5PbGVDbGllbnRTaXRlLmRlYWN0aXZhdGVJblBsYWNlQ2xpZW50KE9sZUNsaWVudFNpdGUuamF2YTo2MDkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0Lm9sZS53aW4zMi5PbGVDbGllbnRTaXRlLm9uRGlzcG9zZShPbGVDbGllbnRTaXRlLmphdmE6OTU5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5vbGUud2luMzIuT2xlQ2xpZW50U2l0ZS5hY2Nlc3MkMShPbGVDbGllbnRTaXRlLmphdmE6OTQ2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5vbGUud2luMzIuT2xlQ2xpZW50U2l0ZSQxLmhhbmRsZUV2ZW50KE9sZUNsaWVudFNpdGUuamF2YToxMjgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnRUYWJsZS5zZW5kRXZlbnQoRXZlbnRUYWJsZS5qYXZhOjg2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc2VuZEV2ZW50KERpc3BsYXkuamF2YTo0MTE4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA1MikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNzYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDU3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgwOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5DYW52YXMucmVsZWFzZUNoaWxkcmVuKENhbnZhcy5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EZWNvcmF0aW9ucy5yZWxlYXNlQ2hpbGRyZW4oRGVjb3JhdGlvbnMuamF2YTo3MjgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGwucmVsZWFzZUNoaWxkcmVuKFNoZWxsLmphdmE6MTM0MCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LmRpc3Bvc2UoV2lkZ2V0LmphdmE6NDI2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLmRpc3Bvc2UoRGVjb3JhdGlvbnMuamF2YTo0MDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGwuZGlzcG9zZShTaGVsbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkFic3RyYWN0SW5mb3JtYXRpb25Db250cm9sLmRpc3Bvc2UoQWJzdHJhY3RJbmZvcm1hdGlvbkNvbnRyb2wuamF2YTo1MjEpCisJYXQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5BYnN0cmFjdEluZm9ybWF0aW9uQ29udHJvbE1hbmFnZXIuZGlzcG9zZUluZm9ybWF0aW9uQ29udHJvbChBYnN0cmFjdEluZm9ybWF0aW9uQ29udHJvbE1hbmFnZXIuamF2YToxMzE5KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQWJzdHJhY3RJbmZvcm1hdGlvbkNvbnRyb2xNYW5hZ2VyLmRpc3Bvc2UoQWJzdHJhY3RJbmZvcm1hdGlvbkNvbnRyb2xNYW5hZ2VyLmphdmE6MTMzNCkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkFic3RyYWN0SG92ZXJJbmZvcm1hdGlvbkNvbnRyb2xNYW5hZ2VyLmRpc3Bvc2UoQWJzdHJhY3RIb3ZlckluZm9ybWF0aW9uQ29udHJvbE1hbmFnZXIuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5UZXh0Vmlld2VySG92ZXJNYW5hZ2VyLmRpc3Bvc2UoVGV4dFZpZXdlckhvdmVyTWFuYWdlci5qYXZhOjM3OCkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlRleHRWaWV3ZXIuaGFuZGxlRGlzcG9zZShUZXh0Vmlld2VyLmphdmE6MTg3NCkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5Tb3VyY2VWaWV3ZXIuaGFuZGxlRGlzcG9zZShTb3VyY2VWaWV3ZXIuamF2YTo3ODgpCisJYXQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UucHJvamVjdGlvbi5Qcm9qZWN0aW9uVmlld2VyLmhhbmRsZURpc3Bvc2UoUHJvamVjdGlvblZpZXdlci5qYXZhOjEyOTYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLmphdmFlZGl0b3IuSmF2YVNvdXJjZVZpZXdlci5oYW5kbGVEaXNwb3NlKEphdmFTb3VyY2VWaWV3ZXIuamF2YTo1MDkpCisJYXQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5UZXh0Vmlld2VyJDIud2lkZ2V0RGlzcG9zZWQoVGV4dFZpZXdlci5qYXZhOjE3MzEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHlwZWRMaXN0ZW5lci5oYW5kbGVFdmVudChUeXBlZExpc3RlbmVyLmphdmE6MTI0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50VGFibGUuc2VuZEV2ZW50KEV2ZW50VGFibGUuamF2YTo4NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnNlbmRFdmVudChEaXNwbGF5LmphdmE6NDExOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDc2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA2MSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQubm90aWZ5TGlzdGVuZXJzKFdpZGdldC5qYXZhOjc3NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLlN0eWxlZFRleHQuaGFuZGxlRGlzcG9zZShTdHlsZWRUZXh0LmphdmE6NTkxOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLlN0eWxlZFRleHQubGFtYmRhJDEoU3R5bGVkVGV4dC5qYXZhOjU3MzkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnRUYWJsZS5zZW5kRXZlbnQoRXZlbnRUYWJsZS5qYXZhOjg2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc2VuZEV2ZW50KERpc3BsYXkuamF2YTo0MTE4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA1MikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNzYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDU3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgwOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5DYW52YXMucmVsZWFzZUNoaWxkcmVuKENhbnZhcy5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LmRpc3Bvc2UoV2lkZ2V0LmphdmE6NDI2KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5yZW5kZXJlcnMuc3d0LlNXVFBhcnRSZW5kZXJlci5kaXNwb3NlV2lkZ2V0KFNXVFBhcnRSZW5kZXJlci5qYXZhOjE3MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC5Db250cmlidXRlZFBhcnRSZW5kZXJlci5kaXNwb3NlV2lkZ2V0KENvbnRyaWJ1dGVkUGFydFJlbmRlcmVyLmphdmE6MjcwKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5NTUpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjkxMCkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTE3KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5yZW5kZXJlcnMuc3d0LkVsZW1lbnRSZWZlcmVuY2VSZW5kZXJlci5kaXNwb3NlV2lkZ2V0KEVsZW1lbnRSZWZlcmVuY2VSZW5kZXJlci5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTU1KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5MTcpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjkxMCkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTE3KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5MTcpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjkxNykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTE3KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5MTcpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93LmhhcmRDbG9zZShXb3JrYmVuY2hXaW5kb3cuamF2YToxOTk0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdy5idXN5Q2xvc2UoV29ya2JlbmNoV2luZG93LmphdmE6MTYxMCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3cuYWNjZXNzJDE4KFdvcmtiZW5jaFdpbmRvdy5qYXZhOjE1NTIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93JDExLnJ1bihXb3JrYmVuY2hXaW5kb3cuamF2YToxNjM4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQnVzeUluZGljYXRvci5zaG93V2hpbGUoQnVzeUluZGljYXRvci5qYXZhOjcxKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdy5jbG9zZShXb3JrYmVuY2hXaW5kb3cuamF2YToxNjM1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaCQxMC5ydW4oV29ya2JlbmNoLmphdmE6MTE2NSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5idXN5Q2xvc2UoV29ya2JlbmNoLmphdmE6MTE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDQoV29ya2JlbmNoLmphdmE6MTQzMCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkJ1c3lJbmRpY2F0b3Iuc2hvd1doaWxlKEJ1c3lJbmRpY2F0b3IuamF2YTo3MSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY2xvc2UoV29ya2JlbmNoLmphdmE6MTQzMCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY2xvc2UoV29ya2JlbmNoLmphdmE6MTQwMykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3cuYnVzeUNsb3NlKFdvcmtiZW5jaFdpbmRvdy5qYXZhOjE2MDYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93LmFjY2VzcyQxOChXb3JrYmVuY2hXaW5kb3cuamF2YToxNTUyKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdyQxMS5ydW4oV29ya2JlbmNoV2luZG93LmphdmE6MTYzOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkJ1c3lJbmRpY2F0b3Iuc2hvd1doaWxlKEJ1c3lJbmRpY2F0b3IuamF2YTo3MSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3cuY2xvc2UoV29ya2JlbmNoV2luZG93LmphdmE6MTYzNSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3cuY2xvc2UoV29ya2JlbmNoV2luZG93LmphdmE6MTY0OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3ckNi5jbG9zZShXb3JrYmVuY2hXaW5kb3cuamF2YTo1MzEpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuV0JXUmVuZGVyZXIubGFtYmRhJDQoV0JXUmVuZGVyZXIuamF2YTo2MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TaGVsbExpc3RlbmVyJDIuc2hlbGxDbG9zZWQoU2hlbGxMaXN0ZW5lci5qYXZhOjk5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlR5cGVkTGlzdGVuZXIuaGFuZGxlRXZlbnQoVHlwZWRMaXN0ZW5lci5qYXZhOjk5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50VGFibGUuc2VuZEV2ZW50KEV2ZW50VGFibGUuamF2YTo4NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnNlbmRFdmVudChEaXNwbGF5LmphdmE6NDExOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDc2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA2MSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EZWNvcmF0aW9ucy5jbG9zZVdpZGdldChEZWNvcmF0aW9ucy5qYXZhOjI4MSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EZWNvcmF0aW9ucy5XTV9DTE9TRShEZWNvcmF0aW9ucy5qYXZhOjE1NzEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC53aW5kb3dQcm9jKENvbnRyb2wuamF2YTo0NzY3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhcy53aW5kb3dQcm9jKENhbnZhcy5qYXZhOjM0NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EZWNvcmF0aW9ucy53aW5kb3dQcm9jKERlY29yYXRpb25zLmphdmE6MTQ5OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC53aW5kb3dQcm9jKFNoZWxsLmphdmE6MjE1OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LndpbmRvd1Byb2MoRGlzcGxheS5qYXZhOjQ3NTcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLkRlZldpbmRvd1Byb2NXKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLkRlZldpbmRvd1Byb2MoT1MuamF2YToyMjk4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLmNhbGxXaW5kb3dQcm9jKFNoZWxsLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wud2luZG93UHJvYyhDb250cm9sLmphdmE6NDg2MykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5DYW52YXMud2luZG93UHJvYyhDYW52YXMuamF2YTozNDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGVjb3JhdGlvbnMud2luZG93UHJvYyhEZWNvcmF0aW9ucy5qYXZhOjE0OTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGwud2luZG93UHJvYyhTaGVsbC5qYXZhOjIxNTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS53aW5kb3dQcm9jKERpc3BsYXkuamF2YTo0NzU3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EZWZXaW5kb3dQcm9jVyhOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EZWZXaW5kb3dQcm9jKE9TLmphdmE6MjI5OCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC5jYWxsV2luZG93UHJvYyhTaGVsbC5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLndpbmRvd1Byb2MoQ29udHJvbC5qYXZhOjQ4NjMpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ2FudmFzLndpbmRvd1Byb2MoQ2FudmFzLmphdmE6MzQ1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLndpbmRvd1Byb2MoRGVjb3JhdGlvbnMuamF2YToxNDk5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLndpbmRvd1Byb2MoU2hlbGwuamF2YToyMTU5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkud2luZG93UHJvYyhEaXNwbGF5LmphdmE6NDc1NykKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuRGlzcGF0Y2hNZXNzYWdlVyhOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EaXNwYXRjaE1lc3NhZ2UoT1MuamF2YToyMzAzKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkucmVhZEFuZERpc3BhdGNoKERpc3BsYXkuamF2YTozNTMyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ1LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6MTE3MCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6MTA1OSkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guRTRXb3JrYmVuY2guY3JlYXRlQW5kUnVuVUkoRTRXb3JrYmVuY2guamF2YToxNTMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQzKFdvcmtiZW5jaC5qYXZhOjY2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChXb3JrYmVuY2guamF2YTo1OTcpCisJYXQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSS5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goUGxhdGZvcm1VSS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFQXBwbGljYXRpb24uc3RhcnQoSURFQXBwbGljYXRpb24uamF2YToxNTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5hcHAuRWNsaXBzZUFwcEhhbmRsZS5ydW4oRWNsaXBzZUFwcEhhbmRsZS5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIucnVuQXBwbGljYXRpb24oRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5zdGFydChFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6Mzg4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjI0MykKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NjIpCisJYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjQzKQorCWF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6NDk4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5pbnZva2VGcmFtZXdvcmsoTWFpbi5qYXZhOjY1NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uYmFzaWNSdW4oTWFpbi5qYXZhOjU5MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4ucnVuKE1haW4uamF2YToxNDk4KQorIVNFU1NJT04gMjAyMS0xMC0xNSAwOTowNjoyMC4zNTAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VjbGlwc2UuYnVpbGRJZD00LjguMC5JMjAxODA2MTEtMDUwMAoramF2YS52ZXJzaW9uPTEuOC4wXzIzMQoramF2YS52ZW5kb3I9T3JhY2xlIENvcnBvcmF0aW9uCitCb290TG9hZGVyIGNvbnN0YW50czogT1M9d2luMzIsIEFSQ0g9eDg2XzY0LCBXUz13aW4zMiwgTkw9ZGVfREUKK0ZyYW1ld29yayBhcmd1bWVudHM6ICAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKK0NvbW1hbmQtbGluZSBhcmd1bWVudHM6ICAtb3Mgd2luMzIgLXdzIHdpbjMyIC1hcmNoIHg4Nl82NCAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zIDQgMCAyMDIxLTEwLTE1IDA5OjA2OjI0LjY5NQorIU1FU1NBR0UgRnJhbWV3b3JrRXZlbnQgRVJST1IKKyFTVEFDSyAwCitvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOiBFeGNlcHRpb24gaW4gb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KCkgb2YgYnVuZGxlIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zLgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6ODAwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCS4uLiAxMiBtb3JlCitSb290IGV4Y2VwdGlvbjoKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUgMiAwIDIwMjEtMTAtMTUgMDk6MDY6MzIuODI3CishTUVTU0FHRSBCdWlsdGluIExGUyBzdXBwb3J0IG5vdCBwcmVzZW50L2RldGVjdGVkCishU1RBQ0sgMAoramF2YS5sYW5nLkNsYXNzTm90Rm91bmRFeGNlcHRpb246IG9yZy5lY2xpcHNlLmpnaXQubGZzLkJ1aWx0aW5MRlMgY2Fubm90IGJlIGZvdW5kIGJ5IG9yZy5lY2xpcHNlLmVnaXQuY29yZV81LjAuMC4yMDE4MDYxMzE1NTAtcgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo1MDgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUwKE5hdGl2ZSBNZXRob2QpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUoQ2xhc3MuamF2YToyNjQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5yZWdpc3RlckJ1aWx0aW5MRlMoQWN0aXZhdG9yLmphdmE6Mjc5KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MjEyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLnNvdXJjZXMuU2luZ2xlU291cmNlUGFja2FnZS5sb2FkQ2xhc3MoU2luZ2xlU291cmNlUGFja2FnZS5qYXZhOjM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3IkUmVwb3NpdG9yeUNoYW5nZVNjYW5uZXIuPGluaXQ+KEFjdGl2YXRvci5qYXZhOjkyMSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zZXR1cFJlcG9DaGFuZ2VTY2FubmVyKEFjdGl2YXRvci5qYXZhOjEwMzQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLldvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5nZXRTb3VyY2VQcm92aWRlcnMoV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmphdmE6MTc0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLlNvdXJjZVByb3ZpZGVyU2VydmljZS5yZWFkUmVnaXN0cnkoU291cmNlUHJvdmlkZXJTZXJ2aWNlLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaCQzNC5ydW5XaXRoRXhjZXB0aW9uKFdvcmtiZW5jaC5qYXZhOjIzNzgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZyRTdGFydHVwUnVubmFibGUucnVuKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTozMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TeW5jaHJvbml6ZXIuc3luY0V4ZWMoU3luY2hyb25pemVyLmphdmE6MjMzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlVJU3luY2hyb25pemVyLnN5bmNFeGVjKFVJU3luY2hyb25pemVyLmphdmE6MTQ0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc3luY0V4ZWMoRGlzcGxheS5qYXZhOjQ1NjcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZy5ydW5XaXRob3V0RXhjZXB0aW9ucyhTdGFydHVwVGhyZWFkaW5nLmphdmE6OTUpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXRpYWxpemVEZWZhdWx0U2VydmljZXMoV29ya2JlbmNoLmphdmE6MjM3MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdChXb3JrYmVuY2guamF2YToxNjU0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5ydW5VSShXb3JrYmVuY2guamF2YToyODU5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkMyhXb3JrYmVuY2guamF2YTo2NTQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goV29ya2JlbmNoLmphdmE6NTk3KQorCWF0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUkuY3JlYXRlQW5kUnVuV29ya2JlbmNoKFBsYXRmb3JtVUkuamF2YToxNDgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERUFwcGxpY2F0aW9uLnN0YXJ0KElERUFwcGxpY2F0aW9uLmphdmE6MTUyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuYXBwLkVjbGlwc2VBcHBIYW5kbGUucnVuKEVjbGlwc2VBcHBIYW5kbGUuamF2YToxOTYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnJ1bkFwcGxpY2F0aW9uKEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEzNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIuc3RhcnQoRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjM4OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YToyNDMpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKE5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjYyKQorCWF0IHN1bi5yZWZsZWN0LkRlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKERlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuamF2YTo0MykKKwlhdCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuaW52b2tlKE1ldGhvZC5qYXZhOjQ5OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uaW52b2tlRnJhbWV3b3JrKE1haW4uamF2YTo2NTYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmJhc2ljUnVuKE1haW4uamF2YTo1OTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLnJ1bihNYWluLmphdmE6MTQ5OCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQudWkgMiAwIDIwMjEtMTAtMTUgMDk6MDc6MDQuODY5CishTUVTU0FHRSBXYXJuaW5nOiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgSE9NRSBpcyBub3Qgc2V0LiBUaGUgZm9sbG93aW5nIGRpcmVjdG9yeSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIEdpdAordXNlciBnbG9iYWwgY29uZmlndXJhdGlvbiBhbmQgdG8gZGVmaW5lIHRoZSBkZWZhdWx0IGxvY2F0aW9uIHRvIHN0b3JlIHJlcG9zaXRvcmllczogJ0M6XFVzZXJzXEZyYW5jaycuIElmIHRoaXMgaXMKK25vdCBjb3JyZWN0IHBsZWFzZSBzZXQgdGhlIEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIHJlc3RhcnQgRWNsaXBzZS4gT3RoZXJ3aXNlIEdpdCBmb3IgV2luZG93cyBhbmQKK0VHaXQgbWlnaHQgYmVoYXZlIGRpZmZlcmVudGx5IHNpbmNlIHRoZXkgc2VlIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCitUaGlzIHdhcm5pbmcgY2FuIGJlIHN3aXRjaGVkIG9mZiBvbiB0aGUgVGVhbSA+IEdpdCA+IENvbmZpcm1hdGlvbnMgYW5kIFdhcm5pbmdzIHByZWZlcmVuY2UgcGFnZS4KKworIUVOVFJZIG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlIDIgMTcgMjAyMS0xMC0xNSAwOTowNzowNi4zMDEKKyFNRVNTQUdFIFNlcnZlciDigJhvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXLigJkgZmFpbGVkIHdpdGggZXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJC4gOyB2ZXJzaW9uOiAyLjAuNy52MjAxNzA5MDYtMTMyNworIVNUQUNLIDAKK2NvbS5nb29nbGUuZ3Nvbi5Kc29uU3ludGF4RXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMjQpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg4OCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODUzKQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4MDIpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLmpzb24uSnNvbi5kZXNlcmlhbGl6ZShKc29uLmphdmE6OTEpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuSU8ucmVmcmVzaENvbmZpZ3VyYXRpb24oSU8uamF2YTo2NikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5TZXJ2ZXJDb25uZWN0aW9uLnN0YXJ0VXAoU2VydmVyQ29ubmVjdGlvbi5qYXZhOjEyNCkKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RJZGxlU2VydmljZSREZWxlZ2F0ZVNlcnZpY2UkMS5ydW4oQWJzdHJhY3RJZGxlU2VydmljZS5qYXZhOjYyKQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5DYWxsYWJsZXMkNC5ydW4oQ2FsbGFibGVzLmphdmE6MTIyKQorCWF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uc3RyZWFtLkpzb25SZWFkZXIuYmVnaW5PYmplY3QoSnNvblJlYWRlci5qYXZhOjM4NSkKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjEzKQorCS4uLiA5IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpIDQgMCAyMDIxLTEwLTE1IDA5OjA3OjI0LjIyMworIU1FU1NBR0UgUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKyFTVEFDSyAwCitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRLbm93blJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NDgwKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyJEFydGlmYWN0LmdldEtub3duUmVwb3NpdG9yaWVzKENhY2hpbmdSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjYyMykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5jb3JlLlAyVXRpbC5nZXRLbm93blJlcG9zaXRvcmllcyhQMlV0aWwuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5wMi5pbXBsLlAyVGFza0ltcGwuaXNOZWVkZWQoUDJUYXNrSW1wbC5qYXZhOjcwMSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5pbnRlcm5hbC5jb3JlLlNldHVwVGFza1BlcmZvcm1lci5pbml0TmVlZGVkU2V0dXBUYXNrcyhTZXR1cFRhc2tQZXJmb3JtZXIuamF2YToyMjczKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4ucGVyZm9ybVN0YXJ0dXAoU2V0dXBVSVBsdWdpbi5qYXZhOjY3OSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLmFjY2VzcyQ1KFNldHVwVUlQbHVnaW4uamF2YTo0MTUpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbiQxJDEucnVuKFNldHVwVUlQbHVnaW4uamF2YToyNTIpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0xNSAxMTozNjowMy42ODcKKyFNRVNTQUdFIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorIVNUQUNLIDAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKQorCS4uLiA4IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwIDEgMCAyMDIxLTEwLTE1IDExOjM2OjAzLjY5MQorIU1FU1NBR0Ugb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAgY291bGQgbm90IGJlIHJlc29sdmVkIGZyb20gdGhlIG1vZGVsIHJlcG9zaXRvcmllcy4gQXJlIHlvdSBvZmZsaW5lPworIVNFU1NJT04gMjAyMS0xMC0xOCAxMzowODo0Ni4yMzEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VjbGlwc2UuYnVpbGRJZD00LjguMC5JMjAxODA2MTEtMDUwMAoramF2YS52ZXJzaW9uPTEuOC4wXzIzMQoramF2YS52ZW5kb3I9T3JhY2xlIENvcnBvcmF0aW9uCitCb290TG9hZGVyIGNvbnN0YW50czogT1M9d2luMzIsIEFSQ0g9eDg2XzY0LCBXUz13aW4zMiwgTkw9ZGVfREUKK0ZyYW1ld29yayBhcmd1bWVudHM6ICAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKK0NvbW1hbmQtbGluZSBhcmd1bWVudHM6ICAtb3Mgd2luMzIgLXdzIHdpbjMyIC1hcmNoIHg4Nl82NCAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zIDQgMCAyMDIxLTEwLTE4IDEzOjA4OjU4LjAxMQorIU1FU1NBR0UgRnJhbWV3b3JrRXZlbnQgRVJST1IKKyFTVEFDSyAwCitvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOiBFeGNlcHRpb24gaW4gb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KCkgb2YgYnVuZGxlIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zLgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6ODAwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCS4uLiAxMiBtb3JlCitSb290IGV4Y2VwdGlvbjoKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUgMiAwIDIwMjEtMTAtMTggMTM6MDk6MjAuMjgzCishTUVTU0FHRSBCdWlsdGluIExGUyBzdXBwb3J0IG5vdCBwcmVzZW50L2RldGVjdGVkCishU1RBQ0sgMAoramF2YS5sYW5nLkNsYXNzTm90Rm91bmRFeGNlcHRpb246IG9yZy5lY2xpcHNlLmpnaXQubGZzLkJ1aWx0aW5MRlMgY2Fubm90IGJlIGZvdW5kIGJ5IG9yZy5lY2xpcHNlLmVnaXQuY29yZV81LjAuMC4yMDE4MDYxMzE1NTAtcgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo1MDgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUwKE5hdGl2ZSBNZXRob2QpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUoQ2xhc3MuamF2YToyNjQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5yZWdpc3RlckJ1aWx0aW5MRlMoQWN0aXZhdG9yLmphdmE6Mjc5KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MjEyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLnNvdXJjZXMuU2luZ2xlU291cmNlUGFja2FnZS5sb2FkQ2xhc3MoU2luZ2xlU291cmNlUGFja2FnZS5qYXZhOjM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3IkUmVwb3NpdG9yeUNoYW5nZVNjYW5uZXIuPGluaXQ+KEFjdGl2YXRvci5qYXZhOjkyMSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zZXR1cFJlcG9DaGFuZ2VTY2FubmVyKEFjdGl2YXRvci5qYXZhOjEwMzQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLldvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5nZXRTb3VyY2VQcm92aWRlcnMoV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmphdmE6MTc0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLlNvdXJjZVByb3ZpZGVyU2VydmljZS5yZWFkUmVnaXN0cnkoU291cmNlUHJvdmlkZXJTZXJ2aWNlLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaCQzNC5ydW5XaXRoRXhjZXB0aW9uKFdvcmtiZW5jaC5qYXZhOjIzNzgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZyRTdGFydHVwUnVubmFibGUucnVuKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTozMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TeW5jaHJvbml6ZXIuc3luY0V4ZWMoU3luY2hyb25pemVyLmphdmE6MjMzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlVJU3luY2hyb25pemVyLnN5bmNFeGVjKFVJU3luY2hyb25pemVyLmphdmE6MTQ0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc3luY0V4ZWMoRGlzcGxheS5qYXZhOjQ1NjcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZy5ydW5XaXRob3V0RXhjZXB0aW9ucyhTdGFydHVwVGhyZWFkaW5nLmphdmE6OTUpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXRpYWxpemVEZWZhdWx0U2VydmljZXMoV29ya2JlbmNoLmphdmE6MjM3MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdChXb3JrYmVuY2guamF2YToxNjU0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5ydW5VSShXb3JrYmVuY2guamF2YToyODU5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkMyhXb3JrYmVuY2guamF2YTo2NTQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goV29ya2JlbmNoLmphdmE6NTk3KQorCWF0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUkuY3JlYXRlQW5kUnVuV29ya2JlbmNoKFBsYXRmb3JtVUkuamF2YToxNDgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERUFwcGxpY2F0aW9uLnN0YXJ0KElERUFwcGxpY2F0aW9uLmphdmE6MTUyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuYXBwLkVjbGlwc2VBcHBIYW5kbGUucnVuKEVjbGlwc2VBcHBIYW5kbGUuamF2YToxOTYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnJ1bkFwcGxpY2F0aW9uKEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEzNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIuc3RhcnQoRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjM4OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YToyNDMpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKE5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjYyKQorCWF0IHN1bi5yZWZsZWN0LkRlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKERlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuamF2YTo0MykKKwlhdCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuaW52b2tlKE1ldGhvZC5qYXZhOjQ5OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uaW52b2tlRnJhbWV3b3JrKE1haW4uamF2YTo2NTYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmJhc2ljUnVuKE1haW4uamF2YTo1OTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLnJ1bihNYWluLmphdmE6MTQ5OCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQudWkgMiAwIDIwMjEtMTAtMTggMTM6MTA6MjIuNTg5CishTUVTU0FHRSBXYXJuaW5nOiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgSE9NRSBpcyBub3Qgc2V0LiBUaGUgZm9sbG93aW5nIGRpcmVjdG9yeSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIEdpdAordXNlciBnbG9iYWwgY29uZmlndXJhdGlvbiBhbmQgdG8gZGVmaW5lIHRoZSBkZWZhdWx0IGxvY2F0aW9uIHRvIHN0b3JlIHJlcG9zaXRvcmllczogJ0M6XFVzZXJzXEZyYW5jaycuIElmIHRoaXMgaXMKK25vdCBjb3JyZWN0IHBsZWFzZSBzZXQgdGhlIEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIHJlc3RhcnQgRWNsaXBzZS4gT3RoZXJ3aXNlIEdpdCBmb3IgV2luZG93cyBhbmQKK0VHaXQgbWlnaHQgYmVoYXZlIGRpZmZlcmVudGx5IHNpbmNlIHRoZXkgc2VlIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCitUaGlzIHdhcm5pbmcgY2FuIGJlIHN3aXRjaGVkIG9mZiBvbiB0aGUgVGVhbSA+IEdpdCA+IENvbmZpcm1hdGlvbnMgYW5kIFdhcm5pbmdzIHByZWZlcmVuY2UgcGFnZS4KKworIUVOVFJZIG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlIDIgMTcgMjAyMS0xMC0xOCAxMzoxMDoyNy41MjAKKyFNRVNTQUdFIFNlcnZlciDigJhvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXLigJkgZmFpbGVkIHdpdGggZXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJC4gOyB2ZXJzaW9uOiAyLjAuNy52MjAxNzA5MDYtMTMyNworIVNUQUNLIDAKK2NvbS5nb29nbGUuZ3Nvbi5Kc29uU3ludGF4RXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMjQpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg4OCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODUzKQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4MDIpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLmpzb24uSnNvbi5kZXNlcmlhbGl6ZShKc29uLmphdmE6OTEpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuSU8ucmVmcmVzaENvbmZpZ3VyYXRpb24oSU8uamF2YTo2NikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5TZXJ2ZXJDb25uZWN0aW9uLnN0YXJ0VXAoU2VydmVyQ29ubmVjdGlvbi5qYXZhOjEyNCkKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RJZGxlU2VydmljZSREZWxlZ2F0ZVNlcnZpY2UkMS5ydW4oQWJzdHJhY3RJZGxlU2VydmljZS5qYXZhOjYyKQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5DYWxsYWJsZXMkNC5ydW4oQ2FsbGFibGVzLmphdmE6MTIyKQorCWF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uc3RyZWFtLkpzb25SZWFkZXIuYmVnaW5PYmplY3QoSnNvblJlYWRlci5qYXZhOjM4NSkKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjEzKQorCS4uLiA5IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpIDQgMCAyMDIxLTEwLTE4IDEzOjEwOjQ0Ljg5MworIU1FU1NBR0UgUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKyFTVEFDSyAwCitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRLbm93blJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NDgwKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyJEFydGlmYWN0LmdldEtub3duUmVwb3NpdG9yaWVzKENhY2hpbmdSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjYyMykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5jb3JlLlAyVXRpbC5nZXRLbm93blJlcG9zaXRvcmllcyhQMlV0aWwuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5wMi5pbXBsLlAyVGFza0ltcGwuaXNOZWVkZWQoUDJUYXNrSW1wbC5qYXZhOjcwMSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5pbnRlcm5hbC5jb3JlLlNldHVwVGFza1BlcmZvcm1lci5pbml0TmVlZGVkU2V0dXBUYXNrcyhTZXR1cFRhc2tQZXJmb3JtZXIuamF2YToyMjczKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4ucGVyZm9ybVN0YXJ0dXAoU2V0dXBVSVBsdWdpbi5qYXZhOjY3OSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLmFjY2VzcyQ1KFNldHVwVUlQbHVnaW4uamF2YTo0MTUpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbiQxJDEucnVuKFNldHVwVUlQbHVnaW4uamF2YToyNTIpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0xOCAxMzoyODo0MC41MjMKKyFNRVNTQUdFIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorIVNUQUNLIDAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKQorCS4uLiA4IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwIDEgMCAyMDIxLTEwLTE4IDEzOjI4OjQwLjUyNworIU1FU1NBR0Ugb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAgY291bGQgbm90IGJlIHJlc29sdmVkIGZyb20gdGhlIG1vZGVsIHJlcG9zaXRvcmllcy4gQXJlIHlvdSBvZmZsaW5lPworCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMTggMTU6MzU6MzYuMjI5CishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0xOCAxNTozNTozNi4yMzYKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTE4IDE1OjM1OjM3Ljg0MworIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMTggMTU6MzU6MzcuODUwCishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0xOCAxNTozNTo0NC41OTEKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTE4IDE1OjM1OjQ0LjU5NgorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMTggMTU6MzU6NDQuNjU5CishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCishU0VTU0lPTiAyMDIxLTEwLTE4IDE2OjUxOjQzLjA5NCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNsaXBzZS5idWlsZElkPTQuOC4wLkkyMDE4MDYxMS0wNTAwCitqYXZhLnZlcnNpb249MS44LjBfMjMxCitqYXZhLnZlbmRvcj1PcmFjbGUgQ29ycG9yYXRpb24KK0Jvb3RMb2FkZXIgY29uc3RhbnRzOiBPUz13aW4zMiwgQVJDSD14ODZfNjQsIFdTPXdpbjMyLCBOTD1kZV9ERQorRnJhbWV3b3JrIGFyZ3VtZW50czogIC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorQ29tbWFuZC1saW5lIGFyZ3VtZW50czogIC1vcyB3aW4zMiAtd3Mgd2luMzIgLWFyY2ggeDg2XzY0IC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorCishRU5UUlkgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMgNCAwIDIwMjEtMTAtMTggMTY6NTE6NDcuNDQ2CishTUVTU0FHRSBGcmFtZXdvcmtFdmVudCBFUlJPUgorIVNUQUNLIDAKK29yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb246IEV4Y2VwdGlvbiBpbiBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoKSBvZiBidW5kbGUgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo4MDApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJLi4uIDEyIG1vcmUKK1Jvb3QgZXhjZXB0aW9uOgoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQuY29yZSAyIDAgMjAyMS0xMC0xOCAxNjo1MjowNi4yMjkKKyFNRVNTQUdFIEJ1aWx0aW4gTEZTIHN1cHBvcnQgbm90IHByZXNlbnQvZGV0ZWN0ZWQKKyFTVEFDSyAwCitqYXZhLmxhbmcuQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbjogb3JnLmVjbGlwc2UuamdpdC5sZnMuQnVpbHRpbkxGUyBjYW5ub3QgYmUgZm91bmQgYnkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlXzUuMC4wLjIwMTgwNjEzMTU1MC1yCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjUwOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZShDbGFzcy5qYXZhOjI2NCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnJlZ2lzdGVyQnVpbHRpbkxGUyhBY3RpdmF0b3IuamF2YToyNzkpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToyMTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuc291cmNlcy5TaW5nbGVTb3VyY2VQYWNrYWdlLmxvYWRDbGFzcyhTaW5nbGVTb3VyY2VQYWNrYWdlLmphdmE6MzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvciRSZXBvc2l0b3J5Q2hhbmdlU2Nhbm5lci48aW5pdD4oQWN0aXZhdG9yLmphdmE6OTIxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnNldHVwUmVwb0NoYW5nZVNjYW5uZXIoQWN0aXZhdG9yLmphdmE6MTAzNCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmdldFNvdXJjZVByb3ZpZGVycyhXb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuamF2YToxNzQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuU291cmNlUHJvdmlkZXJTZXJ2aWNlLnJlYWRSZWdpc3RyeShTb3VyY2VQcm92aWRlclNlcnZpY2UuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoJDM0LnJ1bldpdGhFeGNlcHRpb24oV29ya2JlbmNoLmphdmE6MjM3OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nJFN0YXJ0dXBSdW5uYWJsZS5ydW4oU3RhcnR1cFRocmVhZGluZy5qYXZhOjMyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlN5bmNocm9uaXplci5zeW5jRXhlYyhTeW5jaHJvbml6ZXIuamF2YToyMzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuVUlTeW5jaHJvbml6ZXIuc3luY0V4ZWMoVUlTeW5jaHJvbml6ZXIuamF2YToxNDQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zeW5jRXhlYyhEaXNwbGF5LmphdmE6NDU2NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nLnJ1bldpdGhvdXRFeGNlcHRpb25zKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTo5NSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdGlhbGl6ZURlZmF1bHRTZXJ2aWNlcyhXb3JrYmVuY2guamF2YToyMzczKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0KFdvcmtiZW5jaC5qYXZhOjE2NTQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLnJ1blVJKFdvcmtiZW5jaC5qYXZhOjI4NTkpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQzKFdvcmtiZW5jaC5qYXZhOjY1NCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChXb3JrYmVuY2guamF2YTo1OTcpCisJYXQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSS5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goUGxhdGZvcm1VSS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFQXBwbGljYXRpb24uc3RhcnQoSURFQXBwbGljYXRpb24uamF2YToxNTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5hcHAuRWNsaXBzZUFwcEhhbmRsZS5ydW4oRWNsaXBzZUFwcEhhbmRsZS5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIucnVuQXBwbGljYXRpb24oRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5zdGFydChFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6Mzg4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjI0MykKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NjIpCisJYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjQzKQorCWF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6NDk4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5pbnZva2VGcmFtZXdvcmsoTWFpbi5qYXZhOjY1NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uYmFzaWNSdW4oTWFpbi5qYXZhOjU5MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4ucnVuKE1haW4uamF2YToxNDk4KQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC51aSAyIDAgMjAyMS0xMC0xOCAxNjo1MjozMC43NDMKKyFNRVNTQUdFIFdhcm5pbmc6IFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBIT01FIGlzIG5vdCBzZXQuIFRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5IHdpbGwgYmUgdXNlZCB0byBzdG9yZSB0aGUgR2l0Cit1c2VyIGdsb2JhbCBjb25maWd1cmF0aW9uIGFuZCB0byBkZWZpbmUgdGhlIGRlZmF1bHQgbG9jYXRpb24gdG8gc3RvcmUgcmVwb3NpdG9yaWVzOiAnQzpcVXNlcnNcRnJhbmNrJy4gSWYgdGhpcyBpcworbm90IGNvcnJlY3QgcGxlYXNlIHNldCB0aGUgSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgcmVzdGFydCBFY2xpcHNlLiBPdGhlcndpc2UgR2l0IGZvciBXaW5kb3dzIGFuZAorRUdpdCBtaWdodCBiZWhhdmUgZGlmZmVyZW50bHkgc2luY2UgdGhleSBzZWUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KK1RoaXMgd2FybmluZyBjYW4gYmUgc3dpdGNoZWQgb2ZmIG9uIHRoZSBUZWFtID4gR2l0ID4gQ29uZmlybWF0aW9ucyBhbmQgV2FybmluZ3MgcHJlZmVyZW5jZSBwYWdlLgorCishRU5UUlkgb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUgMiAxNyAyMDIxLTEwLTE4IDE2OjUyOjMzLjMwMworIU1FU1NBR0UgU2VydmVyIOKAmG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlcuKAmSBmYWlsZWQgd2l0aCBleGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkLiA7IHZlcnNpb246IDIuMC43LnYyMDE3MDkwNi0xMzI3CishU1RBQ0sgMAorY29tLmdvb2dsZS5nc29uLkpzb25TeW50YXhFeGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIyNCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODg4KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4NTMpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjgwMikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIuanNvbi5Kc29uLmRlc2VyaWFsaXplKEpzb24uamF2YTo5MSkKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5JTy5yZWZyZXNoQ29uZmlndXJhdGlvbihJTy5qYXZhOjY2KQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLlNlcnZlckNvbm5lY3Rpb24uc3RhcnRVcChTZXJ2ZXJDb25uZWN0aW9uLmphdmE6MTI0KQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdElkbGVTZXJ2aWNlJERlbGVnYXRlU2VydmljZSQxLnJ1bihBYnN0cmFjdElkbGVTZXJ2aWNlLmphdmE6NjIpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkNhbGxhYmxlcyQ0LnJ1bihDYWxsYWJsZXMuamF2YToxMjIpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5zdHJlYW0uSnNvblJlYWRlci5iZWdpbk9iamVjdChKc29uUmVhZGVyLmphdmE6Mzg1KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMTMpCisJLi4uIDkgbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkgNCAwIDIwMjEtMTAtMTggMTY6NTI6NDUuNTk4CishTUVTU0FHRSBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorIVNUQUNLIDAKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldEtub3duUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo0ODApCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5DYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIkQXJ0aWZhY3QuZ2V0S25vd25SZXBvc2l0b3JpZXMoQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjIzKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmNvcmUuUDJVdGlsLmdldEtub3duUmVwb3NpdG9yaWVzKFAyVXRpbC5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnAyLmltcGwuUDJUYXNrSW1wbC5pc05lZWRlZChQMlRhc2tJbXBsLmphdmE6NzAxKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLmludGVybmFsLmNvcmUuU2V0dXBUYXNrUGVyZm9ybWVyLmluaXROZWVkZWRTZXR1cFRhc2tzKFNldHVwVGFza1BlcmZvcm1lci5qYXZhOjIyNzMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5wZXJmb3JtU3RhcnR1cChTZXR1cFVJUGx1Z2luLmphdmE6Njc5KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4uYWNjZXNzJDUoU2V0dXBVSVBsdWdpbi5qYXZhOjQxNSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luJDEkMS5ydW4oU2V0dXBVSVBsdWdpbi5qYXZhOjI1MikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTE4IDE2OjU1OjI5LjYxMAorIU1FU1NBR0UgRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCishU1RBQ0sgMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApCisJLi4uIDggbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3AgMSAwIDIwMjEtMTAtMTggMTY6NTU6MjkuNjEzCishTUVTU0FHRSBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgZnJvbSB0aGUgbW9kZWwgcmVwb3NpdG9yaWVzLiBBcmUgeW91IG9mZmxpbmU/CisKKyFFTlRSWSBvcmcuZWNsaXBzZS51aSA0IDAgMjAyMS0xMC0xOSAxODoxMTowNi4yMzIKKyFNRVNTQUdFIFVuaGFuZGxlZCBldmVudCBsb29wIGV4Y2VwdGlvbgorIVNUQUNLIDAKK29yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb246IEdyYXBoaWMgaXMgZGlzcG9zZWQKKwlhdCBvcmcuZWNsaXBzZS5zd3QuU1dULmVycm9yKFNXVC5qYXZhOjQ1NTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LlNXVC5lcnJvcihTV1QuamF2YTo0NDY3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5TV1QuZXJyb3IoU1dULmphdmE6NDQzOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2UuZ2V0Qm91bmRzKEltYWdlLmphdmE6MTI2MykKKwlhdCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNMYWJlbC5nZXRUb3RhbFNpemUoQ0xhYmVsLmphdmE6MjY2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ0xhYmVsLm9uUGFpbnQoQ0xhYmVsLmphdmE6NDI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ0xhYmVsLmxhbWJkYSQwKENMYWJlbC5qYXZhOjExOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UeXBlZExpc3RlbmVyLmhhbmRsZUV2ZW50KFR5cGVkTGlzdGVuZXIuamF2YToyMzEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnRUYWJsZS5zZW5kRXZlbnQoRXZlbnRUYWJsZS5qYXZhOjg2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc2VuZEV2ZW50KERpc3BsYXkuamF2YTo0MTE4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA1MikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNzYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDYxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5XTV9QQUlOVChDb21wb3NpdGUuamF2YToxNTYxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wud2luZG93UHJvYyhDb250cm9sLmphdmE6NDgyMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5DYW52YXMud2luZG93UHJvYyhDYW52YXMuamF2YTozNDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS53aW5kb3dQcm9jKERpc3BsYXkuamF2YTo0NzY1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5WdGJsQ2FsbChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC5vbGUud2luMzIuSU9sZUluUGxhY2VPYmplY3QuSW5QbGFjZURlYWN0aXZhdGUoSU9sZUluUGxhY2VPYmplY3QuamF2YToyMSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qub2xlLndpbjMyLk9sZUNsaWVudFNpdGUuZGVhY3RpdmF0ZUluUGxhY2VDbGllbnQoT2xlQ2xpZW50U2l0ZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qub2xlLndpbjMyLk9sZUNsaWVudFNpdGUub25EaXNwb3NlKE9sZUNsaWVudFNpdGUuamF2YTo5NTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0Lm9sZS53aW4zMi5PbGVDbGllbnRTaXRlLmFjY2VzcyQxKE9sZUNsaWVudFNpdGUuamF2YTo5NDYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0Lm9sZS53aW4zMi5PbGVDbGllbnRTaXRlJDEuaGFuZGxlRXZlbnQoT2xlQ2xpZW50U2l0ZS5qYXZhOjEyOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudFRhYmxlLnNlbmRFdmVudChFdmVudFRhYmxlLmphdmE6ODYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zZW5kRXZlbnQoRGlzcGxheS5qYXZhOjQxMTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDUyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA3NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNTcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODA5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhcy5yZWxlYXNlQ2hpbGRyZW4oQ2FudmFzLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLnJlbGVhc2VDaGlsZHJlbihEZWNvcmF0aW9ucy5qYXZhOjcyOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC5yZWxlYXNlQ2hpbGRyZW4oU2hlbGwuamF2YToxMzQwKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuZGlzcG9zZShXaWRnZXQuamF2YTo0MjYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGVjb3JhdGlvbnMuZGlzcG9zZShEZWNvcmF0aW9ucy5qYXZhOjQwNSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC5kaXNwb3NlKFNoZWxsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQWJzdHJhY3RJbmZvcm1hdGlvbkNvbnRyb2wuZGlzcG9zZShBYnN0cmFjdEluZm9ybWF0aW9uQ29udHJvbC5qYXZhOjUyMSkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkFic3RyYWN0SW5mb3JtYXRpb25Db250cm9sTWFuYWdlci5kaXNwb3NlSW5mb3JtYXRpb25Db250cm9sKEFic3RyYWN0SW5mb3JtYXRpb25Db250cm9sTWFuYWdlci5qYXZhOjEzMTkpCisJYXQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5BYnN0cmFjdEluZm9ybWF0aW9uQ29udHJvbE1hbmFnZXIuZGlzcG9zZShBYnN0cmFjdEluZm9ybWF0aW9uQ29udHJvbE1hbmFnZXIuamF2YToxMzM0KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQWJzdHJhY3RIb3ZlckluZm9ybWF0aW9uQ29udHJvbE1hbmFnZXIuZGlzcG9zZShBYnN0cmFjdEhvdmVySW5mb3JtYXRpb25Db250cm9sTWFuYWdlci5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlRleHRWaWV3ZXJIb3Zlck1hbmFnZXIuZGlzcG9zZShUZXh0Vmlld2VySG92ZXJNYW5hZ2VyLmphdmE6Mzc4KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuVGV4dFZpZXdlci5oYW5kbGVEaXNwb3NlKFRleHRWaWV3ZXIuamF2YToxODc0KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLlNvdXJjZVZpZXdlci5oYW5kbGVEaXNwb3NlKFNvdXJjZVZpZXdlci5qYXZhOjc4OCkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5wcm9qZWN0aW9uLlByb2plY3Rpb25WaWV3ZXIuaGFuZGxlRGlzcG9zZShQcm9qZWN0aW9uVmlld2VyLmphdmE6MTI5NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuamF2YWVkaXRvci5KYXZhU291cmNlVmlld2VyLmhhbmRsZURpc3Bvc2UoSmF2YVNvdXJjZVZpZXdlci5qYXZhOjUwOSkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlRleHRWaWV3ZXIkMi53aWRnZXREaXNwb3NlZChUZXh0Vmlld2VyLmphdmE6MTczMSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UeXBlZExpc3RlbmVyLmhhbmRsZUV2ZW50KFR5cGVkTGlzdGVuZXIuamF2YToxMjQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnRUYWJsZS5zZW5kRXZlbnQoRXZlbnRUYWJsZS5qYXZhOjg2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc2VuZEV2ZW50KERpc3BsYXkuamF2YTo0MTE4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA1MikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNzYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDYxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5ub3RpZnlMaXN0ZW5lcnMoV2lkZ2V0LmphdmE6Nzc1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3R5bGVkVGV4dC5oYW5kbGVEaXNwb3NlKFN0eWxlZFRleHQuamF2YTo1OTE4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3R5bGVkVGV4dC5sYW1iZGEkMShTdHlsZWRUZXh0LmphdmE6NTczOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudFRhYmxlLnNlbmRFdmVudChFdmVudFRhYmxlLmphdmE6ODYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zZW5kRXZlbnQoRGlzcGxheS5qYXZhOjQxMTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDUyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA3NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNTcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODA5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhcy5yZWxlYXNlQ2hpbGRyZW4oQ2FudmFzLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuZGlzcG9zZShXaWRnZXQuamF2YTo0MjYpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuU1dUUGFydFJlbmRlcmVyLmRpc3Bvc2VXaWRnZXQoU1dUUGFydFJlbmRlcmVyLmphdmE6MTczKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5yZW5kZXJlcnMuc3d0LkNvbnRyaWJ1dGVkUGFydFJlbmRlcmVyLmRpc3Bvc2VXaWRnZXQoQ29udHJpYnV0ZWRQYXJ0UmVuZGVyZXIuamF2YToyNzApCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjk1NSkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTEwKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5MTcpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuRWxlbWVudFJlZmVyZW5jZVJlbmRlcmVyLmRpc3Bvc2VXaWRnZXQoRWxlbWVudFJlZmVyZW5jZVJlbmRlcmVyLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5NTUpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjkxNykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTEwKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5MTcpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjkxNykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTE3KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5MTcpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjkxNykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3cuaGFyZENsb3NlKFdvcmtiZW5jaFdpbmRvdy5qYXZhOjE5OTQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93LmJ1c3lDbG9zZShXb3JrYmVuY2hXaW5kb3cuamF2YToxNjEwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdy5hY2Nlc3MkMTgoV29ya2JlbmNoV2luZG93LmphdmE6MTU1MikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3ckMTEucnVuKFdvcmtiZW5jaFdpbmRvdy5qYXZhOjE2MzgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5CdXN5SW5kaWNhdG9yLnNob3dXaGlsZShCdXN5SW5kaWNhdG9yLmphdmE6NzEpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93LmNsb3NlKFdvcmtiZW5jaFdpbmRvdy5qYXZhOjE2MzUpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoJDEwLnJ1bihXb3JrYmVuY2guamF2YToxMTY1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmJ1c3lDbG9zZShXb3JrYmVuY2guamF2YToxMTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkNChXb3JrYmVuY2guamF2YToxNDMwKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQnVzeUluZGljYXRvci5zaG93V2hpbGUoQnVzeUluZGljYXRvci5qYXZhOjcxKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jbG9zZShXb3JrYmVuY2guamF2YToxNDMwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jbG9zZShXb3JrYmVuY2guamF2YToxNDAzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdy5idXN5Q2xvc2UoV29ya2JlbmNoV2luZG93LmphdmE6MTYwNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3cuYWNjZXNzJDE4KFdvcmtiZW5jaFdpbmRvdy5qYXZhOjE1NTIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93JDExLnJ1bihXb3JrYmVuY2hXaW5kb3cuamF2YToxNjM4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQnVzeUluZGljYXRvci5zaG93V2hpbGUoQnVzeUluZGljYXRvci5qYXZhOjcxKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdy5jbG9zZShXb3JrYmVuY2hXaW5kb3cuamF2YToxNjM1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdy5jbG9zZShXb3JrYmVuY2hXaW5kb3cuamF2YToxNjQ5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdyQ2LmNsb3NlKFdvcmtiZW5jaFdpbmRvdy5qYXZhOjUzMSkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC5XQldSZW5kZXJlci5sYW1iZGEkNChXQldSZW5kZXJlci5qYXZhOjYxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNoZWxsTGlzdGVuZXIkMi5zaGVsbENsb3NlZChTaGVsbExpc3RlbmVyLmphdmE6OTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHlwZWRMaXN0ZW5lci5oYW5kbGVFdmVudChUeXBlZExpc3RlbmVyLmphdmE6OTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnRUYWJsZS5zZW5kRXZlbnQoRXZlbnRUYWJsZS5qYXZhOjg2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc2VuZEV2ZW50KERpc3BsYXkuamF2YTo0MTE4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA1MikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNzYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDYxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLmNsb3NlV2lkZ2V0KERlY29yYXRpb25zLmphdmE6MjgxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLldNX0NMT1NFKERlY29yYXRpb25zLmphdmE6MTU3MSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLndpbmRvd1Byb2MoQ29udHJvbC5qYXZhOjQ3NjcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ2FudmFzLndpbmRvd1Byb2MoQ2FudmFzLmphdmE6MzQ1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLndpbmRvd1Byb2MoRGVjb3JhdGlvbnMuamF2YToxNDk5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLndpbmRvd1Byb2MoU2hlbGwuamF2YToyMTU5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkud2luZG93UHJvYyhEaXNwbGF5LmphdmE6NDc1NykKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuRGVmV2luZG93UHJvY1coTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuRGVmV2luZG93UHJvYyhPUy5qYXZhOjIyOTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGwuY2FsbFdpbmRvd1Byb2MoU2hlbGwuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC53aW5kb3dQcm9jKENvbnRyb2wuamF2YTo0ODYzKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhcy53aW5kb3dQcm9jKENhbnZhcy5qYXZhOjM0NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EZWNvcmF0aW9ucy53aW5kb3dQcm9jKERlY29yYXRpb25zLmphdmE6MTQ5OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC53aW5kb3dQcm9jKFNoZWxsLmphdmE6MjE1OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LndpbmRvd1Byb2MoRGlzcGxheS5qYXZhOjQ3NTcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLlBlZWtNZXNzYWdlVyhOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5QZWVrTWVzc2FnZShPUy5qYXZhOjI3ODcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5yZWFkQW5kRGlzcGF0Y2goRGlzcGxheS5qYXZhOjM1MjkpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDUucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YToxMTcwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YToxMDU5KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5FNFdvcmtiZW5jaC5jcmVhdGVBbmRSdW5VSShFNFdvcmtiZW5jaC5qYXZhOjE1MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCishU0VTU0lPTiAyMDIxLTEwLTIwIDExOjIyOjA3LjM5OSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNsaXBzZS5idWlsZElkPTQuOC4wLkkyMDE4MDYxMS0wNTAwCitqYXZhLnZlcnNpb249MS44LjBfMjMxCitqYXZhLnZlbmRvcj1PcmFjbGUgQ29ycG9yYXRpb24KK0Jvb3RMb2FkZXIgY29uc3RhbnRzOiBPUz13aW4zMiwgQVJDSD14ODZfNjQsIFdTPXdpbjMyLCBOTD1kZV9ERQorRnJhbWV3b3JrIGFyZ3VtZW50czogIC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorQ29tbWFuZC1saW5lIGFyZ3VtZW50czogIC1vcyB3aW4zMiAtd3Mgd2luMzIgLWFyY2ggeDg2XzY0IC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorCishRU5UUlkgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMgNCAwIDIwMjEtMTAtMjAgMTE6MjI6MTkuMTc5CishTUVTU0FHRSBGcmFtZXdvcmtFdmVudCBFUlJPUgorIVNUQUNLIDAKK29yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb246IEV4Y2VwdGlvbiBpbiBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoKSBvZiBidW5kbGUgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo4MDApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJLi4uIDEyIG1vcmUKK1Jvb3QgZXhjZXB0aW9uOgoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQuY29yZSAyIDAgMjAyMS0xMC0yMCAxMToyMjo0MS4zNTEKKyFNRVNTQUdFIEJ1aWx0aW4gTEZTIHN1cHBvcnQgbm90IHByZXNlbnQvZGV0ZWN0ZWQKKyFTVEFDSyAwCitqYXZhLmxhbmcuQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbjogb3JnLmVjbGlwc2UuamdpdC5sZnMuQnVpbHRpbkxGUyBjYW5ub3QgYmUgZm91bmQgYnkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlXzUuMC4wLjIwMTgwNjEzMTU1MC1yCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjUwOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZShDbGFzcy5qYXZhOjI2NCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnJlZ2lzdGVyQnVpbHRpbkxGUyhBY3RpdmF0b3IuamF2YToyNzkpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToyMTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuc291cmNlcy5TaW5nbGVTb3VyY2VQYWNrYWdlLmxvYWRDbGFzcyhTaW5nbGVTb3VyY2VQYWNrYWdlLmphdmE6MzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvciRSZXBvc2l0b3J5Q2hhbmdlU2Nhbm5lci48aW5pdD4oQWN0aXZhdG9yLmphdmE6OTIxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnNldHVwUmVwb0NoYW5nZVNjYW5uZXIoQWN0aXZhdG9yLmphdmE6MTAzNCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmdldFNvdXJjZVByb3ZpZGVycyhXb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuamF2YToxNzQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuU291cmNlUHJvdmlkZXJTZXJ2aWNlLnJlYWRSZWdpc3RyeShTb3VyY2VQcm92aWRlclNlcnZpY2UuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoJDM0LnJ1bldpdGhFeGNlcHRpb24oV29ya2JlbmNoLmphdmE6MjM3OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nJFN0YXJ0dXBSdW5uYWJsZS5ydW4oU3RhcnR1cFRocmVhZGluZy5qYXZhOjMyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlN5bmNocm9uaXplci5zeW5jRXhlYyhTeW5jaHJvbml6ZXIuamF2YToyMzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuVUlTeW5jaHJvbml6ZXIuc3luY0V4ZWMoVUlTeW5jaHJvbml6ZXIuamF2YToxNDQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zeW5jRXhlYyhEaXNwbGF5LmphdmE6NDU2NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nLnJ1bldpdGhvdXRFeGNlcHRpb25zKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTo5NSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdGlhbGl6ZURlZmF1bHRTZXJ2aWNlcyhXb3JrYmVuY2guamF2YToyMzczKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0KFdvcmtiZW5jaC5qYXZhOjE2NTQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLnJ1blVJKFdvcmtiZW5jaC5qYXZhOjI4NTkpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQzKFdvcmtiZW5jaC5qYXZhOjY1NCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChXb3JrYmVuY2guamF2YTo1OTcpCisJYXQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSS5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goUGxhdGZvcm1VSS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFQXBwbGljYXRpb24uc3RhcnQoSURFQXBwbGljYXRpb24uamF2YToxNTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5hcHAuRWNsaXBzZUFwcEhhbmRsZS5ydW4oRWNsaXBzZUFwcEhhbmRsZS5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIucnVuQXBwbGljYXRpb24oRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5zdGFydChFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6Mzg4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjI0MykKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NjIpCisJYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjQzKQorCWF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6NDk4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5pbnZva2VGcmFtZXdvcmsoTWFpbi5qYXZhOjY1NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uYmFzaWNSdW4oTWFpbi5qYXZhOjU5MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4ucnVuKE1haW4uamF2YToxNDk4KQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC51aSAyIDAgMjAyMS0xMC0yMCAxMToyMzo0Mi44MDcKKyFNRVNTQUdFIFdhcm5pbmc6IFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBIT01FIGlzIG5vdCBzZXQuIFRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5IHdpbGwgYmUgdXNlZCB0byBzdG9yZSB0aGUgR2l0Cit1c2VyIGdsb2JhbCBjb25maWd1cmF0aW9uIGFuZCB0byBkZWZpbmUgdGhlIGRlZmF1bHQgbG9jYXRpb24gdG8gc3RvcmUgcmVwb3NpdG9yaWVzOiAnQzpcVXNlcnNcRnJhbmNrJy4gSWYgdGhpcyBpcworbm90IGNvcnJlY3QgcGxlYXNlIHNldCB0aGUgSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgcmVzdGFydCBFY2xpcHNlLiBPdGhlcndpc2UgR2l0IGZvciBXaW5kb3dzIGFuZAorRUdpdCBtaWdodCBiZWhhdmUgZGlmZmVyZW50bHkgc2luY2UgdGhleSBzZWUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KK1RoaXMgd2FybmluZyBjYW4gYmUgc3dpdGNoZWQgb2ZmIG9uIHRoZSBUZWFtID4gR2l0ID4gQ29uZmlybWF0aW9ucyBhbmQgV2FybmluZ3MgcHJlZmVyZW5jZSBwYWdlLgorCishRU5UUlkgb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUgMiAxNyAyMDIxLTEwLTIwIDExOjIzOjQ4Ljk3NworIU1FU1NBR0UgU2VydmVyIOKAmG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlcuKAmSBmYWlsZWQgd2l0aCBleGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkLiA7IHZlcnNpb246IDIuMC43LnYyMDE3MDkwNi0xMzI3CishU1RBQ0sgMAorY29tLmdvb2dsZS5nc29uLkpzb25TeW50YXhFeGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIyNCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODg4KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4NTMpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjgwMikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIuanNvbi5Kc29uLmRlc2VyaWFsaXplKEpzb24uamF2YTo5MSkKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5JTy5yZWZyZXNoQ29uZmlndXJhdGlvbihJTy5qYXZhOjY2KQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLlNlcnZlckNvbm5lY3Rpb24uc3RhcnRVcChTZXJ2ZXJDb25uZWN0aW9uLmphdmE6MTI0KQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdElkbGVTZXJ2aWNlJERlbGVnYXRlU2VydmljZSQxLnJ1bihBYnN0cmFjdElkbGVTZXJ2aWNlLmphdmE6NjIpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkNhbGxhYmxlcyQ0LnJ1bihDYWxsYWJsZXMuamF2YToxMjIpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5zdHJlYW0uSnNvblJlYWRlci5iZWdpbk9iamVjdChKc29uUmVhZGVyLmphdmE6Mzg1KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMTMpCisJLi4uIDkgbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkgNCAwIDIwMjEtMTAtMjAgMTE6MjQ6MDUuOTY2CishTUVTU0FHRSBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorIVNUQUNLIDAKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldEtub3duUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo0ODApCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5DYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIkQXJ0aWZhY3QuZ2V0S25vd25SZXBvc2l0b3JpZXMoQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjIzKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmNvcmUuUDJVdGlsLmdldEtub3duUmVwb3NpdG9yaWVzKFAyVXRpbC5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnAyLmltcGwuUDJUYXNrSW1wbC5pc05lZWRlZChQMlRhc2tJbXBsLmphdmE6NzAxKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLmludGVybmFsLmNvcmUuU2V0dXBUYXNrUGVyZm9ybWVyLmluaXROZWVkZWRTZXR1cFRhc2tzKFNldHVwVGFza1BlcmZvcm1lci5qYXZhOjIyNzMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5wZXJmb3JtU3RhcnR1cChTZXR1cFVJUGx1Z2luLmphdmE6Njc5KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4uYWNjZXNzJDUoU2V0dXBVSVBsdWdpbi5qYXZhOjQxNSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luJDEkMS5ydW4oU2V0dXBVSVBsdWdpbi5qYXZhOjI1MikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTIwIDEyOjExOjEyLjQyOAorIU1FU1NBR0UgRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCishU1RBQ0sgMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApCisJLi4uIDggbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3AgMSAwIDIwMjEtMTAtMjAgMTI6MTE6MTIuNDMxCishTUVTU0FHRSBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgZnJvbSB0aGUgbW9kZWwgcmVwb3NpdG9yaWVzLiBBcmUgeW91IG9mZmxpbmU/CisKKyFFTlRSWSBvcmcuZWNsaXBzZS51aSA0IDAgMjAyMS0xMC0yMiAxMTowNDo0OS40MTcKKyFNRVNTQUdFIFVuaGFuZGxlZCBldmVudCBsb29wIGV4Y2VwdGlvbgorIVNUQUNLIDAKK29yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb246IEdyYXBoaWMgaXMgZGlzcG9zZWQKKwlhdCBvcmcuZWNsaXBzZS5zd3QuU1dULmVycm9yKFNXVC5qYXZhOjQ1NTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LlNXVC5lcnJvcihTV1QuamF2YTo0NDY3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5TV1QuZXJyb3IoU1dULmphdmE6NDQzOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2UuZ2V0Qm91bmRzKEltYWdlLmphdmE6MTI2MykKKwlhdCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNMYWJlbC5nZXRUb3RhbFNpemUoQ0xhYmVsLmphdmE6MjY2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ0xhYmVsLm9uUGFpbnQoQ0xhYmVsLmphdmE6NDI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ0xhYmVsLmxhbWJkYSQwKENMYWJlbC5qYXZhOjExOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UeXBlZExpc3RlbmVyLmhhbmRsZUV2ZW50KFR5cGVkTGlzdGVuZXIuamF2YToyMzEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnRUYWJsZS5zZW5kRXZlbnQoRXZlbnRUYWJsZS5qYXZhOjg2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc2VuZEV2ZW50KERpc3BsYXkuamF2YTo0MTE4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA1MikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNzYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDYxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5XTV9QQUlOVChDb21wb3NpdGUuamF2YToxNTYxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wud2luZG93UHJvYyhDb250cm9sLmphdmE6NDgyMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5DYW52YXMud2luZG93UHJvYyhDYW52YXMuamF2YTozNDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS53aW5kb3dQcm9jKERpc3BsYXkuamF2YTo0NzY1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5WdGJsQ2FsbChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC5vbGUud2luMzIuSU9sZUluUGxhY2VPYmplY3QuSW5QbGFjZURlYWN0aXZhdGUoSU9sZUluUGxhY2VPYmplY3QuamF2YToyMSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qub2xlLndpbjMyLk9sZUNsaWVudFNpdGUuZGVhY3RpdmF0ZUluUGxhY2VDbGllbnQoT2xlQ2xpZW50U2l0ZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qub2xlLndpbjMyLk9sZUNsaWVudFNpdGUub25EaXNwb3NlKE9sZUNsaWVudFNpdGUuamF2YTo5NTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0Lm9sZS53aW4zMi5PbGVDbGllbnRTaXRlLmFjY2VzcyQxKE9sZUNsaWVudFNpdGUuamF2YTo5NDYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0Lm9sZS53aW4zMi5PbGVDbGllbnRTaXRlJDEuaGFuZGxlRXZlbnQoT2xlQ2xpZW50U2l0ZS5qYXZhOjEyOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudFRhYmxlLnNlbmRFdmVudChFdmVudFRhYmxlLmphdmE6ODYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zZW5kRXZlbnQoRGlzcGxheS5qYXZhOjQxMTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDUyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA3NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNTcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODA5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhcy5yZWxlYXNlQ2hpbGRyZW4oQ2FudmFzLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLnJlbGVhc2VDaGlsZHJlbihEZWNvcmF0aW9ucy5qYXZhOjcyOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC5yZWxlYXNlQ2hpbGRyZW4oU2hlbGwuamF2YToxMzQwKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuZGlzcG9zZShXaWRnZXQuamF2YTo0MjYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGVjb3JhdGlvbnMuZGlzcG9zZShEZWNvcmF0aW9ucy5qYXZhOjQwNSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC5kaXNwb3NlKFNoZWxsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQWJzdHJhY3RJbmZvcm1hdGlvbkNvbnRyb2wuZGlzcG9zZShBYnN0cmFjdEluZm9ybWF0aW9uQ29udHJvbC5qYXZhOjUyMSkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkFic3RyYWN0SW5mb3JtYXRpb25Db250cm9sTWFuYWdlci5kaXNwb3NlSW5mb3JtYXRpb25Db250cm9sKEFic3RyYWN0SW5mb3JtYXRpb25Db250cm9sTWFuYWdlci5qYXZhOjEzMTkpCisJYXQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5BYnN0cmFjdEluZm9ybWF0aW9uQ29udHJvbE1hbmFnZXIuZGlzcG9zZShBYnN0cmFjdEluZm9ybWF0aW9uQ29udHJvbE1hbmFnZXIuamF2YToxMzM0KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQWJzdHJhY3RIb3ZlckluZm9ybWF0aW9uQ29udHJvbE1hbmFnZXIuZGlzcG9zZShBYnN0cmFjdEhvdmVySW5mb3JtYXRpb25Db250cm9sTWFuYWdlci5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlRleHRWaWV3ZXJIb3Zlck1hbmFnZXIuZGlzcG9zZShUZXh0Vmlld2VySG92ZXJNYW5hZ2VyLmphdmE6Mzc4KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuVGV4dFZpZXdlci5oYW5kbGVEaXNwb3NlKFRleHRWaWV3ZXIuamF2YToxODc0KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLlNvdXJjZVZpZXdlci5oYW5kbGVEaXNwb3NlKFNvdXJjZVZpZXdlci5qYXZhOjc4OCkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5wcm9qZWN0aW9uLlByb2plY3Rpb25WaWV3ZXIuaGFuZGxlRGlzcG9zZShQcm9qZWN0aW9uVmlld2VyLmphdmE6MTI5NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuamF2YWVkaXRvci5KYXZhU291cmNlVmlld2VyLmhhbmRsZURpc3Bvc2UoSmF2YVNvdXJjZVZpZXdlci5qYXZhOjUwOSkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlRleHRWaWV3ZXIkMi53aWRnZXREaXNwb3NlZChUZXh0Vmlld2VyLmphdmE6MTczMSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UeXBlZExpc3RlbmVyLmhhbmRsZUV2ZW50KFR5cGVkTGlzdGVuZXIuamF2YToxMjQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnRUYWJsZS5zZW5kRXZlbnQoRXZlbnRUYWJsZS5qYXZhOjg2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc2VuZEV2ZW50KERpc3BsYXkuamF2YTo0MTE4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA1MikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNzYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDYxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5ub3RpZnlMaXN0ZW5lcnMoV2lkZ2V0LmphdmE6Nzc1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3R5bGVkVGV4dC5oYW5kbGVEaXNwb3NlKFN0eWxlZFRleHQuamF2YTo1OTE4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3R5bGVkVGV4dC5sYW1iZGEkMShTdHlsZWRUZXh0LmphdmE6NTczOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudFRhYmxlLnNlbmRFdmVudChFdmVudFRhYmxlLmphdmE6ODYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zZW5kRXZlbnQoRGlzcGxheS5qYXZhOjQxMTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDUyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA3NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNTcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODA5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhcy5yZWxlYXNlQ2hpbGRyZW4oQ2FudmFzLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuZGlzcG9zZShXaWRnZXQuamF2YTo0MjYpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuU1dUUGFydFJlbmRlcmVyLmRpc3Bvc2VXaWRnZXQoU1dUUGFydFJlbmRlcmVyLmphdmE6MTczKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5yZW5kZXJlcnMuc3d0LkNvbnRyaWJ1dGVkUGFydFJlbmRlcmVyLmRpc3Bvc2VXaWRnZXQoQ29udHJpYnV0ZWRQYXJ0UmVuZGVyZXIuamF2YToyNzApCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjk1NSkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTEwKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5MTcpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuRWxlbWVudFJlZmVyZW5jZVJlbmRlcmVyLmRpc3Bvc2VXaWRnZXQoRWxlbWVudFJlZmVyZW5jZVJlbmRlcmVyLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5NTUpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjkxNykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTEwKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5MTcpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjkxNykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTE3KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5MTcpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjkxNykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3cuaGFyZENsb3NlKFdvcmtiZW5jaFdpbmRvdy5qYXZhOjE5OTQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93LmJ1c3lDbG9zZShXb3JrYmVuY2hXaW5kb3cuamF2YToxNjEwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdy5hY2Nlc3MkMTgoV29ya2JlbmNoV2luZG93LmphdmE6MTU1MikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3ckMTEucnVuKFdvcmtiZW5jaFdpbmRvdy5qYXZhOjE2MzgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5CdXN5SW5kaWNhdG9yLnNob3dXaGlsZShCdXN5SW5kaWNhdG9yLmphdmE6NzEpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93LmNsb3NlKFdvcmtiZW5jaFdpbmRvdy5qYXZhOjE2MzUpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoJDEwLnJ1bihXb3JrYmVuY2guamF2YToxMTY1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmJ1c3lDbG9zZShXb3JrYmVuY2guamF2YToxMTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkNChXb3JrYmVuY2guamF2YToxNDMwKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQnVzeUluZGljYXRvci5zaG93V2hpbGUoQnVzeUluZGljYXRvci5qYXZhOjcxKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jbG9zZShXb3JrYmVuY2guamF2YToxNDMwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jbG9zZShXb3JrYmVuY2guamF2YToxNDAzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdy5idXN5Q2xvc2UoV29ya2JlbmNoV2luZG93LmphdmE6MTYwNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3cuYWNjZXNzJDE4KFdvcmtiZW5jaFdpbmRvdy5qYXZhOjE1NTIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93JDExLnJ1bihXb3JrYmVuY2hXaW5kb3cuamF2YToxNjM4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQnVzeUluZGljYXRvci5zaG93V2hpbGUoQnVzeUluZGljYXRvci5qYXZhOjcxKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdy5jbG9zZShXb3JrYmVuY2hXaW5kb3cuamF2YToxNjM1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdy5jbG9zZShXb3JrYmVuY2hXaW5kb3cuamF2YToxNjQ5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdyQ2LmNsb3NlKFdvcmtiZW5jaFdpbmRvdy5qYXZhOjUzMSkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC5XQldSZW5kZXJlci5sYW1iZGEkNChXQldSZW5kZXJlci5qYXZhOjYxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNoZWxsTGlzdGVuZXIkMi5zaGVsbENsb3NlZChTaGVsbExpc3RlbmVyLmphdmE6OTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHlwZWRMaXN0ZW5lci5oYW5kbGVFdmVudChUeXBlZExpc3RlbmVyLmphdmE6OTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnRUYWJsZS5zZW5kRXZlbnQoRXZlbnRUYWJsZS5qYXZhOjg2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc2VuZEV2ZW50KERpc3BsYXkuamF2YTo0MTE4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA1MikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNzYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDYxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLmNsb3NlV2lkZ2V0KERlY29yYXRpb25zLmphdmE6MjgxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLldNX0NMT1NFKERlY29yYXRpb25zLmphdmE6MTU3MSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLndpbmRvd1Byb2MoQ29udHJvbC5qYXZhOjQ3NjcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ2FudmFzLndpbmRvd1Byb2MoQ2FudmFzLmphdmE6MzQ1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLndpbmRvd1Byb2MoRGVjb3JhdGlvbnMuamF2YToxNDk5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLndpbmRvd1Byb2MoU2hlbGwuamF2YToyMTU5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkud2luZG93UHJvYyhEaXNwbGF5LmphdmE6NDc1NykKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuRGVmV2luZG93UHJvY1coTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuRGVmV2luZG93UHJvYyhPUy5qYXZhOjIyOTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGwuY2FsbFdpbmRvd1Byb2MoU2hlbGwuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC53aW5kb3dQcm9jKENvbnRyb2wuamF2YTo0ODYzKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhcy53aW5kb3dQcm9jKENhbnZhcy5qYXZhOjM0NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EZWNvcmF0aW9ucy53aW5kb3dQcm9jKERlY29yYXRpb25zLmphdmE6MTQ5OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC53aW5kb3dQcm9jKFNoZWxsLmphdmE6MjE1OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LndpbmRvd1Byb2MoRGlzcGxheS5qYXZhOjQ3NTcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLkRlZldpbmRvd1Byb2NXKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLkRlZldpbmRvd1Byb2MoT1MuamF2YToyMjk4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLmNhbGxXaW5kb3dQcm9jKFNoZWxsLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wud2luZG93UHJvYyhDb250cm9sLmphdmE6NDg2MykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5DYW52YXMud2luZG93UHJvYyhDYW52YXMuamF2YTozNDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGVjb3JhdGlvbnMud2luZG93UHJvYyhEZWNvcmF0aW9ucy5qYXZhOjE0OTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGwud2luZG93UHJvYyhTaGVsbC5qYXZhOjIxNTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS53aW5kb3dQcm9jKERpc3BsYXkuamF2YTo0NzU3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EaXNwYXRjaE1lc3NhZ2VXKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLkRpc3BhdGNoTWVzc2FnZShPUy5qYXZhOjIzMDMpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5yZWFkQW5kRGlzcGF0Y2goRGlzcGxheS5qYXZhOjM1MzIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDUucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YToxMTcwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YToxMDU5KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5FNFdvcmtiZW5jaC5jcmVhdGVBbmRSdW5VSShFNFdvcmtiZW5jaC5qYXZhOjE1MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCishU0VTU0lPTiAyMDIxLTEwLTIyIDExOjMzOjIyLjkxNSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNsaXBzZS5idWlsZElkPTQuOC4wLkkyMDE4MDYxMS0wNTAwCitqYXZhLnZlcnNpb249MS44LjBfMjMxCitqYXZhLnZlbmRvcj1PcmFjbGUgQ29ycG9yYXRpb24KK0Jvb3RMb2FkZXIgY29uc3RhbnRzOiBPUz13aW4zMiwgQVJDSD14ODZfNjQsIFdTPXdpbjMyLCBOTD1kZV9ERQorRnJhbWV3b3JrIGFyZ3VtZW50czogIC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorQ29tbWFuZC1saW5lIGFyZ3VtZW50czogIC1vcyB3aW4zMiAtd3Mgd2luMzIgLWFyY2ggeDg2XzY0IC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorCishRU5UUlkgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMgNCAwIDIwMjEtMTAtMjIgMTE6MzM6MzkuODMxCishTUVTU0FHRSBGcmFtZXdvcmtFdmVudCBFUlJPUgorIVNUQUNLIDAKK29yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb246IEV4Y2VwdGlvbiBpbiBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoKSBvZiBidW5kbGUgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo4MDApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJLi4uIDEyIG1vcmUKK1Jvb3QgZXhjZXB0aW9uOgoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQuY29yZSAyIDAgMjAyMS0xMC0yMiAxMTozNDoxOC42OTUKKyFNRVNTQUdFIEJ1aWx0aW4gTEZTIHN1cHBvcnQgbm90IHByZXNlbnQvZGV0ZWN0ZWQKKyFTVEFDSyAwCitqYXZhLmxhbmcuQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbjogb3JnLmVjbGlwc2UuamdpdC5sZnMuQnVpbHRpbkxGUyBjYW5ub3QgYmUgZm91bmQgYnkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlXzUuMC4wLjIwMTgwNjEzMTU1MC1yCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjUwOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZShDbGFzcy5qYXZhOjI2NCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnJlZ2lzdGVyQnVpbHRpbkxGUyhBY3RpdmF0b3IuamF2YToyNzkpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToyMTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuc291cmNlcy5TaW5nbGVTb3VyY2VQYWNrYWdlLmxvYWRDbGFzcyhTaW5nbGVTb3VyY2VQYWNrYWdlLmphdmE6MzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvciRSZXBvc2l0b3J5Q2hhbmdlU2Nhbm5lci48aW5pdD4oQWN0aXZhdG9yLmphdmE6OTIxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnNldHVwUmVwb0NoYW5nZVNjYW5uZXIoQWN0aXZhdG9yLmphdmE6MTAzNCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmdldFNvdXJjZVByb3ZpZGVycyhXb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuamF2YToxNzQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuU291cmNlUHJvdmlkZXJTZXJ2aWNlLnJlYWRSZWdpc3RyeShTb3VyY2VQcm92aWRlclNlcnZpY2UuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoJDM0LnJ1bldpdGhFeGNlcHRpb24oV29ya2JlbmNoLmphdmE6MjM3OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nJFN0YXJ0dXBSdW5uYWJsZS5ydW4oU3RhcnR1cFRocmVhZGluZy5qYXZhOjMyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlN5bmNocm9uaXplci5zeW5jRXhlYyhTeW5jaHJvbml6ZXIuamF2YToyMzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuVUlTeW5jaHJvbml6ZXIuc3luY0V4ZWMoVUlTeW5jaHJvbml6ZXIuamF2YToxNDQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zeW5jRXhlYyhEaXNwbGF5LmphdmE6NDU2NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nLnJ1bldpdGhvdXRFeGNlcHRpb25zKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTo5NSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdGlhbGl6ZURlZmF1bHRTZXJ2aWNlcyhXb3JrYmVuY2guamF2YToyMzczKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0KFdvcmtiZW5jaC5qYXZhOjE2NTQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLnJ1blVJKFdvcmtiZW5jaC5qYXZhOjI4NTkpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQzKFdvcmtiZW5jaC5qYXZhOjY1NCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChXb3JrYmVuY2guamF2YTo1OTcpCisJYXQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSS5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goUGxhdGZvcm1VSS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFQXBwbGljYXRpb24uc3RhcnQoSURFQXBwbGljYXRpb24uamF2YToxNTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5hcHAuRWNsaXBzZUFwcEhhbmRsZS5ydW4oRWNsaXBzZUFwcEhhbmRsZS5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIucnVuQXBwbGljYXRpb24oRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5zdGFydChFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6Mzg4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjI0MykKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NjIpCisJYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjQzKQorCWF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6NDk4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5pbnZva2VGcmFtZXdvcmsoTWFpbi5qYXZhOjY1NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uYmFzaWNSdW4oTWFpbi5qYXZhOjU5MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4ucnVuKE1haW4uamF2YToxNDk4KQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC51aSAyIDAgMjAyMS0xMC0yMiAxMTozNTo0NC4yMzMKKyFNRVNTQUdFIFdhcm5pbmc6IFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBIT01FIGlzIG5vdCBzZXQuIFRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5IHdpbGwgYmUgdXNlZCB0byBzdG9yZSB0aGUgR2l0Cit1c2VyIGdsb2JhbCBjb25maWd1cmF0aW9uIGFuZCB0byBkZWZpbmUgdGhlIGRlZmF1bHQgbG9jYXRpb24gdG8gc3RvcmUgcmVwb3NpdG9yaWVzOiAnQzpcVXNlcnNcRnJhbmNrJy4gSWYgdGhpcyBpcworbm90IGNvcnJlY3QgcGxlYXNlIHNldCB0aGUgSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgcmVzdGFydCBFY2xpcHNlLiBPdGhlcndpc2UgR2l0IGZvciBXaW5kb3dzIGFuZAorRUdpdCBtaWdodCBiZWhhdmUgZGlmZmVyZW50bHkgc2luY2UgdGhleSBzZWUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KK1RoaXMgd2FybmluZyBjYW4gYmUgc3dpdGNoZWQgb2ZmIG9uIHRoZSBUZWFtID4gR2l0ID4gQ29uZmlybWF0aW9ucyBhbmQgV2FybmluZ3MgcHJlZmVyZW5jZSBwYWdlLgorCishRU5UUlkgb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUgMiAxNyAyMDIxLTEwLTIyIDExOjM1OjU2LjI1MworIU1FU1NBR0UgU2VydmVyIOKAmG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlcuKAmSBmYWlsZWQgd2l0aCBleGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkLiA7IHZlcnNpb246IDIuMC43LnYyMDE3MDkwNi0xMzI3CishU1RBQ0sgMAorY29tLmdvb2dsZS5nc29uLkpzb25TeW50YXhFeGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIyNCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODg4KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4NTMpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjgwMikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIuanNvbi5Kc29uLmRlc2VyaWFsaXplKEpzb24uamF2YTo5MSkKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5JTy5yZWZyZXNoQ29uZmlndXJhdGlvbihJTy5qYXZhOjY2KQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLlNlcnZlckNvbm5lY3Rpb24uc3RhcnRVcChTZXJ2ZXJDb25uZWN0aW9uLmphdmE6MTI0KQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdElkbGVTZXJ2aWNlJERlbGVnYXRlU2VydmljZSQxLnJ1bihBYnN0cmFjdElkbGVTZXJ2aWNlLmphdmE6NjIpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkNhbGxhYmxlcyQ0LnJ1bihDYWxsYWJsZXMuamF2YToxMjIpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5zdHJlYW0uSnNvblJlYWRlci5iZWdpbk9iamVjdChKc29uUmVhZGVyLmphdmE6Mzg1KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMTMpCisJLi4uIDkgbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkgNCAwIDIwMjEtMTAtMjIgMTE6MzY6MTcuNTczCishTUVTU0FHRSBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorIVNUQUNLIDAKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldEtub3duUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo0ODApCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5DYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIkQXJ0aWZhY3QuZ2V0S25vd25SZXBvc2l0b3JpZXMoQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjIzKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmNvcmUuUDJVdGlsLmdldEtub3duUmVwb3NpdG9yaWVzKFAyVXRpbC5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnAyLmltcGwuUDJUYXNrSW1wbC5pc05lZWRlZChQMlRhc2tJbXBsLmphdmE6NzAxKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLmludGVybmFsLmNvcmUuU2V0dXBUYXNrUGVyZm9ybWVyLmluaXROZWVkZWRTZXR1cFRhc2tzKFNldHVwVGFza1BlcmZvcm1lci5qYXZhOjIyNzMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5wZXJmb3JtU3RhcnR1cChTZXR1cFVJUGx1Z2luLmphdmE6Njc5KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4uYWNjZXNzJDUoU2V0dXBVSVBsdWdpbi5qYXZhOjQxNSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luJDEkMS5ydW4oU2V0dXBVSVBsdWdpbi5qYXZhOjI1MikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTIyIDEyOjE1OjAyLjM5NQorIU1FU1NBR0UgRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCishU1RBQ0sgMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApCisJLi4uIDggbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3AgMSAwIDIwMjEtMTAtMjIgMTI6MTU6MDIuMzk4CishTUVTU0FHRSBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgZnJvbSB0aGUgbW9kZWwgcmVwb3NpdG9yaWVzLiBBcmUgeW91IG9mZmxpbmU/CishU0VTU0lPTiAyMDIxLTEwLTIyIDE5OjU3OjExLjUxNSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNsaXBzZS5idWlsZElkPTQuOC4wLkkyMDE4MDYxMS0wNTAwCitqYXZhLnZlcnNpb249MS44LjBfMjMxCitqYXZhLnZlbmRvcj1PcmFjbGUgQ29ycG9yYXRpb24KK0Jvb3RMb2FkZXIgY29uc3RhbnRzOiBPUz13aW4zMiwgQVJDSD14ODZfNjQsIFdTPXdpbjMyLCBOTD1kZV9ERQorRnJhbWV3b3JrIGFyZ3VtZW50czogIC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorQ29tbWFuZC1saW5lIGFyZ3VtZW50czogIC1vcyB3aW4zMiAtd3Mgd2luMzIgLWFyY2ggeDg2XzY0IC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorCishRU5UUlkgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMgNCAwIDIwMjEtMTAtMjIgMTk6NTc6MTYuNTAxCishTUVTU0FHRSBGcmFtZXdvcmtFdmVudCBFUlJPUgorIVNUQUNLIDAKK29yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb246IEV4Y2VwdGlvbiBpbiBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoKSBvZiBidW5kbGUgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo4MDApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJLi4uIDEyIG1vcmUKK1Jvb3QgZXhjZXB0aW9uOgoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQuY29yZSAyIDAgMjAyMS0xMC0yMiAxOTo1NzozMC41MzcKKyFNRVNTQUdFIEJ1aWx0aW4gTEZTIHN1cHBvcnQgbm90IHByZXNlbnQvZGV0ZWN0ZWQKKyFTVEFDSyAwCitqYXZhLmxhbmcuQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbjogb3JnLmVjbGlwc2UuamdpdC5sZnMuQnVpbHRpbkxGUyBjYW5ub3QgYmUgZm91bmQgYnkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlXzUuMC4wLjIwMTgwNjEzMTU1MC1yCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjUwOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZShDbGFzcy5qYXZhOjI2NCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnJlZ2lzdGVyQnVpbHRpbkxGUyhBY3RpdmF0b3IuamF2YToyNzkpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToyMTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuc291cmNlcy5TaW5nbGVTb3VyY2VQYWNrYWdlLmxvYWRDbGFzcyhTaW5nbGVTb3VyY2VQYWNrYWdlLmphdmE6MzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvciRSZXBvc2l0b3J5Q2hhbmdlU2Nhbm5lci48aW5pdD4oQWN0aXZhdG9yLmphdmE6OTIxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnNldHVwUmVwb0NoYW5nZVNjYW5uZXIoQWN0aXZhdG9yLmphdmE6MTAzNCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmdldFNvdXJjZVByb3ZpZGVycyhXb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuamF2YToxNzQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuU291cmNlUHJvdmlkZXJTZXJ2aWNlLnJlYWRSZWdpc3RyeShTb3VyY2VQcm92aWRlclNlcnZpY2UuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoJDM0LnJ1bldpdGhFeGNlcHRpb24oV29ya2JlbmNoLmphdmE6MjM3OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nJFN0YXJ0dXBSdW5uYWJsZS5ydW4oU3RhcnR1cFRocmVhZGluZy5qYXZhOjMyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlN5bmNocm9uaXplci5zeW5jRXhlYyhTeW5jaHJvbml6ZXIuamF2YToyMzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuVUlTeW5jaHJvbml6ZXIuc3luY0V4ZWMoVUlTeW5jaHJvbml6ZXIuamF2YToxNDQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zeW5jRXhlYyhEaXNwbGF5LmphdmE6NDU2NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nLnJ1bldpdGhvdXRFeGNlcHRpb25zKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTo5NSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdGlhbGl6ZURlZmF1bHRTZXJ2aWNlcyhXb3JrYmVuY2guamF2YToyMzczKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0KFdvcmtiZW5jaC5qYXZhOjE2NTQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLnJ1blVJKFdvcmtiZW5jaC5qYXZhOjI4NTkpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQzKFdvcmtiZW5jaC5qYXZhOjY1NCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChXb3JrYmVuY2guamF2YTo1OTcpCisJYXQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSS5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goUGxhdGZvcm1VSS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFQXBwbGljYXRpb24uc3RhcnQoSURFQXBwbGljYXRpb24uamF2YToxNTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5hcHAuRWNsaXBzZUFwcEhhbmRsZS5ydW4oRWNsaXBzZUFwcEhhbmRsZS5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIucnVuQXBwbGljYXRpb24oRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5zdGFydChFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6Mzg4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjI0MykKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NjIpCisJYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjQzKQorCWF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6NDk4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5pbnZva2VGcmFtZXdvcmsoTWFpbi5qYXZhOjY1NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uYmFzaWNSdW4oTWFpbi5qYXZhOjU5MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4ucnVuKE1haW4uamF2YToxNDk4KQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC51aSAyIDAgMjAyMS0xMC0yMiAxOTo1ODowNy42OTEKKyFNRVNTQUdFIFdhcm5pbmc6IFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBIT01FIGlzIG5vdCBzZXQuIFRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5IHdpbGwgYmUgdXNlZCB0byBzdG9yZSB0aGUgR2l0Cit1c2VyIGdsb2JhbCBjb25maWd1cmF0aW9uIGFuZCB0byBkZWZpbmUgdGhlIGRlZmF1bHQgbG9jYXRpb24gdG8gc3RvcmUgcmVwb3NpdG9yaWVzOiAnQzpcVXNlcnNcRnJhbmNrJy4gSWYgdGhpcyBpcworbm90IGNvcnJlY3QgcGxlYXNlIHNldCB0aGUgSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgcmVzdGFydCBFY2xpcHNlLiBPdGhlcndpc2UgR2l0IGZvciBXaW5kb3dzIGFuZAorRUdpdCBtaWdodCBiZWhhdmUgZGlmZmVyZW50bHkgc2luY2UgdGhleSBzZWUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KK1RoaXMgd2FybmluZyBjYW4gYmUgc3dpdGNoZWQgb2ZmIG9uIHRoZSBUZWFtID4gR2l0ID4gQ29uZmlybWF0aW9ucyBhbmQgV2FybmluZ3MgcHJlZmVyZW5jZSBwYWdlLgorCishRU5UUlkgb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUgMiAxNyAyMDIxLTEwLTIyIDE5OjU4OjExLjQ1MAorIU1FU1NBR0UgU2VydmVyIOKAmG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlcuKAmSBmYWlsZWQgd2l0aCBleGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkLiA7IHZlcnNpb246IDIuMC43LnYyMDE3MDkwNi0xMzI3CishU1RBQ0sgMAorY29tLmdvb2dsZS5nc29uLkpzb25TeW50YXhFeGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIyNCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODg4KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4NTMpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjgwMikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIuanNvbi5Kc29uLmRlc2VyaWFsaXplKEpzb24uamF2YTo5MSkKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5JTy5yZWZyZXNoQ29uZmlndXJhdGlvbihJTy5qYXZhOjY2KQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLlNlcnZlckNvbm5lY3Rpb24uc3RhcnRVcChTZXJ2ZXJDb25uZWN0aW9uLmphdmE6MTI0KQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdElkbGVTZXJ2aWNlJERlbGVnYXRlU2VydmljZSQxLnJ1bihBYnN0cmFjdElkbGVTZXJ2aWNlLmphdmE6NjIpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkNhbGxhYmxlcyQ0LnJ1bihDYWxsYWJsZXMuamF2YToxMjIpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5zdHJlYW0uSnNvblJlYWRlci5iZWdpbk9iamVjdChKc29uUmVhZGVyLmphdmE6Mzg1KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMTMpCisJLi4uIDkgbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkgNCAwIDIwMjEtMTAtMjIgMTk6NTg6MjUuOTE0CishTUVTU0FHRSBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorIVNUQUNLIDAKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldEtub3duUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo0ODApCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5DYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIkQXJ0aWZhY3QuZ2V0S25vd25SZXBvc2l0b3JpZXMoQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjIzKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmNvcmUuUDJVdGlsLmdldEtub3duUmVwb3NpdG9yaWVzKFAyVXRpbC5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnAyLmltcGwuUDJUYXNrSW1wbC5pc05lZWRlZChQMlRhc2tJbXBsLmphdmE6NzAxKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLmludGVybmFsLmNvcmUuU2V0dXBUYXNrUGVyZm9ybWVyLmluaXROZWVkZWRTZXR1cFRhc2tzKFNldHVwVGFza1BlcmZvcm1lci5qYXZhOjIyNzMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5wZXJmb3JtU3RhcnR1cChTZXR1cFVJUGx1Z2luLmphdmE6Njc5KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4uYWNjZXNzJDUoU2V0dXBVSVBsdWdpbi5qYXZhOjQxNSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luJDEkMS5ydW4oU2V0dXBVSVBsdWdpbi5qYXZhOjI1MikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTIyIDIxOjAxOjA4LjI3NQorIU1FU1NBR0UgRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCishU1RBQ0sgMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApCisJLi4uIDggbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3AgMSAwIDIwMjEtMTAtMjIgMjE6MDE6MDguMjc5CishTUVTU0FHRSBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgZnJvbSB0aGUgbW9kZWwgcmVwb3NpdG9yaWVzLiBBcmUgeW91IG9mZmxpbmU/CisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yMyAxOTozMzoyMS44NDkKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTIzIDE5OjMzOjIxLjg1OAorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjMgMTk6MzM6MjMuOTIyCishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yMyAxOTozMzoyMy45MzEKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTIzIDE5OjMzOjM2LjM3MQorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjMgMTk6MzM6MzYuMzc4CishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yMyAxOTozMzozOS4wMTcKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTIzIDE5OjMzOjM5LjAyMgorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjMgMTk6MzM6MzkuMTc3CishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yMyAxOTozMzozOS4yMDQKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDQgMCAyMDIxLTEwLTIzIDE5OjMzOjQwLjA1OAorIU1FU1NBR0UgQ291bGQgbm90IGRvd25sb2FkIHNvdXJjZXMgZm9yIGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1QKKyFTVEFDSyAxCitvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjogQ291bGQgbm90IHJlc29sdmUgYXJ0aWZhY3QgZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50Omphcjpzb3VyY2VzOjAuMS1TTkFQU0hPVAorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6Nzc2KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3NDMpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzIwKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI3OSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZEF0dGFjaG1lbnRzKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI1NCkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZE1hdmVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjIyMSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTYxKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzcpCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNTEpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLmV4ZWN1dGUoTWF2ZW5JbXBsLmphdmE6MTM1NSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorQ29udGFpbnM6IE1pc3NpbmcgZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50Omphcjpzb3VyY2VzOjAuMS1TTkFQU0hPVAorIVNVQkVOVFJZIDEgb3JnLmVjbGlwc2UubTJlLmNvcmUgNCAtMSAyMDIxLTEwLTIzIDE5OjMzOjQwLjA2MAorIU1FU1NBR0UgQ291bGQgbm90IHJlc29sdmUgYXJ0aWZhY3QgZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50Omphcjpzb3VyY2VzOjAuMS1TTkFQU0hPVAorIVNVQkVOVFJZIDIgb3JnLmVjbGlwc2UubTJlLmNvcmUgNCAtMSAyMDIxLTEwLTIzIDE5OjMzOjQwLjA2MAorIU1FU1NBR0UgTWlzc2luZyBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6amFyOnNvdXJjZXM6MC4xLVNOQVBTSE9UCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciA0IDAgMjAyMS0xMC0yMyAxOTozMzo0MC4wOTgKKyFNRVNTQUdFIENvdWxkIG5vdCBkb3dubG9hZCBqYXZhZG9jIGZvciBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UCishU1RBQ0sgMQorb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb246IENvdWxkIG5vdCByZXNvbHZlIGFydGlmYWN0IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDpqYXI6amF2YWRvYzowLjEtU05BUFNIT1QKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjc3NikKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzQzKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjcyMCkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNzkpCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRBdHRhY2htZW50cyhEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNjUpCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRNYXZlbihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyMjEpCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjE2MSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM3KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTUxKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5leGVjdXRlKE1hdmVuSW1wbC5qYXZhOjEzNTUpCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKK0NvbnRhaW5zOiBNaXNzaW5nIGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDpqYXI6amF2YWRvYzowLjEtU05BUFNIT1QKKyFTVUJFTlRSWSAxIG9yZy5lY2xpcHNlLm0yZS5jb3JlIDQgLTEgMjAyMS0xMC0yMyAxOTozMzo0MC4wOTkKKyFNRVNTQUdFIENvdWxkIG5vdCByZXNvbHZlIGFydGlmYWN0IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDpqYXI6amF2YWRvYzowLjEtU05BUFNIT1QKKyFTVUJFTlRSWSAyIG9yZy5lY2xpcHNlLm0yZS5jb3JlIDQgLTEgMjAyMS0xMC0yMyAxOTozMzo0MC4wOTkKKyFNRVNTQUdFIE1pc3NpbmcgZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OmphcjpqYXZhZG9jOjAuMS1TTkFQU0hPVAorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjMgMTk6MzM6NDAuODYwCishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yMyAxOTozMzo0MC44NjMKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTIzIDE5OjMzOjQwLjk3MQorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjMgMTk6MzM6NDAuOTc0CishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yMyAxOTo0OTo0My40MDQKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTIzIDE5OjQ5OjQzLjQxMAorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjMgMTk6NDk6NDMuNjAzCishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yMyAxOTo0OTo0My42MjMKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTIzIDE5OjQ5OjQzLjkxNworIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjMgMTk6NDk6NDMuOTIzCishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yMyAxOTo0OTo0NC4wNTEKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLmpmYWNlIDIgMCAyMDIxLTEwLTIzIDE5OjQ5OjQ1Ljg0NworIU1FU1NBR0UgSWdub3JlZCByZWVudHJhbnQgY2FsbCB3aGlsZSB2aWV3ZXIgaXMgYnVzeS4gVGhpcyBpcyBvbmx5IGxvZ2dlZCBvbmNlIHBlciB2aWV3ZXIgaW5zdGFuY2UsIGJ1dCBzaW1pbGFyIGNhbGxzIHdpbGwgc3RpbGwgYmUgaWdub3JlZC4KKyFTVEFDSyAwCitqYXZhLmxhbmcuUnVudGltZUV4Y2VwdGlvbgorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ29sdW1uVmlld2VyLmNoZWNrQnVzeShDb2x1bW5WaWV3ZXIuamF2YTo3NjEpCisJYXQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5BYnN0cmFjdFRyZWVWaWV3ZXIuYWRkKEFic3RyYWN0VHJlZVZpZXdlci5qYXZhOjE1MCkKKwlhdCBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuQ29tbW9uVmlld2VyLmFkZChDb21tb25WaWV3ZXIuamF2YTozMDIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwubmF2aWdhdG9yLnJlc291cmNlcy53b3JrYmVuY2guUmVzb3VyY2VFeHRlbnNpb25Db250ZW50UHJvdmlkZXIkMy5ydW4oUmVzb3VyY2VFeHRlbnNpb25Db250ZW50UHJvdmlkZXIuamF2YToyODQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwubmF2aWdhdG9yLnJlc291cmNlcy53b3JrYmVuY2guUmVzb3VyY2VFeHRlbnNpb25Db250ZW50UHJvdmlkZXIucnVuVXBkYXRlcyhSZXNvdXJjZUV4dGVuc2lvbkNvbnRlbnRQcm92aWRlci5qYXZhOjMyMykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5uYXZpZ2F0b3IucmVzb3VyY2VzLndvcmtiZW5jaC5SZXNvdXJjZUV4dGVuc2lvbkNvbnRlbnRQcm92aWRlci5hY2Nlc3MkMShSZXNvdXJjZUV4dGVuc2lvbkNvbnRlbnRQcm92aWRlci5qYXZhOjMyMSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5uYXZpZ2F0b3IucmVzb3VyY2VzLndvcmtiZW5jaC5SZXNvdXJjZUV4dGVuc2lvbkNvbnRlbnRQcm92aWRlciQyLnJ1bihSZXNvdXJjZUV4dGVuc2lvbkNvbnRlbnRQcm92aWRlci5qYXZhOjE0MSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5SdW5uYWJsZUxvY2sucnVuKFJ1bm5hYmxlTG9jay5qYXZhOjM3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlN5bmNocm9uaXplci5ydW5Bc3luY01lc3NhZ2VzKFN5bmNocm9uaXplci5qYXZhOjE4MikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnJ1bkFzeW5jTWVzc2FnZXMoRGlzcGxheS5qYXZhOjM5MDYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5yZWFkQW5kRGlzcGF0Y2goRGlzcGxheS5qYXZhOjM1MzcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGlhbG9ncy5FdmVudExvb3BQcm9ncmVzc01vbml0b3IucnVuRXZlbnRMb29wKEV2ZW50TG9vcFByb2dyZXNzTW9uaXRvci5qYXZhOjEyNSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kaWFsb2dzLkV2ZW50TG9vcFByb2dyZXNzTW9uaXRvci5pc0NhbmNlbGVkKEV2ZW50TG9vcFByb2dyZXNzTW9uaXRvci5qYXZhOjk5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5UaHJlYWRKb2IuaXNDYW5jZWxlZChUaHJlYWRKb2IuamF2YToxNDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLlRocmVhZEpvYi53YWl0Rm9yUnVuKFRocmVhZEpvYi5qYXZhOjI3MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuVGhyZWFkSm9iLmpvaW5SdW4oVGhyZWFkSm9iLmphdmE6MjAyKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5JbXBsaWNpdEpvYnMuYmVnaW4oSW1wbGljaXRKb2JzLmphdmE6OTIpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLkpvYk1hbmFnZXIuYmVnaW5SdWxlKEpvYk1hbmFnZXIuamF2YTozMDgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya01hbmFnZXIuY2hlY2tJbihXb3JrTWFuYWdlci5qYXZhOjEyMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucHJlcGFyZU9wZXJhdGlvbihXb3Jrc3BhY2UuamF2YToyMjM3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjI4NCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIzMTYpCisJYXQgb3JnLmVjbGlwc2UuanN0LmplZS5tb2RlbC5pbnRlcm5hbC5jb21tb24uQWJzdHJhY3RNZXJnZWRNb2RlbFByb3ZpZGVyLmxvYWRNb2RlbChBYnN0cmFjdE1lcmdlZE1vZGVsUHJvdmlkZXIuamF2YToyNDkpCisJYXQgb3JnLmVjbGlwc2UuanN0LmplZS5tb2RlbC5pbnRlcm5hbC5jb21tb24uQWJzdHJhY3RNZXJnZWRNb2RlbFByb3ZpZGVyLmdldE1lcmdlZE1vZGVsKEFic3RyYWN0TWVyZ2VkTW9kZWxQcm92aWRlci5qYXZhOjIxOSkKKwlhdCBvcmcuZWNsaXBzZS5qc3QuamVlLm1vZGVsLmludGVybmFsLmNvbW1vbi5BYnN0cmFjdE1lcmdlZE1vZGVsUHJvdmlkZXIuZ2V0TW9kZWxPYmplY3QoQWJzdHJhY3RNZXJnZWRNb2RlbFByb3ZpZGVyLmphdmE6MTM5KQorCWF0IG9yZy5lY2xpcHNlLmpzdC5qZWUudWkuaW50ZXJuYWwubmF2aWdhdG9yLkpFRTVDb250ZW50UHJvdmlkZXIuZ2V0Q2FjaGVkQ29udGVudFByb3ZpZGVyKEpFRTVDb250ZW50UHJvdmlkZXIuamF2YTo5OCkKKwlhdCBvcmcuZWNsaXBzZS5qc3QuamVlLnVpLmludGVybmFsLm5hdmlnYXRvci5XZWIyNUNvbnRlbnRQcm92aWRlci5nZXRDaGlsZHJlbihXZWIyNUNvbnRlbnRQcm92aWRlci5qYXZhOjM1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLm5hdmlnYXRvci5leHRlbnNpb25zLlNhZmVEZWxlZ2F0ZVRyZWVDb250ZW50UHJvdmlkZXIuZ2V0Q2hpbGRyZW4oU2FmZURlbGVnYXRlVHJlZUNvbnRlbnRQcm92aWRlci5qYXZhOjk1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLm5hdmlnYXRvci5leHRlbnNpb25zLlNhZmVEZWxlZ2F0ZVRyZWVDb250ZW50UHJvdmlkZXIuZ2V0Q2hpbGRyZW4oU2FmZURlbGVnYXRlVHJlZUNvbnRlbnRQcm92aWRlci5qYXZhOjI0MSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5uYXZpZ2F0b3IuZXh0ZW5zaW9ucy5TYWZlRGVsZWdhdGVUcmVlQ29udGVudFByb3ZpZGVyLmdldENoaWxkcmVuKFNhZmVEZWxlZ2F0ZVRyZWVDb250ZW50UHJvdmlkZXIuamF2YTo5MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5uYXZpZ2F0b3IuTmF2aWdhdG9yQ29udGVudFNlcnZpY2VDb250ZW50UHJvdmlkZXIkMS5ydW4oTmF2aWdhdG9yQ29udGVudFNlcnZpY2VDb250ZW50UHJvdmlkZXIuamF2YToxNTcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5uYXZpZ2F0b3IuTmF2aWdhdG9yQ29udGVudFNlcnZpY2VDb250ZW50UHJvdmlkZXIuaW50ZXJuYWxHZXRDaGlsZHJlbihOYXZpZ2F0b3JDb250ZW50U2VydmljZUNvbnRlbnRQcm92aWRlci5qYXZhOjE0MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5uYXZpZ2F0b3IuTmF2aWdhdG9yQ29udGVudFNlcnZpY2VDb250ZW50UHJvdmlkZXIuZ2V0Q2hpbGRyZW4oTmF2aWdhdG9yQ29udGVudFNlcnZpY2VDb250ZW50UHJvdmlkZXIuamF2YToxMjkpCisJYXQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5BYnN0cmFjdFRyZWVWaWV3ZXIuZ2V0UmF3Q2hpbGRyZW4oQWJzdHJhY3RUcmVlVmlld2VyLmphdmE6MTQwOSkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXIuZ2V0UmF3Q2hpbGRyZW4oVHJlZVZpZXdlci5qYXZhOjM0NykKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXIuZ2V0RmlsdGVyZWRDaGlsZHJlbihTdHJ1Y3R1cmVkVmlld2VyLmphdmE6OTAwKQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQWJzdHJhY3RUcmVlVmlld2VyLmdldFNvcnRlZENoaWxkcmVuKEFic3RyYWN0VHJlZVZpZXdlci5qYXZhOjYxOCkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkFic3RyYWN0VHJlZVZpZXdlci51cGRhdGVDaGlsZHJlbihBYnN0cmFjdFRyZWVWaWV3ZXIuamF2YToyNjU3KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQWJzdHJhY3RUcmVlVmlld2VyLmludGVybmFsUmVmcmVzaFN0cnVjdChBYnN0cmFjdFRyZWVWaWV3ZXIuamF2YToxOTQ3KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlci5pbnRlcm5hbFJlZnJlc2hTdHJ1Y3QoVHJlZVZpZXdlci5qYXZhOjY3NCkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkFic3RyYWN0VHJlZVZpZXdlci5pbnRlcm5hbFJlZnJlc2hTdHJ1Y3QoQWJzdHJhY3RUcmVlVmlld2VyLmphdmE6MTk1MykKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXIuaW50ZXJuYWxSZWZyZXNoU3RydWN0KFRyZWVWaWV3ZXIuamF2YTo2NzQpCisJYXQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5BYnN0cmFjdFRyZWVWaWV3ZXIuaW50ZXJuYWxSZWZyZXNoKEFic3RyYWN0VHJlZVZpZXdlci5qYXZhOjE5MjMpCisJYXQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5BYnN0cmFjdFRyZWVWaWV3ZXIuaW50ZXJuYWxSZWZyZXNoKEFic3RyYWN0VHJlZVZpZXdlci5qYXZhOjE4ODApCisJYXQgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLkNvbW1vblZpZXdlci5pbnRlcm5hbFJlZnJlc2goQ29tbW9uVmlld2VyLmphdmE6NTI5KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlci5sYW1iZGEkMyhTdHJ1Y3R1cmVkVmlld2VyLmphdmE6MTUzMCkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXIucHJlc2VydmluZ1NlbGVjdGlvbihTdHJ1Y3R1cmVkVmlld2VyLmphdmE6MTQ0NikKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXIucHJlc2VydmluZ1NlbGVjdGlvbihUcmVlVmlld2VyLmphdmE6MzYwKQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlci5wcmVzZXJ2aW5nU2VsZWN0aW9uKFN0cnVjdHVyZWRWaWV3ZXIuamF2YToxNDA3KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlci5yZWZyZXNoKFN0cnVjdHVyZWRWaWV3ZXIuamF2YToxNTMwKQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ29sdW1uVmlld2VyLnJlZnJlc2goQ29sdW1uVmlld2VyLmphdmE6NTM1KQorCWF0IG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Db21tb25WaWV3ZXIucmVmcmVzaChDb21tb25WaWV3ZXIuamF2YTozNDkpCisJYXQgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLkNvbW1vblZpZXdlci5yZWZyZXNoKENvbW1vblZpZXdlci5qYXZhOjQ5MikKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXIucmVmcmVzaChTdHJ1Y3R1cmVkVmlld2VyLmphdmE6MTQ2NikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5uYXZpZ2F0b3IucmVzb3VyY2VzLmFjdGlvbnMuV29ya2luZ1NldEFjdGlvblByb3ZpZGVyJFdvcmtpbmdTZXRNYW5hZ2VyTGlzdGVuZXIucHJvcGVydHlDaGFuZ2UoV29ya2luZ1NldEFjdGlvblByb3ZpZGVyLmphdmE6MTE3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLkFic3RyYWN0V29ya2luZ1NldE1hbmFnZXIkNS5ydW4oQWJzdHJhY3RXb3JraW5nU2V0TWFuYWdlci5qYXZhOjM3NSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLkFic3RyYWN0V29ya2luZ1NldE1hbmFnZXIubGFtYmRhJDEoQWJzdHJhY3RXb3JraW5nU2V0TWFuYWdlci5qYXZhOjM4MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5BYnN0cmFjdFdvcmtpbmdTZXRNYW5hZ2VyLmZpcmVQcm9wZXJ0eUNoYW5nZShBYnN0cmFjdFdvcmtpbmdTZXRNYW5hZ2VyLmphdmE6Mzg4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLkFic3RyYWN0V29ya2luZ1NldE1hbmFnZXIud29ya2luZ1NldENoYW5nZWQoQWJzdHJhY3RXb3JraW5nU2V0TWFuYWdlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JraW5nU2V0TWFuYWdlci53b3JraW5nU2V0Q2hhbmdlZChXb3JraW5nU2V0TWFuYWdlci5qYXZhOjE2OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5BYnN0cmFjdFdvcmtpbmdTZXQuZmlyZVdvcmtpbmdTZXRDaGFuZ2VkKEFic3RyYWN0V29ya2luZ1NldC5qYXZhOjEzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JraW5nU2V0LnNldEVsZW1lbnRzKFdvcmtpbmdTZXQuamF2YToyNDIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLndvcmtpbmdzZXRzLkR5bmFtaWNTb3VyY2VzV29ya2luZ1NldFVwZGF0ZXIubGFtYmRhJDAoRHluYW1pY1NvdXJjZXNXb3JraW5nU2V0VXBkYXRlci5qYXZhOjIxNikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5SdW5uYWJsZUxvY2sucnVuKFJ1bm5hYmxlTG9jay5qYXZhOjM3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlN5bmNocm9uaXplci5ydW5Bc3luY01lc3NhZ2VzKFN5bmNocm9uaXplci5qYXZhOjE4MikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnJ1bkFzeW5jTWVzc2FnZXMoRGlzcGxheS5qYXZhOjM5MDYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5yZWFkQW5kRGlzcGF0Y2goRGlzcGxheS5qYXZhOjM1MzcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGlhbG9ncy5FdmVudExvb3BQcm9ncmVzc01vbml0b3IucnVuRXZlbnRMb29wKEV2ZW50TG9vcFByb2dyZXNzTW9uaXRvci5qYXZhOjEyNSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kaWFsb2dzLkV2ZW50TG9vcFByb2dyZXNzTW9uaXRvci5pc0NhbmNlbGVkKEV2ZW50TG9vcFByb2dyZXNzTW9uaXRvci5qYXZhOjk5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5UaHJlYWRKb2IuaXNDYW5jZWxlZChUaHJlYWRKb2IuamF2YToxNDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLlRocmVhZEpvYi53YWl0Rm9yUnVuKFRocmVhZEpvYi5qYXZhOjI3MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuVGhyZWFkSm9iLmpvaW5SdW4oVGhyZWFkSm9iLmphdmE6MjAyKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5JbXBsaWNpdEpvYnMuYmVnaW4oSW1wbGljaXRKb2JzLmphdmE6OTIpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLkpvYk1hbmFnZXIuYmVnaW5SdWxlKEpvYk1hbmFnZXIuamF2YTozMDgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya01hbmFnZXIuY2hlY2tJbihXb3JrTWFuYWdlci5qYXZhOjEyMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucHJlcGFyZU9wZXJhdGlvbihXb3Jrc3BhY2UuamF2YToyMjM3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjI4NCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIzMTYpCisJYXQgb3JnLmVjbGlwc2UuanN0LmplZS5tb2RlbC5pbnRlcm5hbC5jb21tb24uQWJzdHJhY3RNZXJnZWRNb2RlbFByb3ZpZGVyLmxvYWRNb2RlbChBYnN0cmFjdE1lcmdlZE1vZGVsUHJvdmlkZXIuamF2YToyNDkpCisJYXQgb3JnLmVjbGlwc2UuanN0LmplZS5tb2RlbC5pbnRlcm5hbC5jb21tb24uQWJzdHJhY3RNZXJnZWRNb2RlbFByb3ZpZGVyLmdldE1lcmdlZE1vZGVsKEFic3RyYWN0TWVyZ2VkTW9kZWxQcm92aWRlci5qYXZhOjIxOSkKKwlhdCBvcmcuZWNsaXBzZS5qc3QuamVlLm1vZGVsLmludGVybmFsLmNvbW1vbi5BYnN0cmFjdE1lcmdlZE1vZGVsUHJvdmlkZXIuZ2V0TW9kZWxPYmplY3QoQWJzdHJhY3RNZXJnZWRNb2RlbFByb3ZpZGVyLmphdmE6MTM5KQorCWF0IG9yZy5lY2xpcHNlLmpzdC5qZWUudWkuaW50ZXJuYWwubmF2aWdhdG9yLkpFRTVDb250ZW50UHJvdmlkZXIuZ2V0Q2FjaGVkQ29udGVudFByb3ZpZGVyKEpFRTVDb250ZW50UHJvdmlkZXIuamF2YTo5OCkKKwlhdCBvcmcuZWNsaXBzZS5qc3QuamVlLnVpLmludGVybmFsLm5hdmlnYXRvci5XZWIyNUNvbnRlbnRQcm92aWRlci5nZXRDaGlsZHJlbihXZWIyNUNvbnRlbnRQcm92aWRlci5qYXZhOjM1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLm5hdmlnYXRvci5leHRlbnNpb25zLlNhZmVEZWxlZ2F0ZVRyZWVDb250ZW50UHJvdmlkZXIuZ2V0Q2hpbGRyZW4oU2FmZURlbGVnYXRlVHJlZUNvbnRlbnRQcm92aWRlci5qYXZhOjk1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLm5hdmlnYXRvci5OYXZpZ2F0b3JDb250ZW50U2VydmljZUNvbnRlbnRQcm92aWRlciQxLnJ1bihOYXZpZ2F0b3JDb250ZW50U2VydmljZUNvbnRlbnRQcm92aWRlci5qYXZhOjE1NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLm5hdmlnYXRvci5OYXZpZ2F0b3JDb250ZW50U2VydmljZUNvbnRlbnRQcm92aWRlci5pbnRlcm5hbEdldENoaWxkcmVuKE5hdmlnYXRvckNvbnRlbnRTZXJ2aWNlQ29udGVudFByb3ZpZGVyLmphdmE6MTQzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLm5hdmlnYXRvci5OYXZpZ2F0b3JDb250ZW50U2VydmljZUNvbnRlbnRQcm92aWRlci5nZXRDaGlsZHJlbihOYXZpZ2F0b3JDb250ZW50U2VydmljZUNvbnRlbnRQcm92aWRlci5qYXZhOjEyMikKKwlhdCBvcmcuZWNsaXBzZS5qc3QuamVlLnVpLmludGVybmFsLm5hdmlnYXRvci5KRUU1Q29udGVudFByb3ZpZGVyJDEucnVuKEpFRTVDb250ZW50UHJvdmlkZXIuamF2YToxNDIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuUnVubmFibGVMb2NrLnJ1bihSdW5uYWJsZUxvY2suamF2YTozNykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TeW5jaHJvbml6ZXIucnVuQXN5bmNNZXNzYWdlcyhTeW5jaHJvbml6ZXIuamF2YToxODIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5ydW5Bc3luY01lc3NhZ2VzKERpc3BsYXkuamF2YTozOTA2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkucmVhZEFuZERpc3BhdGNoKERpc3BsYXkuamF2YTozNTM3KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ1LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6MTE3MCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6MTA1OSkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guRTRXb3JrYmVuY2guY3JlYXRlQW5kUnVuVUkoRTRXb3JrYmVuY2guamF2YToxNTMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQzKFdvcmtiZW5jaC5qYXZhOjY2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChXb3JrYmVuY2guamF2YTo1OTcpCisJYXQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSS5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goUGxhdGZvcm1VSS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFQXBwbGljYXRpb24uc3RhcnQoSURFQXBwbGljYXRpb24uamF2YToxNTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5hcHAuRWNsaXBzZUFwcEhhbmRsZS5ydW4oRWNsaXBzZUFwcEhhbmRsZS5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIucnVuQXBwbGljYXRpb24oRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5zdGFydChFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6Mzg4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjI0MykKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NjIpCisJYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjQzKQorCWF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6NDk4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5pbnZva2VGcmFtZXdvcmsoTWFpbi5qYXZhOjY1NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uYmFzaWNSdW4oTWFpbi5qYXZhOjU5MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4ucnVuKE1haW4uamF2YToxNDk4KQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjMgMTk6NDk6NDYuMDc0CishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yMyAxOTo0OTo0Ni4wNzgKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTIzIDE5OjQ5OjQ2LjE3OQorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjMgMTk6NDk6NDYuMTgyCishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yMyAxOTo0OTo0Ni4zMDQKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTIzIDE5OjQ5OjQ2LjMwOAorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjMgMTk6NDk6NDYuMzE3CishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yMyAxOTo0OTo0Ni40NzUKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTIzIDE5OjQ5OjQ2LjQ5NAorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorIVNFU1NJT04gMjAyMS0xMC0yMyAyMDoxMzoyNC43NzIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VjbGlwc2UuYnVpbGRJZD00LjguMC5JMjAxODA2MTEtMDUwMAoramF2YS52ZXJzaW9uPTEuOC4wXzIzMQoramF2YS52ZW5kb3I9T3JhY2xlIENvcnBvcmF0aW9uCitCb290TG9hZGVyIGNvbnN0YW50czogT1M9d2luMzIsIEFSQ0g9eDg2XzY0LCBXUz13aW4zMiwgTkw9ZGVfREUKK0ZyYW1ld29yayBhcmd1bWVudHM6ICAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKK0NvbW1hbmQtbGluZSBhcmd1bWVudHM6ICAtb3Mgd2luMzIgLXdzIHdpbjMyIC1hcmNoIHg4Nl82NCAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zIDQgMCAyMDIxLTEwLTIzIDIwOjEzOjM1LjY2OAorIU1FU1NBR0UgRnJhbWV3b3JrRXZlbnQgRVJST1IKKyFTVEFDSyAwCitvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOiBFeGNlcHRpb24gaW4gb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KCkgb2YgYnVuZGxlIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zLgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6ODAwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCS4uLiAxMiBtb3JlCitSb290IGV4Y2VwdGlvbjoKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUgMiAwIDIwMjEtMTAtMjMgMjA6MTM6NTIuNDU4CishTUVTU0FHRSBCdWlsdGluIExGUyBzdXBwb3J0IG5vdCBwcmVzZW50L2RldGVjdGVkCishU1RBQ0sgMAoramF2YS5sYW5nLkNsYXNzTm90Rm91bmRFeGNlcHRpb246IG9yZy5lY2xpcHNlLmpnaXQubGZzLkJ1aWx0aW5MRlMgY2Fubm90IGJlIGZvdW5kIGJ5IG9yZy5lY2xpcHNlLmVnaXQuY29yZV81LjAuMC4yMDE4MDYxMzE1NTAtcgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo1MDgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUwKE5hdGl2ZSBNZXRob2QpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUoQ2xhc3MuamF2YToyNjQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5yZWdpc3RlckJ1aWx0aW5MRlMoQWN0aXZhdG9yLmphdmE6Mjc5KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MjEyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLnNvdXJjZXMuU2luZ2xlU291cmNlUGFja2FnZS5sb2FkQ2xhc3MoU2luZ2xlU291cmNlUGFja2FnZS5qYXZhOjM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3IkUmVwb3NpdG9yeUNoYW5nZVNjYW5uZXIuPGluaXQ+KEFjdGl2YXRvci5qYXZhOjkyMSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zZXR1cFJlcG9DaGFuZ2VTY2FubmVyKEFjdGl2YXRvci5qYXZhOjEwMzQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLldvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5nZXRTb3VyY2VQcm92aWRlcnMoV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmphdmE6MTc0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLlNvdXJjZVByb3ZpZGVyU2VydmljZS5yZWFkUmVnaXN0cnkoU291cmNlUHJvdmlkZXJTZXJ2aWNlLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaCQzNC5ydW5XaXRoRXhjZXB0aW9uKFdvcmtiZW5jaC5qYXZhOjIzNzgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZyRTdGFydHVwUnVubmFibGUucnVuKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTozMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TeW5jaHJvbml6ZXIuc3luY0V4ZWMoU3luY2hyb25pemVyLmphdmE6MjMzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlVJU3luY2hyb25pemVyLnN5bmNFeGVjKFVJU3luY2hyb25pemVyLmphdmE6MTQ0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc3luY0V4ZWMoRGlzcGxheS5qYXZhOjQ1NjcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZy5ydW5XaXRob3V0RXhjZXB0aW9ucyhTdGFydHVwVGhyZWFkaW5nLmphdmE6OTUpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXRpYWxpemVEZWZhdWx0U2VydmljZXMoV29ya2JlbmNoLmphdmE6MjM3MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdChXb3JrYmVuY2guamF2YToxNjU0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5ydW5VSShXb3JrYmVuY2guamF2YToyODU5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkMyhXb3JrYmVuY2guamF2YTo2NTQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goV29ya2JlbmNoLmphdmE6NTk3KQorCWF0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUkuY3JlYXRlQW5kUnVuV29ya2JlbmNoKFBsYXRmb3JtVUkuamF2YToxNDgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERUFwcGxpY2F0aW9uLnN0YXJ0KElERUFwcGxpY2F0aW9uLmphdmE6MTUyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuYXBwLkVjbGlwc2VBcHBIYW5kbGUucnVuKEVjbGlwc2VBcHBIYW5kbGUuamF2YToxOTYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnJ1bkFwcGxpY2F0aW9uKEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEzNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIuc3RhcnQoRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjM4OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YToyNDMpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKE5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjYyKQorCWF0IHN1bi5yZWZsZWN0LkRlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKERlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuamF2YTo0MykKKwlhdCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuaW52b2tlKE1ldGhvZC5qYXZhOjQ5OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uaW52b2tlRnJhbWV3b3JrKE1haW4uamF2YTo2NTYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmJhc2ljUnVuKE1haW4uamF2YTo1OTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLnJ1bihNYWluLmphdmE6MTQ5OCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQudWkgMiAwIDIwMjEtMTAtMjMgMjA6MTQ6MzAuNzM3CishTUVTU0FHRSBXYXJuaW5nOiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgSE9NRSBpcyBub3Qgc2V0LiBUaGUgZm9sbG93aW5nIGRpcmVjdG9yeSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIEdpdAordXNlciBnbG9iYWwgY29uZmlndXJhdGlvbiBhbmQgdG8gZGVmaW5lIHRoZSBkZWZhdWx0IGxvY2F0aW9uIHRvIHN0b3JlIHJlcG9zaXRvcmllczogJ0M6XFVzZXJzXEZyYW5jaycuIElmIHRoaXMgaXMKK25vdCBjb3JyZWN0IHBsZWFzZSBzZXQgdGhlIEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIHJlc3RhcnQgRWNsaXBzZS4gT3RoZXJ3aXNlIEdpdCBmb3IgV2luZG93cyBhbmQKK0VHaXQgbWlnaHQgYmVoYXZlIGRpZmZlcmVudGx5IHNpbmNlIHRoZXkgc2VlIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCitUaGlzIHdhcm5pbmcgY2FuIGJlIHN3aXRjaGVkIG9mZiBvbiB0aGUgVGVhbSA+IEdpdCA+IENvbmZpcm1hdGlvbnMgYW5kIFdhcm5pbmdzIHByZWZlcmVuY2UgcGFnZS4KKworIUVOVFJZIG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlIDIgMTcgMjAyMS0xMC0yMyAyMDoxNDozMi4yMjUKKyFNRVNTQUdFIFNlcnZlciDigJhvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXLigJkgZmFpbGVkIHdpdGggZXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJC4gOyB2ZXJzaW9uOiAyLjAuNy52MjAxNzA5MDYtMTMyNworIVNUQUNLIDAKK2NvbS5nb29nbGUuZ3Nvbi5Kc29uU3ludGF4RXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMjQpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg4OCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODUzKQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4MDIpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLmpzb24uSnNvbi5kZXNlcmlhbGl6ZShKc29uLmphdmE6OTEpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuSU8ucmVmcmVzaENvbmZpZ3VyYXRpb24oSU8uamF2YTo2NikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5TZXJ2ZXJDb25uZWN0aW9uLnN0YXJ0VXAoU2VydmVyQ29ubmVjdGlvbi5qYXZhOjEyNCkKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RJZGxlU2VydmljZSREZWxlZ2F0ZVNlcnZpY2UkMS5ydW4oQWJzdHJhY3RJZGxlU2VydmljZS5qYXZhOjYyKQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5DYWxsYWJsZXMkNC5ydW4oQ2FsbGFibGVzLmphdmE6MTIyKQorCWF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uc3RyZWFtLkpzb25SZWFkZXIuYmVnaW5PYmplY3QoSnNvblJlYWRlci5qYXZhOjM4NSkKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjEzKQorCS4uLiA5IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpIDQgMCAyMDIxLTEwLTIzIDIwOjE0OjQ1Ljk2MgorIU1FU1NBR0UgUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKyFTVEFDSyAwCitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRLbm93blJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NDgwKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyJEFydGlmYWN0LmdldEtub3duUmVwb3NpdG9yaWVzKENhY2hpbmdSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjYyMykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5jb3JlLlAyVXRpbC5nZXRLbm93blJlcG9zaXRvcmllcyhQMlV0aWwuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5wMi5pbXBsLlAyVGFza0ltcGwuaXNOZWVkZWQoUDJUYXNrSW1wbC5qYXZhOjcwMSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5pbnRlcm5hbC5jb3JlLlNldHVwVGFza1BlcmZvcm1lci5pbml0TmVlZGVkU2V0dXBUYXNrcyhTZXR1cFRhc2tQZXJmb3JtZXIuamF2YToyMjczKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4ucGVyZm9ybVN0YXJ0dXAoU2V0dXBVSVBsdWdpbi5qYXZhOjY3OSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLmFjY2VzcyQ1KFNldHVwVUlQbHVnaW4uamF2YTo0MTUpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbiQxJDEucnVuKFNldHVwVUlQbHVnaW4uamF2YToyNTIpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCishU0VTU0lPTiAyMDIxLTEwLTI1IDA5OjM2OjU4Ljc1MiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNsaXBzZS5idWlsZElkPTQuOC4wLkkyMDE4MDYxMS0wNTAwCitqYXZhLnZlcnNpb249MS44LjBfMjMxCitqYXZhLnZlbmRvcj1PcmFjbGUgQ29ycG9yYXRpb24KK0Jvb3RMb2FkZXIgY29uc3RhbnRzOiBPUz13aW4zMiwgQVJDSD14ODZfNjQsIFdTPXdpbjMyLCBOTD1kZV9ERQorRnJhbWV3b3JrIGFyZ3VtZW50czogIC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorQ29tbWFuZC1saW5lIGFyZ3VtZW50czogIC1vcyB3aW4zMiAtd3Mgd2luMzIgLWFyY2ggeDg2XzY0IC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorCishRU5UUlkgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMgNCAwIDIwMjEtMTAtMjUgMDk6Mzc6MDguNzk4CishTUVTU0FHRSBGcmFtZXdvcmtFdmVudCBFUlJPUgorIVNUQUNLIDAKK29yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb246IEV4Y2VwdGlvbiBpbiBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoKSBvZiBidW5kbGUgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo4MDApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJLi4uIDEyIG1vcmUKK1Jvb3QgZXhjZXB0aW9uOgoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQuY29yZSAyIDAgMjAyMS0xMC0yNSAwOTozNzoyNS4wMTUKKyFNRVNTQUdFIEJ1aWx0aW4gTEZTIHN1cHBvcnQgbm90IHByZXNlbnQvZGV0ZWN0ZWQKKyFTVEFDSyAwCitqYXZhLmxhbmcuQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbjogb3JnLmVjbGlwc2UuamdpdC5sZnMuQnVpbHRpbkxGUyBjYW5ub3QgYmUgZm91bmQgYnkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlXzUuMC4wLjIwMTgwNjEzMTU1MC1yCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjUwOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZShDbGFzcy5qYXZhOjI2NCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnJlZ2lzdGVyQnVpbHRpbkxGUyhBY3RpdmF0b3IuamF2YToyNzkpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToyMTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuc291cmNlcy5TaW5nbGVTb3VyY2VQYWNrYWdlLmxvYWRDbGFzcyhTaW5nbGVTb3VyY2VQYWNrYWdlLmphdmE6MzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvciRSZXBvc2l0b3J5Q2hhbmdlU2Nhbm5lci48aW5pdD4oQWN0aXZhdG9yLmphdmE6OTIxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnNldHVwUmVwb0NoYW5nZVNjYW5uZXIoQWN0aXZhdG9yLmphdmE6MTAzNCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmdldFNvdXJjZVByb3ZpZGVycyhXb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuamF2YToxNzQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuU291cmNlUHJvdmlkZXJTZXJ2aWNlLnJlYWRSZWdpc3RyeShTb3VyY2VQcm92aWRlclNlcnZpY2UuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoJDM0LnJ1bldpdGhFeGNlcHRpb24oV29ya2JlbmNoLmphdmE6MjM3OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nJFN0YXJ0dXBSdW5uYWJsZS5ydW4oU3RhcnR1cFRocmVhZGluZy5qYXZhOjMyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlN5bmNocm9uaXplci5zeW5jRXhlYyhTeW5jaHJvbml6ZXIuamF2YToyMzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuVUlTeW5jaHJvbml6ZXIuc3luY0V4ZWMoVUlTeW5jaHJvbml6ZXIuamF2YToxNDQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zeW5jRXhlYyhEaXNwbGF5LmphdmE6NDU2NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nLnJ1bldpdGhvdXRFeGNlcHRpb25zKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTo5NSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdGlhbGl6ZURlZmF1bHRTZXJ2aWNlcyhXb3JrYmVuY2guamF2YToyMzczKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0KFdvcmtiZW5jaC5qYXZhOjE2NTQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLnJ1blVJKFdvcmtiZW5jaC5qYXZhOjI4NTkpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQzKFdvcmtiZW5jaC5qYXZhOjY1NCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChXb3JrYmVuY2guamF2YTo1OTcpCisJYXQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSS5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goUGxhdGZvcm1VSS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFQXBwbGljYXRpb24uc3RhcnQoSURFQXBwbGljYXRpb24uamF2YToxNTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5hcHAuRWNsaXBzZUFwcEhhbmRsZS5ydW4oRWNsaXBzZUFwcEhhbmRsZS5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIucnVuQXBwbGljYXRpb24oRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5zdGFydChFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6Mzg4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjI0MykKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NjIpCisJYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjQzKQorCWF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6NDk4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5pbnZva2VGcmFtZXdvcmsoTWFpbi5qYXZhOjY1NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uYmFzaWNSdW4oTWFpbi5qYXZhOjU5MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4ucnVuKE1haW4uamF2YToxNDk4KQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC51aSAyIDAgMjAyMS0xMC0yNSAwOTozODoxNS4yMTQKKyFNRVNTQUdFIFdhcm5pbmc6IFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBIT01FIGlzIG5vdCBzZXQuIFRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5IHdpbGwgYmUgdXNlZCB0byBzdG9yZSB0aGUgR2l0Cit1c2VyIGdsb2JhbCBjb25maWd1cmF0aW9uIGFuZCB0byBkZWZpbmUgdGhlIGRlZmF1bHQgbG9jYXRpb24gdG8gc3RvcmUgcmVwb3NpdG9yaWVzOiAnQzpcVXNlcnNcRnJhbmNrJy4gSWYgdGhpcyBpcworbm90IGNvcnJlY3QgcGxlYXNlIHNldCB0aGUgSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgcmVzdGFydCBFY2xpcHNlLiBPdGhlcndpc2UgR2l0IGZvciBXaW5kb3dzIGFuZAorRUdpdCBtaWdodCBiZWhhdmUgZGlmZmVyZW50bHkgc2luY2UgdGhleSBzZWUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KK1RoaXMgd2FybmluZyBjYW4gYmUgc3dpdGNoZWQgb2ZmIG9uIHRoZSBUZWFtID4gR2l0ID4gQ29uZmlybWF0aW9ucyBhbmQgV2FybmluZ3MgcHJlZmVyZW5jZSBwYWdlLgorCishRU5UUlkgb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUgMiAxNyAyMDIxLTEwLTI1IDA5OjM4OjE5Ljk5NworIU1FU1NBR0UgU2VydmVyIOKAmG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlcuKAmSBmYWlsZWQgd2l0aCBleGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkLiA7IHZlcnNpb246IDIuMC43LnYyMDE3MDkwNi0xMzI3CishU1RBQ0sgMAorY29tLmdvb2dsZS5nc29uLkpzb25TeW50YXhFeGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIyNCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODg4KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4NTMpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjgwMikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIuanNvbi5Kc29uLmRlc2VyaWFsaXplKEpzb24uamF2YTo5MSkKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5JTy5yZWZyZXNoQ29uZmlndXJhdGlvbihJTy5qYXZhOjY2KQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLlNlcnZlckNvbm5lY3Rpb24uc3RhcnRVcChTZXJ2ZXJDb25uZWN0aW9uLmphdmE6MTI0KQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdElkbGVTZXJ2aWNlJERlbGVnYXRlU2VydmljZSQxLnJ1bihBYnN0cmFjdElkbGVTZXJ2aWNlLmphdmE6NjIpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkNhbGxhYmxlcyQ0LnJ1bihDYWxsYWJsZXMuamF2YToxMjIpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5zdHJlYW0uSnNvblJlYWRlci5iZWdpbk9iamVjdChKc29uUmVhZGVyLmphdmE6Mzg1KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMTMpCisJLi4uIDkgbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkgNCAwIDIwMjEtMTAtMjUgMDk6Mzg6MzYuNDk3CishTUVTU0FHRSBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorIVNUQUNLIDAKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldEtub3duUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo0ODApCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5DYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIkQXJ0aWZhY3QuZ2V0S25vd25SZXBvc2l0b3JpZXMoQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjIzKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmNvcmUuUDJVdGlsLmdldEtub3duUmVwb3NpdG9yaWVzKFAyVXRpbC5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnAyLmltcGwuUDJUYXNrSW1wbC5pc05lZWRlZChQMlRhc2tJbXBsLmphdmE6NzAxKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLmludGVybmFsLmNvcmUuU2V0dXBUYXNrUGVyZm9ybWVyLmluaXROZWVkZWRTZXR1cFRhc2tzKFNldHVwVGFza1BlcmZvcm1lci5qYXZhOjIyNzMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5wZXJmb3JtU3RhcnR1cChTZXR1cFVJUGx1Z2luLmphdmE6Njc5KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4uYWNjZXNzJDUoU2V0dXBVSVBsdWdpbi5qYXZhOjQxNSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luJDEkMS5ydW4oU2V0dXBVSVBsdWdpbi5qYXZhOjI1MikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTI1IDE5OjAzOjMyLjU5NAorIU1FU1NBR0UgRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCishU1RBQ0sgMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApCisJLi4uIDggbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3AgMSAwIDIwMjEtMTAtMjUgMTk6MDM6MzIuNjM0CishTUVTU0FHRSBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgZnJvbSB0aGUgbW9kZWwgcmVwb3NpdG9yaWVzLiBBcmUgeW91IG9mZmxpbmU/CishU0VTU0lPTiAyMDIxLTEwLTI2IDA3OjE5OjM2LjcyMSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNsaXBzZS5idWlsZElkPTQuOC4wLkkyMDE4MDYxMS0wNTAwCitqYXZhLnZlcnNpb249MS44LjBfMjMxCitqYXZhLnZlbmRvcj1PcmFjbGUgQ29ycG9yYXRpb24KK0Jvb3RMb2FkZXIgY29uc3RhbnRzOiBPUz13aW4zMiwgQVJDSD14ODZfNjQsIFdTPXdpbjMyLCBOTD1kZV9ERQorRnJhbWV3b3JrIGFyZ3VtZW50czogIC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorQ29tbWFuZC1saW5lIGFyZ3VtZW50czogIC1vcyB3aW4zMiAtd3Mgd2luMzIgLWFyY2ggeDg2XzY0IC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorCishRU5UUlkgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMgNCAwIDIwMjEtMTAtMjYgMDc6MTk6NDcuNzgzCishTUVTU0FHRSBGcmFtZXdvcmtFdmVudCBFUlJPUgorIVNUQUNLIDAKK29yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb246IEV4Y2VwdGlvbiBpbiBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoKSBvZiBidW5kbGUgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo4MDApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJLi4uIDEyIG1vcmUKK1Jvb3QgZXhjZXB0aW9uOgoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQuY29yZSAyIDAgMjAyMS0xMC0yNiAwNzoyMDowNi4zNjEKKyFNRVNTQUdFIEJ1aWx0aW4gTEZTIHN1cHBvcnQgbm90IHByZXNlbnQvZGV0ZWN0ZWQKKyFTVEFDSyAwCitqYXZhLmxhbmcuQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbjogb3JnLmVjbGlwc2UuamdpdC5sZnMuQnVpbHRpbkxGUyBjYW5ub3QgYmUgZm91bmQgYnkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlXzUuMC4wLjIwMTgwNjEzMTU1MC1yCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjUwOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZShDbGFzcy5qYXZhOjI2NCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnJlZ2lzdGVyQnVpbHRpbkxGUyhBY3RpdmF0b3IuamF2YToyNzkpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToyMTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuc291cmNlcy5TaW5nbGVTb3VyY2VQYWNrYWdlLmxvYWRDbGFzcyhTaW5nbGVTb3VyY2VQYWNrYWdlLmphdmE6MzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvciRSZXBvc2l0b3J5Q2hhbmdlU2Nhbm5lci48aW5pdD4oQWN0aXZhdG9yLmphdmE6OTIxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnNldHVwUmVwb0NoYW5nZVNjYW5uZXIoQWN0aXZhdG9yLmphdmE6MTAzNCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmdldFNvdXJjZVByb3ZpZGVycyhXb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuamF2YToxNzQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuU291cmNlUHJvdmlkZXJTZXJ2aWNlLnJlYWRSZWdpc3RyeShTb3VyY2VQcm92aWRlclNlcnZpY2UuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoJDM0LnJ1bldpdGhFeGNlcHRpb24oV29ya2JlbmNoLmphdmE6MjM3OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nJFN0YXJ0dXBSdW5uYWJsZS5ydW4oU3RhcnR1cFRocmVhZGluZy5qYXZhOjMyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlN5bmNocm9uaXplci5zeW5jRXhlYyhTeW5jaHJvbml6ZXIuamF2YToyMzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuVUlTeW5jaHJvbml6ZXIuc3luY0V4ZWMoVUlTeW5jaHJvbml6ZXIuamF2YToxNDQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zeW5jRXhlYyhEaXNwbGF5LmphdmE6NDU2NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nLnJ1bldpdGhvdXRFeGNlcHRpb25zKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTo5NSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdGlhbGl6ZURlZmF1bHRTZXJ2aWNlcyhXb3JrYmVuY2guamF2YToyMzczKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0KFdvcmtiZW5jaC5qYXZhOjE2NTQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLnJ1blVJKFdvcmtiZW5jaC5qYXZhOjI4NTkpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQzKFdvcmtiZW5jaC5qYXZhOjY1NCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChXb3JrYmVuY2guamF2YTo1OTcpCisJYXQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSS5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goUGxhdGZvcm1VSS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFQXBwbGljYXRpb24uc3RhcnQoSURFQXBwbGljYXRpb24uamF2YToxNTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5hcHAuRWNsaXBzZUFwcEhhbmRsZS5ydW4oRWNsaXBzZUFwcEhhbmRsZS5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIucnVuQXBwbGljYXRpb24oRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5zdGFydChFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6Mzg4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjI0MykKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NjIpCisJYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjQzKQorCWF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6NDk4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5pbnZva2VGcmFtZXdvcmsoTWFpbi5qYXZhOjY1NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uYmFzaWNSdW4oTWFpbi5qYXZhOjU5MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4ucnVuKE1haW4uamF2YToxNDk4KQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC51aSAyIDAgMjAyMS0xMC0yNiAwNzoyMTo1MS4wOTgKKyFNRVNTQUdFIFdhcm5pbmc6IFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBIT01FIGlzIG5vdCBzZXQuIFRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5IHdpbGwgYmUgdXNlZCB0byBzdG9yZSB0aGUgR2l0Cit1c2VyIGdsb2JhbCBjb25maWd1cmF0aW9uIGFuZCB0byBkZWZpbmUgdGhlIGRlZmF1bHQgbG9jYXRpb24gdG8gc3RvcmUgcmVwb3NpdG9yaWVzOiAnQzpcVXNlcnNcRnJhbmNrJy4gSWYgdGhpcyBpcworbm90IGNvcnJlY3QgcGxlYXNlIHNldCB0aGUgSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgcmVzdGFydCBFY2xpcHNlLiBPdGhlcndpc2UgR2l0IGZvciBXaW5kb3dzIGFuZAorRUdpdCBtaWdodCBiZWhhdmUgZGlmZmVyZW50bHkgc2luY2UgdGhleSBzZWUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KK1RoaXMgd2FybmluZyBjYW4gYmUgc3dpdGNoZWQgb2ZmIG9uIHRoZSBUZWFtID4gR2l0ID4gQ29uZmlybWF0aW9ucyBhbmQgV2FybmluZ3MgcHJlZmVyZW5jZSBwYWdlLgorCishRU5UUlkgb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUgMiAxNyAyMDIxLTEwLTI2IDA3OjIxOjUzLjk3NworIU1FU1NBR0UgU2VydmVyIOKAmG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlcuKAmSBmYWlsZWQgd2l0aCBleGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkLiA7IHZlcnNpb246IDIuMC43LnYyMDE3MDkwNi0xMzI3CishU1RBQ0sgMAorY29tLmdvb2dsZS5nc29uLkpzb25TeW50YXhFeGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIyNCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODg4KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4NTMpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjgwMikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIuanNvbi5Kc29uLmRlc2VyaWFsaXplKEpzb24uamF2YTo5MSkKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5JTy5yZWZyZXNoQ29uZmlndXJhdGlvbihJTy5qYXZhOjY2KQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLlNlcnZlckNvbm5lY3Rpb24uc3RhcnRVcChTZXJ2ZXJDb25uZWN0aW9uLmphdmE6MTI0KQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdElkbGVTZXJ2aWNlJERlbGVnYXRlU2VydmljZSQxLnJ1bihBYnN0cmFjdElkbGVTZXJ2aWNlLmphdmE6NjIpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkNhbGxhYmxlcyQ0LnJ1bihDYWxsYWJsZXMuamF2YToxMjIpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5zdHJlYW0uSnNvblJlYWRlci5iZWdpbk9iamVjdChKc29uUmVhZGVyLmphdmE6Mzg1KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMTMpCisJLi4uIDkgbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkgNCAwIDIwMjEtMTAtMjYgMDc6MjI6MDYuMzk1CishTUVTU0FHRSBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorIVNUQUNLIDAKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldEtub3duUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo0ODApCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5DYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIkQXJ0aWZhY3QuZ2V0S25vd25SZXBvc2l0b3JpZXMoQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjIzKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmNvcmUuUDJVdGlsLmdldEtub3duUmVwb3NpdG9yaWVzKFAyVXRpbC5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnAyLmltcGwuUDJUYXNrSW1wbC5pc05lZWRlZChQMlRhc2tJbXBsLmphdmE6NzAxKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLmludGVybmFsLmNvcmUuU2V0dXBUYXNrUGVyZm9ybWVyLmluaXROZWVkZWRTZXR1cFRhc2tzKFNldHVwVGFza1BlcmZvcm1lci5qYXZhOjIyNzMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5wZXJmb3JtU3RhcnR1cChTZXR1cFVJUGx1Z2luLmphdmE6Njc5KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4uYWNjZXNzJDUoU2V0dXBVSVBsdWdpbi5qYXZhOjQxNSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luJDEkMS5ydW4oU2V0dXBVSVBsdWdpbi5qYXZhOjI1MikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTI2IDA3OjI3OjQwLjQ0NQorIU1FU1NBR0UgRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCishU1RBQ0sgMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApCisJLi4uIDggbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3AgMSAwIDIwMjEtMTAtMjYgMDc6Mjc6NDAuNDQ4CishTUVTU0FHRSBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgZnJvbSB0aGUgbW9kZWwgcmVwb3NpdG9yaWVzLiBBcmUgeW91IG9mZmxpbmU/CisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yNiAwNzo1ODo1OS4yNzcKKyFNRVNTQUdFIFVua25vd24gb3IgdW5zdXBwb3J0ZWQgc291cmNlIGxvY2F0b3Igb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmxhdW5jaGluZy5zb3VyY2Vsb29rdXAuYWR2YW5jZWQuQWR2YW5jZWRTb3VyY2VMb29rdXBEaXJlY3RvcgorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjYgMTU6MjA6NTMuNjMzCishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yNiAxNToyMDo1My42MzkKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTI2IDE1OjIwOjU1LjI4NgorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjYgMTU6MjA6NTUuMjkzCishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yNiAxNToyMDo1NS43ODAKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTI2IDE1OjIwOjU1Ljc4NgorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjYgMTU6MjA6NTYuMTk4CishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yNiAxNToyMTowMS42MDkKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTI2IDE1OjIxOjAxLjY1NgorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjYgMTU6MjE6MDEuODQzCishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yNiAxNToyMTowMS44NTAKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTI2IDE1OjIxOjAyLjI0NgorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjYgMTU6MjE6MDIuMjUxCishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yNiAxNToyMTowMi4yNzIKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTI2IDE1OjIxOjAyLjU1OQorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjYgMTU6MjE6MDIuNTcxCishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS51aSA0IDAgMjAyMS0xMC0yNiAxNjo1Mzo0Ny43NDkKKyFNRVNTQUdFIFVuaGFuZGxlZCBldmVudCBsb29wIGV4Y2VwdGlvbgorIVNUQUNLIDAKK29yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb246IEdyYXBoaWMgaXMgZGlzcG9zZWQKKwlhdCBvcmcuZWNsaXBzZS5zd3QuU1dULmVycm9yKFNXVC5qYXZhOjQ1NTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LlNXVC5lcnJvcihTV1QuamF2YTo0NDY3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5TV1QuZXJyb3IoU1dULmphdmE6NDQzOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2UuZ2V0Qm91bmRzKEltYWdlLmphdmE6MTI2MykKKwlhdCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNMYWJlbC5nZXRUb3RhbFNpemUoQ0xhYmVsLmphdmE6MjY2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ0xhYmVsLm9uUGFpbnQoQ0xhYmVsLmphdmE6NDI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ0xhYmVsLmxhbWJkYSQwKENMYWJlbC5qYXZhOjExOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UeXBlZExpc3RlbmVyLmhhbmRsZUV2ZW50KFR5cGVkTGlzdGVuZXIuamF2YToyMzEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnRUYWJsZS5zZW5kRXZlbnQoRXZlbnRUYWJsZS5qYXZhOjg2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc2VuZEV2ZW50KERpc3BsYXkuamF2YTo0MTE4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA1MikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNzYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDYxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5XTV9QQUlOVChDb21wb3NpdGUuamF2YToxNTYxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wud2luZG93UHJvYyhDb250cm9sLmphdmE6NDgyMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5DYW52YXMud2luZG93UHJvYyhDYW52YXMuamF2YTozNDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS53aW5kb3dQcm9jKERpc3BsYXkuamF2YTo0NzY1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5WdGJsQ2FsbChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC5vbGUud2luMzIuSU9sZUluUGxhY2VPYmplY3QuSW5QbGFjZURlYWN0aXZhdGUoSU9sZUluUGxhY2VPYmplY3QuamF2YToyMSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qub2xlLndpbjMyLk9sZUNsaWVudFNpdGUuZGVhY3RpdmF0ZUluUGxhY2VDbGllbnQoT2xlQ2xpZW50U2l0ZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qub2xlLndpbjMyLk9sZUNsaWVudFNpdGUub25EaXNwb3NlKE9sZUNsaWVudFNpdGUuamF2YTo5NTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0Lm9sZS53aW4zMi5PbGVDbGllbnRTaXRlLmFjY2VzcyQxKE9sZUNsaWVudFNpdGUuamF2YTo5NDYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0Lm9sZS53aW4zMi5PbGVDbGllbnRTaXRlJDEuaGFuZGxlRXZlbnQoT2xlQ2xpZW50U2l0ZS5qYXZhOjEyOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudFRhYmxlLnNlbmRFdmVudChFdmVudFRhYmxlLmphdmE6ODYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zZW5kRXZlbnQoRGlzcGxheS5qYXZhOjQxMTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDUyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA3NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNTcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODA5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhcy5yZWxlYXNlQ2hpbGRyZW4oQ2FudmFzLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLnJlbGVhc2VDaGlsZHJlbihEZWNvcmF0aW9ucy5qYXZhOjcyOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC5yZWxlYXNlQ2hpbGRyZW4oU2hlbGwuamF2YToxMzQwKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuZGlzcG9zZShXaWRnZXQuamF2YTo0MjYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGVjb3JhdGlvbnMuZGlzcG9zZShEZWNvcmF0aW9ucy5qYXZhOjQwNSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC5kaXNwb3NlKFNoZWxsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQWJzdHJhY3RJbmZvcm1hdGlvbkNvbnRyb2wuZGlzcG9zZShBYnN0cmFjdEluZm9ybWF0aW9uQ29udHJvbC5qYXZhOjUyMSkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkFic3RyYWN0SW5mb3JtYXRpb25Db250cm9sTWFuYWdlci5kaXNwb3NlSW5mb3JtYXRpb25Db250cm9sKEFic3RyYWN0SW5mb3JtYXRpb25Db250cm9sTWFuYWdlci5qYXZhOjEzMTkpCisJYXQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5BYnN0cmFjdEluZm9ybWF0aW9uQ29udHJvbE1hbmFnZXIuZGlzcG9zZShBYnN0cmFjdEluZm9ybWF0aW9uQ29udHJvbE1hbmFnZXIuamF2YToxMzM0KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQWJzdHJhY3RJbmZvcm1hdGlvbkNvbnRyb2xNYW5hZ2VyLmRpc3Bvc2UoQWJzdHJhY3RJbmZvcm1hdGlvbkNvbnRyb2xNYW5hZ2VyLmphdmE6MTMzNykKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkFic3RyYWN0SG92ZXJJbmZvcm1hdGlvbkNvbnRyb2xNYW5hZ2VyLmRpc3Bvc2UoQWJzdHJhY3RIb3ZlckluZm9ybWF0aW9uQ29udHJvbE1hbmFnZXIuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5UZXh0Vmlld2VySG92ZXJNYW5hZ2VyLmRpc3Bvc2UoVGV4dFZpZXdlckhvdmVyTWFuYWdlci5qYXZhOjM3OCkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlRleHRWaWV3ZXIuaGFuZGxlRGlzcG9zZShUZXh0Vmlld2VyLmphdmE6MTg3NCkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5Tb3VyY2VWaWV3ZXIuaGFuZGxlRGlzcG9zZShTb3VyY2VWaWV3ZXIuamF2YTo3ODgpCisJYXQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UucHJvamVjdGlvbi5Qcm9qZWN0aW9uVmlld2VyLmhhbmRsZURpc3Bvc2UoUHJvamVjdGlvblZpZXdlci5qYXZhOjEyOTYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLmphdmFlZGl0b3IuSmF2YVNvdXJjZVZpZXdlci5oYW5kbGVEaXNwb3NlKEphdmFTb3VyY2VWaWV3ZXIuamF2YTo1MDkpCisJYXQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5UZXh0Vmlld2VyJDIud2lkZ2V0RGlzcG9zZWQoVGV4dFZpZXdlci5qYXZhOjE3MzEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHlwZWRMaXN0ZW5lci5oYW5kbGVFdmVudChUeXBlZExpc3RlbmVyLmphdmE6MTI0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50VGFibGUuc2VuZEV2ZW50KEV2ZW50VGFibGUuamF2YTo4NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnNlbmRFdmVudChEaXNwbGF5LmphdmE6NDExOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDc2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA2MSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQubm90aWZ5TGlzdGVuZXJzKFdpZGdldC5qYXZhOjc3NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLlN0eWxlZFRleHQuaGFuZGxlRGlzcG9zZShTdHlsZWRUZXh0LmphdmE6NTkxOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLlN0eWxlZFRleHQubGFtYmRhJDEoU3R5bGVkVGV4dC5qYXZhOjU3MzkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnRUYWJsZS5zZW5kRXZlbnQoRXZlbnRUYWJsZS5qYXZhOjg2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc2VuZEV2ZW50KERpc3BsYXkuamF2YTo0MTE4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA1MikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNzYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDU3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgwOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5DYW52YXMucmVsZWFzZUNoaWxkcmVuKENhbnZhcy5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LmRpc3Bvc2UoV2lkZ2V0LmphdmE6NDI2KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5yZW5kZXJlcnMuc3d0LlNXVFBhcnRSZW5kZXJlci5kaXNwb3NlV2lkZ2V0KFNXVFBhcnRSZW5kZXJlci5qYXZhOjE3MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC5Db250cmlidXRlZFBhcnRSZW5kZXJlci5kaXNwb3NlV2lkZ2V0KENvbnRyaWJ1dGVkUGFydFJlbmRlcmVyLmphdmE6MjcwKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5NTUpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjkxMCkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTE3KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5yZW5kZXJlcnMuc3d0LkVsZW1lbnRSZWZlcmVuY2VSZW5kZXJlci5kaXNwb3NlV2lkZ2V0KEVsZW1lbnRSZWZlcmVuY2VSZW5kZXJlci5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTU1KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5MTcpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjkxMCkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTE3KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5MTcpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjkxNykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTE3KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5MTcpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93LmhhcmRDbG9zZShXb3JrYmVuY2hXaW5kb3cuamF2YToxOTk0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdy5idXN5Q2xvc2UoV29ya2JlbmNoV2luZG93LmphdmE6MTYxMCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3cuYWNjZXNzJDE4KFdvcmtiZW5jaFdpbmRvdy5qYXZhOjE1NTIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93JDExLnJ1bihXb3JrYmVuY2hXaW5kb3cuamF2YToxNjM4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQnVzeUluZGljYXRvci5zaG93V2hpbGUoQnVzeUluZGljYXRvci5qYXZhOjcxKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdy5jbG9zZShXb3JrYmVuY2hXaW5kb3cuamF2YToxNjM1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaCQxMC5ydW4oV29ya2JlbmNoLmphdmE6MTE2NSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5idXN5Q2xvc2UoV29ya2JlbmNoLmphdmE6MTE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDQoV29ya2JlbmNoLmphdmE6MTQzMCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkJ1c3lJbmRpY2F0b3Iuc2hvd1doaWxlKEJ1c3lJbmRpY2F0b3IuamF2YTo3MSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY2xvc2UoV29ya2JlbmNoLmphdmE6MTQzMCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY2xvc2UoV29ya2JlbmNoLmphdmE6MTQwMykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3cuYnVzeUNsb3NlKFdvcmtiZW5jaFdpbmRvdy5qYXZhOjE2MDYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93LmFjY2VzcyQxOChXb3JrYmVuY2hXaW5kb3cuamF2YToxNTUyKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdyQxMS5ydW4oV29ya2JlbmNoV2luZG93LmphdmE6MTYzOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkJ1c3lJbmRpY2F0b3Iuc2hvd1doaWxlKEJ1c3lJbmRpY2F0b3IuamF2YTo3MSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3cuY2xvc2UoV29ya2JlbmNoV2luZG93LmphdmE6MTYzNSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3cuY2xvc2UoV29ya2JlbmNoV2luZG93LmphdmE6MTY0OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3ckNi5jbG9zZShXb3JrYmVuY2hXaW5kb3cuamF2YTo1MzEpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuV0JXUmVuZGVyZXIubGFtYmRhJDQoV0JXUmVuZGVyZXIuamF2YTo2MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TaGVsbExpc3RlbmVyJDIuc2hlbGxDbG9zZWQoU2hlbGxMaXN0ZW5lci5qYXZhOjk5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlR5cGVkTGlzdGVuZXIuaGFuZGxlRXZlbnQoVHlwZWRMaXN0ZW5lci5qYXZhOjk5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50VGFibGUuc2VuZEV2ZW50KEV2ZW50VGFibGUuamF2YTo4NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnNlbmRFdmVudChEaXNwbGF5LmphdmE6NDExOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDc2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA2MSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EZWNvcmF0aW9ucy5jbG9zZVdpZGdldChEZWNvcmF0aW9ucy5qYXZhOjI4MSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EZWNvcmF0aW9ucy5XTV9DTE9TRShEZWNvcmF0aW9ucy5qYXZhOjE1NzEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC53aW5kb3dQcm9jKENvbnRyb2wuamF2YTo0NzY3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhcy53aW5kb3dQcm9jKENhbnZhcy5qYXZhOjM0NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EZWNvcmF0aW9ucy53aW5kb3dQcm9jKERlY29yYXRpb25zLmphdmE6MTQ5OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC53aW5kb3dQcm9jKFNoZWxsLmphdmE6MjE1OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LndpbmRvd1Byb2MoRGlzcGxheS5qYXZhOjQ3NTcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLkRlZldpbmRvd1Byb2NXKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLkRlZldpbmRvd1Byb2MoT1MuamF2YToyMjk4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLmNhbGxXaW5kb3dQcm9jKFNoZWxsLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wud2luZG93UHJvYyhDb250cm9sLmphdmE6NDg2MykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5DYW52YXMud2luZG93UHJvYyhDYW52YXMuamF2YTozNDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGVjb3JhdGlvbnMud2luZG93UHJvYyhEZWNvcmF0aW9ucy5qYXZhOjE0OTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGwud2luZG93UHJvYyhTaGVsbC5qYXZhOjIxNTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS53aW5kb3dQcm9jKERpc3BsYXkuamF2YTo0NzU3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EZWZXaW5kb3dQcm9jVyhOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EZWZXaW5kb3dQcm9jKE9TLmphdmE6MjI5OCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC5jYWxsV2luZG93UHJvYyhTaGVsbC5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLndpbmRvd1Byb2MoQ29udHJvbC5qYXZhOjQ4NjMpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ2FudmFzLndpbmRvd1Byb2MoQ2FudmFzLmphdmE6MzQ1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLndpbmRvd1Byb2MoRGVjb3JhdGlvbnMuamF2YToxNDk5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLndpbmRvd1Byb2MoU2hlbGwuamF2YToyMTU5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkud2luZG93UHJvYyhEaXNwbGF5LmphdmE6NDc1NykKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuRGlzcGF0Y2hNZXNzYWdlVyhOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EaXNwYXRjaE1lc3NhZ2UoT1MuamF2YToyMzAzKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkucmVhZEFuZERpc3BhdGNoKERpc3BsYXkuamF2YTozNTMyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ1LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6MTE3MCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6MTA1OSkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guRTRXb3JrYmVuY2guY3JlYXRlQW5kUnVuVUkoRTRXb3JrYmVuY2guamF2YToxNTMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQzKFdvcmtiZW5jaC5qYXZhOjY2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChXb3JrYmVuY2guamF2YTo1OTcpCisJYXQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSS5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goUGxhdGZvcm1VSS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFQXBwbGljYXRpb24uc3RhcnQoSURFQXBwbGljYXRpb24uamF2YToxNTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5hcHAuRWNsaXBzZUFwcEhhbmRsZS5ydW4oRWNsaXBzZUFwcEhhbmRsZS5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIucnVuQXBwbGljYXRpb24oRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5zdGFydChFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6Mzg4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjI0MykKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NjIpCisJYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjQzKQorCWF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6NDk4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5pbnZva2VGcmFtZXdvcmsoTWFpbi5qYXZhOjY1NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uYmFzaWNSdW4oTWFpbi5qYXZhOjU5MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4ucnVuKE1haW4uamF2YToxNDk4KQorIVNFU1NJT04gMjAyMS0xMC0yNiAxNzozODo0Ny4zMjIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VjbGlwc2UuYnVpbGRJZD00LjguMC5JMjAxODA2MTEtMDUwMAoramF2YS52ZXJzaW9uPTEuOC4wXzIzMQoramF2YS52ZW5kb3I9T3JhY2xlIENvcnBvcmF0aW9uCitCb290TG9hZGVyIGNvbnN0YW50czogT1M9d2luMzIsIEFSQ0g9eDg2XzY0LCBXUz13aW4zMiwgTkw9ZGVfREUKK0ZyYW1ld29yayBhcmd1bWVudHM6ICAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKK0NvbW1hbmQtbGluZSBhcmd1bWVudHM6ICAtb3Mgd2luMzIgLXdzIHdpbjMyIC1hcmNoIHg4Nl82NCAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zIDQgMCAyMDIxLTEwLTI2IDE3OjM4OjUyLjA0MAorIU1FU1NBR0UgRnJhbWV3b3JrRXZlbnQgRVJST1IKKyFTVEFDSyAwCitvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOiBFeGNlcHRpb24gaW4gb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KCkgb2YgYnVuZGxlIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zLgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6ODAwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCS4uLiAxMiBtb3JlCitSb290IGV4Y2VwdGlvbjoKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUgMiAwIDIwMjEtMTAtMjYgMTc6Mzk6MDAuMTE3CishTUVTU0FHRSBCdWlsdGluIExGUyBzdXBwb3J0IG5vdCBwcmVzZW50L2RldGVjdGVkCishU1RBQ0sgMAoramF2YS5sYW5nLkNsYXNzTm90Rm91bmRFeGNlcHRpb246IG9yZy5lY2xpcHNlLmpnaXQubGZzLkJ1aWx0aW5MRlMgY2Fubm90IGJlIGZvdW5kIGJ5IG9yZy5lY2xpcHNlLmVnaXQuY29yZV81LjAuMC4yMDE4MDYxMzE1NTAtcgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo1MDgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUwKE5hdGl2ZSBNZXRob2QpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUoQ2xhc3MuamF2YToyNjQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5yZWdpc3RlckJ1aWx0aW5MRlMoQWN0aXZhdG9yLmphdmE6Mjc5KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MjEyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLnNvdXJjZXMuU2luZ2xlU291cmNlUGFja2FnZS5sb2FkQ2xhc3MoU2luZ2xlU291cmNlUGFja2FnZS5qYXZhOjM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3IkUmVwb3NpdG9yeUNoYW5nZVNjYW5uZXIuPGluaXQ+KEFjdGl2YXRvci5qYXZhOjkyMSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zZXR1cFJlcG9DaGFuZ2VTY2FubmVyKEFjdGl2YXRvci5qYXZhOjEwMzQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLldvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5nZXRTb3VyY2VQcm92aWRlcnMoV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmphdmE6MTc0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLlNvdXJjZVByb3ZpZGVyU2VydmljZS5yZWFkUmVnaXN0cnkoU291cmNlUHJvdmlkZXJTZXJ2aWNlLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaCQzNC5ydW5XaXRoRXhjZXB0aW9uKFdvcmtiZW5jaC5qYXZhOjIzNzgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZyRTdGFydHVwUnVubmFibGUucnVuKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTozMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TeW5jaHJvbml6ZXIuc3luY0V4ZWMoU3luY2hyb25pemVyLmphdmE6MjMzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlVJU3luY2hyb25pemVyLnN5bmNFeGVjKFVJU3luY2hyb25pemVyLmphdmE6MTQ0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc3luY0V4ZWMoRGlzcGxheS5qYXZhOjQ1NjcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZy5ydW5XaXRob3V0RXhjZXB0aW9ucyhTdGFydHVwVGhyZWFkaW5nLmphdmE6OTUpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXRpYWxpemVEZWZhdWx0U2VydmljZXMoV29ya2JlbmNoLmphdmE6MjM3MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdChXb3JrYmVuY2guamF2YToxNjU0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5ydW5VSShXb3JrYmVuY2guamF2YToyODU5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkMyhXb3JrYmVuY2guamF2YTo2NTQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goV29ya2JlbmNoLmphdmE6NTk3KQorCWF0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUkuY3JlYXRlQW5kUnVuV29ya2JlbmNoKFBsYXRmb3JtVUkuamF2YToxNDgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERUFwcGxpY2F0aW9uLnN0YXJ0KElERUFwcGxpY2F0aW9uLmphdmE6MTUyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuYXBwLkVjbGlwc2VBcHBIYW5kbGUucnVuKEVjbGlwc2VBcHBIYW5kbGUuamF2YToxOTYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnJ1bkFwcGxpY2F0aW9uKEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEzNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIuc3RhcnQoRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjM4OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YToyNDMpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKE5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjYyKQorCWF0IHN1bi5yZWZsZWN0LkRlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKERlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuamF2YTo0MykKKwlhdCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuaW52b2tlKE1ldGhvZC5qYXZhOjQ5OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uaW52b2tlRnJhbWV3b3JrKE1haW4uamF2YTo2NTYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmJhc2ljUnVuKE1haW4uamF2YTo1OTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLnJ1bihNYWluLmphdmE6MTQ5OCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQudWkgMiAwIDIwMjEtMTAtMjYgMTc6Mzk6MzEuOTM2CishTUVTU0FHRSBXYXJuaW5nOiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgSE9NRSBpcyBub3Qgc2V0LiBUaGUgZm9sbG93aW5nIGRpcmVjdG9yeSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIEdpdAordXNlciBnbG9iYWwgY29uZmlndXJhdGlvbiBhbmQgdG8gZGVmaW5lIHRoZSBkZWZhdWx0IGxvY2F0aW9uIHRvIHN0b3JlIHJlcG9zaXRvcmllczogJ0M6XFVzZXJzXEZyYW5jaycuIElmIHRoaXMgaXMKK25vdCBjb3JyZWN0IHBsZWFzZSBzZXQgdGhlIEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIHJlc3RhcnQgRWNsaXBzZS4gT3RoZXJ3aXNlIEdpdCBmb3IgV2luZG93cyBhbmQKK0VHaXQgbWlnaHQgYmVoYXZlIGRpZmZlcmVudGx5IHNpbmNlIHRoZXkgc2VlIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCitUaGlzIHdhcm5pbmcgY2FuIGJlIHN3aXRjaGVkIG9mZiBvbiB0aGUgVGVhbSA+IEdpdCA+IENvbmZpcm1hdGlvbnMgYW5kIFdhcm5pbmdzIHByZWZlcmVuY2UgcGFnZS4KKworIUVOVFJZIG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlIDIgMTcgMjAyMS0xMC0yNiAxNzozOTozMy4xMDcKKyFNRVNTQUdFIFNlcnZlciDigJhvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXLigJkgZmFpbGVkIHdpdGggZXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJC4gOyB2ZXJzaW9uOiAyLjAuNy52MjAxNzA5MDYtMTMyNworIVNUQUNLIDAKK2NvbS5nb29nbGUuZ3Nvbi5Kc29uU3ludGF4RXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMjQpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg4OCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODUzKQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4MDIpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLmpzb24uSnNvbi5kZXNlcmlhbGl6ZShKc29uLmphdmE6OTEpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuSU8ucmVmcmVzaENvbmZpZ3VyYXRpb24oSU8uamF2YTo2NikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5TZXJ2ZXJDb25uZWN0aW9uLnN0YXJ0VXAoU2VydmVyQ29ubmVjdGlvbi5qYXZhOjEyNCkKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RJZGxlU2VydmljZSREZWxlZ2F0ZVNlcnZpY2UkMS5ydW4oQWJzdHJhY3RJZGxlU2VydmljZS5qYXZhOjYyKQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5DYWxsYWJsZXMkNC5ydW4oQ2FsbGFibGVzLmphdmE6MTIyKQorCWF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uc3RyZWFtLkpzb25SZWFkZXIuYmVnaW5PYmplY3QoSnNvblJlYWRlci5qYXZhOjM4NSkKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjEzKQorCS4uLiA5IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpIDQgMCAyMDIxLTEwLTI2IDE3OjM5OjUwLjIzOAorIU1FU1NBR0UgUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKyFTVEFDSyAwCitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRLbm93blJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NDgwKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyJEFydGlmYWN0LmdldEtub3duUmVwb3NpdG9yaWVzKENhY2hpbmdSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjYyMykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5jb3JlLlAyVXRpbC5nZXRLbm93blJlcG9zaXRvcmllcyhQMlV0aWwuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5wMi5pbXBsLlAyVGFza0ltcGwuaXNOZWVkZWQoUDJUYXNrSW1wbC5qYXZhOjcwMSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5pbnRlcm5hbC5jb3JlLlNldHVwVGFza1BlcmZvcm1lci5pbml0TmVlZGVkU2V0dXBUYXNrcyhTZXR1cFRhc2tQZXJmb3JtZXIuamF2YToyMjczKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4ucGVyZm9ybVN0YXJ0dXAoU2V0dXBVSVBsdWdpbi5qYXZhOjY3OSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLmFjY2VzcyQ1KFNldHVwVUlQbHVnaW4uamF2YTo0MTUpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbiQxJDEucnVuKFNldHVwVUlQbHVnaW4uamF2YToyNTIpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yNiAxODoyNTo0NC45MTMKKyFNRVNTQUdFIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorIVNUQUNLIDAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKQorCS4uLiA4IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwIDEgMCAyMDIxLTEwLTI2IDE4OjI1OjQ0LjkxNworIU1FU1NBR0Ugb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAgY291bGQgbm90IGJlIHJlc29sdmVkIGZyb20gdGhlIG1vZGVsIHJlcG9zaXRvcmllcy4gQXJlIHlvdSBvZmZsaW5lPworCishRU5UUlkgb3JnLmVjbGlwc2UudWkgNCAwIDIwMjEtMTAtMjYgMjA6NTE6NTMuMjUxCishTUVTU0FHRSBVbmhhbmRsZWQgZXZlbnQgbG9vcCBleGNlcHRpb24KKyFTVEFDSyAwCitvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uOiBHcmFwaGljIGlzIGRpc3Bvc2VkCisJYXQgb3JnLmVjbGlwc2Uuc3d0LlNXVC5lcnJvcihTV1QuamF2YTo0NTUyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5TV1QuZXJyb3IoU1dULmphdmE6NDQ2NykKKwlhdCBvcmcuZWNsaXBzZS5zd3QuU1dULmVycm9yKFNXVC5qYXZhOjQ0MzgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlLmdldEJvdW5kcyhJbWFnZS5qYXZhOjEyNjMpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DTGFiZWwuZ2V0VG90YWxTaXplKENMYWJlbC5qYXZhOjI2NikKKwlhdCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNMYWJlbC5vblBhaW50KENMYWJlbC5qYXZhOjQyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNMYWJlbC5sYW1iZGEkMChDTGFiZWwuamF2YToxMTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHlwZWRMaXN0ZW5lci5oYW5kbGVFdmVudChUeXBlZExpc3RlbmVyLmphdmE6MjMxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50VGFibGUuc2VuZEV2ZW50KEV2ZW50VGFibGUuamF2YTo4NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnNlbmRFdmVudChEaXNwbGF5LmphdmE6NDExOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDc2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA2MSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUuV01fUEFJTlQoQ29tcG9zaXRlLmphdmE6MTU2MSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLndpbmRvd1Byb2MoQ29udHJvbC5qYXZhOjQ4MjIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ2FudmFzLndpbmRvd1Byb2MoQ2FudmFzLmphdmE6MzQ1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkud2luZG93UHJvYyhEaXNwbGF5LmphdmE6NDc2NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuVnRibENhbGwoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwub2xlLndpbjMyLklPbGVJblBsYWNlT2JqZWN0LkluUGxhY2VEZWFjdGl2YXRlKElPbGVJblBsYWNlT2JqZWN0LmphdmE6MjEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0Lm9sZS53aW4zMi5PbGVDbGllbnRTaXRlLmRlYWN0aXZhdGVJblBsYWNlQ2xpZW50KE9sZUNsaWVudFNpdGUuamF2YTo2MDkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0Lm9sZS53aW4zMi5PbGVDbGllbnRTaXRlLm9uRGlzcG9zZShPbGVDbGllbnRTaXRlLmphdmE6OTU5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5vbGUud2luMzIuT2xlQ2xpZW50U2l0ZS5hY2Nlc3MkMShPbGVDbGllbnRTaXRlLmphdmE6OTQ2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5vbGUud2luMzIuT2xlQ2xpZW50U2l0ZSQxLmhhbmRsZUV2ZW50KE9sZUNsaWVudFNpdGUuamF2YToxMjgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnRUYWJsZS5zZW5kRXZlbnQoRXZlbnRUYWJsZS5qYXZhOjg2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc2VuZEV2ZW50KERpc3BsYXkuamF2YTo0MTE4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA1MikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNzYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDU3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgwOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5DYW52YXMucmVsZWFzZUNoaWxkcmVuKENhbnZhcy5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EZWNvcmF0aW9ucy5yZWxlYXNlQ2hpbGRyZW4oRGVjb3JhdGlvbnMuamF2YTo3MjgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGwucmVsZWFzZUNoaWxkcmVuKFNoZWxsLmphdmE6MTM0MCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LmRpc3Bvc2UoV2lkZ2V0LmphdmE6NDI2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLmRpc3Bvc2UoRGVjb3JhdGlvbnMuamF2YTo0MDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGwuZGlzcG9zZShTaGVsbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkFic3RyYWN0SW5mb3JtYXRpb25Db250cm9sLmRpc3Bvc2UoQWJzdHJhY3RJbmZvcm1hdGlvbkNvbnRyb2wuamF2YTo1MjEpCisJYXQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5BYnN0cmFjdEluZm9ybWF0aW9uQ29udHJvbE1hbmFnZXIuZGlzcG9zZUluZm9ybWF0aW9uQ29udHJvbChBYnN0cmFjdEluZm9ybWF0aW9uQ29udHJvbE1hbmFnZXIuamF2YToxMzE5KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQWJzdHJhY3RJbmZvcm1hdGlvbkNvbnRyb2xNYW5hZ2VyLmRpc3Bvc2UoQWJzdHJhY3RJbmZvcm1hdGlvbkNvbnRyb2xNYW5hZ2VyLmphdmE6MTMzNCkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkFic3RyYWN0SG92ZXJJbmZvcm1hdGlvbkNvbnRyb2xNYW5hZ2VyLmRpc3Bvc2UoQWJzdHJhY3RIb3ZlckluZm9ybWF0aW9uQ29udHJvbE1hbmFnZXIuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5UZXh0Vmlld2VySG92ZXJNYW5hZ2VyLmRpc3Bvc2UoVGV4dFZpZXdlckhvdmVyTWFuYWdlci5qYXZhOjM3OCkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlRleHRWaWV3ZXIuaGFuZGxlRGlzcG9zZShUZXh0Vmlld2VyLmphdmE6MTg3NCkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5Tb3VyY2VWaWV3ZXIuaGFuZGxlRGlzcG9zZShTb3VyY2VWaWV3ZXIuamF2YTo3ODgpCisJYXQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UucHJvamVjdGlvbi5Qcm9qZWN0aW9uVmlld2VyLmhhbmRsZURpc3Bvc2UoUHJvamVjdGlvblZpZXdlci5qYXZhOjEyOTYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLmphdmFlZGl0b3IuSmF2YVNvdXJjZVZpZXdlci5oYW5kbGVEaXNwb3NlKEphdmFTb3VyY2VWaWV3ZXIuamF2YTo1MDkpCisJYXQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5UZXh0Vmlld2VyJDIud2lkZ2V0RGlzcG9zZWQoVGV4dFZpZXdlci5qYXZhOjE3MzEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHlwZWRMaXN0ZW5lci5oYW5kbGVFdmVudChUeXBlZExpc3RlbmVyLmphdmE6MTI0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50VGFibGUuc2VuZEV2ZW50KEV2ZW50VGFibGUuamF2YTo4NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnNlbmRFdmVudChEaXNwbGF5LmphdmE6NDExOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDc2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA2MSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQubm90aWZ5TGlzdGVuZXJzKFdpZGdldC5qYXZhOjc3NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLlN0eWxlZFRleHQuaGFuZGxlRGlzcG9zZShTdHlsZWRUZXh0LmphdmE6NTkxOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLlN0eWxlZFRleHQubGFtYmRhJDEoU3R5bGVkVGV4dC5qYXZhOjU3MzkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnRUYWJsZS5zZW5kRXZlbnQoRXZlbnRUYWJsZS5qYXZhOjg2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc2VuZEV2ZW50KERpc3BsYXkuamF2YTo0MTE4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA1MikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNzYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDU3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgwOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5DYW52YXMucmVsZWFzZUNoaWxkcmVuKENhbnZhcy5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LmRpc3Bvc2UoV2lkZ2V0LmphdmE6NDI2KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5yZW5kZXJlcnMuc3d0LlNXVFBhcnRSZW5kZXJlci5kaXNwb3NlV2lkZ2V0KFNXVFBhcnRSZW5kZXJlci5qYXZhOjE3MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC5Db250cmlidXRlZFBhcnRSZW5kZXJlci5kaXNwb3NlV2lkZ2V0KENvbnRyaWJ1dGVkUGFydFJlbmRlcmVyLmphdmE6MjcwKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5NTUpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjkxMCkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTE3KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5yZW5kZXJlcnMuc3d0LkVsZW1lbnRSZWZlcmVuY2VSZW5kZXJlci5kaXNwb3NlV2lkZ2V0KEVsZW1lbnRSZWZlcmVuY2VSZW5kZXJlci5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTU1KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5MTcpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjkxMCkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTE3KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5MTcpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjkxNykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTE3KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5MTcpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93LmhhcmRDbG9zZShXb3JrYmVuY2hXaW5kb3cuamF2YToxOTk0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdy5idXN5Q2xvc2UoV29ya2JlbmNoV2luZG93LmphdmE6MTYxMCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3cuYWNjZXNzJDE4KFdvcmtiZW5jaFdpbmRvdy5qYXZhOjE1NTIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93JDExLnJ1bihXb3JrYmVuY2hXaW5kb3cuamF2YToxNjM4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQnVzeUluZGljYXRvci5zaG93V2hpbGUoQnVzeUluZGljYXRvci5qYXZhOjcxKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdy5jbG9zZShXb3JrYmVuY2hXaW5kb3cuamF2YToxNjM1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaCQxMC5ydW4oV29ya2JlbmNoLmphdmE6MTE2NSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5idXN5Q2xvc2UoV29ya2JlbmNoLmphdmE6MTE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDQoV29ya2JlbmNoLmphdmE6MTQzMCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkJ1c3lJbmRpY2F0b3Iuc2hvd1doaWxlKEJ1c3lJbmRpY2F0b3IuamF2YTo3MSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY2xvc2UoV29ya2JlbmNoLmphdmE6MTQzMCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY2xvc2UoV29ya2JlbmNoLmphdmE6MTQwMykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3cuYnVzeUNsb3NlKFdvcmtiZW5jaFdpbmRvdy5qYXZhOjE2MDYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93LmFjY2VzcyQxOChXb3JrYmVuY2hXaW5kb3cuamF2YToxNTUyKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdyQxMS5ydW4oV29ya2JlbmNoV2luZG93LmphdmE6MTYzOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkJ1c3lJbmRpY2F0b3Iuc2hvd1doaWxlKEJ1c3lJbmRpY2F0b3IuamF2YTo3MSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3cuY2xvc2UoV29ya2JlbmNoV2luZG93LmphdmE6MTYzNSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3cuY2xvc2UoV29ya2JlbmNoV2luZG93LmphdmE6MTY0OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3ckNi5jbG9zZShXb3JrYmVuY2hXaW5kb3cuamF2YTo1MzEpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuV0JXUmVuZGVyZXIubGFtYmRhJDQoV0JXUmVuZGVyZXIuamF2YTo2MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TaGVsbExpc3RlbmVyJDIuc2hlbGxDbG9zZWQoU2hlbGxMaXN0ZW5lci5qYXZhOjk5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlR5cGVkTGlzdGVuZXIuaGFuZGxlRXZlbnQoVHlwZWRMaXN0ZW5lci5qYXZhOjk5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50VGFibGUuc2VuZEV2ZW50KEV2ZW50VGFibGUuamF2YTo4NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnNlbmRFdmVudChEaXNwbGF5LmphdmE6NDExOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDc2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA2MSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EZWNvcmF0aW9ucy5jbG9zZVdpZGdldChEZWNvcmF0aW9ucy5qYXZhOjI4MSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EZWNvcmF0aW9ucy5XTV9DTE9TRShEZWNvcmF0aW9ucy5qYXZhOjE1NzEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC53aW5kb3dQcm9jKENvbnRyb2wuamF2YTo0NzY3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhcy53aW5kb3dQcm9jKENhbnZhcy5qYXZhOjM0NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EZWNvcmF0aW9ucy53aW5kb3dQcm9jKERlY29yYXRpb25zLmphdmE6MTQ5OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC53aW5kb3dQcm9jKFNoZWxsLmphdmE6MjE1OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LndpbmRvd1Byb2MoRGlzcGxheS5qYXZhOjQ3NTcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLkRlZldpbmRvd1Byb2NXKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLkRlZldpbmRvd1Byb2MoT1MuamF2YToyMjk4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLmNhbGxXaW5kb3dQcm9jKFNoZWxsLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wud2luZG93UHJvYyhDb250cm9sLmphdmE6NDg2MykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5DYW52YXMud2luZG93UHJvYyhDYW52YXMuamF2YTozNDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGVjb3JhdGlvbnMud2luZG93UHJvYyhEZWNvcmF0aW9ucy5qYXZhOjE0OTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGwud2luZG93UHJvYyhTaGVsbC5qYXZhOjIxNTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS53aW5kb3dQcm9jKERpc3BsYXkuamF2YTo0NzU3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EZWZXaW5kb3dQcm9jVyhOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EZWZXaW5kb3dQcm9jKE9TLmphdmE6MjI5OCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC5jYWxsV2luZG93UHJvYyhTaGVsbC5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLndpbmRvd1Byb2MoQ29udHJvbC5qYXZhOjQ4NjMpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ2FudmFzLndpbmRvd1Byb2MoQ2FudmFzLmphdmE6MzQ1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLndpbmRvd1Byb2MoRGVjb3JhdGlvbnMuamF2YToxNDk5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLndpbmRvd1Byb2MoU2hlbGwuamF2YToyMTU5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkud2luZG93UHJvYyhEaXNwbGF5LmphdmE6NDc1NykKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuRGlzcGF0Y2hNZXNzYWdlVyhOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EaXNwYXRjaE1lc3NhZ2UoT1MuamF2YToyMzAzKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkucmVhZEFuZERpc3BhdGNoKERpc3BsYXkuamF2YTozNTMyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ1LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6MTE3MCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6MTA1OSkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guRTRXb3JrYmVuY2guY3JlYXRlQW5kUnVuVUkoRTRXb3JrYmVuY2guamF2YToxNTMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQzKFdvcmtiZW5jaC5qYXZhOjY2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChXb3JrYmVuY2guamF2YTo1OTcpCisJYXQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSS5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goUGxhdGZvcm1VSS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFQXBwbGljYXRpb24uc3RhcnQoSURFQXBwbGljYXRpb24uamF2YToxNTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5hcHAuRWNsaXBzZUFwcEhhbmRsZS5ydW4oRWNsaXBzZUFwcEhhbmRsZS5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIucnVuQXBwbGljYXRpb24oRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5zdGFydChFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6Mzg4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjI0MykKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NjIpCisJYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjQzKQorCWF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6NDk4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5pbnZva2VGcmFtZXdvcmsoTWFpbi5qYXZhOjY1NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uYmFzaWNSdW4oTWFpbi5qYXZhOjU5MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4ucnVuKE1haW4uamF2YToxNDk4KQorIVNFU1NJT04gMjAyMS0xMC0yNyAwODoyNjozOC4yNTQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VjbGlwc2UuYnVpbGRJZD00LjguMC5JMjAxODA2MTEtMDUwMAoramF2YS52ZXJzaW9uPTEuOC4wXzIzMQoramF2YS52ZW5kb3I9T3JhY2xlIENvcnBvcmF0aW9uCitCb290TG9hZGVyIGNvbnN0YW50czogT1M9d2luMzIsIEFSQ0g9eDg2XzY0LCBXUz13aW4zMiwgTkw9ZGVfREUKK0ZyYW1ld29yayBhcmd1bWVudHM6ICAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKK0NvbW1hbmQtbGluZSBhcmd1bWVudHM6ICAtb3Mgd2luMzIgLXdzIHdpbjMyIC1hcmNoIHg4Nl82NCAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zIDQgMCAyMDIxLTEwLTI3IDA4OjI2OjQ5LjQ5OAorIU1FU1NBR0UgRnJhbWV3b3JrRXZlbnQgRVJST1IKKyFTVEFDSyAwCitvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOiBFeGNlcHRpb24gaW4gb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KCkgb2YgYnVuZGxlIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zLgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6ODAwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCS4uLiAxMiBtb3JlCitSb290IGV4Y2VwdGlvbjoKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUgMiAwIDIwMjEtMTAtMjcgMDg6Mjg6MTkuNTAwCishTUVTU0FHRSBCdWlsdGluIExGUyBzdXBwb3J0IG5vdCBwcmVzZW50L2RldGVjdGVkCishU1RBQ0sgMAoramF2YS5sYW5nLkNsYXNzTm90Rm91bmRFeGNlcHRpb246IG9yZy5lY2xpcHNlLmpnaXQubGZzLkJ1aWx0aW5MRlMgY2Fubm90IGJlIGZvdW5kIGJ5IG9yZy5lY2xpcHNlLmVnaXQuY29yZV81LjAuMC4yMDE4MDYxMzE1NTAtcgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo1MDgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUwKE5hdGl2ZSBNZXRob2QpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUoQ2xhc3MuamF2YToyNjQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5yZWdpc3RlckJ1aWx0aW5MRlMoQWN0aXZhdG9yLmphdmE6Mjc5KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MjEyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLnNvdXJjZXMuU2luZ2xlU291cmNlUGFja2FnZS5sb2FkQ2xhc3MoU2luZ2xlU291cmNlUGFja2FnZS5qYXZhOjM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3IkUmVwb3NpdG9yeUNoYW5nZVNjYW5uZXIuPGluaXQ+KEFjdGl2YXRvci5qYXZhOjkyMSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zZXR1cFJlcG9DaGFuZ2VTY2FubmVyKEFjdGl2YXRvci5qYXZhOjEwMzQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLldvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5nZXRTb3VyY2VQcm92aWRlcnMoV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmphdmE6MTc0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLlNvdXJjZVByb3ZpZGVyU2VydmljZS5yZWFkUmVnaXN0cnkoU291cmNlUHJvdmlkZXJTZXJ2aWNlLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaCQzNC5ydW5XaXRoRXhjZXB0aW9uKFdvcmtiZW5jaC5qYXZhOjIzNzgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZyRTdGFydHVwUnVubmFibGUucnVuKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTozMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TeW5jaHJvbml6ZXIuc3luY0V4ZWMoU3luY2hyb25pemVyLmphdmE6MjMzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlVJU3luY2hyb25pemVyLnN5bmNFeGVjKFVJU3luY2hyb25pemVyLmphdmE6MTQ0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc3luY0V4ZWMoRGlzcGxheS5qYXZhOjQ1NjcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZy5ydW5XaXRob3V0RXhjZXB0aW9ucyhTdGFydHVwVGhyZWFkaW5nLmphdmE6OTUpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXRpYWxpemVEZWZhdWx0U2VydmljZXMoV29ya2JlbmNoLmphdmE6MjM3MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdChXb3JrYmVuY2guamF2YToxNjU0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5ydW5VSShXb3JrYmVuY2guamF2YToyODU5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkMyhXb3JrYmVuY2guamF2YTo2NTQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goV29ya2JlbmNoLmphdmE6NTk3KQorCWF0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUkuY3JlYXRlQW5kUnVuV29ya2JlbmNoKFBsYXRmb3JtVUkuamF2YToxNDgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERUFwcGxpY2F0aW9uLnN0YXJ0KElERUFwcGxpY2F0aW9uLmphdmE6MTUyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuYXBwLkVjbGlwc2VBcHBIYW5kbGUucnVuKEVjbGlwc2VBcHBIYW5kbGUuamF2YToxOTYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnJ1bkFwcGxpY2F0aW9uKEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEzNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIuc3RhcnQoRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjM4OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YToyNDMpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKE5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjYyKQorCWF0IHN1bi5yZWZsZWN0LkRlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKERlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuamF2YTo0MykKKwlhdCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuaW52b2tlKE1ldGhvZC5qYXZhOjQ5OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uaW52b2tlRnJhbWV3b3JrKE1haW4uamF2YTo2NTYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmJhc2ljUnVuKE1haW4uamF2YTo1OTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLnJ1bihNYWluLmphdmE6MTQ5OCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQudWkgMiAwIDIwMjEtMTAtMjcgMDg6Mjk6MTEuNTQ5CishTUVTU0FHRSBXYXJuaW5nOiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgSE9NRSBpcyBub3Qgc2V0LiBUaGUgZm9sbG93aW5nIGRpcmVjdG9yeSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIEdpdAordXNlciBnbG9iYWwgY29uZmlndXJhdGlvbiBhbmQgdG8gZGVmaW5lIHRoZSBkZWZhdWx0IGxvY2F0aW9uIHRvIHN0b3JlIHJlcG9zaXRvcmllczogJ0M6XFVzZXJzXEZyYW5jaycuIElmIHRoaXMgaXMKK25vdCBjb3JyZWN0IHBsZWFzZSBzZXQgdGhlIEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIHJlc3RhcnQgRWNsaXBzZS4gT3RoZXJ3aXNlIEdpdCBmb3IgV2luZG93cyBhbmQKK0VHaXQgbWlnaHQgYmVoYXZlIGRpZmZlcmVudGx5IHNpbmNlIHRoZXkgc2VlIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCitUaGlzIHdhcm5pbmcgY2FuIGJlIHN3aXRjaGVkIG9mZiBvbiB0aGUgVGVhbSA+IEdpdCA+IENvbmZpcm1hdGlvbnMgYW5kIFdhcm5pbmdzIHByZWZlcmVuY2UgcGFnZS4KKworIUVOVFJZIG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlIDIgMTcgMjAyMS0xMC0yNyAwODoyOToxMy4zMTMKKyFNRVNTQUdFIFNlcnZlciDigJhvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXLigJkgZmFpbGVkIHdpdGggZXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJC4gOyB2ZXJzaW9uOiAyLjAuNy52MjAxNzA5MDYtMTMyNworIVNUQUNLIDAKK2NvbS5nb29nbGUuZ3Nvbi5Kc29uU3ludGF4RXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMjQpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg4OCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODUzKQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4MDIpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLmpzb24uSnNvbi5kZXNlcmlhbGl6ZShKc29uLmphdmE6OTEpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuSU8ucmVmcmVzaENvbmZpZ3VyYXRpb24oSU8uamF2YTo2NikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5TZXJ2ZXJDb25uZWN0aW9uLnN0YXJ0VXAoU2VydmVyQ29ubmVjdGlvbi5qYXZhOjEyNCkKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RJZGxlU2VydmljZSREZWxlZ2F0ZVNlcnZpY2UkMS5ydW4oQWJzdHJhY3RJZGxlU2VydmljZS5qYXZhOjYyKQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5DYWxsYWJsZXMkNC5ydW4oQ2FsbGFibGVzLmphdmE6MTIyKQorCWF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uc3RyZWFtLkpzb25SZWFkZXIuYmVnaW5PYmplY3QoSnNvblJlYWRlci5qYXZhOjM4NSkKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjEzKQorCS4uLiA5IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpIDQgMCAyMDIxLTEwLTI3IDA4OjI5OjI1LjMyMworIU1FU1NBR0UgUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKyFTVEFDSyAwCitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRLbm93blJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NDgwKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyJEFydGlmYWN0LmdldEtub3duUmVwb3NpdG9yaWVzKENhY2hpbmdSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjYyMykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5jb3JlLlAyVXRpbC5nZXRLbm93blJlcG9zaXRvcmllcyhQMlV0aWwuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5wMi5pbXBsLlAyVGFza0ltcGwuaXNOZWVkZWQoUDJUYXNrSW1wbC5qYXZhOjcwMSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5pbnRlcm5hbC5jb3JlLlNldHVwVGFza1BlcmZvcm1lci5pbml0TmVlZGVkU2V0dXBUYXNrcyhTZXR1cFRhc2tQZXJmb3JtZXIuamF2YToyMjczKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4ucGVyZm9ybVN0YXJ0dXAoU2V0dXBVSVBsdWdpbi5qYXZhOjY3OSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLmFjY2VzcyQ1KFNldHVwVUlQbHVnaW4uamF2YTo0MTUpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbiQxJDEucnVuKFNldHVwVUlQbHVnaW4uamF2YToyNTIpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yNyAwODozOTozMS45MDEKKyFNRVNTQUdFIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorIVNUQUNLIDAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKQorCS4uLiA4IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwIDEgMCAyMDIxLTEwLTI3IDA4OjM5OjMxLjkwNQorIU1FU1NBR0Ugb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAgY291bGQgbm90IGJlIHJlc29sdmVkIGZyb20gdGhlIG1vZGVsIHJlcG9zaXRvcmllcy4gQXJlIHlvdSBvZmZsaW5lPworCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjcgMTg6Mjk6MDcuMzgzCishTUVTU0FHRSBVbmtub3duIG9yIHVuc3VwcG9ydGVkIHNvdXJjZSBsb2NhdG9yIG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5sYXVuY2hpbmcuc291cmNlbG9va3VwLmFkdmFuY2VkLkFkdmFuY2VkU291cmNlTG9va3VwRGlyZWN0b3IKKyFTRVNTSU9OIDIwMjEtMTAtMjggMDc6MjA6MTAuMjA2IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2xpcHNlLmJ1aWxkSWQ9NC44LjAuSTIwMTgwNjExLTA1MDAKK2phdmEudmVyc2lvbj0xLjguMF8yMzEKK2phdmEudmVuZG9yPU9yYWNsZSBDb3Jwb3JhdGlvbgorQm9vdExvYWRlciBjb25zdGFudHM6IE9TPXdpbjMyLCBBUkNIPXg4Nl82NCwgV1M9d2luMzIsIE5MPWRlX0RFCitGcmFtZXdvcmsgYXJndW1lbnRzOiAgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CitDb21tYW5kLWxpbmUgYXJndW1lbnRzOiAgLW9zIHdpbjMyIC13cyB3aW4zMiAtYXJjaCB4ODZfNjQgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucyA0IDAgMjAyMS0xMC0yOCAwNzoyMDoyMy41NDkKKyFNRVNTQUdFIEZyYW1ld29ya0V2ZW50IEVSUk9SCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogRXhjZXB0aW9uIGluIG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydCgpIG9mIGJ1bmRsZSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucy4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjgwMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwkuLi4gMTIgbW9yZQorUm9vdCBleGNlcHRpb246CitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlIDIgMCAyMDIxLTEwLTI4IDA3OjIwOjQ3LjYyOAorIU1FU1NBR0UgQnVpbHRpbiBMRlMgc3VwcG9ydCBub3QgcHJlc2VudC9kZXRlY3RlZAorIVNUQUNLIDAKK2phdmEubGFuZy5DbGFzc05vdEZvdW5kRXhjZXB0aW9uOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5CdWlsdGluTEZTIGNhbm5vdCBiZSBmb3VuZCBieSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmVfNS4wLjAuMjAxODA2MTMxNTUwLXIKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NTA4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lMChOYXRpdmUgTWV0aG9kKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lKENsYXNzLmphdmE6MjY0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3IucmVnaXN0ZXJCdWlsdGluTEZTKEFjdGl2YXRvci5qYXZhOjI3OSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjIxMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5zb3VyY2VzLlNpbmdsZVNvdXJjZVBhY2thZ2UubG9hZENsYXNzKFNpbmdsZVNvdXJjZVBhY2thZ2UuamF2YTozNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yJFJlcG9zaXRvcnlDaGFuZ2VTY2FubmVyLjxpbml0PihBY3RpdmF0b3IuamF2YTo5MjEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc2V0dXBSZXBvQ2hhbmdlU2Nhbm5lcihBY3RpdmF0b3IuamF2YToxMDM0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUubG9hZENsYXNzKEVxdWlub3hCdW5kbGUuamF2YTo2MDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5vc2dpLlJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oUmVnaXN0cnlTdHJhdGVneU9TR0kuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5FeHRlbnNpb25SZWdpc3RyeS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEV4dGVuc2lvblJlZ2lzdHJ5LmphdmE6OTMxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudC5qYXZhOjI0MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuamF2YTo2MCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Xb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuZ2V0U291cmNlUHJvdmlkZXJzKFdvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5qYXZhOjE3NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Tb3VyY2VQcm92aWRlclNlcnZpY2UucmVhZFJlZ2lzdHJ5KFNvdXJjZVByb3ZpZGVyU2VydmljZS5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gkMzQucnVuV2l0aEV4Y2VwdGlvbihXb3JrYmVuY2guamF2YToyMzc4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmckU3RhcnR1cFJ1bm5hYmxlLnJ1bihTdGFydHVwVGhyZWFkaW5nLmphdmE6MzIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3luY2hyb25pemVyLnN5bmNFeGVjKFN5bmNocm9uaXplci5qYXZhOjIzMykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5VSVN5bmNocm9uaXplci5zeW5jRXhlYyhVSVN5bmNocm9uaXplci5qYXZhOjE0NCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnN5bmNFeGVjKERpc3BsYXkuamF2YTo0NTY3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmcucnVuV2l0aG91dEV4Y2VwdGlvbnMoU3RhcnR1cFRocmVhZGluZy5qYXZhOjk1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0aWFsaXplRGVmYXVsdFNlcnZpY2VzKFdvcmtiZW5jaC5qYXZhOjIzNzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXQoV29ya2JlbmNoLmphdmE6MTY1NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gucnVuVUkoV29ya2JlbmNoLmphdmE6Mjg1OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjU0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LnVpIDIgMCAyMDIxLTEwLTI4IDA3OjIxOjQyLjcyNworIU1FU1NBR0UgV2FybmluZzogVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEhPTUUgaXMgbm90IHNldC4gVGhlIGZvbGxvd2luZyBkaXJlY3Rvcnkgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBHaXQKK3VzZXIgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gYW5kIHRvIGRlZmluZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiB0byBzdG9yZSByZXBvc2l0b3JpZXM6ICdDOlxVc2Vyc1xGcmFuY2snLiBJZiB0aGlzIGlzCitub3QgY29ycmVjdCBwbGVhc2Ugc2V0IHRoZSBIT01FIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCByZXN0YXJ0IEVjbGlwc2UuIE90aGVyd2lzZSBHaXQgZm9yIFdpbmRvd3MgYW5kCitFR2l0IG1pZ2h0IGJlaGF2ZSBkaWZmZXJlbnRseSBzaW5jZSB0aGV5IHNlZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLgorVGhpcyB3YXJuaW5nIGNhbiBiZSBzd2l0Y2hlZCBvZmYgb24gdGhlIFRlYW0gPiBHaXQgPiBDb25maXJtYXRpb25zIGFuZCBXYXJuaW5ncyBwcmVmZXJlbmNlIHBhZ2UuCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZSAyIDE3IDIwMjEtMTAtMjggMDc6MjE6NDkuOTIxCishTUVTU0FHRSBTZXJ2ZXIg4oCYb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVy4oCZIGZhaWxlZCB3aXRoIGV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQuIDsgdmVyc2lvbjogMi4wLjcudjIwMTcwOTA2LTEzMjcKKyFTVEFDSyAwCitjb20uZ29vZ2xlLmdzb24uSnNvblN5bnRheEV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjI0KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4ODgpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg1MykKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODAyKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5qc29uLkpzb24uZGVzZXJpYWxpemUoSnNvbi5qYXZhOjkxKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLklPLnJlZnJlc2hDb25maWd1cmF0aW9uKElPLmphdmE6NjYpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuU2VydmVyQ29ubmVjdGlvbi5zdGFydFVwKFNlcnZlckNvbm5lY3Rpb24uamF2YToxMjQpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0SWRsZVNlcnZpY2UkRGVsZWdhdGVTZXJ2aWNlJDEucnVuKEFic3RyYWN0SWRsZVNlcnZpY2UuamF2YTo2MikKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQ2FsbGFibGVzJDQucnVuKENhbGxhYmxlcy5qYXZhOjEyMikKKwlhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLnN0cmVhbS5Kc29uUmVhZGVyLmJlZ2luT2JqZWN0KEpzb25SZWFkZXIuamF2YTozODUpCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIxMykKKwkuLi4gOSBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aSA0IDAgMjAyMS0xMC0yOCAwNzoyMjowNS4xNDcKKyFNRVNTQUdFIFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCishU1RBQ0sgMAoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0S25vd25SZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjQ4MCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkNhY2hpbmdSZXBvc2l0b3J5TWFuYWdlciRBcnRpZmFjdC5nZXRLbm93blJlcG9zaXRvcmllcyhDYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2MjMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuY29yZS5QMlV0aWwuZ2V0S25vd25SZXBvc2l0b3JpZXMoUDJVdGlsLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAucDIuaW1wbC5QMlRhc2tJbXBsLmlzTmVlZGVkKFAyVGFza0ltcGwuamF2YTo3MDEpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAuaW50ZXJuYWwuY29yZS5TZXR1cFRhc2tQZXJmb3JtZXIuaW5pdE5lZWRlZFNldHVwVGFza3MoU2V0dXBUYXNrUGVyZm9ybWVyLmphdmE6MjI3MykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLnBlcmZvcm1TdGFydHVwKFNldHVwVUlQbHVnaW4uamF2YTo2NzkpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5hY2Nlc3MkNShTZXR1cFVJUGx1Z2luLmphdmE6NDE1KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4kMSQxLnJ1bihTZXR1cFVJUGx1Z2luLmphdmE6MjUyKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjggMDc6Mzk6MjkuNDU5CishTUVTU0FHRSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKKyFTVEFDSyAwCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkKKwkuLi4gOCBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcCAxIDAgMjAyMS0xMC0yOCAwNzozOToyOS40NjMKKyFNRVNTQUdFIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wIGNvdWxkIG5vdCBiZSByZXNvbHZlZCBmcm9tIHRoZSBtb2RlbCByZXBvc2l0b3JpZXMuIEFyZSB5b3Ugb2ZmbGluZT8KKyFTRVNTSU9OIDIwMjEtMTAtMjggMTM6MTU6MjIuODc1IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2xpcHNlLmJ1aWxkSWQ9NC44LjAuSTIwMTgwNjExLTA1MDAKK2phdmEudmVyc2lvbj0xLjguMF8yMzEKK2phdmEudmVuZG9yPU9yYWNsZSBDb3Jwb3JhdGlvbgorQm9vdExvYWRlciBjb25zdGFudHM6IE9TPXdpbjMyLCBBUkNIPXg4Nl82NCwgV1M9d2luMzIsIE5MPWRlX0RFCitGcmFtZXdvcmsgYXJndW1lbnRzOiAgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CitDb21tYW5kLWxpbmUgYXJndW1lbnRzOiAgLW9zIHdpbjMyIC13cyB3aW4zMiAtYXJjaCB4ODZfNjQgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucyA0IDAgMjAyMS0xMC0yOCAxMzoxNToyNy4wNDIKKyFNRVNTQUdFIEZyYW1ld29ya0V2ZW50IEVSUk9SCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogRXhjZXB0aW9uIGluIG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydCgpIG9mIGJ1bmRsZSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucy4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjgwMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwkuLi4gMTIgbW9yZQorUm9vdCBleGNlcHRpb246CitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlIDIgMCAyMDIxLTEwLTI4IDEzOjE1OjM1LjkxMgorIU1FU1NBR0UgQnVpbHRpbiBMRlMgc3VwcG9ydCBub3QgcHJlc2VudC9kZXRlY3RlZAorIVNUQUNLIDAKK2phdmEubGFuZy5DbGFzc05vdEZvdW5kRXhjZXB0aW9uOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5CdWlsdGluTEZTIGNhbm5vdCBiZSBmb3VuZCBieSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmVfNS4wLjAuMjAxODA2MTMxNTUwLXIKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NTA4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lMChOYXRpdmUgTWV0aG9kKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lKENsYXNzLmphdmE6MjY0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3IucmVnaXN0ZXJCdWlsdGluTEZTKEFjdGl2YXRvci5qYXZhOjI3OSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjIxMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5zb3VyY2VzLlNpbmdsZVNvdXJjZVBhY2thZ2UubG9hZENsYXNzKFNpbmdsZVNvdXJjZVBhY2thZ2UuamF2YTozNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yJFJlcG9zaXRvcnlDaGFuZ2VTY2FubmVyLjxpbml0PihBY3RpdmF0b3IuamF2YTo5MjEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc2V0dXBSZXBvQ2hhbmdlU2Nhbm5lcihBY3RpdmF0b3IuamF2YToxMDM0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUubG9hZENsYXNzKEVxdWlub3hCdW5kbGUuamF2YTo2MDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5vc2dpLlJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oUmVnaXN0cnlTdHJhdGVneU9TR0kuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5FeHRlbnNpb25SZWdpc3RyeS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEV4dGVuc2lvblJlZ2lzdHJ5LmphdmE6OTMxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudC5qYXZhOjI0MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuamF2YTo2MCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Xb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuZ2V0U291cmNlUHJvdmlkZXJzKFdvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5qYXZhOjE3NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Tb3VyY2VQcm92aWRlclNlcnZpY2UucmVhZFJlZ2lzdHJ5KFNvdXJjZVByb3ZpZGVyU2VydmljZS5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gkMzQucnVuV2l0aEV4Y2VwdGlvbihXb3JrYmVuY2guamF2YToyMzc4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmckU3RhcnR1cFJ1bm5hYmxlLnJ1bihTdGFydHVwVGhyZWFkaW5nLmphdmE6MzIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3luY2hyb25pemVyLnN5bmNFeGVjKFN5bmNocm9uaXplci5qYXZhOjIzMykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5VSVN5bmNocm9uaXplci5zeW5jRXhlYyhVSVN5bmNocm9uaXplci5qYXZhOjE0NCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnN5bmNFeGVjKERpc3BsYXkuamF2YTo0NTY3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmcucnVuV2l0aG91dEV4Y2VwdGlvbnMoU3RhcnR1cFRocmVhZGluZy5qYXZhOjk1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0aWFsaXplRGVmYXVsdFNlcnZpY2VzKFdvcmtiZW5jaC5qYXZhOjIzNzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXQoV29ya2JlbmNoLmphdmE6MTY1NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gucnVuVUkoV29ya2JlbmNoLmphdmE6Mjg1OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjU0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LnVpIDIgMCAyMDIxLTEwLTI4IDEzOjE2OjAzLjM2NAorIU1FU1NBR0UgV2FybmluZzogVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEhPTUUgaXMgbm90IHNldC4gVGhlIGZvbGxvd2luZyBkaXJlY3Rvcnkgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBHaXQKK3VzZXIgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gYW5kIHRvIGRlZmluZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiB0byBzdG9yZSByZXBvc2l0b3JpZXM6ICdDOlxVc2Vyc1xGcmFuY2snLiBJZiB0aGlzIGlzCitub3QgY29ycmVjdCBwbGVhc2Ugc2V0IHRoZSBIT01FIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCByZXN0YXJ0IEVjbGlwc2UuIE90aGVyd2lzZSBHaXQgZm9yIFdpbmRvd3MgYW5kCitFR2l0IG1pZ2h0IGJlaGF2ZSBkaWZmZXJlbnRseSBzaW5jZSB0aGV5IHNlZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLgorVGhpcyB3YXJuaW5nIGNhbiBiZSBzd2l0Y2hlZCBvZmYgb24gdGhlIFRlYW0gPiBHaXQgPiBDb25maXJtYXRpb25zIGFuZCBXYXJuaW5ncyBwcmVmZXJlbmNlIHBhZ2UuCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZSAyIDE3IDIwMjEtMTAtMjggMTM6MTY6MDUuMTk0CishTUVTU0FHRSBTZXJ2ZXIg4oCYb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVy4oCZIGZhaWxlZCB3aXRoIGV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQuIDsgdmVyc2lvbjogMi4wLjcudjIwMTcwOTA2LTEzMjcKKyFTVEFDSyAwCitjb20uZ29vZ2xlLmdzb24uSnNvblN5bnRheEV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjI0KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4ODgpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg1MykKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODAyKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5qc29uLkpzb24uZGVzZXJpYWxpemUoSnNvbi5qYXZhOjkxKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLklPLnJlZnJlc2hDb25maWd1cmF0aW9uKElPLmphdmE6NjYpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuU2VydmVyQ29ubmVjdGlvbi5zdGFydFVwKFNlcnZlckNvbm5lY3Rpb24uamF2YToxMjQpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0SWRsZVNlcnZpY2UkRGVsZWdhdGVTZXJ2aWNlJDEucnVuKEFic3RyYWN0SWRsZVNlcnZpY2UuamF2YTo2MikKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQ2FsbGFibGVzJDQucnVuKENhbGxhYmxlcy5qYXZhOjEyMikKKwlhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLnN0cmVhbS5Kc29uUmVhZGVyLmJlZ2luT2JqZWN0KEpzb25SZWFkZXIuamF2YTozODUpCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIxMykKKwkuLi4gOSBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aSA0IDAgMjAyMS0xMC0yOCAxMzoxNjoyMC4yMDgKKyFNRVNTQUdFIFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCishU1RBQ0sgMAoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0S25vd25SZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjQ4MCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkNhY2hpbmdSZXBvc2l0b3J5TWFuYWdlciRBcnRpZmFjdC5nZXRLbm93blJlcG9zaXRvcmllcyhDYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2MjMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuY29yZS5QMlV0aWwuZ2V0S25vd25SZXBvc2l0b3JpZXMoUDJVdGlsLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAucDIuaW1wbC5QMlRhc2tJbXBsLmlzTmVlZGVkKFAyVGFza0ltcGwuamF2YTo3MDEpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAuaW50ZXJuYWwuY29yZS5TZXR1cFRhc2tQZXJmb3JtZXIuaW5pdE5lZWRlZFNldHVwVGFza3MoU2V0dXBUYXNrUGVyZm9ybWVyLmphdmE6MjI3MykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLnBlcmZvcm1TdGFydHVwKFNldHVwVUlQbHVnaW4uamF2YTo2NzkpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5hY2Nlc3MkNShTZXR1cFVJUGx1Z2luLmphdmE6NDE1KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4kMSQxLnJ1bihTZXR1cFVJUGx1Z2luLmphdmE6MjUyKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjggMTU6NTQ6MDEuMTg4CishTUVTU0FHRSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKKyFTVEFDSyAwCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkKKwkuLi4gOCBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcCAxIDAgMjAyMS0xMC0yOCAxNTo1NDowMS4xOTIKKyFNRVNTQUdFIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wIGNvdWxkIG5vdCBiZSByZXNvbHZlZCBmcm9tIHRoZSBtb2RlbCByZXBvc2l0b3JpZXMuIEFyZSB5b3Ugb2ZmbGluZT8KKyFTRVNTSU9OIDIwMjEtMTAtMjkgMDg6MzQ6MzQuODUwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2xpcHNlLmJ1aWxkSWQ9NC44LjAuSTIwMTgwNjExLTA1MDAKK2phdmEudmVyc2lvbj0xLjguMF8yMzEKK2phdmEudmVuZG9yPU9yYWNsZSBDb3Jwb3JhdGlvbgorQm9vdExvYWRlciBjb25zdGFudHM6IE9TPXdpbjMyLCBBUkNIPXg4Nl82NCwgV1M9d2luMzIsIE5MPWRlX0RFCitGcmFtZXdvcmsgYXJndW1lbnRzOiAgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CitDb21tYW5kLWxpbmUgYXJndW1lbnRzOiAgLW9zIHdpbjMyIC13cyB3aW4zMiAtYXJjaCB4ODZfNjQgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucyA0IDAgMjAyMS0xMC0yOSAwODozNDo0Ni44NDQKKyFNRVNTQUdFIEZyYW1ld29ya0V2ZW50IEVSUk9SCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogRXhjZXB0aW9uIGluIG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydCgpIG9mIGJ1bmRsZSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucy4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjgwMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwkuLi4gMTIgbW9yZQorUm9vdCBleGNlcHRpb246CitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlIDIgMCAyMDIxLTEwLTI5IDA4OjM2OjAyLjc2NAorIU1FU1NBR0UgQnVpbHRpbiBMRlMgc3VwcG9ydCBub3QgcHJlc2VudC9kZXRlY3RlZAorIVNUQUNLIDAKK2phdmEubGFuZy5DbGFzc05vdEZvdW5kRXhjZXB0aW9uOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5CdWlsdGluTEZTIGNhbm5vdCBiZSBmb3VuZCBieSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmVfNS4wLjAuMjAxODA2MTMxNTUwLXIKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NTA4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lMChOYXRpdmUgTWV0aG9kKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lKENsYXNzLmphdmE6MjY0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3IucmVnaXN0ZXJCdWlsdGluTEZTKEFjdGl2YXRvci5qYXZhOjI3OSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjIxMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5zb3VyY2VzLlNpbmdsZVNvdXJjZVBhY2thZ2UubG9hZENsYXNzKFNpbmdsZVNvdXJjZVBhY2thZ2UuamF2YTozNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yJFJlcG9zaXRvcnlDaGFuZ2VTY2FubmVyLjxpbml0PihBY3RpdmF0b3IuamF2YTo5MjEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc2V0dXBSZXBvQ2hhbmdlU2Nhbm5lcihBY3RpdmF0b3IuamF2YToxMDM0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUubG9hZENsYXNzKEVxdWlub3hCdW5kbGUuamF2YTo2MDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5vc2dpLlJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oUmVnaXN0cnlTdHJhdGVneU9TR0kuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5FeHRlbnNpb25SZWdpc3RyeS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEV4dGVuc2lvblJlZ2lzdHJ5LmphdmE6OTMxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudC5qYXZhOjI0MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuamF2YTo2MCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Xb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuZ2V0U291cmNlUHJvdmlkZXJzKFdvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5qYXZhOjE3NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Tb3VyY2VQcm92aWRlclNlcnZpY2UucmVhZFJlZ2lzdHJ5KFNvdXJjZVByb3ZpZGVyU2VydmljZS5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gkMzQucnVuV2l0aEV4Y2VwdGlvbihXb3JrYmVuY2guamF2YToyMzc4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmckU3RhcnR1cFJ1bm5hYmxlLnJ1bihTdGFydHVwVGhyZWFkaW5nLmphdmE6MzIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3luY2hyb25pemVyLnN5bmNFeGVjKFN5bmNocm9uaXplci5qYXZhOjIzMykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5VSVN5bmNocm9uaXplci5zeW5jRXhlYyhVSVN5bmNocm9uaXplci5qYXZhOjE0NCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnN5bmNFeGVjKERpc3BsYXkuamF2YTo0NTY3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmcucnVuV2l0aG91dEV4Y2VwdGlvbnMoU3RhcnR1cFRocmVhZGluZy5qYXZhOjk1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0aWFsaXplRGVmYXVsdFNlcnZpY2VzKFdvcmtiZW5jaC5qYXZhOjIzNzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXQoV29ya2JlbmNoLmphdmE6MTY1NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gucnVuVUkoV29ya2JlbmNoLmphdmE6Mjg1OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjU0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LnVpIDIgMCAyMDIxLTEwLTI5IDA4OjM2OjQ3Ljk3MgorIU1FU1NBR0UgV2FybmluZzogVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEhPTUUgaXMgbm90IHNldC4gVGhlIGZvbGxvd2luZyBkaXJlY3Rvcnkgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBHaXQKK3VzZXIgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gYW5kIHRvIGRlZmluZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiB0byBzdG9yZSByZXBvc2l0b3JpZXM6ICdDOlxVc2Vyc1xGcmFuY2snLiBJZiB0aGlzIGlzCitub3QgY29ycmVjdCBwbGVhc2Ugc2V0IHRoZSBIT01FIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCByZXN0YXJ0IEVjbGlwc2UuIE90aGVyd2lzZSBHaXQgZm9yIFdpbmRvd3MgYW5kCitFR2l0IG1pZ2h0IGJlaGF2ZSBkaWZmZXJlbnRseSBzaW5jZSB0aGV5IHNlZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLgorVGhpcyB3YXJuaW5nIGNhbiBiZSBzd2l0Y2hlZCBvZmYgb24gdGhlIFRlYW0gPiBHaXQgPiBDb25maXJtYXRpb25zIGFuZCBXYXJuaW5ncyBwcmVmZXJlbmNlIHBhZ2UuCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZSAyIDE3IDIwMjEtMTAtMjkgMDg6MzY6NTMuODIxCishTUVTU0FHRSBTZXJ2ZXIg4oCYb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVy4oCZIGZhaWxlZCB3aXRoIGV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQuIDsgdmVyc2lvbjogMi4wLjcudjIwMTcwOTA2LTEzMjcKKyFTVEFDSyAwCitjb20uZ29vZ2xlLmdzb24uSnNvblN5bnRheEV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjI0KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4ODgpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg1MykKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODAyKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5qc29uLkpzb24uZGVzZXJpYWxpemUoSnNvbi5qYXZhOjkxKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLklPLnJlZnJlc2hDb25maWd1cmF0aW9uKElPLmphdmE6NjYpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuU2VydmVyQ29ubmVjdGlvbi5zdGFydFVwKFNlcnZlckNvbm5lY3Rpb24uamF2YToxMjQpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0SWRsZVNlcnZpY2UkRGVsZWdhdGVTZXJ2aWNlJDEucnVuKEFic3RyYWN0SWRsZVNlcnZpY2UuamF2YTo2MikKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQ2FsbGFibGVzJDQucnVuKENhbGxhYmxlcy5qYXZhOjEyMikKKwlhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLnN0cmVhbS5Kc29uUmVhZGVyLmJlZ2luT2JqZWN0KEpzb25SZWFkZXIuamF2YTozODUpCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIxMykKKwkuLi4gOSBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aSA0IDAgMjAyMS0xMC0yOSAwODozNzowNi40MjAKKyFNRVNTQUdFIFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCishU1RBQ0sgMAoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0S25vd25SZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjQ4MCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkNhY2hpbmdSZXBvc2l0b3J5TWFuYWdlciRBcnRpZmFjdC5nZXRLbm93blJlcG9zaXRvcmllcyhDYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2MjMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuY29yZS5QMlV0aWwuZ2V0S25vd25SZXBvc2l0b3JpZXMoUDJVdGlsLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAucDIuaW1wbC5QMlRhc2tJbXBsLmlzTmVlZGVkKFAyVGFza0ltcGwuamF2YTo3MDEpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAuaW50ZXJuYWwuY29yZS5TZXR1cFRhc2tQZXJmb3JtZXIuaW5pdE5lZWRlZFNldHVwVGFza3MoU2V0dXBUYXNrUGVyZm9ybWVyLmphdmE6MjI3MykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLnBlcmZvcm1TdGFydHVwKFNldHVwVUlQbHVnaW4uamF2YTo2NzkpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5hY2Nlc3MkNShTZXR1cFVJUGx1Z2luLmphdmE6NDE1KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4kMSQxLnJ1bihTZXR1cFVJUGx1Z2luLmphdmE6MjUyKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjkgMDk6MzA6MDQuNTIwCishTUVTU0FHRSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKKyFTVEFDSyAwCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkKKwkuLi4gOCBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcCAxIDAgMjAyMS0xMC0yOSAwOTozMDowNC41MjMKKyFNRVNTQUdFIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wIGNvdWxkIG5vdCBiZSByZXNvbHZlZCBmcm9tIHRoZSBtb2RlbCByZXBvc2l0b3JpZXMuIEFyZSB5b3Ugb2ZmbGluZT8KKyFTRVNTSU9OIDIwMjEtMTAtMjkgMTc6NDg6MTMuNDIzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2xpcHNlLmJ1aWxkSWQ9NC44LjAuSTIwMTgwNjExLTA1MDAKK2phdmEudmVyc2lvbj0xLjguMF8yMzEKK2phdmEudmVuZG9yPU9yYWNsZSBDb3Jwb3JhdGlvbgorQm9vdExvYWRlciBjb25zdGFudHM6IE9TPXdpbjMyLCBBUkNIPXg4Nl82NCwgV1M9d2luMzIsIE5MPWRlX0RFCitGcmFtZXdvcmsgYXJndW1lbnRzOiAgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CitDb21tYW5kLWxpbmUgYXJndW1lbnRzOiAgLW9zIHdpbjMyIC13cyB3aW4zMiAtYXJjaCB4ODZfNjQgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucyA0IDAgMjAyMS0xMC0yOSAxNzo0ODoyNC4zNTgKKyFNRVNTQUdFIEZyYW1ld29ya0V2ZW50IEVSUk9SCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogRXhjZXB0aW9uIGluIG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydCgpIG9mIGJ1bmRsZSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucy4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjgwMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwkuLi4gMTIgbW9yZQorUm9vdCBleGNlcHRpb246CitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlIDIgMCAyMDIxLTEwLTI5IDE3OjQ5OjU3LjE0OAorIU1FU1NBR0UgQnVpbHRpbiBMRlMgc3VwcG9ydCBub3QgcHJlc2VudC9kZXRlY3RlZAorIVNUQUNLIDAKK2phdmEubGFuZy5DbGFzc05vdEZvdW5kRXhjZXB0aW9uOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5CdWlsdGluTEZTIGNhbm5vdCBiZSBmb3VuZCBieSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmVfNS4wLjAuMjAxODA2MTMxNTUwLXIKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NTA4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lMChOYXRpdmUgTWV0aG9kKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lKENsYXNzLmphdmE6MjY0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3IucmVnaXN0ZXJCdWlsdGluTEZTKEFjdGl2YXRvci5qYXZhOjI3OSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjIxMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5zb3VyY2VzLlNpbmdsZVNvdXJjZVBhY2thZ2UubG9hZENsYXNzKFNpbmdsZVNvdXJjZVBhY2thZ2UuamF2YTozNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yJFJlcG9zaXRvcnlDaGFuZ2VTY2FubmVyLjxpbml0PihBY3RpdmF0b3IuamF2YTo5MjEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc2V0dXBSZXBvQ2hhbmdlU2Nhbm5lcihBY3RpdmF0b3IuamF2YToxMDM0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUubG9hZENsYXNzKEVxdWlub3hCdW5kbGUuamF2YTo2MDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5vc2dpLlJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oUmVnaXN0cnlTdHJhdGVneU9TR0kuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5FeHRlbnNpb25SZWdpc3RyeS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEV4dGVuc2lvblJlZ2lzdHJ5LmphdmE6OTMxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudC5qYXZhOjI0MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuamF2YTo2MCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Xb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuZ2V0U291cmNlUHJvdmlkZXJzKFdvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5qYXZhOjE3NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Tb3VyY2VQcm92aWRlclNlcnZpY2UucmVhZFJlZ2lzdHJ5KFNvdXJjZVByb3ZpZGVyU2VydmljZS5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gkMzQucnVuV2l0aEV4Y2VwdGlvbihXb3JrYmVuY2guamF2YToyMzc4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmckU3RhcnR1cFJ1bm5hYmxlLnJ1bihTdGFydHVwVGhyZWFkaW5nLmphdmE6MzIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3luY2hyb25pemVyLnN5bmNFeGVjKFN5bmNocm9uaXplci5qYXZhOjIzMykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5VSVN5bmNocm9uaXplci5zeW5jRXhlYyhVSVN5bmNocm9uaXplci5qYXZhOjE0NCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnN5bmNFeGVjKERpc3BsYXkuamF2YTo0NTY3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmcucnVuV2l0aG91dEV4Y2VwdGlvbnMoU3RhcnR1cFRocmVhZGluZy5qYXZhOjk1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0aWFsaXplRGVmYXVsdFNlcnZpY2VzKFdvcmtiZW5jaC5qYXZhOjIzNzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXQoV29ya2JlbmNoLmphdmE6MTY1NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gucnVuVUkoV29ya2JlbmNoLmphdmE6Mjg1OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjU0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LnVpIDIgMCAyMDIxLTEwLTI5IDE3OjUwOjI3LjMzNAorIU1FU1NBR0UgV2FybmluZzogVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEhPTUUgaXMgbm90IHNldC4gVGhlIGZvbGxvd2luZyBkaXJlY3Rvcnkgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBHaXQKK3VzZXIgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gYW5kIHRvIGRlZmluZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiB0byBzdG9yZSByZXBvc2l0b3JpZXM6ICdDOlxVc2Vyc1xGcmFuY2snLiBJZiB0aGlzIGlzCitub3QgY29ycmVjdCBwbGVhc2Ugc2V0IHRoZSBIT01FIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCByZXN0YXJ0IEVjbGlwc2UuIE90aGVyd2lzZSBHaXQgZm9yIFdpbmRvd3MgYW5kCitFR2l0IG1pZ2h0IGJlaGF2ZSBkaWZmZXJlbnRseSBzaW5jZSB0aGV5IHNlZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLgorVGhpcyB3YXJuaW5nIGNhbiBiZSBzd2l0Y2hlZCBvZmYgb24gdGhlIFRlYW0gPiBHaXQgPiBDb25maXJtYXRpb25zIGFuZCBXYXJuaW5ncyBwcmVmZXJlbmNlIHBhZ2UuCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5vc2dpIDIgMCAyMDIxLTEwLTI5IDE3OjUwOjI5LjY1OAorIU1FU1NBR0UgV2hpbGUgbG9hZGluZyBjbGFzcyAib3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyIiwgdGhyZWFkICJUaHJlYWRbV29ya2VyLTE6IERlY29yYXRpb24gQ2FsY3VsYXRpb24sNSxtYWluXSIgdGltZWQgb3V0IHdhaXRpbmcgKDUwMDVtcykgZm9yIHRocmVhZCAiVGhyZWFkW1dvcmtlci02OiBGaW5kIGFjY2Vzc29yIHR5cGUsNSxtYWluXSIgdG8gZmluaXNoIHN0YXJ0aW5nIGJ1bmRsZSAib3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2IFsyNjVdIi4gVG8gYXZvaWQgZGVhZGxvY2ssIHRocmVhZCAiVGhyZWFkW1dvcmtlci0xOiBEZWNvcmF0aW9uIENhbGN1bGF0aW9uLDUsbWFpbl0iIGlzIHByb2NlZWRpbmcgYnV0ICJvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLk1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIiIG1heSBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQuCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogVW5hYmxlIHRvIGFjcXVpcmUgdGhlIHN0YXRlIGNoYW5nZSBsb2NrIGZvciB0aGUgbW9kdWxlOiBvc2dpLmlkZW50aXR5OyB0eXBlPSJvc2dpLmJ1bmRsZSI7IHZlcnNpb246VmVyc2lvbj0iMS45LjAuMjAxODA2MDYtMjAzNiI7IG9zZ2kuaWRlbnRpdHk9Im9yZy5lY2xpcHNlLm0yZS5qZHQiOyBzaW5nbGV0b246PSJ0cnVlIiBbaWQ9MjY1XSBTVEFSVEVEIFtTVEFSVEVEXQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5sb2NrU3RhdGVDaGFuZ2UoTW9kdWxlLmphdmE6MzM3KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0MDEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmNvbXB1dGVDbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplcihKYXZhQ29yZS5qYXZhOjM2NjYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIoSmF2YUNvcmUuamF2YTozNjQyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUNvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzE2NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MjEyMCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YUNvcmUuamF2YTozNjE5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMTE4KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMjgyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LmdldFJlc29sdmVkQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MjM1OSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5pc09uQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MjY0NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuZ2V0T3ZlcmxheShCdWlsZHBhdGhJbmRpY2F0b3JMYWJlbERlY29yYXRvci5qYXZhOjQ1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5CdWlsZHBhdGhJbmRpY2F0b3JMYWJlbERlY29yYXRvci5kZWNvcmF0ZShCdWlsZHBhdGhJbmRpY2F0b3JMYWJlbERlY29yYXRvci5qYXZhOjMyKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuTGlnaHR3ZWlnaHREZWNvcmF0b3JEZWZpbml0aW9uLmRlY29yYXRlKExpZ2h0d2VpZ2h0RGVjb3JhdG9yRGVmaW5pdGlvbi5qYXZhOjI1OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkxpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlciRMaWdodHdlaWdodFJ1bm5hYmxlLnJ1bihMaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkxpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5kZWNvcmF0ZShMaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuamF2YTozNzcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5MaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuZ2V0RGVjb3JhdGlvbnMoTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmphdmE6MzU5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuRGVjb3JhdGlvblNjaGVkdWxlciQxLmVuc3VyZVJlc3VsdENhY2hlZChEZWNvcmF0aW9uU2NoZWR1bGVyLmphdmE6MzQ3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuRGVjb3JhdGlvblNjaGVkdWxlciQxLnJ1bihEZWNvcmF0aW9uU2NoZWR1bGVyLmphdmE6MzEwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorQ2F1c2VkIGJ5OiBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lb3V0RXhjZXB0aW9uOiBUaW1lb3V0IGFmdGVyIHdhaXRpbmcgNSBzZWNvbmRzIHRvIGFjcXVpcmUgdGhlIGxvY2suCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmxvY2tTdGF0ZUNoYW5nZShNb2R1bGUuamF2YTozMzQpCisJLi4uIDM1IG1vcmUKK1Jvb3QgZXhjZXB0aW9uOgoramF2YS51dGlsLmNvbmN1cnJlbnQuVGltZW91dEV4Y2VwdGlvbjogVGltZW91dCBhZnRlciB3YWl0aW5nIDUgc2Vjb25kcyB0byBhY3F1aXJlIHRoZSBsb2NrLgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5sb2NrU3RhdGVDaGFuZ2UoTW9kdWxlLmphdmE6MzM0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0MDEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmNvbXB1dGVDbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplcihKYXZhQ29yZS5qYXZhOjM2NjYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIoSmF2YUNvcmUuamF2YTozNjQyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUNvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzE2NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MjEyMCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YUNvcmUuamF2YTozNjE5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMTE4KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMjgyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LmdldFJlc29sdmVkQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MjM1OSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5pc09uQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MjY0NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuZ2V0T3ZlcmxheShCdWlsZHBhdGhJbmRpY2F0b3JMYWJlbERlY29yYXRvci5qYXZhOjQ1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5CdWlsZHBhdGhJbmRpY2F0b3JMYWJlbERlY29yYXRvci5kZWNvcmF0ZShCdWlsZHBhdGhJbmRpY2F0b3JMYWJlbERlY29yYXRvci5qYXZhOjMyKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuTGlnaHR3ZWlnaHREZWNvcmF0b3JEZWZpbml0aW9uLmRlY29yYXRlKExpZ2h0d2VpZ2h0RGVjb3JhdG9yRGVmaW5pdGlvbi5qYXZhOjI1OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkxpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlciRMaWdodHdlaWdodFJ1bm5hYmxlLnJ1bihMaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkxpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5kZWNvcmF0ZShMaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuamF2YTozNzcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5MaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuZ2V0RGVjb3JhdGlvbnMoTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmphdmE6MzU5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuRGVjb3JhdGlvblNjaGVkdWxlciQxLmVuc3VyZVJlc3VsdENhY2hlZChEZWNvcmF0aW9uU2NoZWR1bGVyLmphdmE6MzQ3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuRGVjb3JhdGlvblNjaGVkdWxlciQxLnJ1bihEZWNvcmF0aW9uU2NoZWR1bGVyLmphdmE6MzEwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorCishRU5UUlkgb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUgMiAxNyAyMDIxLTEwLTI5IDE3OjUwOjMwLjA0OQorIU1FU1NBR0UgU2VydmVyIOKAmG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlcuKAmSBmYWlsZWQgd2l0aCBleGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkLiA7IHZlcnNpb246IDIuMC43LnYyMDE3MDkwNi0xMzI3CishU1RBQ0sgMAorY29tLmdvb2dsZS5nc29uLkpzb25TeW50YXhFeGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIyNCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODg4KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4NTMpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjgwMikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIuanNvbi5Kc29uLmRlc2VyaWFsaXplKEpzb24uamF2YTo5MSkKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5JTy5yZWZyZXNoQ29uZmlndXJhdGlvbihJTy5qYXZhOjY2KQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLlNlcnZlckNvbm5lY3Rpb24uc3RhcnRVcChTZXJ2ZXJDb25uZWN0aW9uLmphdmE6MTI0KQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdElkbGVTZXJ2aWNlJERlbGVnYXRlU2VydmljZSQxLnJ1bihBYnN0cmFjdElkbGVTZXJ2aWNlLmphdmE6NjIpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkNhbGxhYmxlcyQ0LnJ1bihDYWxsYWJsZXMuamF2YToxMjIpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5zdHJlYW0uSnNvblJlYWRlci5iZWdpbk9iamVjdChKc29uUmVhZGVyLmphdmE6Mzg1KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMTMpCisJLi4uIDkgbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2Uub3NnaSAyIDAgMjAyMS0xMC0yOSAxNzo1MDozMi41OTgKKyFNRVNTQUdFIFdoaWxlIGxvYWRpbmcgY2xhc3MgIm9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplciIsIHRocmVhZCAiVGhyZWFkW1dvcmtlci0xMDogSW5pdGlhbGl6aW5nIEphdmEgVG9vbGluZyw1LG1haW5dIiB0aW1lZCBvdXQgd2FpdGluZyAoNTAwMW1zKSBmb3IgdGhyZWFkICJUaHJlYWRbV29ya2VyLTY6IEZpbmQgYWNjZXNzb3IgdHlwZSw1LG1haW5dIiB0byBmaW5pc2ggc3RhcnRpbmcgYnVuZGxlICJvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYgWzI2NV0iLiBUbyBhdm9pZCBkZWFkbG9jaywgdGhyZWFkICJUaHJlYWRbV29ya2VyLTEwOiBJbml0aWFsaXppbmcgSmF2YSBUb29saW5nLDUsbWFpbl0iIGlzIHByb2NlZWRpbmcgYnV0ICJvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLk1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIiIG1heSBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQuCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogVW5hYmxlIHRvIGFjcXVpcmUgdGhlIHN0YXRlIGNoYW5nZSBsb2NrIGZvciB0aGUgbW9kdWxlOiBvc2dpLmlkZW50aXR5OyB0eXBlPSJvc2dpLmJ1bmRsZSI7IHZlcnNpb246VmVyc2lvbj0iMS45LjAuMjAxODA2MDYtMjAzNiI7IG9zZ2kuaWRlbnRpdHk9Im9yZy5lY2xpcHNlLm0yZS5qZHQiOyBzaW5nbGV0b246PSJ0cnVlIiBbaWQ9MjY1XSBTVEFSVEVEIFtTVEFSVEVEXQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5sb2NrU3RhdGVDaGFuZ2UoTW9kdWxlLmphdmE6MzM3KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0MDEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmNvbXB1dGVDbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplcihKYXZhQ29yZS5qYXZhOjM2NjYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIoSmF2YUNvcmUuamF2YTozNjQyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUNvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzE2NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyJDEwLnJ1bihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzA3NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIyODkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMzE2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUFsbENvbnRhaW5lcnMoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxMzApCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjIxMTUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuaW5pdGlhbGl6ZUFmdGVyTG9hZChKYXZhQ29yZS5qYXZhOjQzODEpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLkluaXRpYWxpemVBZnRlckxvYWRKb2IkUmVhbEpvYi5ydW4oSW5pdGlhbGl6ZUFmdGVyTG9hZEpvYi5qYXZhOjM2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorQ2F1c2VkIGJ5OiBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lb3V0RXhjZXB0aW9uOiBUaW1lb3V0IGFmdGVyIHdhaXRpbmcgNSBzZWNvbmRzIHRvIGFjcXVpcmUgdGhlIGxvY2suCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmxvY2tTdGF0ZUNoYW5nZShNb2R1bGUuamF2YTozMzQpCisJLi4uIDI3IG1vcmUKK1Jvb3QgZXhjZXB0aW9uOgoramF2YS51dGlsLmNvbmN1cnJlbnQuVGltZW91dEV4Y2VwdGlvbjogVGltZW91dCBhZnRlciB3YWl0aW5nIDUgc2Vjb25kcyB0byBhY3F1aXJlIHRoZSBsb2NrLgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5sb2NrU3RhdGVDaGFuZ2UoTW9kdWxlLmphdmE6MzM0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0MDEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmNvbXB1dGVDbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplcihKYXZhQ29yZS5qYXZhOjM2NjYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIoSmF2YUNvcmUuamF2YTozNjQyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUNvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzE2NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyJDEwLnJ1bihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzA3NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIyODkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMzE2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUFsbENvbnRhaW5lcnMoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxMzApCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjIxMTUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuaW5pdGlhbGl6ZUFmdGVyTG9hZChKYXZhQ29yZS5qYXZhOjQzODEpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLkluaXRpYWxpemVBZnRlckxvYWRKb2IkUmVhbEpvYi5ydW4oSW5pdGlhbGl6ZUFmdGVyTG9hZEpvYi5qYXZhOjM2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorCishRU5UUlkgb3JnLmVjbGlwc2Uub3NnaSAyIDAgMjAyMS0xMC0yOSAxNzo1MDozMy4zOTYKKyFNRVNTQUdFIFdoaWxlIGxvYWRpbmcgY2xhc3MgIm9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplciIsIHRocmVhZCAiVGhyZWFkW1dvcmtlci03OiBVcGRhdGUgZHluYW1pYyBKYXZhIHNvdXJjZXMgd29ya2luZyBzZXRzLDUsbWFpbl0iIHRpbWVkIG91dCB3YWl0aW5nICg1MDAzbXMpIGZvciB0aHJlYWQgIlRocmVhZFtXb3JrZXItNjogRmluZCBhY2Nlc3NvciB0eXBlLDUsbWFpbl0iIHRvIGZpbmlzaCBzdGFydGluZyBidW5kbGUgIm9yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNiBbMjY1XSIuIFRvIGF2b2lkIGRlYWRsb2NrLCB0aHJlYWQgIlRocmVhZFtXb3JrZXItNzogVXBkYXRlIGR5bmFtaWMgSmF2YSBzb3VyY2VzIHdvcmtpbmcgc2V0cyw1LG1haW5dIiBpcyBwcm9jZWVkaW5nIGJ1dCAib3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyIiBtYXkgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkLgorIVNUQUNLIDAKK29yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb246IFVuYWJsZSB0byBhY3F1aXJlIHRoZSBzdGF0ZSBjaGFuZ2UgbG9jayBmb3IgdGhlIG1vZHVsZTogb3NnaS5pZGVudGl0eTsgdHlwZT0ib3NnaS5idW5kbGUiOyB2ZXJzaW9uOlZlcnNpb249IjEuOS4wLjIwMTgwNjA2LTIwMzYiOyBvc2dpLmlkZW50aXR5PSJvcmcuZWNsaXBzZS5tMmUuamR0Ijsgc2luZ2xldG9uOj0idHJ1ZSIgW2lkPTI2NV0gU1RBUlRFRCBbU1RBUlRFRF0KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUubG9ja1N0YXRlQ2hhbmdlKE1vZHVsZS5qYXZhOjMzNykKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDAxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUubG9hZENsYXNzKEVxdWlub3hCdW5kbGUuamF2YTo2MDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5vc2dpLlJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oUmVnaXN0cnlTdHJhdGVneU9TR0kuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5FeHRlbnNpb25SZWdpc3RyeS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEV4dGVuc2lvblJlZ2lzdHJ5LmphdmE6OTMxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudC5qYXZhOjI0MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuamF2YTo2MCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5jb21wdXRlQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIoSmF2YUNvcmUuamF2YTozNjY2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmdldENsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyKEphdmFDb3JlLmphdmE6MzY0MikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxNjUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlciQxMC5ydW4oSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMwNzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMjg5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjMxNikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVBbGxDb250YWluZXJzKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTMwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YToyMTE1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhQ29yZS5qYXZhOjM2MTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMxMTgpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMyODIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuZ2V0UmVzb2x2ZWRDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YToyMzU5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LmJ1aWxkU3RydWN0dXJlKEphdmFQcm9qZWN0LmphdmE6NDc1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLk9wZW5hYmxlLmdlbmVyYXRlSW5mb3MoT3BlbmFibGUuamF2YToyNjUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YUVsZW1lbnQub3BlbldoZW5DbG9zZWQoSmF2YUVsZW1lbnQuamF2YTo1OTMpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YUVsZW1lbnQuZ2V0RWxlbWVudEluZm8oSmF2YUVsZW1lbnQuamF2YTozMjMpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YUVsZW1lbnQuZ2V0RWxlbWVudEluZm8oSmF2YUVsZW1lbnQuamF2YTozMDkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YUVsZW1lbnQuZ2V0Q2hpbGRyZW4oSmF2YUVsZW1lbnQuamF2YToyNjQpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuZ2V0UGFja2FnZUZyYWdtZW50Um9vdHMoSmF2YVByb2plY3QuamF2YToyMjM1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS53b3JraW5nc2V0cy5EeW5hbWljU291cmNlc1dvcmtpbmdTZXRVcGRhdGVyLnVwZGF0ZUVsZW1lbnRzKER5bmFtaWNTb3VyY2VzV29ya2luZ1NldFVwZGF0ZXIuamF2YToxOTQpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLndvcmtpbmdzZXRzLkR5bmFtaWNTb3VyY2VzV29ya2luZ1NldFVwZGF0ZXIudXBkYXRlRWxlbWVudHMoRHluYW1pY1NvdXJjZXNXb3JraW5nU2V0VXBkYXRlci5qYXZhOjE3NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkud29ya2luZ3NldHMuRHluYW1pY1NvdXJjZXNXb3JraW5nU2V0VXBkYXRlciQxLnJ1bihEeW5hbWljU291cmNlc1dvcmtpbmdTZXRVcGRhdGVyLmphdmE6MTYyKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorQ2F1c2VkIGJ5OiBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lb3V0RXhjZXB0aW9uOiBUaW1lb3V0IGFmdGVyIHdhaXRpbmcgNSBzZWNvbmRzIHRvIGFjcXVpcmUgdGhlIGxvY2suCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmxvY2tTdGF0ZUNoYW5nZShNb2R1bGUuamF2YTozMzQpCisJLi4uIDM5IG1vcmUKK1Jvb3QgZXhjZXB0aW9uOgoramF2YS51dGlsLmNvbmN1cnJlbnQuVGltZW91dEV4Y2VwdGlvbjogVGltZW91dCBhZnRlciB3YWl0aW5nIDUgc2Vjb25kcyB0byBhY3F1aXJlIHRoZSBsb2NrLgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5sb2NrU3RhdGVDaGFuZ2UoTW9kdWxlLmphdmE6MzM0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0MDEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmNvbXB1dGVDbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplcihKYXZhQ29yZS5qYXZhOjM2NjYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIoSmF2YUNvcmUuamF2YTozNjQyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUNvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzE2NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyJDEwLnJ1bihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzA3NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIyODkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMzE2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUFsbENvbnRhaW5lcnMoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxMzApCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjIxMTUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFDb3JlLmphdmE6MzYxOSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzExOCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzI4MikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5nZXRSZXNvbHZlZENsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjIzNTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuYnVpbGRTdHJ1Y3R1cmUoSmF2YVByb2plY3QuamF2YTo0NzUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuT3BlbmFibGUuZ2VuZXJhdGVJbmZvcyhPcGVuYWJsZS5qYXZhOjI2NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhRWxlbWVudC5vcGVuV2hlbkNsb3NlZChKYXZhRWxlbWVudC5qYXZhOjU5MykKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhRWxlbWVudC5nZXRFbGVtZW50SW5mbyhKYXZhRWxlbWVudC5qYXZhOjMyMykKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhRWxlbWVudC5nZXRFbGVtZW50SW5mbyhKYXZhRWxlbWVudC5qYXZhOjMwOSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhRWxlbWVudC5nZXRDaGlsZHJlbihKYXZhRWxlbWVudC5qYXZhOjI2NCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5nZXRQYWNrYWdlRnJhZ21lbnRSb290cyhKYXZhUHJvamVjdC5qYXZhOjIyMzUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLndvcmtpbmdzZXRzLkR5bmFtaWNTb3VyY2VzV29ya2luZ1NldFVwZGF0ZXIudXBkYXRlRWxlbWVudHMoRHluYW1pY1NvdXJjZXNXb3JraW5nU2V0VXBkYXRlci5qYXZhOjE5NCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkud29ya2luZ3NldHMuRHluYW1pY1NvdXJjZXNXb3JraW5nU2V0VXBkYXRlci51cGRhdGVFbGVtZW50cyhEeW5hbWljU291cmNlc1dvcmtpbmdTZXRVcGRhdGVyLmphdmE6MTc1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS53b3JraW5nc2V0cy5EeW5hbWljU291cmNlc1dvcmtpbmdTZXRVcGRhdGVyJDEucnVuKER5bmFtaWNTb3VyY2VzV29ya2luZ1NldFVwZGF0ZXIuamF2YToxNjIpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5vc2dpIDIgMCAyMDIxLTEwLTI5IDE3OjUwOjM0LjY3OQorIU1FU1NBR0UgV2hpbGUgbG9hZGluZyBjbGFzcyAib3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aEhlbHBlcnMiLCB0aHJlYWQgIlRocmVhZFtXb3JrZXItMTogRGVjb3JhdGlvbiBDYWxjdWxhdGlvbiw1LG1haW5dIiB0aW1lZCBvdXQgd2FpdGluZyAoNTAwNW1zKSBmb3IgdGhyZWFkICJUaHJlYWRbV29ya2VyLTY6IEZpbmQgYWNjZXNzb3IgdHlwZSw1LG1haW5dIiB0byBmaW5pc2ggc3RhcnRpbmcgYnVuZGxlICJvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYgWzI2NV0iLiBUbyBhdm9pZCBkZWFkbG9jaywgdGhyZWFkICJUaHJlYWRbV29ya2VyLTE6IERlY29yYXRpb24gQ2FsY3VsYXRpb24sNSxtYWluXSIgaXMgcHJvY2VlZGluZyBidXQgIm9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhIZWxwZXJzIiBtYXkgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkLgorIVNUQUNLIDAKK29yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb246IFVuYWJsZSB0byBhY3F1aXJlIHRoZSBzdGF0ZSBjaGFuZ2UgbG9jayBmb3IgdGhlIG1vZHVsZTogb3NnaS5pZGVudGl0eTsgdHlwZT0ib3NnaS5idW5kbGUiOyB2ZXJzaW9uOlZlcnNpb249IjEuOS4wLjIwMTgwNjA2LTIwMzYiOyBvc2dpLmlkZW50aXR5PSJvcmcuZWNsaXBzZS5tMmUuamR0Ijsgc2luZ2xldG9uOj0idHJ1ZSIgW2lkPTI2NV0gU1RBUlRFRCBbU1RBUlRFRF0KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUubG9ja1N0YXRlQ2hhbmdlKE1vZHVsZS5qYXZhOjMzNykKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDAxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5pbml0aWFsaXplKE1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuamF2YTo0NCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxODQpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjIxMjApCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFDb3JlLmphdmE6MzYxOSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzExOCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzI4MikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5nZXRSZXNvbHZlZENsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjIzNTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuaXNPbkNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjI2NDYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLkJ1aWxkcGF0aEluZGljYXRvckxhYmVsRGVjb3JhdG9yLmdldE92ZXJsYXkoQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuamF2YTo0NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuZGVjb3JhdGUoQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuamF2YTozMikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkxpZ2h0d2VpZ2h0RGVjb3JhdG9yRGVmaW5pdGlvbi5kZWNvcmF0ZShMaWdodHdlaWdodERlY29yYXRvckRlZmluaXRpb24uamF2YToyNTgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5MaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIkTGlnaHR3ZWlnaHRSdW5uYWJsZS5ydW4oTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5MaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuZGVjb3JhdGUoTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmphdmE6Mzc3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmdldERlY29yYXRpb25zKExpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5qYXZhOjM1OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkRlY29yYXRpb25TY2hlZHVsZXIkMS5lbnN1cmVSZXN1bHRDYWNoZWQoRGVjb3JhdGlvblNjaGVkdWxlci5qYXZhOjM0NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkRlY29yYXRpb25TY2hlZHVsZXIkMS5ydW4oRGVjb3JhdGlvblNjaGVkdWxlci5qYXZhOjMxMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKK0NhdXNlZCBieTogamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZW91dEV4Y2VwdGlvbjogVGltZW91dCBhZnRlciB3YWl0aW5nIDUgc2Vjb25kcyB0byBhY3F1aXJlIHRoZSBsb2NrLgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5sb2NrU3RhdGVDaGFuZ2UoTW9kdWxlLmphdmE6MzM0KQorCS4uLiAyOSBtb3JlCitSb290IGV4Y2VwdGlvbjoKK2phdmEudXRpbC5jb25jdXJyZW50LlRpbWVvdXRFeGNlcHRpb246IFRpbWVvdXQgYWZ0ZXIgd2FpdGluZyA1IHNlY29uZHMgdG8gYWNxdWlyZSB0aGUgbG9jay4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUubG9ja1N0YXRlQ2hhbmdlKE1vZHVsZS5qYXZhOjMzNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDAxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5pbml0aWFsaXplKE1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuamF2YTo0NCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxODQpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjIxMjApCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFDb3JlLmphdmE6MzYxOSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzExOCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzI4MikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5nZXRSZXNvbHZlZENsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjIzNTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuaXNPbkNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjI2NDYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLkJ1aWxkcGF0aEluZGljYXRvckxhYmVsRGVjb3JhdG9yLmdldE92ZXJsYXkoQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuamF2YTo0NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuZGVjb3JhdGUoQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuamF2YTozMikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkxpZ2h0d2VpZ2h0RGVjb3JhdG9yRGVmaW5pdGlvbi5kZWNvcmF0ZShMaWdodHdlaWdodERlY29yYXRvckRlZmluaXRpb24uamF2YToyNTgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5MaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIkTGlnaHR3ZWlnaHRSdW5uYWJsZS5ydW4oTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5MaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuZGVjb3JhdGUoTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmphdmE6Mzc3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmdldERlY29yYXRpb25zKExpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5qYXZhOjM1OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkRlY29yYXRpb25TY2hlZHVsZXIkMS5lbnN1cmVSZXN1bHRDYWNoZWQoRGVjb3JhdGlvblNjaGVkdWxlci5qYXZhOjM0NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkRlY29yYXRpb25TY2hlZHVsZXIkMS5ydW4oRGVjb3JhdGlvblNjaGVkdWxlci5qYXZhOjMxMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaCA0IDIgMjAyMS0xMC0yOSAxNzo1MDozNS4yODUKKyFNRVNTQUdFIFByb2JsZW1zIG9jY3VycmVkIHdoZW4gaW52b2tpbmcgY29kZSBmcm9tIHBsdWctaW46ICJvcmcuZWNsaXBzZS51aS53b3JrYmVuY2giLgorIVNUQUNLIDAKK2phdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbgorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5nZXRCdWlsZFBhdGhNYW5hZ2VyKE1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuamF2YTo4MCkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLk1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuaW5pdGlhbGl6ZShNYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyLmphdmE6NDYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTg0KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YToyMTIwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhQ29yZS5qYXZhOjM2MTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMxMTgpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMyODIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuZ2V0UmVzb2x2ZWRDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YToyMzU5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LmlzT25DbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YToyNjQ2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5CdWlsZHBhdGhJbmRpY2F0b3JMYWJlbERlY29yYXRvci5nZXRPdmVybGF5KEJ1aWxkcGF0aEluZGljYXRvckxhYmVsRGVjb3JhdG9yLmphdmE6NDUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLkJ1aWxkcGF0aEluZGljYXRvckxhYmVsRGVjb3JhdG9yLmRlY29yYXRlKEJ1aWxkcGF0aEluZGljYXRvckxhYmVsRGVjb3JhdG9yLmphdmE6MzIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5MaWdodHdlaWdodERlY29yYXRvckRlZmluaXRpb24uZGVjb3JhdGUoTGlnaHR3ZWlnaHREZWNvcmF0b3JEZWZpbml0aW9uLmphdmE6MjU4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyJExpZ2h0d2VpZ2h0UnVubmFibGUucnVuKExpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmRlY29yYXRlKExpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5qYXZhOjM3NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkxpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5nZXREZWNvcmF0aW9ucyhMaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuamF2YTozNTkpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5EZWNvcmF0aW9uU2NoZWR1bGVyJDEuZW5zdXJlUmVzdWx0Q2FjaGVkKERlY29yYXRpb25TY2hlZHVsZXIuamF2YTozNDcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5EZWNvcmF0aW9uU2NoZWR1bGVyJDEucnVuKERlY29yYXRpb25TY2hlZHVsZXIuamF2YTozMTApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS51aSA0IDQgMjAyMS0xMC0yOSAxNzo1MDozNS4zMDcKKyFNRVNTQUdFIEV4Y2VwdGlvbiBpbiBEZWNvcmF0b3IuIFRoZSAnSmF2YSBCdWlsZCBQYXRoIEluZGljYXRvcicgZGVjb3JhdG9yIHdpbGwgYmUgZGlzYWJsZWQuCishU1VCRU5UUlkgMSBvcmcuZWNsaXBzZS51aSA0IDQgMjAyMS0xMC0yOSAxNzo1MDozNS4zMDcKKyFNRVNTQUdFIGphdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbgorIVNUQUNLIDAKK2phdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbgorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5nZXRCdWlsZFBhdGhNYW5hZ2VyKE1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuamF2YTo4MCkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLk1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuaW5pdGlhbGl6ZShNYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyLmphdmE6NDYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTg0KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YToyMTIwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhQ29yZS5qYXZhOjM2MTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMxMTgpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMyODIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuZ2V0UmVzb2x2ZWRDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YToyMzU5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LmlzT25DbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YToyNjQ2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5CdWlsZHBhdGhJbmRpY2F0b3JMYWJlbERlY29yYXRvci5nZXRPdmVybGF5KEJ1aWxkcGF0aEluZGljYXRvckxhYmVsRGVjb3JhdG9yLmphdmE6NDUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLkJ1aWxkcGF0aEluZGljYXRvckxhYmVsRGVjb3JhdG9yLmRlY29yYXRlKEJ1aWxkcGF0aEluZGljYXRvckxhYmVsRGVjb3JhdG9yLmphdmE6MzIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5MaWdodHdlaWdodERlY29yYXRvckRlZmluaXRpb24uZGVjb3JhdGUoTGlnaHR3ZWlnaHREZWNvcmF0b3JEZWZpbml0aW9uLmphdmE6MjU4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyJExpZ2h0d2VpZ2h0UnVubmFibGUucnVuKExpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmRlY29yYXRlKExpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5qYXZhOjM3NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkxpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5nZXREZWNvcmF0aW9ucyhMaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuamF2YTozNTkpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5EZWNvcmF0aW9uU2NoZWR1bGVyJDEuZW5zdXJlUmVzdWx0Q2FjaGVkKERlY29yYXRpb25TY2hlZHVsZXIuamF2YTozNDcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5EZWNvcmF0aW9uU2NoZWR1bGVyJDEucnVuKERlY29yYXRpb25TY2hlZHVsZXIuamF2YTozMTApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcyA0IDIgMjAyMS0xMC0yOSAxNzo1MDozNS43NjAKKyFNRVNTQUdFIFByb2JsZW1zIG9jY3VycmVkIHdoZW4gaW52b2tpbmcgY29kZSBmcm9tIHBsdWctaW46ICJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcyIuCishU1RBQ0sgMAoramF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyLmluaXRpYWxpemUoTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5qYXZhOjQ2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUNvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzE4NCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyJDEwLnJ1bihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzA3NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVBbGxDb250YWluZXJzKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTI4KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YToyMTE1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhQ29yZS5qYXZhOjM2MTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMxMTgpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMyODIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuQ2xhc3NwYXRoQ2hhbmdlLmdlbmVyYXRlRGVsdGEoQ2xhc3NwYXRoQ2hhbmdlLmphdmE6MjQwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkRlbHRhUHJvY2Vzc29yLnJlc291cmNlQ2hhbmdlZChEZWx0YVByb2Nlc3Nvci5qYXZhOjIxMDcpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuRGVsdGFQcm9jZXNzaW5nU3RhdGUucmVzb3VyY2VDaGFuZ2VkKERlbHRhUHJvY2Vzc2luZ1N0YXRlLmphdmE6NDc0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuZXZlbnRzLk5vdGlmaWNhdGlvbk1hbmFnZXIkMS5ydW4oTm90aWZpY2F0aW9uTWFuYWdlci5qYXZhOjI5NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuZXZlbnRzLk5vdGlmaWNhdGlvbk1hbmFnZXIubm90aWZ5KE5vdGlmaWNhdGlvbk1hbmFnZXIuamF2YToyODcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5ldmVudHMuTm90aWZpY2F0aW9uTWFuYWdlci5icm9hZGNhc3RDaGFuZ2VzKE5vdGlmaWNhdGlvbk1hbmFnZXIuamF2YToxNTApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLmJyb2FkY2FzdFBvc3RDaGFuZ2UoV29ya3NwYWNlLmphdmE6Mzc2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5lbmRPcGVyYXRpb24oV29ya3NwYWNlLmphdmE6MTQ5OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIzMDIpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5ldmVudHMuTm90aWZpY2F0aW9uTWFuYWdlciROb3RpZnlKb2IucnVuKE5vdGlmaWNhdGlvbk1hbmFnZXIuamF2YTo0MSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvciA0IDIgMjAyMS0xMC0yOSAxNzo1MDozNS44MjgKKyFNRVNTQUdFIFByb2JsZW1zIG9jY3VycmVkIHdoZW4gaW52b2tpbmcgY29kZSBmcm9tIHBsdWctaW46ICJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IiLgorIVNUQUNLIDAKK2phdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbgorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5pbml0aWFsaXplKE1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuamF2YTo0NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxODQpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlciQxMC5ydW4oSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMwNzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMjg5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjMxNikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVBbGxDb250YWluZXJzKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTMwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YToyMTE1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhQ29yZS5qYXZhOjM2MTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMxMTgpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMyODIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuZ2V0UmVzb2x2ZWRDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YToyMzU5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkR5bmFtaWNQcm9qZWN0UmVmZXJlbmNlcy5nZXREZXBlbmRlbnRQcm9qZWN0cyhEeW5hbWljUHJvamVjdFJlZmVyZW5jZXMuamF2YTozNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Qcm9qZWN0RGVzY3JpcHRpb24uY29tcHV0ZUR5bmFtaWNSZWZlcmVuY2VzRm9yUHJvamVjdChQcm9qZWN0RGVzY3JpcHRpb24uamF2YTo5NDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuUHJvamVjdERlc2NyaXB0aW9uLmdldEFsbEJ1aWxkQ29uZmlnUmVmZXJlbmNlcyhQcm9qZWN0RGVzY3JpcHRpb24uamF2YToyNjUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuUHJvamVjdERlc2NyaXB0aW9uLmdldEFsbFJlZmVyZW5jZXMoUHJvamVjdERlc2NyaXB0aW9uLmphdmE6MjIxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLlByb2plY3QuZ2V0UmVmZXJlbmNlZFByb2plY3RzKFByb2plY3QuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5DbG9zZVVucmVsYXRlZFByb2plY3RzQWN0aW9uLmJ1aWxkQ29ubmVjdGVkQ29tcG9uZW50cyhDbG9zZVVucmVsYXRlZFByb2plY3RzQWN0aW9uLmphdmE6NzkpCisJYXQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5DbG9zZVVucmVsYXRlZFByb2plY3RzQWN0aW9uLmNvbXB1dGVSZWxhdGVkKENsb3NlVW5yZWxhdGVkUHJvamVjdHNBY3Rpb24uamF2YToxOTkpCisJYXQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5DbG9zZVVucmVsYXRlZFByb2plY3RzQWN0aW9uLmdldFNlbGVjdGVkUmVzb3VyY2VzKENsb3NlVW5yZWxhdGVkUHJvamVjdHNBY3Rpb24uamF2YToyMTYpCisJYXQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5TZWxlY3Rpb25MaXN0ZW5lckFjdGlvbi5zZWxlY3Rpb25Jc09mVHlwZShTZWxlY3Rpb25MaXN0ZW5lckFjdGlvbi5qYXZhOjI0MCkKKwlhdCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLkNsb3NlUmVzb3VyY2VBY3Rpb24udXBkYXRlU2VsZWN0aW9uKENsb3NlUmVzb3VyY2VBY3Rpb24uamF2YToyMjIpCisJYXQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5CYXNlU2VsZWN0aW9uTGlzdGVuZXJBY3Rpb24uc2VsZWN0aW9uQ2hhbmdlZChCYXNlU2VsZWN0aW9uTGlzdGVuZXJBY3Rpb24uamF2YToxMjQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwubmF2aWdhdG9yLnJlc291cmNlcy5hY3Rpb25zLlJlc291cmNlTWdtdEFjdGlvblByb3ZpZGVyLnVwZGF0ZUFjdGlvbkJhcnMoUmVzb3VyY2VNZ210QWN0aW9uUHJvdmlkZXIuamF2YToyODYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwubmF2aWdhdG9yLnJlc291cmNlcy5hY3Rpb25zLlJlc291cmNlTWdtdEFjdGlvblByb3ZpZGVyLmZpbGxBY3Rpb25CYXJzKFJlc291cmNlTWdtdEFjdGlvblByb3ZpZGVyLmphdmE6ODkpCisJYXQgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLk5hdmlnYXRvckFjdGlvblNlcnZpY2UkMy5ydW4oTmF2aWdhdG9yQWN0aW9uU2VydmljZS5qYXZhOjI2NSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5OYXZpZ2F0b3JBY3Rpb25TZXJ2aWNlLmZpbGxBY3Rpb25CYXJzKE5hdmlnYXRvckFjdGlvblNlcnZpY2UuamF2YToyNTgpCisJYXQgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLkNvbW1vbk5hdmlnYXRvck1hbmFnZXIkVXBkYXRlQWN0aW9uQmFyc0pvYiQxLnJ1bihDb21tb25OYXZpZ2F0b3JNYW5hZ2VyLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuQ29tbW9uTmF2aWdhdG9yTWFuYWdlciRVcGRhdGVBY3Rpb25CYXJzSm9iLnJ1bkluVUlUaHJlYWQoQ29tbW9uTmF2aWdhdG9yTWFuYWdlci5qYXZhOjc4KQorCWF0IG9yZy5lY2xpcHNlLnVpLnByb2dyZXNzLlVJSm9iLmxhbWJkYSQwKFVJSm9iLmphdmE6OTUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuUnVubmFibGVMb2NrLnJ1bihSdW5uYWJsZUxvY2suamF2YTozNykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TeW5jaHJvbml6ZXIucnVuQXN5bmNNZXNzYWdlcyhTeW5jaHJvbml6ZXIuamF2YToxODIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5ydW5Bc3luY01lc3NhZ2VzKERpc3BsYXkuamF2YTozOTA2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkucmVhZEFuZERpc3BhdGNoKERpc3BsYXkuamF2YTozNTM3KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ1LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6MTE3MCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6MTA1OSkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guRTRXb3JrYmVuY2guY3JlYXRlQW5kUnVuVUkoRTRXb3JrYmVuY2guamF2YToxNTMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQzKFdvcmtiZW5jaC5qYXZhOjY2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChXb3JrYmVuY2guamF2YTo1OTcpCisJYXQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSS5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goUGxhdGZvcm1VSS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFQXBwbGljYXRpb24uc3RhcnQoSURFQXBwbGljYXRpb24uamF2YToxNTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5hcHAuRWNsaXBzZUFwcEhhbmRsZS5ydW4oRWNsaXBzZUFwcEhhbmRsZS5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIucnVuQXBwbGljYXRpb24oRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5zdGFydChFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6Mzg4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjI0MykKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NjIpCisJYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjQzKQorCWF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6NDk4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5pbnZva2VGcmFtZXdvcmsoTWFpbi5qYXZhOjY1NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uYmFzaWNSdW4oTWFpbi5qYXZhOjU5MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4ucnVuKE1haW4uamF2YToxNDk4KQorCishRU5UUlkgb3JnLmVjbGlwc2UuY29yZS5qb2JzIDQgMiAyMDIxLTEwLTI5IDE3OjUwOjM1LjgzMQorIU1FU1NBR0UgQW4gaW50ZXJuYWwgZXJyb3Igb2NjdXJyZWQgZHVyaW5nOiAiSW5pdGlhbGl6aW5nIEphdmEgVG9vbGluZyIuCishU1RBQ0sgMAoramF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyLmluaXRpYWxpemUoTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5qYXZhOjQ2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUNvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzE4NCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyJDEwLnJ1bihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzA3NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIyODkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMzE2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUFsbENvbnRhaW5lcnMoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxMzApCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjIxMTUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuaW5pdGlhbGl6ZUFmdGVyTG9hZChKYXZhQ29yZS5qYXZhOjQzODEpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLkluaXRpYWxpemVBZnRlckxvYWRKb2IkUmVhbEpvYi5ydW4oSW5pdGlhbGl6ZUFmdGVyTG9hZEpvYi5qYXZhOjM2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorCishRU5UUlkgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yIDQgMCAyMDIxLTEwLTI5IDE3OjUwOjM1LjkzMgorIU1FU1NBR0UgamF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uCishU1RBQ0sgMAoramF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyLmluaXRpYWxpemUoTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5qYXZhOjQ2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUNvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzE4NCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyJDEwLnJ1bihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzA3NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIyODkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMzE2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUFsbENvbnRhaW5lcnMoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxMzApCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjIxMTUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFDb3JlLmphdmE6MzYxOSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzExOCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzI4MikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5nZXRSZXNvbHZlZENsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjIzNTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuRHluYW1pY1Byb2plY3RSZWZlcmVuY2VzLmdldERlcGVuZGVudFByb2plY3RzKER5bmFtaWNQcm9qZWN0UmVmZXJlbmNlcy5qYXZhOjM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLlByb2plY3REZXNjcmlwdGlvbi5jb21wdXRlRHluYW1pY1JlZmVyZW5jZXNGb3JQcm9qZWN0KFByb2plY3REZXNjcmlwdGlvbi5qYXZhOjk0OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Qcm9qZWN0RGVzY3JpcHRpb24uZ2V0QWxsQnVpbGRDb25maWdSZWZlcmVuY2VzKFByb2plY3REZXNjcmlwdGlvbi5qYXZhOjI2NSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Qcm9qZWN0RGVzY3JpcHRpb24uZ2V0QWxsUmVmZXJlbmNlcyhQcm9qZWN0RGVzY3JpcHRpb24uamF2YToyMjEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuUHJvamVjdC5nZXRSZWZlcmVuY2VkUHJvamVjdHMoUHJvamVjdC5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLkNsb3NlVW5yZWxhdGVkUHJvamVjdHNBY3Rpb24uYnVpbGRDb25uZWN0ZWRDb21wb25lbnRzKENsb3NlVW5yZWxhdGVkUHJvamVjdHNBY3Rpb24uamF2YTo3OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLkNsb3NlVW5yZWxhdGVkUHJvamVjdHNBY3Rpb24uY29tcHV0ZVJlbGF0ZWQoQ2xvc2VVbnJlbGF0ZWRQcm9qZWN0c0FjdGlvbi5qYXZhOjE5OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLkNsb3NlVW5yZWxhdGVkUHJvamVjdHNBY3Rpb24uZ2V0U2VsZWN0ZWRSZXNvdXJjZXMoQ2xvc2VVbnJlbGF0ZWRQcm9qZWN0c0FjdGlvbi5qYXZhOjIxNikKKwlhdCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLlNlbGVjdGlvbkxpc3RlbmVyQWN0aW9uLnNlbGVjdGlvbklzT2ZUeXBlKFNlbGVjdGlvbkxpc3RlbmVyQWN0aW9uLmphdmE6MjQwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuQ2xvc2VSZXNvdXJjZUFjdGlvbi51cGRhdGVTZWxlY3Rpb24oQ2xvc2VSZXNvdXJjZUFjdGlvbi5qYXZhOjIyMikKKwlhdCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLkJhc2VTZWxlY3Rpb25MaXN0ZW5lckFjdGlvbi5zZWxlY3Rpb25DaGFuZ2VkKEJhc2VTZWxlY3Rpb25MaXN0ZW5lckFjdGlvbi5qYXZhOjEyNCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5uYXZpZ2F0b3IucmVzb3VyY2VzLmFjdGlvbnMuUmVzb3VyY2VNZ210QWN0aW9uUHJvdmlkZXIudXBkYXRlQWN0aW9uQmFycyhSZXNvdXJjZU1nbXRBY3Rpb25Qcm92aWRlci5qYXZhOjI4NikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5uYXZpZ2F0b3IucmVzb3VyY2VzLmFjdGlvbnMuUmVzb3VyY2VNZ210QWN0aW9uUHJvdmlkZXIuZmlsbEFjdGlvbkJhcnMoUmVzb3VyY2VNZ210QWN0aW9uUHJvdmlkZXIuamF2YTo4OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuTmF2aWdhdG9yQWN0aW9uU2VydmljZSQzLnJ1bihOYXZpZ2F0b3JBY3Rpb25TZXJ2aWNlLmphdmE6MjY1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLk5hdmlnYXRvckFjdGlvblNlcnZpY2UuZmlsbEFjdGlvbkJhcnMoTmF2aWdhdG9yQWN0aW9uU2VydmljZS5qYXZhOjI1OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuQ29tbW9uTmF2aWdhdG9yTWFuYWdlciRVcGRhdGVBY3Rpb25CYXJzSm9iJDEucnVuKENvbW1vbk5hdmlnYXRvck1hbmFnZXIuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Db21tb25OYXZpZ2F0b3JNYW5hZ2VyJFVwZGF0ZUFjdGlvbkJhcnNKb2IucnVuSW5VSVRocmVhZChDb21tb25OYXZpZ2F0b3JNYW5hZ2VyLmphdmE6NzgpCisJYXQgb3JnLmVjbGlwc2UudWkucHJvZ3Jlc3MuVUlKb2IubGFtYmRhJDAoVUlKb2IuamF2YTo5NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5SdW5uYWJsZUxvY2sucnVuKFJ1bm5hYmxlTG9jay5qYXZhOjM3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlN5bmNocm9uaXplci5ydW5Bc3luY01lc3NhZ2VzKFN5bmNocm9uaXplci5qYXZhOjE4MikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnJ1bkFzeW5jTWVzc2FnZXMoRGlzcGxheS5qYXZhOjM5MDYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5yZWFkQW5kRGlzcGF0Y2goRGlzcGxheS5qYXZhOjM1MzcpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDUucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YToxMTcwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YToxMDU5KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5FNFdvcmtiZW5jaC5jcmVhdGVBbmRSdW5VSShFNFdvcmtiZW5jaC5qYXZhOjE1MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aSA0IDAgMjAyMS0xMC0yOSAxNzo1MDo0My43MTQKKyFNRVNTQUdFIFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCishU1RBQ0sgMAoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0S25vd25SZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjQ4MCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkNhY2hpbmdSZXBvc2l0b3J5TWFuYWdlciRBcnRpZmFjdC5nZXRLbm93blJlcG9zaXRvcmllcyhDYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2MjMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuY29yZS5QMlV0aWwuZ2V0S25vd25SZXBvc2l0b3JpZXMoUDJVdGlsLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAucDIuaW1wbC5QMlRhc2tJbXBsLmlzTmVlZGVkKFAyVGFza0ltcGwuamF2YTo3MDEpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAuaW50ZXJuYWwuY29yZS5TZXR1cFRhc2tQZXJmb3JtZXIuaW5pdE5lZWRlZFNldHVwVGFza3MoU2V0dXBUYXNrUGVyZm9ybWVyLmphdmE6MjI3MykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLnBlcmZvcm1TdGFydHVwKFNldHVwVUlQbHVnaW4uamF2YTo2NzkpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5hY2Nlc3MkNShTZXR1cFVJUGx1Z2luLmphdmE6NDE1KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4kMSQxLnJ1bihTZXR1cFVJUGx1Z2luLmphdmE6MjUyKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorIVNFU1NJT04gMjAyMS0xMS0wMyAwOToxNjo1OS4yNzggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VjbGlwc2UuYnVpbGRJZD00LjguMC5JMjAxODA2MTEtMDUwMAoramF2YS52ZXJzaW9uPTEuOC4wXzIzMQoramF2YS52ZW5kb3I9T3JhY2xlIENvcnBvcmF0aW9uCitCb290TG9hZGVyIGNvbnN0YW50czogT1M9d2luMzIsIEFSQ0g9eDg2XzY0LCBXUz13aW4zMiwgTkw9ZGVfREUKK0ZyYW1ld29yayBhcmd1bWVudHM6ICAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKK0NvbW1hbmQtbGluZSBhcmd1bWVudHM6ICAtb3Mgd2luMzIgLXdzIHdpbjMyIC1hcmNoIHg4Nl82NCAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zIDQgMCAyMDIxLTExLTAzIDA5OjE3OjExLjUyMAorIU1FU1NBR0UgRnJhbWV3b3JrRXZlbnQgRVJST1IKKyFTVEFDSyAwCitvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOiBFeGNlcHRpb24gaW4gb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KCkgb2YgYnVuZGxlIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zLgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6ODAwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCS4uLiAxMiBtb3JlCitSb290IGV4Y2VwdGlvbjoKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUgMiAwIDIwMjEtMTEtMDMgMDk6MTc6MzQuMDczCishTUVTU0FHRSBCdWlsdGluIExGUyBzdXBwb3J0IG5vdCBwcmVzZW50L2RldGVjdGVkCishU1RBQ0sgMAoramF2YS5sYW5nLkNsYXNzTm90Rm91bmRFeGNlcHRpb246IG9yZy5lY2xpcHNlLmpnaXQubGZzLkJ1aWx0aW5MRlMgY2Fubm90IGJlIGZvdW5kIGJ5IG9yZy5lY2xpcHNlLmVnaXQuY29yZV81LjAuMC4yMDE4MDYxMzE1NTAtcgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo1MDgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUwKE5hdGl2ZSBNZXRob2QpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUoQ2xhc3MuamF2YToyNjQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5yZWdpc3RlckJ1aWx0aW5MRlMoQWN0aXZhdG9yLmphdmE6Mjc5KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MjEyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLnNvdXJjZXMuU2luZ2xlU291cmNlUGFja2FnZS5sb2FkQ2xhc3MoU2luZ2xlU291cmNlUGFja2FnZS5qYXZhOjM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3IkUmVwb3NpdG9yeUNoYW5nZVNjYW5uZXIuPGluaXQ+KEFjdGl2YXRvci5qYXZhOjkyMSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zZXR1cFJlcG9DaGFuZ2VTY2FubmVyKEFjdGl2YXRvci5qYXZhOjEwMzQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLldvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5nZXRTb3VyY2VQcm92aWRlcnMoV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmphdmE6MTc0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLlNvdXJjZVByb3ZpZGVyU2VydmljZS5yZWFkUmVnaXN0cnkoU291cmNlUHJvdmlkZXJTZXJ2aWNlLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaCQzNC5ydW5XaXRoRXhjZXB0aW9uKFdvcmtiZW5jaC5qYXZhOjIzNzgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZyRTdGFydHVwUnVubmFibGUucnVuKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTozMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TeW5jaHJvbml6ZXIuc3luY0V4ZWMoU3luY2hyb25pemVyLmphdmE6MjMzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlVJU3luY2hyb25pemVyLnN5bmNFeGVjKFVJU3luY2hyb25pemVyLmphdmE6MTQ0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc3luY0V4ZWMoRGlzcGxheS5qYXZhOjQ1NjcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZy5ydW5XaXRob3V0RXhjZXB0aW9ucyhTdGFydHVwVGhyZWFkaW5nLmphdmE6OTUpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXRpYWxpemVEZWZhdWx0U2VydmljZXMoV29ya2JlbmNoLmphdmE6MjM3MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdChXb3JrYmVuY2guamF2YToxNjU0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5ydW5VSShXb3JrYmVuY2guamF2YToyODU5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkMyhXb3JrYmVuY2guamF2YTo2NTQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goV29ya2JlbmNoLmphdmE6NTk3KQorCWF0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUkuY3JlYXRlQW5kUnVuV29ya2JlbmNoKFBsYXRmb3JtVUkuamF2YToxNDgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERUFwcGxpY2F0aW9uLnN0YXJ0KElERUFwcGxpY2F0aW9uLmphdmE6MTUyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuYXBwLkVjbGlwc2VBcHBIYW5kbGUucnVuKEVjbGlwc2VBcHBIYW5kbGUuamF2YToxOTYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnJ1bkFwcGxpY2F0aW9uKEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEzNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIuc3RhcnQoRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjM4OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YToyNDMpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKE5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjYyKQorCWF0IHN1bi5yZWZsZWN0LkRlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKERlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuamF2YTo0MykKKwlhdCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuaW52b2tlKE1ldGhvZC5qYXZhOjQ5OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uaW52b2tlRnJhbWV3b3JrKE1haW4uamF2YTo2NTYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmJhc2ljUnVuKE1haW4uamF2YTo1OTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLnJ1bihNYWluLmphdmE6MTQ5OCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQudWkgMiAwIDIwMjEtMTEtMDMgMDk6MTg6MTEuNTE4CishTUVTU0FHRSBXYXJuaW5nOiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgSE9NRSBpcyBub3Qgc2V0LiBUaGUgZm9sbG93aW5nIGRpcmVjdG9yeSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIEdpdAordXNlciBnbG9iYWwgY29uZmlndXJhdGlvbiBhbmQgdG8gZGVmaW5lIHRoZSBkZWZhdWx0IGxvY2F0aW9uIHRvIHN0b3JlIHJlcG9zaXRvcmllczogJ0M6XFVzZXJzXEZyYW5jaycuIElmIHRoaXMgaXMKK25vdCBjb3JyZWN0IHBsZWFzZSBzZXQgdGhlIEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIHJlc3RhcnQgRWNsaXBzZS4gT3RoZXJ3aXNlIEdpdCBmb3IgV2luZG93cyBhbmQKK0VHaXQgbWlnaHQgYmVoYXZlIGRpZmZlcmVudGx5IHNpbmNlIHRoZXkgc2VlIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCitUaGlzIHdhcm5pbmcgY2FuIGJlIHN3aXRjaGVkIG9mZiBvbiB0aGUgVGVhbSA+IEdpdCA+IENvbmZpcm1hdGlvbnMgYW5kIFdhcm5pbmdzIHByZWZlcmVuY2UgcGFnZS4KKworIUVOVFJZIG9yZy5lY2xpcHNlLm9zZ2kgMiAwIDIwMjEtMTEtMDMgMDk6MTg6MTQuNjk3CishTUVTU0FHRSBXaGlsZSBsb2FkaW5nIGNsYXNzICJvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLk1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIiLCB0aHJlYWQgIlRocmVhZFtXb3JrZXItNjogRGVjb3JhdGlvbiBDYWxjdWxhdGlvbiw1LG1haW5dIiB0aW1lZCBvdXQgd2FpdGluZyAoNTAyMW1zKSBmb3IgdGhyZWFkICJUaHJlYWRbV29ya2VyLTU6IEZpbmQgYWNjZXNzb3IgdHlwZSw1LG1haW5dIiB0byBmaW5pc2ggc3RhcnRpbmcgYnVuZGxlICJvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYgWzI2NV0iLiBUbyBhdm9pZCBkZWFkbG9jaywgdGhyZWFkICJUaHJlYWRbV29ya2VyLTY6IERlY29yYXRpb24gQ2FsY3VsYXRpb24sNSxtYWluXSIgaXMgcHJvY2VlZGluZyBidXQgIm9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplciIgbWF5IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC4KKyFTVEFDSyAwCitvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOiBVbmFibGUgdG8gYWNxdWlyZSB0aGUgc3RhdGUgY2hhbmdlIGxvY2sgZm9yIHRoZSBtb2R1bGU6IG9zZ2kuaWRlbnRpdHk7IHR5cGU9Im9zZ2kuYnVuZGxlIjsgdmVyc2lvbjpWZXJzaW9uPSIxLjkuMC4yMDE4MDYwNi0yMDM2Ijsgb3NnaS5pZGVudGl0eT0ib3JnLmVjbGlwc2UubTJlLmpkdCI7IHNpbmdsZXRvbjo9InRydWUiIFtpZD0yNjVdIFNUQVJURUQgW1NUQVJURURdCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmxvY2tTdGF0ZUNoYW5nZShNb2R1bGUuamF2YTozMzcpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQwMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuY29tcHV0ZUNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyKEphdmFDb3JlLmphdmE6MzY2NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplcihKYXZhQ29yZS5qYXZhOjM2NDIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTY1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YToyMTIwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhQ29yZS5qYXZhOjM2MTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMxMTgpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMyODIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuZ2V0UmVzb2x2ZWRDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YToyMzU5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LmlzT25DbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YToyNjQ2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5CdWlsZHBhdGhJbmRpY2F0b3JMYWJlbERlY29yYXRvci5nZXRPdmVybGF5KEJ1aWxkcGF0aEluZGljYXRvckxhYmVsRGVjb3JhdG9yLmphdmE6NDUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLkJ1aWxkcGF0aEluZGljYXRvckxhYmVsRGVjb3JhdG9yLmRlY29yYXRlKEJ1aWxkcGF0aEluZGljYXRvckxhYmVsRGVjb3JhdG9yLmphdmE6MzIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5MaWdodHdlaWdodERlY29yYXRvckRlZmluaXRpb24uZGVjb3JhdGUoTGlnaHR3ZWlnaHREZWNvcmF0b3JEZWZpbml0aW9uLmphdmE6MjU4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyJExpZ2h0d2VpZ2h0UnVubmFibGUucnVuKExpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmRlY29yYXRlKExpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5qYXZhOjM3NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkxpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5nZXREZWNvcmF0aW9ucyhMaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuamF2YTozNTkpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5EZWNvcmF0aW9uU2NoZWR1bGVyJDEuZW5zdXJlUmVzdWx0Q2FjaGVkKERlY29yYXRpb25TY2hlZHVsZXIuamF2YTozNDcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5EZWNvcmF0aW9uU2NoZWR1bGVyJDEucnVuKERlY29yYXRpb25TY2hlZHVsZXIuamF2YTozMTApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCitDYXVzZWQgYnk6IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVvdXRFeGNlcHRpb246IFRpbWVvdXQgYWZ0ZXIgd2FpdGluZyA1IHNlY29uZHMgdG8gYWNxdWlyZSB0aGUgbG9jay4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUubG9ja1N0YXRlQ2hhbmdlKE1vZHVsZS5qYXZhOjMzNCkKKwkuLi4gMzUgbW9yZQorUm9vdCBleGNlcHRpb246CitqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lb3V0RXhjZXB0aW9uOiBUaW1lb3V0IGFmdGVyIHdhaXRpbmcgNSBzZWNvbmRzIHRvIGFjcXVpcmUgdGhlIGxvY2suCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmxvY2tTdGF0ZUNoYW5nZShNb2R1bGUuamF2YTozMzQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQwMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuY29tcHV0ZUNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyKEphdmFDb3JlLmphdmE6MzY2NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplcihKYXZhQ29yZS5qYXZhOjM2NDIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTY1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YToyMTIwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhQ29yZS5qYXZhOjM2MTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMxMTgpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMyODIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuZ2V0UmVzb2x2ZWRDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YToyMzU5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LmlzT25DbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YToyNjQ2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5CdWlsZHBhdGhJbmRpY2F0b3JMYWJlbERlY29yYXRvci5nZXRPdmVybGF5KEJ1aWxkcGF0aEluZGljYXRvckxhYmVsRGVjb3JhdG9yLmphdmE6NDUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLkJ1aWxkcGF0aEluZGljYXRvckxhYmVsRGVjb3JhdG9yLmRlY29yYXRlKEJ1aWxkcGF0aEluZGljYXRvckxhYmVsRGVjb3JhdG9yLmphdmE6MzIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5MaWdodHdlaWdodERlY29yYXRvckRlZmluaXRpb24uZGVjb3JhdGUoTGlnaHR3ZWlnaHREZWNvcmF0b3JEZWZpbml0aW9uLmphdmE6MjU4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyJExpZ2h0d2VpZ2h0UnVubmFibGUucnVuKExpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmRlY29yYXRlKExpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5qYXZhOjM3NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkxpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5nZXREZWNvcmF0aW9ucyhMaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuamF2YTozNTkpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5EZWNvcmF0aW9uU2NoZWR1bGVyJDEuZW5zdXJlUmVzdWx0Q2FjaGVkKERlY29yYXRpb25TY2hlZHVsZXIuamF2YTozNDcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5EZWNvcmF0aW9uU2NoZWR1bGVyJDEucnVuKERlY29yYXRpb25TY2hlZHVsZXIuamF2YTozMTApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5vc2dpIDIgMCAyMDIxLTExLTAzIDA5OjE4OjE3LjE5NgorIU1FU1NBR0UgV2hpbGUgbG9hZGluZyBjbGFzcyAib3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyIiwgdGhyZWFkICJUaHJlYWRbV29ya2VyLTE6IEluaXRpYWxpemluZyBKYXZhIFRvb2xpbmcsNSxtYWluXSIgdGltZWQgb3V0IHdhaXRpbmcgKDUwMjhtcykgZm9yIHRocmVhZCAiVGhyZWFkW1dvcmtlci01OiBGaW5kIGFjY2Vzc29yIHR5cGUsNSxtYWluXSIgdG8gZmluaXNoIHN0YXJ0aW5nIGJ1bmRsZSAib3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2IFsyNjVdIi4gVG8gYXZvaWQgZGVhZGxvY2ssIHRocmVhZCAiVGhyZWFkW1dvcmtlci0xOiBJbml0aWFsaXppbmcgSmF2YSBUb29saW5nLDUsbWFpbl0iIGlzIHByb2NlZWRpbmcgYnV0ICJvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLk1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIiIG1heSBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQuCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogVW5hYmxlIHRvIGFjcXVpcmUgdGhlIHN0YXRlIGNoYW5nZSBsb2NrIGZvciB0aGUgbW9kdWxlOiBvc2dpLmlkZW50aXR5OyB0eXBlPSJvc2dpLmJ1bmRsZSI7IHZlcnNpb246VmVyc2lvbj0iMS45LjAuMjAxODA2MDYtMjAzNiI7IG9zZ2kuaWRlbnRpdHk9Im9yZy5lY2xpcHNlLm0yZS5qZHQiOyBzaW5nbGV0b246PSJ0cnVlIiBbaWQ9MjY1XSBTVEFSVEVEIFtTVEFSVEVEXQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5sb2NrU3RhdGVDaGFuZ2UoTW9kdWxlLmphdmE6MzM3KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0MDEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmNvbXB1dGVDbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplcihKYXZhQ29yZS5qYXZhOjM2NjYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIoSmF2YUNvcmUuamF2YTozNjQyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUNvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzE2NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyJDEwLnJ1bihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzA3NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIyODkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMzE2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUFsbENvbnRhaW5lcnMoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxMzApCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjIxMTUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuaW5pdGlhbGl6ZUFmdGVyTG9hZChKYXZhQ29yZS5qYXZhOjQzODEpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLkluaXRpYWxpemVBZnRlckxvYWRKb2IkUmVhbEpvYi5ydW4oSW5pdGlhbGl6ZUFmdGVyTG9hZEpvYi5qYXZhOjM2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorQ2F1c2VkIGJ5OiBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lb3V0RXhjZXB0aW9uOiBUaW1lb3V0IGFmdGVyIHdhaXRpbmcgNSBzZWNvbmRzIHRvIGFjcXVpcmUgdGhlIGxvY2suCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmxvY2tTdGF0ZUNoYW5nZShNb2R1bGUuamF2YTozMzQpCisJLi4uIDI3IG1vcmUKK1Jvb3QgZXhjZXB0aW9uOgoramF2YS51dGlsLmNvbmN1cnJlbnQuVGltZW91dEV4Y2VwdGlvbjogVGltZW91dCBhZnRlciB3YWl0aW5nIDUgc2Vjb25kcyB0byBhY3F1aXJlIHRoZSBsb2NrLgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5sb2NrU3RhdGVDaGFuZ2UoTW9kdWxlLmphdmE6MzM0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0MDEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmNvbXB1dGVDbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplcihKYXZhQ29yZS5qYXZhOjM2NjYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIoSmF2YUNvcmUuamF2YTozNjQyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUNvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzE2NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyJDEwLnJ1bihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzA3NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIyODkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMzE2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUFsbENvbnRhaW5lcnMoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxMzApCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjIxMTUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuaW5pdGlhbGl6ZUFmdGVyTG9hZChKYXZhQ29yZS5qYXZhOjQzODEpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLkluaXRpYWxpemVBZnRlckxvYWRKb2IkUmVhbEpvYi5ydW4oSW5pdGlhbGl6ZUFmdGVyTG9hZEpvYi5qYXZhOjM2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorCishRU5UUlkgb3JnLmVjbGlwc2Uub3NnaSAyIDAgMjAyMS0xMS0wMyAwOToxODoxOC44NzQKKyFNRVNTQUdFIFdoaWxlIGxvYWRpbmcgY2xhc3MgIm9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplciIsIHRocmVhZCAiVGhyZWFkW1dvcmtlci0yOiBVcGRhdGUgZHluYW1pYyBKYXZhIHNvdXJjZXMgd29ya2luZyBzZXRzLDUsbWFpbl0iIHRpbWVkIG91dCB3YWl0aW5nICg1MDE0bXMpIGZvciB0aHJlYWQgIlRocmVhZFtXb3JrZXItNTogRmluZCBhY2Nlc3NvciB0eXBlLDUsbWFpbl0iIHRvIGZpbmlzaCBzdGFydGluZyBidW5kbGUgIm9yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNiBbMjY1XSIuIFRvIGF2b2lkIGRlYWRsb2NrLCB0aHJlYWQgIlRocmVhZFtXb3JrZXItMjogVXBkYXRlIGR5bmFtaWMgSmF2YSBzb3VyY2VzIHdvcmtpbmcgc2V0cyw1LG1haW5dIiBpcyBwcm9jZWVkaW5nIGJ1dCAib3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyIiBtYXkgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkLgorIVNUQUNLIDAKK29yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb246IFVuYWJsZSB0byBhY3F1aXJlIHRoZSBzdGF0ZSBjaGFuZ2UgbG9jayBmb3IgdGhlIG1vZHVsZTogb3NnaS5pZGVudGl0eTsgdHlwZT0ib3NnaS5idW5kbGUiOyB2ZXJzaW9uOlZlcnNpb249IjEuOS4wLjIwMTgwNjA2LTIwMzYiOyBvc2dpLmlkZW50aXR5PSJvcmcuZWNsaXBzZS5tMmUuamR0Ijsgc2luZ2xldG9uOj0idHJ1ZSIgW2lkPTI2NV0gU1RBUlRFRCBbU1RBUlRFRF0KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUubG9ja1N0YXRlQ2hhbmdlKE1vZHVsZS5qYXZhOjMzNykKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDAxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUubG9hZENsYXNzKEVxdWlub3hCdW5kbGUuamF2YTo2MDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5vc2dpLlJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oUmVnaXN0cnlTdHJhdGVneU9TR0kuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5FeHRlbnNpb25SZWdpc3RyeS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEV4dGVuc2lvblJlZ2lzdHJ5LmphdmE6OTMxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudC5qYXZhOjI0MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuamF2YTo2MCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5jb21wdXRlQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIoSmF2YUNvcmUuamF2YTozNjY2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmdldENsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyKEphdmFDb3JlLmphdmE6MzY0MikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxNjUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlciQxMC5ydW4oSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMwNzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMjg5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjMxNikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVBbGxDb250YWluZXJzKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTMwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YToyMTE1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhQ29yZS5qYXZhOjM2MTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMxMTgpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMyODIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuZ2V0UmVzb2x2ZWRDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YToyMzU5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LmJ1aWxkU3RydWN0dXJlKEphdmFQcm9qZWN0LmphdmE6NDc1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLk9wZW5hYmxlLmdlbmVyYXRlSW5mb3MoT3BlbmFibGUuamF2YToyNjUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YUVsZW1lbnQub3BlbldoZW5DbG9zZWQoSmF2YUVsZW1lbnQuamF2YTo1OTMpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YUVsZW1lbnQuZ2V0RWxlbWVudEluZm8oSmF2YUVsZW1lbnQuamF2YTozMjMpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YUVsZW1lbnQuZ2V0RWxlbWVudEluZm8oSmF2YUVsZW1lbnQuamF2YTozMDkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YUVsZW1lbnQuZ2V0Q2hpbGRyZW4oSmF2YUVsZW1lbnQuamF2YToyNjQpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuZ2V0UGFja2FnZUZyYWdtZW50Um9vdHMoSmF2YVByb2plY3QuamF2YToyMjM1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS53b3JraW5nc2V0cy5EeW5hbWljU291cmNlc1dvcmtpbmdTZXRVcGRhdGVyLnVwZGF0ZUVsZW1lbnRzKER5bmFtaWNTb3VyY2VzV29ya2luZ1NldFVwZGF0ZXIuamF2YToxOTQpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLndvcmtpbmdzZXRzLkR5bmFtaWNTb3VyY2VzV29ya2luZ1NldFVwZGF0ZXIudXBkYXRlRWxlbWVudHMoRHluYW1pY1NvdXJjZXNXb3JraW5nU2V0VXBkYXRlci5qYXZhOjE3NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkud29ya2luZ3NldHMuRHluYW1pY1NvdXJjZXNXb3JraW5nU2V0VXBkYXRlciQxLnJ1bihEeW5hbWljU291cmNlc1dvcmtpbmdTZXRVcGRhdGVyLmphdmE6MTYyKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorQ2F1c2VkIGJ5OiBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lb3V0RXhjZXB0aW9uOiBUaW1lb3V0IGFmdGVyIHdhaXRpbmcgNSBzZWNvbmRzIHRvIGFjcXVpcmUgdGhlIGxvY2suCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmxvY2tTdGF0ZUNoYW5nZShNb2R1bGUuamF2YTozMzQpCisJLi4uIDM5IG1vcmUKK1Jvb3QgZXhjZXB0aW9uOgoramF2YS51dGlsLmNvbmN1cnJlbnQuVGltZW91dEV4Y2VwdGlvbjogVGltZW91dCBhZnRlciB3YWl0aW5nIDUgc2Vjb25kcyB0byBhY3F1aXJlIHRoZSBsb2NrLgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5sb2NrU3RhdGVDaGFuZ2UoTW9kdWxlLmphdmE6MzM0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0MDEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmNvbXB1dGVDbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplcihKYXZhQ29yZS5qYXZhOjM2NjYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIoSmF2YUNvcmUuamF2YTozNjQyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUNvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzE2NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyJDEwLnJ1bihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzA3NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIyODkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMzE2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUFsbENvbnRhaW5lcnMoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxMzApCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjIxMTUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFDb3JlLmphdmE6MzYxOSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzExOCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzI4MikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5nZXRSZXNvbHZlZENsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjIzNTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuYnVpbGRTdHJ1Y3R1cmUoSmF2YVByb2plY3QuamF2YTo0NzUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuT3BlbmFibGUuZ2VuZXJhdGVJbmZvcyhPcGVuYWJsZS5qYXZhOjI2NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhRWxlbWVudC5vcGVuV2hlbkNsb3NlZChKYXZhRWxlbWVudC5qYXZhOjU5MykKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhRWxlbWVudC5nZXRFbGVtZW50SW5mbyhKYXZhRWxlbWVudC5qYXZhOjMyMykKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhRWxlbWVudC5nZXRFbGVtZW50SW5mbyhKYXZhRWxlbWVudC5qYXZhOjMwOSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhRWxlbWVudC5nZXRDaGlsZHJlbihKYXZhRWxlbWVudC5qYXZhOjI2NCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5nZXRQYWNrYWdlRnJhZ21lbnRSb290cyhKYXZhUHJvamVjdC5qYXZhOjIyMzUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLndvcmtpbmdzZXRzLkR5bmFtaWNTb3VyY2VzV29ya2luZ1NldFVwZGF0ZXIudXBkYXRlRWxlbWVudHMoRHluYW1pY1NvdXJjZXNXb3JraW5nU2V0VXBkYXRlci5qYXZhOjE5NCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkud29ya2luZ3NldHMuRHluYW1pY1NvdXJjZXNXb3JraW5nU2V0VXBkYXRlci51cGRhdGVFbGVtZW50cyhEeW5hbWljU291cmNlc1dvcmtpbmdTZXRVcGRhdGVyLmphdmE6MTc1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS53b3JraW5nc2V0cy5EeW5hbWljU291cmNlc1dvcmtpbmdTZXRVcGRhdGVyJDEucnVuKER5bmFtaWNTb3VyY2VzV29ya2luZ1NldFVwZGF0ZXIuamF2YToxNjIpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZSAyIDE3IDIwMjEtMTEtMDMgMDk6MTg6MTkuNTQ0CishTUVTU0FHRSBTZXJ2ZXIg4oCYb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVy4oCZIGZhaWxlZCB3aXRoIGV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQuIDsgdmVyc2lvbjogMi4wLjcudjIwMTcwOTA2LTEzMjcKKyFTVEFDSyAwCitjb20uZ29vZ2xlLmdzb24uSnNvblN5bnRheEV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjI0KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4ODgpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg1MykKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODAyKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5qc29uLkpzb24uZGVzZXJpYWxpemUoSnNvbi5qYXZhOjkxKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLklPLnJlZnJlc2hDb25maWd1cmF0aW9uKElPLmphdmE6NjYpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuU2VydmVyQ29ubmVjdGlvbi5zdGFydFVwKFNlcnZlckNvbm5lY3Rpb24uamF2YToxMjQpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0SWRsZVNlcnZpY2UkRGVsZWdhdGVTZXJ2aWNlJDEucnVuKEFic3RyYWN0SWRsZVNlcnZpY2UuamF2YTo2MikKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQ2FsbGFibGVzJDQucnVuKENhbGxhYmxlcy5qYXZhOjEyMikKKwlhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLnN0cmVhbS5Kc29uUmVhZGVyLmJlZ2luT2JqZWN0KEpzb25SZWFkZXIuamF2YTozODUpCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIxMykKKwkuLi4gOSBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5vc2dpIDIgMCAyMDIxLTExLTAzIDA5OjE4OjE5LjgyMQorIU1FU1NBR0UgV2hpbGUgbG9hZGluZyBjbGFzcyAib3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aEhlbHBlcnMiLCB0aHJlYWQgIlRocmVhZFtXb3JrZXItNjogRGVjb3JhdGlvbiBDYWxjdWxhdGlvbiw1LG1haW5dIiB0aW1lZCBvdXQgd2FpdGluZyAoNTAwMm1zKSBmb3IgdGhyZWFkICJUaHJlYWRbV29ya2VyLTU6IEZpbmQgYWNjZXNzb3IgdHlwZSw1LG1haW5dIiB0byBmaW5pc2ggc3RhcnRpbmcgYnVuZGxlICJvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYgWzI2NV0iLiBUbyBhdm9pZCBkZWFkbG9jaywgdGhyZWFkICJUaHJlYWRbV29ya2VyLTY6IERlY29yYXRpb24gQ2FsY3VsYXRpb24sNSxtYWluXSIgaXMgcHJvY2VlZGluZyBidXQgIm9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhIZWxwZXJzIiBtYXkgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkLgorIVNUQUNLIDAKK29yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb246IFVuYWJsZSB0byBhY3F1aXJlIHRoZSBzdGF0ZSBjaGFuZ2UgbG9jayBmb3IgdGhlIG1vZHVsZTogb3NnaS5pZGVudGl0eTsgdHlwZT0ib3NnaS5idW5kbGUiOyB2ZXJzaW9uOlZlcnNpb249IjEuOS4wLjIwMTgwNjA2LTIwMzYiOyBvc2dpLmlkZW50aXR5PSJvcmcuZWNsaXBzZS5tMmUuamR0Ijsgc2luZ2xldG9uOj0idHJ1ZSIgW2lkPTI2NV0gU1RBUlRFRCBbU1RBUlRFRF0KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUubG9ja1N0YXRlQ2hhbmdlKE1vZHVsZS5qYXZhOjMzNykKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDAxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5pbml0aWFsaXplKE1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuamF2YTo0NCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxODQpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjIxMjApCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFDb3JlLmphdmE6MzYxOSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzExOCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzI4MikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5nZXRSZXNvbHZlZENsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjIzNTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuaXNPbkNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjI2NDYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLkJ1aWxkcGF0aEluZGljYXRvckxhYmVsRGVjb3JhdG9yLmdldE92ZXJsYXkoQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuamF2YTo0NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuZGVjb3JhdGUoQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuamF2YTozMikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkxpZ2h0d2VpZ2h0RGVjb3JhdG9yRGVmaW5pdGlvbi5kZWNvcmF0ZShMaWdodHdlaWdodERlY29yYXRvckRlZmluaXRpb24uamF2YToyNTgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5MaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIkTGlnaHR3ZWlnaHRSdW5uYWJsZS5ydW4oTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5MaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuZGVjb3JhdGUoTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmphdmE6Mzc3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmdldERlY29yYXRpb25zKExpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5qYXZhOjM1OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkRlY29yYXRpb25TY2hlZHVsZXIkMS5lbnN1cmVSZXN1bHRDYWNoZWQoRGVjb3JhdGlvblNjaGVkdWxlci5qYXZhOjM0NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkRlY29yYXRpb25TY2hlZHVsZXIkMS5ydW4oRGVjb3JhdGlvblNjaGVkdWxlci5qYXZhOjMxMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKK0NhdXNlZCBieTogamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZW91dEV4Y2VwdGlvbjogVGltZW91dCBhZnRlciB3YWl0aW5nIDUgc2Vjb25kcyB0byBhY3F1aXJlIHRoZSBsb2NrLgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5sb2NrU3RhdGVDaGFuZ2UoTW9kdWxlLmphdmE6MzM0KQorCS4uLiAyOSBtb3JlCitSb290IGV4Y2VwdGlvbjoKK2phdmEudXRpbC5jb25jdXJyZW50LlRpbWVvdXRFeGNlcHRpb246IFRpbWVvdXQgYWZ0ZXIgd2FpdGluZyA1IHNlY29uZHMgdG8gYWNxdWlyZSB0aGUgbG9jay4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUubG9ja1N0YXRlQ2hhbmdlKE1vZHVsZS5qYXZhOjMzNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDAxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5pbml0aWFsaXplKE1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuamF2YTo0NCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxODQpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjIxMjApCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFDb3JlLmphdmE6MzYxOSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzExOCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzI4MikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5nZXRSZXNvbHZlZENsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjIzNTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuaXNPbkNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjI2NDYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLkJ1aWxkcGF0aEluZGljYXRvckxhYmVsRGVjb3JhdG9yLmdldE92ZXJsYXkoQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuamF2YTo0NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuZGVjb3JhdGUoQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuamF2YTozMikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkxpZ2h0d2VpZ2h0RGVjb3JhdG9yRGVmaW5pdGlvbi5kZWNvcmF0ZShMaWdodHdlaWdodERlY29yYXRvckRlZmluaXRpb24uamF2YToyNTgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5MaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIkTGlnaHR3ZWlnaHRSdW5uYWJsZS5ydW4oTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5MaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuZGVjb3JhdGUoTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmphdmE6Mzc3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmdldERlY29yYXRpb25zKExpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5qYXZhOjM1OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkRlY29yYXRpb25TY2hlZHVsZXIkMS5lbnN1cmVSZXN1bHRDYWNoZWQoRGVjb3JhdGlvblNjaGVkdWxlci5qYXZhOjM0NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkRlY29yYXRpb25TY2hlZHVsZXIkMS5ydW4oRGVjb3JhdGlvblNjaGVkdWxlci5qYXZhOjMxMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaCA0IDIgMjAyMS0xMS0wMyAwOToxODoyOS4zNzAKKyFNRVNTQUdFIFByb2JsZW1zIG9jY3VycmVkIHdoZW4gaW52b2tpbmcgY29kZSBmcm9tIHBsdWctaW46ICJvcmcuZWNsaXBzZS51aS53b3JrYmVuY2giLgorIVNUQUNLIDAKK2phdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbgorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5pbml0aWFsaXplKE1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuamF2YTo0NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxODQpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjIxMjApCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFDb3JlLmphdmE6MzYxOSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzExOCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzI4MikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5nZXRSZXNvbHZlZENsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjIzNTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuaXNPbkNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjI2NDYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLkJ1aWxkcGF0aEluZGljYXRvckxhYmVsRGVjb3JhdG9yLmdldE92ZXJsYXkoQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuamF2YTo0NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuZGVjb3JhdGUoQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuamF2YTozMikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkxpZ2h0d2VpZ2h0RGVjb3JhdG9yRGVmaW5pdGlvbi5kZWNvcmF0ZShMaWdodHdlaWdodERlY29yYXRvckRlZmluaXRpb24uamF2YToyNTgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5MaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIkTGlnaHR3ZWlnaHRSdW5uYWJsZS5ydW4oTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5MaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuZGVjb3JhdGUoTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmphdmE6Mzc3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmdldERlY29yYXRpb25zKExpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5qYXZhOjM1OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkRlY29yYXRpb25TY2hlZHVsZXIkMS5lbnN1cmVSZXN1bHRDYWNoZWQoRGVjb3JhdGlvblNjaGVkdWxlci5qYXZhOjM0NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkRlY29yYXRpb25TY2hlZHVsZXIkMS5ydW4oRGVjb3JhdGlvblNjaGVkdWxlci5qYXZhOjMxMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzIDQgMiAyMDIxLTExLTAzIDA5OjE4OjI5LjM3MgorIU1FU1NBR0UgUHJvYmxlbXMgb2NjdXJyZWQgd2hlbiBpbnZva2luZyBjb2RlIGZyb20gcGx1Zy1pbjogIm9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzIi4KKyFTVEFDSyAwCitqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLk1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuaW5pdGlhbGl6ZShNYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyLmphdmE6NDYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTg0KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIkMTAucnVuKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMDc2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUFsbENvbnRhaW5lcnMoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxMjgpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjIxMTUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFDb3JlLmphdmE6MzYxOSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzExOCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzI4MikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5DbGFzc3BhdGhDaGFuZ2UuZ2VuZXJhdGVEZWx0YShDbGFzc3BhdGhDaGFuZ2UuamF2YToyNDApCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuRGVsdGFQcm9jZXNzb3IucmVzb3VyY2VDaGFuZ2VkKERlbHRhUHJvY2Vzc29yLmphdmE6MjEwNykKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5EZWx0YVByb2Nlc3NpbmdTdGF0ZS5yZXNvdXJjZUNoYW5nZWQoRGVsdGFQcm9jZXNzaW5nU3RhdGUuamF2YTo0NzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5ldmVudHMuTm90aWZpY2F0aW9uTWFuYWdlciQxLnJ1bihOb3RpZmljYXRpb25NYW5hZ2VyLmphdmE6Mjk3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5ldmVudHMuTm90aWZpY2F0aW9uTWFuYWdlci5ub3RpZnkoTm90aWZpY2F0aW9uTWFuYWdlci5qYXZhOjI4NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmV2ZW50cy5Ob3RpZmljYXRpb25NYW5hZ2VyLmJyb2FkY2FzdENoYW5nZXMoTm90aWZpY2F0aW9uTWFuYWdlci5qYXZhOjE1MCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UuYnJvYWRjYXN0UG9zdENoYW5nZShXb3Jrc3BhY2UuamF2YTozNzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLmVuZE9wZXJhdGlvbihXb3Jrc3BhY2UuamF2YToxNDk5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjMwMikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmV2ZW50cy5Ob3RpZmljYXRpb25NYW5hZ2VyJE5vdGlmeUpvYi5ydW4oTm90aWZpY2F0aW9uTWFuYWdlci5qYXZhOjQxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorCishRU5UUlkgb3JnLmVjbGlwc2UudWkgNCA0IDIwMjEtMTEtMDMgMDk6MTg6MjkuNDE2CishTUVTU0FHRSBFeGNlcHRpb24gaW4gRGVjb3JhdG9yLiBUaGUgJ0phdmEgQnVpbGQgUGF0aCBJbmRpY2F0b3InIGRlY29yYXRvciB3aWxsIGJlIGRpc2FibGVkLgorIVNVQkVOVFJZIDEgb3JnLmVjbGlwc2UudWkgNCA0IDIwMjEtMTEtMDMgMDk6MTg6MjkuNDE2CishTUVTU0FHRSBqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24KKyFTVEFDSyAwCitqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLk1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuaW5pdGlhbGl6ZShNYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyLmphdmE6NDYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTg0KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YToyMTIwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhQ29yZS5qYXZhOjM2MTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMxMTgpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMyODIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuZ2V0UmVzb2x2ZWRDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YToyMzU5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LmlzT25DbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YToyNjQ2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5CdWlsZHBhdGhJbmRpY2F0b3JMYWJlbERlY29yYXRvci5nZXRPdmVybGF5KEJ1aWxkcGF0aEluZGljYXRvckxhYmVsRGVjb3JhdG9yLmphdmE6NDUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLkJ1aWxkcGF0aEluZGljYXRvckxhYmVsRGVjb3JhdG9yLmRlY29yYXRlKEJ1aWxkcGF0aEluZGljYXRvckxhYmVsRGVjb3JhdG9yLmphdmE6MzIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5MaWdodHdlaWdodERlY29yYXRvckRlZmluaXRpb24uZGVjb3JhdGUoTGlnaHR3ZWlnaHREZWNvcmF0b3JEZWZpbml0aW9uLmphdmE6MjU4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyJExpZ2h0d2VpZ2h0UnVubmFibGUucnVuKExpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmRlY29yYXRlKExpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5qYXZhOjM3NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkxpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5nZXREZWNvcmF0aW9ucyhMaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuamF2YTozNTkpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5EZWNvcmF0aW9uU2NoZWR1bGVyJDEuZW5zdXJlUmVzdWx0Q2FjaGVkKERlY29yYXRpb25TY2hlZHVsZXIuamF2YTozNDcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5EZWNvcmF0aW9uU2NoZWR1bGVyJDEucnVuKERlY29yYXRpb25TY2hlZHVsZXIuamF2YTozMTApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IgNCAyIDIwMjEtMTEtMDMgMDk6MTg6MjkuNjAwCishTUVTU0FHRSBQcm9ibGVtcyBvY2N1cnJlZCB3aGVuIGludm9raW5nIGNvZGUgZnJvbSBwbHVnLWluOiAib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yIi4KKyFTVEFDSyAwCitqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLk1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuaW5pdGlhbGl6ZShNYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyLmphdmE6NDYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTg0KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIkMTAucnVuKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMDc2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjI4OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIzMTYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQWxsQ29udGFpbmVycyhKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzEzMCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MjExNSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YUNvcmUuamF2YTozNjE5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMTE4KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMjgyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LmdldFJlc29sdmVkQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MjM1OSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5EeW5hbWljUHJvamVjdFJlZmVyZW5jZXMuZ2V0RGVwZW5kZW50UHJvamVjdHMoRHluYW1pY1Byb2plY3RSZWZlcmVuY2VzLmphdmE6MzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuUHJvamVjdERlc2NyaXB0aW9uLmNvbXB1dGVEeW5hbWljUmVmZXJlbmNlc0ZvclByb2plY3QoUHJvamVjdERlc2NyaXB0aW9uLmphdmE6OTQ5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLlByb2plY3REZXNjcmlwdGlvbi5nZXRBbGxCdWlsZENvbmZpZ1JlZmVyZW5jZXMoUHJvamVjdERlc2NyaXB0aW9uLmphdmE6MjY1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLlByb2plY3REZXNjcmlwdGlvbi5nZXRBbGxSZWZlcmVuY2VzKFByb2plY3REZXNjcmlwdGlvbi5qYXZhOjIyMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Qcm9qZWN0LmdldFJlZmVyZW5jZWRQcm9qZWN0cyhQcm9qZWN0LmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuQ2xvc2VVbnJlbGF0ZWRQcm9qZWN0c0FjdGlvbi5idWlsZENvbm5lY3RlZENvbXBvbmVudHMoQ2xvc2VVbnJlbGF0ZWRQcm9qZWN0c0FjdGlvbi5qYXZhOjc5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuQ2xvc2VVbnJlbGF0ZWRQcm9qZWN0c0FjdGlvbi5jb21wdXRlUmVsYXRlZChDbG9zZVVucmVsYXRlZFByb2plY3RzQWN0aW9uLmphdmE6MTk5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuQ2xvc2VVbnJlbGF0ZWRQcm9qZWN0c0FjdGlvbi5nZXRTZWxlY3RlZFJlc291cmNlcyhDbG9zZVVucmVsYXRlZFByb2plY3RzQWN0aW9uLmphdmE6MjE2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuU2VsZWN0aW9uTGlzdGVuZXJBY3Rpb24uc2VsZWN0aW9uSXNPZlR5cGUoU2VsZWN0aW9uTGlzdGVuZXJBY3Rpb24uamF2YToyNDApCisJYXQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5DbG9zZVJlc291cmNlQWN0aW9uLnVwZGF0ZVNlbGVjdGlvbihDbG9zZVJlc291cmNlQWN0aW9uLmphdmE6MjIyKQorCWF0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuQmFzZVNlbGVjdGlvbkxpc3RlbmVyQWN0aW9uLnNlbGVjdGlvbkNoYW5nZWQoQmFzZVNlbGVjdGlvbkxpc3RlbmVyQWN0aW9uLmphdmE6MTI0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLm5hdmlnYXRvci5yZXNvdXJjZXMuYWN0aW9ucy5SZXNvdXJjZU1nbXRBY3Rpb25Qcm92aWRlci51cGRhdGVBY3Rpb25CYXJzKFJlc291cmNlTWdtdEFjdGlvblByb3ZpZGVyLmphdmE6Mjg2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLm5hdmlnYXRvci5yZXNvdXJjZXMuYWN0aW9ucy5SZXNvdXJjZU1nbXRBY3Rpb25Qcm92aWRlci5maWxsQWN0aW9uQmFycyhSZXNvdXJjZU1nbXRBY3Rpb25Qcm92aWRlci5qYXZhOjg5KQorCWF0IG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5OYXZpZ2F0b3JBY3Rpb25TZXJ2aWNlJDMucnVuKE5hdmlnYXRvckFjdGlvblNlcnZpY2UuamF2YToyNjUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuTmF2aWdhdG9yQWN0aW9uU2VydmljZS5maWxsQWN0aW9uQmFycyhOYXZpZ2F0b3JBY3Rpb25TZXJ2aWNlLmphdmE6MjU4KQorCWF0IG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Db21tb25OYXZpZ2F0b3JNYW5hZ2VyJFVwZGF0ZUFjdGlvbkJhcnNKb2IkMS5ydW4oQ29tbW9uTmF2aWdhdG9yTWFuYWdlci5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLkNvbW1vbk5hdmlnYXRvck1hbmFnZXIkVXBkYXRlQWN0aW9uQmFyc0pvYi5ydW5JblVJVGhyZWFkKENvbW1vbk5hdmlnYXRvck1hbmFnZXIuamF2YTo3OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5wcm9ncmVzcy5VSUpvYi5sYW1iZGEkMChVSUpvYi5qYXZhOjk1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlJ1bm5hYmxlTG9jay5ydW4oUnVubmFibGVMb2NrLmphdmE6MzcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3luY2hyb25pemVyLnJ1bkFzeW5jTWVzc2FnZXMoU3luY2hyb25pemVyLmphdmE6MTgyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkucnVuQXN5bmNNZXNzYWdlcyhEaXNwbGF5LmphdmE6MzkwNikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnJlYWRBbmREaXNwYXRjaChEaXNwbGF5LmphdmE6MzUzNykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNS5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjExNzApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjEwNTkpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLkU0V29ya2JlbmNoLmNyZWF0ZUFuZFJ1blVJKEU0V29ya2JlbmNoLmphdmE6MTUzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkMyhXb3JrYmVuY2guamF2YTo2NjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goV29ya2JlbmNoLmphdmE6NTk3KQorCWF0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUkuY3JlYXRlQW5kUnVuV29ya2JlbmNoKFBsYXRmb3JtVUkuamF2YToxNDgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERUFwcGxpY2F0aW9uLnN0YXJ0KElERUFwcGxpY2F0aW9uLmphdmE6MTUyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuYXBwLkVjbGlwc2VBcHBIYW5kbGUucnVuKEVjbGlwc2VBcHBIYW5kbGUuamF2YToxOTYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnJ1bkFwcGxpY2F0aW9uKEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEzNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIuc3RhcnQoRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjM4OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YToyNDMpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKE5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjYyKQorCWF0IHN1bi5yZWZsZWN0LkRlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKERlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuamF2YTo0MykKKwlhdCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuaW52b2tlKE1ldGhvZC5qYXZhOjQ5OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uaW52b2tlRnJhbWV3b3JrKE1haW4uamF2YTo2NTYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmJhc2ljUnVuKE1haW4uamF2YTo1OTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLnJ1bihNYWluLmphdmE6MTQ5OCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmNvcmUuam9icyA0IDIgMjAyMS0xMS0wMyAwOToxODoyOS42MDMKKyFNRVNTQUdFIEFuIGludGVybmFsIGVycm9yIG9jY3VycmVkIGR1cmluZzogIkluaXRpYWxpemluZyBKYXZhIFRvb2xpbmciLgorIVNUQUNLIDAKK2phdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbgorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5pbml0aWFsaXplKE1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuamF2YTo0NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxODQpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlciQxMC5ydW4oSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMwNzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMjg5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjMxNikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVBbGxDb250YWluZXJzKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTMwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YToyMTE1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmluaXRpYWxpemVBZnRlckxvYWQoSmF2YUNvcmUuamF2YTo0MzgxKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5Jbml0aWFsaXplQWZ0ZXJMb2FkSm9iJFJlYWxKb2IucnVuKEluaXRpYWxpemVBZnRlckxvYWRKb2IuamF2YTozNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvciA0IDAgMjAyMS0xMS0wMyAwOToxODoyOS43NTMKKyFNRVNTQUdFIGphdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbgorIVNUQUNLIDAKK2phdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbgorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5pbml0aWFsaXplKE1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuamF2YTo0NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxODQpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlciQxMC5ydW4oSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMwNzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMjg5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjMxNikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVBbGxDb250YWluZXJzKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTMwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YToyMTE1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhQ29yZS5qYXZhOjM2MTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMxMTgpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMyODIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuZ2V0UmVzb2x2ZWRDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YToyMzU5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkR5bmFtaWNQcm9qZWN0UmVmZXJlbmNlcy5nZXREZXBlbmRlbnRQcm9qZWN0cyhEeW5hbWljUHJvamVjdFJlZmVyZW5jZXMuamF2YTozNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Qcm9qZWN0RGVzY3JpcHRpb24uY29tcHV0ZUR5bmFtaWNSZWZlcmVuY2VzRm9yUHJvamVjdChQcm9qZWN0RGVzY3JpcHRpb24uamF2YTo5NDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuUHJvamVjdERlc2NyaXB0aW9uLmdldEFsbEJ1aWxkQ29uZmlnUmVmZXJlbmNlcyhQcm9qZWN0RGVzY3JpcHRpb24uamF2YToyNjUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuUHJvamVjdERlc2NyaXB0aW9uLmdldEFsbFJlZmVyZW5jZXMoUHJvamVjdERlc2NyaXB0aW9uLmphdmE6MjIxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLlByb2plY3QuZ2V0UmVmZXJlbmNlZFByb2plY3RzKFByb2plY3QuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5DbG9zZVVucmVsYXRlZFByb2plY3RzQWN0aW9uLmJ1aWxkQ29ubmVjdGVkQ29tcG9uZW50cyhDbG9zZVVucmVsYXRlZFByb2plY3RzQWN0aW9uLmphdmE6NzkpCisJYXQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5DbG9zZVVucmVsYXRlZFByb2plY3RzQWN0aW9uLmNvbXB1dGVSZWxhdGVkKENsb3NlVW5yZWxhdGVkUHJvamVjdHNBY3Rpb24uamF2YToxOTkpCisJYXQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5DbG9zZVVucmVsYXRlZFByb2plY3RzQWN0aW9uLmdldFNlbGVjdGVkUmVzb3VyY2VzKENsb3NlVW5yZWxhdGVkUHJvamVjdHNBY3Rpb24uamF2YToyMTYpCisJYXQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5TZWxlY3Rpb25MaXN0ZW5lckFjdGlvbi5zZWxlY3Rpb25Jc09mVHlwZShTZWxlY3Rpb25MaXN0ZW5lckFjdGlvbi5qYXZhOjI0MCkKKwlhdCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLkNsb3NlUmVzb3VyY2VBY3Rpb24udXBkYXRlU2VsZWN0aW9uKENsb3NlUmVzb3VyY2VBY3Rpb24uamF2YToyMjIpCisJYXQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5CYXNlU2VsZWN0aW9uTGlzdGVuZXJBY3Rpb24uc2VsZWN0aW9uQ2hhbmdlZChCYXNlU2VsZWN0aW9uTGlzdGVuZXJBY3Rpb24uamF2YToxMjQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwubmF2aWdhdG9yLnJlc291cmNlcy5hY3Rpb25zLlJlc291cmNlTWdtdEFjdGlvblByb3ZpZGVyLnVwZGF0ZUFjdGlvbkJhcnMoUmVzb3VyY2VNZ210QWN0aW9uUHJvdmlkZXIuamF2YToyODYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwubmF2aWdhdG9yLnJlc291cmNlcy5hY3Rpb25zLlJlc291cmNlTWdtdEFjdGlvblByb3ZpZGVyLmZpbGxBY3Rpb25CYXJzKFJlc291cmNlTWdtdEFjdGlvblByb3ZpZGVyLmphdmE6ODkpCisJYXQgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLk5hdmlnYXRvckFjdGlvblNlcnZpY2UkMy5ydW4oTmF2aWdhdG9yQWN0aW9uU2VydmljZS5qYXZhOjI2NSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5OYXZpZ2F0b3JBY3Rpb25TZXJ2aWNlLmZpbGxBY3Rpb25CYXJzKE5hdmlnYXRvckFjdGlvblNlcnZpY2UuamF2YToyNTgpCisJYXQgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLkNvbW1vbk5hdmlnYXRvck1hbmFnZXIkVXBkYXRlQWN0aW9uQmFyc0pvYiQxLnJ1bihDb21tb25OYXZpZ2F0b3JNYW5hZ2VyLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuQ29tbW9uTmF2aWdhdG9yTWFuYWdlciRVcGRhdGVBY3Rpb25CYXJzSm9iLnJ1bkluVUlUaHJlYWQoQ29tbW9uTmF2aWdhdG9yTWFuYWdlci5qYXZhOjc4KQorCWF0IG9yZy5lY2xpcHNlLnVpLnByb2dyZXNzLlVJSm9iLmxhbWJkYSQwKFVJSm9iLmphdmE6OTUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuUnVubmFibGVMb2NrLnJ1bihSdW5uYWJsZUxvY2suamF2YTozNykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TeW5jaHJvbml6ZXIucnVuQXN5bmNNZXNzYWdlcyhTeW5jaHJvbml6ZXIuamF2YToxODIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5ydW5Bc3luY01lc3NhZ2VzKERpc3BsYXkuamF2YTozOTA2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkucmVhZEFuZERpc3BhdGNoKERpc3BsYXkuamF2YTozNTM3KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ1LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6MTE3MCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6MTA1OSkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guRTRXb3JrYmVuY2guY3JlYXRlQW5kUnVuVUkoRTRXb3JrYmVuY2guamF2YToxNTMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQzKFdvcmtiZW5jaC5qYXZhOjY2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChXb3JrYmVuY2guamF2YTo1OTcpCisJYXQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSS5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goUGxhdGZvcm1VSS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFQXBwbGljYXRpb24uc3RhcnQoSURFQXBwbGljYXRpb24uamF2YToxNTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5hcHAuRWNsaXBzZUFwcEhhbmRsZS5ydW4oRWNsaXBzZUFwcEhhbmRsZS5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIucnVuQXBwbGljYXRpb24oRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5zdGFydChFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6Mzg4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjI0MykKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NjIpCisJYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjQzKQorCWF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6NDk4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5pbnZva2VGcmFtZXdvcmsoTWFpbi5qYXZhOjY1NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uYmFzaWNSdW4oTWFpbi5qYXZhOjU5MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4ucnVuKE1haW4uamF2YToxNDk4KQorCishRU5UUlkgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkgNCAwIDIwMjEtMTEtMDMgMDk6MTg6MzcuNDQ4CishTUVTU0FHRSBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorIVNUQUNLIDAKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldEtub3duUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo0ODApCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5DYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIkQXJ0aWZhY3QuZ2V0S25vd25SZXBvc2l0b3JpZXMoQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjIzKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmNvcmUuUDJVdGlsLmdldEtub3duUmVwb3NpdG9yaWVzKFAyVXRpbC5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnAyLmltcGwuUDJUYXNrSW1wbC5pc05lZWRlZChQMlRhc2tJbXBsLmphdmE6NzAxKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLmludGVybmFsLmNvcmUuU2V0dXBUYXNrUGVyZm9ybWVyLmluaXROZWVkZWRTZXR1cFRhc2tzKFNldHVwVGFza1BlcmZvcm1lci5qYXZhOjIyNzMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5wZXJmb3JtU3RhcnR1cChTZXR1cFVJUGx1Z2luLmphdmE6Njc5KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4uYWNjZXNzJDUoU2V0dXBVSVBsdWdpbi5qYXZhOjQxNSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luJDEkMS5ydW4oU2V0dXBVSVBsdWdpbi5qYXZhOjI1MikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKyFTRVNTSU9OIDIwMjEtMTEtMDQgMDg6MTM6NTUuMjY2IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2xpcHNlLmJ1aWxkSWQ9NC44LjAuSTIwMTgwNjExLTA1MDAKK2phdmEudmVyc2lvbj0xLjguMF8yMzEKK2phdmEudmVuZG9yPU9yYWNsZSBDb3Jwb3JhdGlvbgorQm9vdExvYWRlciBjb25zdGFudHM6IE9TPXdpbjMyLCBBUkNIPXg4Nl82NCwgV1M9d2luMzIsIE5MPWRlX0RFCitGcmFtZXdvcmsgYXJndW1lbnRzOiAgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CitDb21tYW5kLWxpbmUgYXJndW1lbnRzOiAgLW9zIHdpbjMyIC13cyB3aW4zMiAtYXJjaCB4ODZfNjQgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucyA0IDAgMjAyMS0xMS0wNCAwODoxNDowOC4xODUKKyFNRVNTQUdFIEZyYW1ld29ya0V2ZW50IEVSUk9SCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogRXhjZXB0aW9uIGluIG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydCgpIG9mIGJ1bmRsZSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucy4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjgwMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwkuLi4gMTIgbW9yZQorUm9vdCBleGNlcHRpb246CitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlIDIgMCAyMDIxLTExLTA0IDA4OjE0OjU0LjIzNgorIU1FU1NBR0UgQnVpbHRpbiBMRlMgc3VwcG9ydCBub3QgcHJlc2VudC9kZXRlY3RlZAorIVNUQUNLIDAKK2phdmEubGFuZy5DbGFzc05vdEZvdW5kRXhjZXB0aW9uOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5CdWlsdGluTEZTIGNhbm5vdCBiZSBmb3VuZCBieSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmVfNS4wLjAuMjAxODA2MTMxNTUwLXIKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NTA4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lMChOYXRpdmUgTWV0aG9kKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lKENsYXNzLmphdmE6MjY0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3IucmVnaXN0ZXJCdWlsdGluTEZTKEFjdGl2YXRvci5qYXZhOjI3OSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjIxMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5zb3VyY2VzLlNpbmdsZVNvdXJjZVBhY2thZ2UubG9hZENsYXNzKFNpbmdsZVNvdXJjZVBhY2thZ2UuamF2YTozNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yJFJlcG9zaXRvcnlDaGFuZ2VTY2FubmVyLjxpbml0PihBY3RpdmF0b3IuamF2YTo5MjEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc2V0dXBSZXBvQ2hhbmdlU2Nhbm5lcihBY3RpdmF0b3IuamF2YToxMDM0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUubG9hZENsYXNzKEVxdWlub3hCdW5kbGUuamF2YTo2MDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5vc2dpLlJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oUmVnaXN0cnlTdHJhdGVneU9TR0kuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5FeHRlbnNpb25SZWdpc3RyeS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEV4dGVuc2lvblJlZ2lzdHJ5LmphdmE6OTMxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudC5qYXZhOjI0MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuamF2YTo2MCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Xb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuZ2V0U291cmNlUHJvdmlkZXJzKFdvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5qYXZhOjE3NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Tb3VyY2VQcm92aWRlclNlcnZpY2UucmVhZFJlZ2lzdHJ5KFNvdXJjZVByb3ZpZGVyU2VydmljZS5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gkMzQucnVuV2l0aEV4Y2VwdGlvbihXb3JrYmVuY2guamF2YToyMzc4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmckU3RhcnR1cFJ1bm5hYmxlLnJ1bihTdGFydHVwVGhyZWFkaW5nLmphdmE6MzIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3luY2hyb25pemVyLnN5bmNFeGVjKFN5bmNocm9uaXplci5qYXZhOjIzMykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5VSVN5bmNocm9uaXplci5zeW5jRXhlYyhVSVN5bmNocm9uaXplci5qYXZhOjE0NCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnN5bmNFeGVjKERpc3BsYXkuamF2YTo0NTY3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmcucnVuV2l0aG91dEV4Y2VwdGlvbnMoU3RhcnR1cFRocmVhZGluZy5qYXZhOjk1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0aWFsaXplRGVmYXVsdFNlcnZpY2VzKFdvcmtiZW5jaC5qYXZhOjIzNzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXQoV29ya2JlbmNoLmphdmE6MTY1NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gucnVuVUkoV29ya2JlbmNoLmphdmE6Mjg1OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjU0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LnVpIDIgMCAyMDIxLTExLTA0IDA4OjE1OjI5Ljg4OQorIU1FU1NBR0UgV2FybmluZzogVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEhPTUUgaXMgbm90IHNldC4gVGhlIGZvbGxvd2luZyBkaXJlY3Rvcnkgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBHaXQKK3VzZXIgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gYW5kIHRvIGRlZmluZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiB0byBzdG9yZSByZXBvc2l0b3JpZXM6ICdDOlxVc2Vyc1xGcmFuY2snLiBJZiB0aGlzIGlzCitub3QgY29ycmVjdCBwbGVhc2Ugc2V0IHRoZSBIT01FIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCByZXN0YXJ0IEVjbGlwc2UuIE90aGVyd2lzZSBHaXQgZm9yIFdpbmRvd3MgYW5kCitFR2l0IG1pZ2h0IGJlaGF2ZSBkaWZmZXJlbnRseSBzaW5jZSB0aGV5IHNlZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLgorVGhpcyB3YXJuaW5nIGNhbiBiZSBzd2l0Y2hlZCBvZmYgb24gdGhlIFRlYW0gPiBHaXQgPiBDb25maXJtYXRpb25zIGFuZCBXYXJuaW5ncyBwcmVmZXJlbmNlIHBhZ2UuCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5vc2dpIDIgMCAyMDIxLTExLTA0IDA4OjE1OjMyLjE0NgorIU1FU1NBR0UgV2hpbGUgbG9hZGluZyBjbGFzcyAib3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyIiwgdGhyZWFkICJUaHJlYWRbV29ya2VyLTEwOiBGaW5kIGFjY2Vzc29yIHR5cGUsNSxtYWluXSIgdGltZWQgb3V0IHdhaXRpbmcgKDUwNzVtcykgZm9yIHRocmVhZCAiVGhyZWFkW1dvcmtlci01OiBEZWNvcmF0aW9uIENhbGN1bGF0aW9uLDUsbWFpbl0iIHRvIGZpbmlzaCBzdGFydGluZyBidW5kbGUgIm9yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNiBbMjY1XSIuIFRvIGF2b2lkIGRlYWRsb2NrLCB0aHJlYWQgIlRocmVhZFtXb3JrZXItMTA6IEZpbmQgYWNjZXNzb3IgdHlwZSw1LG1haW5dIiBpcyBwcm9jZWVkaW5nIGJ1dCAib3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyIiBtYXkgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkLgorIVNUQUNLIDAKK29yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb246IFVuYWJsZSB0byBhY3F1aXJlIHRoZSBzdGF0ZSBjaGFuZ2UgbG9jayBmb3IgdGhlIG1vZHVsZTogb3NnaS5pZGVudGl0eTsgdHlwZT0ib3NnaS5idW5kbGUiOyB2ZXJzaW9uOlZlcnNpb249IjEuOS4wLjIwMTgwNjA2LTIwMzYiOyBvc2dpLmlkZW50aXR5PSJvcmcuZWNsaXBzZS5tMmUuamR0Ijsgc2luZ2xldG9uOj0idHJ1ZSIgW2lkPTI2NV0gU1RBUlRFRCBbU1RBUlRFRF0KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUubG9ja1N0YXRlQ2hhbmdlKE1vZHVsZS5qYXZhOjMzNykKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDAxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUubG9hZENsYXNzKEVxdWlub3hCdW5kbGUuamF2YTo2MDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5vc2dpLlJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oUmVnaXN0cnlTdHJhdGVneU9TR0kuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5FeHRlbnNpb25SZWdpc3RyeS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEV4dGVuc2lvblJlZ2lzdHJ5LmphdmE6OTMxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudC5qYXZhOjI0MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuamF2YTo2MCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5jb21wdXRlQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIoSmF2YUNvcmUuamF2YTozNjY2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmdldENsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyKEphdmFDb3JlLmphdmE6MzY0MikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxNjUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjIxMjApCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFDb3JlLmphdmE6MzYxOSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzExOCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzI4MikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5nZXRSZXNvbHZlZENsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjIzNTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5kZXRlcm1pbmVJZk9uQ2xhc3NwYXRoKEphdmFNb2RlbE1hbmFnZXIuamF2YToxMTY5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuY3JlYXRlKEphdmFNb2RlbE1hbmFnZXIuamF2YToxMDUyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuY3JlYXRlKEphdmFNb2RlbE1hbmFnZXIuamF2YTo5OTMpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuY3JlYXRlKEphdmFDb3JlLmphdmE6MzQ5OCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkucHJvcGVydGllc2ZpbGVlZGl0b3IuUHJvcGVydGllc0ZpbGVFZGl0b3IuZmluZEFjY2Vzc29yVHlwZShQcm9wZXJ0aWVzRmlsZUVkaXRvci5qYXZhOjMyNCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkucHJvcGVydGllc2ZpbGVlZGl0b3IuUHJvcGVydGllc0ZpbGVFZGl0b3IuYWNjZXNzJDEoUHJvcGVydGllc0ZpbGVFZGl0b3IuamF2YTozMTUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLnByb3BlcnRpZXNmaWxlZWRpdG9yLlByb3BlcnRpZXNGaWxlRWRpdG9yJDIucnVuKFByb3BlcnRpZXNGaWxlRWRpdG9yLmphdmE6MTMzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorQ2F1c2VkIGJ5OiBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lb3V0RXhjZXB0aW9uOiBUaW1lb3V0IGFmdGVyIHdhaXRpbmcgNSBzZWNvbmRzIHRvIGFjcXVpcmUgdGhlIGxvY2suCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmxvY2tTdGF0ZUNoYW5nZShNb2R1bGUuamF2YTozMzQpCisJLi4uIDMyIG1vcmUKK1Jvb3QgZXhjZXB0aW9uOgoramF2YS51dGlsLmNvbmN1cnJlbnQuVGltZW91dEV4Y2VwdGlvbjogVGltZW91dCBhZnRlciB3YWl0aW5nIDUgc2Vjb25kcyB0byBhY3F1aXJlIHRoZSBsb2NrLgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5sb2NrU3RhdGVDaGFuZ2UoTW9kdWxlLmphdmE6MzM0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0MDEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmNvbXB1dGVDbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplcihKYXZhQ29yZS5qYXZhOjM2NjYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIoSmF2YUNvcmUuamF2YTozNjQyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUNvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzE2NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MjEyMCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YUNvcmUuamF2YTozNjE5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMTE4KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMjgyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LmdldFJlc29sdmVkQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MjM1OSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmRldGVybWluZUlmT25DbGFzc3BhdGgoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjExNjkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5jcmVhdGUoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjEwNTIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5jcmVhdGUoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjk5MykKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5jcmVhdGUoSmF2YUNvcmUuamF2YTozNDk4KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5wcm9wZXJ0aWVzZmlsZWVkaXRvci5Qcm9wZXJ0aWVzRmlsZUVkaXRvci5maW5kQWNjZXNzb3JUeXBlKFByb3BlcnRpZXNGaWxlRWRpdG9yLmphdmE6MzI0KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5wcm9wZXJ0aWVzZmlsZWVkaXRvci5Qcm9wZXJ0aWVzRmlsZUVkaXRvci5hY2Nlc3MkMShQcm9wZXJ0aWVzRmlsZUVkaXRvci5qYXZhOjMxNSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkucHJvcGVydGllc2ZpbGVlZGl0b3IuUHJvcGVydGllc0ZpbGVFZGl0b3IkMi5ydW4oUHJvcGVydGllc0ZpbGVFZGl0b3IuamF2YToxMzMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5vc2dpIDIgMCAyMDIxLTExLTA0IDA4OjE1OjM1LjE3NworIU1FU1NBR0UgV2hpbGUgbG9hZGluZyBjbGFzcyAib3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyIiwgdGhyZWFkICJUaHJlYWRbV29ya2VyLTE0OiBJbml0aWFsaXppbmcgSmF2YSBUb29saW5nLDUsbWFpbl0iIHRpbWVkIG91dCB3YWl0aW5nICg1MDE0bXMpIGZvciB0aHJlYWQgIlRocmVhZFtXb3JrZXItNTogRGVjb3JhdGlvbiBDYWxjdWxhdGlvbiw1LG1haW5dIiB0byBmaW5pc2ggc3RhcnRpbmcgYnVuZGxlICJvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYgWzI2NV0iLiBUbyBhdm9pZCBkZWFkbG9jaywgdGhyZWFkICJUaHJlYWRbV29ya2VyLTE0OiBJbml0aWFsaXppbmcgSmF2YSBUb29saW5nLDUsbWFpbl0iIGlzIHByb2NlZWRpbmcgYnV0ICJvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLk1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIiIG1heSBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQuCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogVW5hYmxlIHRvIGFjcXVpcmUgdGhlIHN0YXRlIGNoYW5nZSBsb2NrIGZvciB0aGUgbW9kdWxlOiBvc2dpLmlkZW50aXR5OyB0eXBlPSJvc2dpLmJ1bmRsZSI7IHZlcnNpb246VmVyc2lvbj0iMS45LjAuMjAxODA2MDYtMjAzNiI7IG9zZ2kuaWRlbnRpdHk9Im9yZy5lY2xpcHNlLm0yZS5qZHQiOyBzaW5nbGV0b246PSJ0cnVlIiBbaWQ9MjY1XSBTVEFSVEVEIFtTVEFSVEVEXQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5sb2NrU3RhdGVDaGFuZ2UoTW9kdWxlLmphdmE6MzM3KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0MDEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmNvbXB1dGVDbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplcihKYXZhQ29yZS5qYXZhOjM2NjYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIoSmF2YUNvcmUuamF2YTozNjQyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUNvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzE2NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyJDEwLnJ1bihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzA3NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIyODkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMzE2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUFsbENvbnRhaW5lcnMoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxMzApCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjIxMTUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuaW5pdGlhbGl6ZUFmdGVyTG9hZChKYXZhQ29yZS5qYXZhOjQzODEpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLkluaXRpYWxpemVBZnRlckxvYWRKb2IkUmVhbEpvYi5ydW4oSW5pdGlhbGl6ZUFmdGVyTG9hZEpvYi5qYXZhOjM2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorQ2F1c2VkIGJ5OiBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lb3V0RXhjZXB0aW9uOiBUaW1lb3V0IGFmdGVyIHdhaXRpbmcgNSBzZWNvbmRzIHRvIGFjcXVpcmUgdGhlIGxvY2suCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmxvY2tTdGF0ZUNoYW5nZShNb2R1bGUuamF2YTozMzQpCisJLi4uIDI3IG1vcmUKK1Jvb3QgZXhjZXB0aW9uOgoramF2YS51dGlsLmNvbmN1cnJlbnQuVGltZW91dEV4Y2VwdGlvbjogVGltZW91dCBhZnRlciB3YWl0aW5nIDUgc2Vjb25kcyB0byBhY3F1aXJlIHRoZSBsb2NrLgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5sb2NrU3RhdGVDaGFuZ2UoTW9kdWxlLmphdmE6MzM0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0MDEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmNvbXB1dGVDbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplcihKYXZhQ29yZS5qYXZhOjM2NjYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIoSmF2YUNvcmUuamF2YTozNjQyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUNvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzE2NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyJDEwLnJ1bihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzA3NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIyODkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMzE2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUFsbENvbnRhaW5lcnMoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxMzApCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjIxMTUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuaW5pdGlhbGl6ZUFmdGVyTG9hZChKYXZhQ29yZS5qYXZhOjQzODEpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLkluaXRpYWxpemVBZnRlckxvYWRKb2IkUmVhbEpvYi5ydW4oSW5pdGlhbGl6ZUFmdGVyTG9hZEpvYi5qYXZhOjM2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ubG9jayBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLmxvY2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLmxvY2sKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLmxvZyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzM5MjBjCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ubG9nCkBAIC0wLDAgKzEsMTIyOCBAQAorIVNFU1NJT04gMjAyMS0xMS0wNCAwODoxMzo1NS4yNjYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VjbGlwc2UuYnVpbGRJZD00LjguMC5JMjAxODA2MTEtMDUwMAoramF2YS52ZXJzaW9uPTEuOC4wXzIzMQoramF2YS52ZW5kb3I9T3JhY2xlIENvcnBvcmF0aW9uCitCb290TG9hZGVyIGNvbnN0YW50czogT1M9d2luMzIsIEFSQ0g9eDg2XzY0LCBXUz13aW4zMiwgTkw9ZGVfREUKK0ZyYW1ld29yayBhcmd1bWVudHM6ICAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKK0NvbW1hbmQtbGluZSBhcmd1bWVudHM6ICAtb3Mgd2luMzIgLXdzIHdpbjMyIC1hcmNoIHg4Nl82NCAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKKworVGhpcyBpcyBhIGNvbnRpbnVhdGlvbiBvZiBsb2cgZmlsZSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcd3NwLUtvckFQLVNlcnZpY2VzXC5tZXRhZGF0YVwuYmFrXzAubG9nCitDcmVhdGVkIFRpbWU6IDIwMjEtMTEtMDQgMDg6MTU6MzYuMzcyCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZSAyIDE3IDIwMjEtMTEtMDQgMDg6MTU6MzYuMzczCishTUVTU0FHRSBTZXJ2ZXIg4oCYb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVy4oCZIGZhaWxlZCB3aXRoIGV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQuIDsgdmVyc2lvbjogMi4wLjcudjIwMTcwOTA2LTEzMjcKKyFTVEFDSyAwCitjb20uZ29vZ2xlLmdzb24uSnNvblN5bnRheEV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjI0KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4ODgpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg1MykKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODAyKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5qc29uLkpzb24uZGVzZXJpYWxpemUoSnNvbi5qYXZhOjkxKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLklPLnJlZnJlc2hDb25maWd1cmF0aW9uKElPLmphdmE6NjYpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuU2VydmVyQ29ubmVjdGlvbi5zdGFydFVwKFNlcnZlckNvbm5lY3Rpb24uamF2YToxMjQpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0SWRsZVNlcnZpY2UkRGVsZWdhdGVTZXJ2aWNlJDEucnVuKEFic3RyYWN0SWRsZVNlcnZpY2UuamF2YTo2MikKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQ2FsbGFibGVzJDQucnVuKENhbGxhYmxlcy5qYXZhOjEyMikKKwlhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLnN0cmVhbS5Kc29uUmVhZGVyLmJlZ2luT2JqZWN0KEpzb25SZWFkZXIuamF2YTozODUpCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIxMykKKwkuLi4gOSBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5vc2dpIDIgMCAyMDIxLTExLTA0IDA4OjE1OjM3LjA3MgorIU1FU1NBR0UgV2hpbGUgbG9hZGluZyBjbGFzcyAib3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyIiwgdGhyZWFkICJUaHJlYWRbV29ya2VyLTEzOiBVcGRhdGUgZHluYW1pYyBKYXZhIHNvdXJjZXMgd29ya2luZyBzZXRzLDUsbWFpbl0iIHRpbWVkIG91dCB3YWl0aW5nICg1MDA1bXMpIGZvciB0aHJlYWQgIlRocmVhZFtXb3JrZXItNTogRGVjb3JhdGlvbiBDYWxjdWxhdGlvbiw1LG1haW5dIiB0byBmaW5pc2ggc3RhcnRpbmcgYnVuZGxlICJvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYgWzI2NV0iLiBUbyBhdm9pZCBkZWFkbG9jaywgdGhyZWFkICJUaHJlYWRbV29ya2VyLTEzOiBVcGRhdGUgZHluYW1pYyBKYXZhIHNvdXJjZXMgd29ya2luZyBzZXRzLDUsbWFpbl0iIGlzIHByb2NlZWRpbmcgYnV0ICJvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLk1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIiIG1heSBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQuCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogVW5hYmxlIHRvIGFjcXVpcmUgdGhlIHN0YXRlIGNoYW5nZSBsb2NrIGZvciB0aGUgbW9kdWxlOiBvc2dpLmlkZW50aXR5OyB0eXBlPSJvc2dpLmJ1bmRsZSI7IHZlcnNpb246VmVyc2lvbj0iMS45LjAuMjAxODA2MDYtMjAzNiI7IG9zZ2kuaWRlbnRpdHk9Im9yZy5lY2xpcHNlLm0yZS5qZHQiOyBzaW5nbGV0b246PSJ0cnVlIiBbaWQ9MjY1XSBTVEFSVEVEIFtTVEFSVEVEXQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5sb2NrU3RhdGVDaGFuZ2UoTW9kdWxlLmphdmE6MzM3KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0MDEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmNvbXB1dGVDbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplcihKYXZhQ29yZS5qYXZhOjM2NjYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIoSmF2YUNvcmUuamF2YTozNjQyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUNvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzE2NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyJDEwLnJ1bihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzA3NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIyODkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMzE2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUFsbENvbnRhaW5lcnMoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxMzApCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjIxMTUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFDb3JlLmphdmE6MzYxOSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzExOCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzI4MikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5nZXRSZXNvbHZlZENsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjIzNTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuYnVpbGRTdHJ1Y3R1cmUoSmF2YVByb2plY3QuamF2YTo0NzUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuT3BlbmFibGUuZ2VuZXJhdGVJbmZvcyhPcGVuYWJsZS5qYXZhOjI2NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhRWxlbWVudC5vcGVuV2hlbkNsb3NlZChKYXZhRWxlbWVudC5qYXZhOjU5MykKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhRWxlbWVudC5nZXRFbGVtZW50SW5mbyhKYXZhRWxlbWVudC5qYXZhOjMyMykKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhRWxlbWVudC5nZXRFbGVtZW50SW5mbyhKYXZhRWxlbWVudC5qYXZhOjMwOSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhRWxlbWVudC5nZXRDaGlsZHJlbihKYXZhRWxlbWVudC5qYXZhOjI2NCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5nZXRQYWNrYWdlRnJhZ21lbnRSb290cyhKYXZhUHJvamVjdC5qYXZhOjIyMzUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLndvcmtpbmdzZXRzLkR5bmFtaWNTb3VyY2VzV29ya2luZ1NldFVwZGF0ZXIudXBkYXRlRWxlbWVudHMoRHluYW1pY1NvdXJjZXNXb3JraW5nU2V0VXBkYXRlci5qYXZhOjE5NCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkud29ya2luZ3NldHMuRHluYW1pY1NvdXJjZXNXb3JraW5nU2V0VXBkYXRlci51cGRhdGVFbGVtZW50cyhEeW5hbWljU291cmNlc1dvcmtpbmdTZXRVcGRhdGVyLmphdmE6MTc1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS53b3JraW5nc2V0cy5EeW5hbWljU291cmNlc1dvcmtpbmdTZXRVcGRhdGVyJDEucnVuKER5bmFtaWNTb3VyY2VzV29ya2luZ1NldFVwZGF0ZXIuamF2YToxNjIpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCitDYXVzZWQgYnk6IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVvdXRFeGNlcHRpb246IFRpbWVvdXQgYWZ0ZXIgd2FpdGluZyA1IHNlY29uZHMgdG8gYWNxdWlyZSB0aGUgbG9jay4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUubG9ja1N0YXRlQ2hhbmdlKE1vZHVsZS5qYXZhOjMzNCkKKwkuLi4gMzkgbW9yZQorUm9vdCBleGNlcHRpb246CitqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lb3V0RXhjZXB0aW9uOiBUaW1lb3V0IGFmdGVyIHdhaXRpbmcgNSBzZWNvbmRzIHRvIGFjcXVpcmUgdGhlIGxvY2suCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmxvY2tTdGF0ZUNoYW5nZShNb2R1bGUuamF2YTozMzQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQwMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuY29tcHV0ZUNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyKEphdmFDb3JlLmphdmE6MzY2NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplcihKYXZhQ29yZS5qYXZhOjM2NDIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTY1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIkMTAucnVuKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMDc2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjI4OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIzMTYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQWxsQ29udGFpbmVycyhKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzEzMCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MjExNSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YUNvcmUuamF2YTozNjE5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMTE4KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMjgyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LmdldFJlc29sdmVkQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MjM1OSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5idWlsZFN0cnVjdHVyZShKYXZhUHJvamVjdC5qYXZhOjQ3NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5PcGVuYWJsZS5nZW5lcmF0ZUluZm9zKE9wZW5hYmxlLmphdmE6MjY1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFFbGVtZW50Lm9wZW5XaGVuQ2xvc2VkKEphdmFFbGVtZW50LmphdmE6NTkzKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFFbGVtZW50LmdldEVsZW1lbnRJbmZvKEphdmFFbGVtZW50LmphdmE6MzIzKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFFbGVtZW50LmdldEVsZW1lbnRJbmZvKEphdmFFbGVtZW50LmphdmE6MzA5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFFbGVtZW50LmdldENoaWxkcmVuKEphdmFFbGVtZW50LmphdmE6MjY0KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LmdldFBhY2thZ2VGcmFnbWVudFJvb3RzKEphdmFQcm9qZWN0LmphdmE6MjIzNSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkud29ya2luZ3NldHMuRHluYW1pY1NvdXJjZXNXb3JraW5nU2V0VXBkYXRlci51cGRhdGVFbGVtZW50cyhEeW5hbWljU291cmNlc1dvcmtpbmdTZXRVcGRhdGVyLmphdmE6MTk0KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS53b3JraW5nc2V0cy5EeW5hbWljU291cmNlc1dvcmtpbmdTZXRVcGRhdGVyLnVwZGF0ZUVsZW1lbnRzKER5bmFtaWNTb3VyY2VzV29ya2luZ1NldFVwZGF0ZXIuamF2YToxNzUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLndvcmtpbmdzZXRzLkR5bmFtaWNTb3VyY2VzV29ya2luZ1NldFVwZGF0ZXIkMS5ydW4oRHluYW1pY1NvdXJjZXNXb3JraW5nU2V0VXBkYXRlci5qYXZhOjE2MikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLm9zZ2kgMiAwIDIwMjEtMTEtMDQgMDg6MTU6MzcuMjAxCishTUVTU0FHRSBXaGlsZSBsb2FkaW5nIGNsYXNzICJvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLk1hdmVuQ2xhc3NwYXRoSGVscGVycyIsIHRocmVhZCAiVGhyZWFkW1dvcmtlci0xMDogRmluZCBhY2Nlc3NvciB0eXBlLDUsbWFpbl0iIHRpbWVkIG91dCB3YWl0aW5nICg1MDAzbXMpIGZvciB0aHJlYWQgIlRocmVhZFtXb3JrZXItNTogRGVjb3JhdGlvbiBDYWxjdWxhdGlvbiw1LG1haW5dIiB0byBmaW5pc2ggc3RhcnRpbmcgYnVuZGxlICJvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYgWzI2NV0iLiBUbyBhdm9pZCBkZWFkbG9jaywgdGhyZWFkICJUaHJlYWRbV29ya2VyLTEwOiBGaW5kIGFjY2Vzc29yIHR5cGUsNSxtYWluXSIgaXMgcHJvY2VlZGluZyBidXQgIm9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhIZWxwZXJzIiBtYXkgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkLgorIVNUQUNLIDAKK29yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb246IFVuYWJsZSB0byBhY3F1aXJlIHRoZSBzdGF0ZSBjaGFuZ2UgbG9jayBmb3IgdGhlIG1vZHVsZTogb3NnaS5pZGVudGl0eTsgdHlwZT0ib3NnaS5idW5kbGUiOyB2ZXJzaW9uOlZlcnNpb249IjEuOS4wLjIwMTgwNjA2LTIwMzYiOyBvc2dpLmlkZW50aXR5PSJvcmcuZWNsaXBzZS5tMmUuamR0Ijsgc2luZ2xldG9uOj0idHJ1ZSIgW2lkPTI2NV0gU1RBUlRFRCBbU1RBUlRFRF0KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUubG9ja1N0YXRlQ2hhbmdlKE1vZHVsZS5qYXZhOjMzNykKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDAxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5pbml0aWFsaXplKE1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuamF2YTo0NCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxODQpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjIxMjApCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFDb3JlLmphdmE6MzYxOSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzExOCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzI4MikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5nZXRSZXNvbHZlZENsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjIzNTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5kZXRlcm1pbmVJZk9uQ2xhc3NwYXRoKEphdmFNb2RlbE1hbmFnZXIuamF2YToxMTY5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuY3JlYXRlKEphdmFNb2RlbE1hbmFnZXIuamF2YToxMDUyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuY3JlYXRlKEphdmFNb2RlbE1hbmFnZXIuamF2YTo5OTMpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuY3JlYXRlKEphdmFDb3JlLmphdmE6MzQ5OCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkucHJvcGVydGllc2ZpbGVlZGl0b3IuUHJvcGVydGllc0ZpbGVFZGl0b3IuZmluZEFjY2Vzc29yVHlwZShQcm9wZXJ0aWVzRmlsZUVkaXRvci5qYXZhOjMyNCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkucHJvcGVydGllc2ZpbGVlZGl0b3IuUHJvcGVydGllc0ZpbGVFZGl0b3IuYWNjZXNzJDEoUHJvcGVydGllc0ZpbGVFZGl0b3IuamF2YTozMTUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLnByb3BlcnRpZXNmaWxlZWRpdG9yLlByb3BlcnRpZXNGaWxlRWRpdG9yJDIucnVuKFByb3BlcnRpZXNGaWxlRWRpdG9yLmphdmE6MTMzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorQ2F1c2VkIGJ5OiBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lb3V0RXhjZXB0aW9uOiBUaW1lb3V0IGFmdGVyIHdhaXRpbmcgNSBzZWNvbmRzIHRvIGFjcXVpcmUgdGhlIGxvY2suCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmxvY2tTdGF0ZUNoYW5nZShNb2R1bGUuamF2YTozMzQpCisJLi4uIDI2IG1vcmUKK1Jvb3QgZXhjZXB0aW9uOgoramF2YS51dGlsLmNvbmN1cnJlbnQuVGltZW91dEV4Y2VwdGlvbjogVGltZW91dCBhZnRlciB3YWl0aW5nIDUgc2Vjb25kcyB0byBhY3F1aXJlIHRoZSBsb2NrLgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5sb2NrU3RhdGVDaGFuZ2UoTW9kdWxlLmphdmE6MzM0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0MDEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyLmluaXRpYWxpemUoTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5qYXZhOjQ0KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUNvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzE4NCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MjEyMCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YUNvcmUuamF2YTozNjE5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMTE4KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMjgyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LmdldFJlc29sdmVkQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MjM1OSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmRldGVybWluZUlmT25DbGFzc3BhdGgoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjExNjkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5jcmVhdGUoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjEwNTIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5jcmVhdGUoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjk5MykKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5jcmVhdGUoSmF2YUNvcmUuamF2YTozNDk4KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5wcm9wZXJ0aWVzZmlsZWVkaXRvci5Qcm9wZXJ0aWVzRmlsZUVkaXRvci5maW5kQWNjZXNzb3JUeXBlKFByb3BlcnRpZXNGaWxlRWRpdG9yLmphdmE6MzI0KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5wcm9wZXJ0aWVzZmlsZWVkaXRvci5Qcm9wZXJ0aWVzRmlsZUVkaXRvci5hY2Nlc3MkMShQcm9wZXJ0aWVzRmlsZUVkaXRvci5qYXZhOjMxNSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkucHJvcGVydGllc2ZpbGVlZGl0b3IuUHJvcGVydGllc0ZpbGVFZGl0b3IkMi5ydW4oUHJvcGVydGllc0ZpbGVFZGl0b3IuamF2YToxMzMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcyA0IDIgMjAyMS0xMS0wNCAwODoxNTo0Mi44NTkKKyFNRVNTQUdFIFByb2JsZW1zIG9jY3VycmVkIHdoZW4gaW52b2tpbmcgY29kZSBmcm9tIHBsdWctaW46ICJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcyIuCishU1RBQ0sgMAoramF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyLmdldEJ1aWxkUGF0aE1hbmFnZXIoTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5qYXZhOjgwKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5pbml0aWFsaXplKE1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuamF2YTo0NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxODQpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlciQxMC5ydW4oSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMwNzYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQWxsQ29udGFpbmVycyhKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzEyOCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MjExNSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YUNvcmUuamF2YTozNjE5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMTE4KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMjgyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkNsYXNzcGF0aENoYW5nZS5nZW5lcmF0ZURlbHRhKENsYXNzcGF0aENoYW5nZS5qYXZhOjI0MCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5EZWx0YVByb2Nlc3Nvci5yZXNvdXJjZUNoYW5nZWQoRGVsdGFQcm9jZXNzb3IuamF2YToyMTA3KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkRlbHRhUHJvY2Vzc2luZ1N0YXRlLnJlc291cmNlQ2hhbmdlZChEZWx0YVByb2Nlc3NpbmdTdGF0ZS5qYXZhOjQ3NCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmV2ZW50cy5Ob3RpZmljYXRpb25NYW5hZ2VyJDEucnVuKE5vdGlmaWNhdGlvbk1hbmFnZXIuamF2YToyOTcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmV2ZW50cy5Ob3RpZmljYXRpb25NYW5hZ2VyLm5vdGlmeShOb3RpZmljYXRpb25NYW5hZ2VyLmphdmE6Mjg3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuZXZlbnRzLk5vdGlmaWNhdGlvbk1hbmFnZXIuYnJvYWRjYXN0Q2hhbmdlcyhOb3RpZmljYXRpb25NYW5hZ2VyLmphdmE6MTUwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5icm9hZGNhc3RQb3N0Q2hhbmdlKFdvcmtzcGFjZS5qYXZhOjM3NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UuZW5kT3BlcmF0aW9uKFdvcmtzcGFjZS5qYXZhOjE0OTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMzAyKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuZXZlbnRzLk5vdGlmaWNhdGlvbk1hbmFnZXIkTm90aWZ5Sm9iLnJ1bihOb3RpZmljYXRpb25NYW5hZ2VyLmphdmE6NDEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5jb3JlLmpvYnMgNCAyIDIwMjEtMTEtMDQgMDg6MTU6NDIuODYzCishTUVTU0FHRSBBbiBpbnRlcm5hbCBlcnJvciBvY2N1cnJlZCBkdXJpbmc6ICJGaW5kIGFjY2Vzc29yIHR5cGUiLgorIVNUQUNLIDAKK2phdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbgorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5nZXRCdWlsZFBhdGhNYW5hZ2VyKE1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuamF2YTo4MCkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLk1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuaW5pdGlhbGl6ZShNYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyLmphdmE6NDYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTg0KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YToyMTIwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhQ29yZS5qYXZhOjM2MTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMxMTgpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMyODIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuZ2V0UmVzb2x2ZWRDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YToyMzU5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuZGV0ZXJtaW5lSWZPbkNsYXNzcGF0aChKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MTE2OSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmNyZWF0ZShKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MTA1MikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmNyZWF0ZShKYXZhTW9kZWxNYW5hZ2VyLmphdmE6OTkzKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmNyZWF0ZShKYXZhQ29yZS5qYXZhOjM0OTgpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLnByb3BlcnRpZXNmaWxlZWRpdG9yLlByb3BlcnRpZXNGaWxlRWRpdG9yLmZpbmRBY2Nlc3NvclR5cGUoUHJvcGVydGllc0ZpbGVFZGl0b3IuamF2YTozMjQpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLnByb3BlcnRpZXNmaWxlZWRpdG9yLlByb3BlcnRpZXNGaWxlRWRpdG9yLmFjY2VzcyQxKFByb3BlcnRpZXNGaWxlRWRpdG9yLmphdmE6MzE1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5wcm9wZXJ0aWVzZmlsZWVkaXRvci5Qcm9wZXJ0aWVzRmlsZUVkaXRvciQyLnJ1bihQcm9wZXJ0aWVzRmlsZUVkaXRvci5qYXZhOjEzMykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmNvcmUuam9icyA0IDIgMjAyMS0xMS0wNCAwODoxNTo0Mi45ODkKKyFNRVNTQUdFIEFuIGludGVybmFsIGVycm9yIG9jY3VycmVkIGR1cmluZzogIkluaXRpYWxpemluZyBKYXZhIFRvb2xpbmciLgorIVNUQUNLIDAKK2phdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbgorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5nZXRCdWlsZFBhdGhNYW5hZ2VyKE1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuamF2YTo4MCkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLk1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuaW5pdGlhbGl6ZShNYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyLmphdmE6NDYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTg0KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIkMTAucnVuKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMDc2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjI4OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIzMTYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQWxsQ29udGFpbmVycyhKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzEzMCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MjExNSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5pbml0aWFsaXplQWZ0ZXJMb2FkKEphdmFDb3JlLmphdmE6NDM4MSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuSW5pdGlhbGl6ZUFmdGVyTG9hZEpvYiRSZWFsSm9iLnJ1bihJbml0aWFsaXplQWZ0ZXJMb2FkSm9iLmphdmE6MzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IgNCAyIDIwMjEtMTEtMDQgMDg6MTU6NDIuOTkxCishTUVTU0FHRSBQcm9ibGVtcyBvY2N1cnJlZCB3aGVuIGludm9raW5nIGNvZGUgZnJvbSBwbHVnLWluOiAib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yIi4KKyFTVEFDSyAwCitqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLk1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuaW5pdGlhbGl6ZShNYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyLmphdmE6NDYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTg0KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIkMTAucnVuKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMDc2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjI4OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIzMTYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQWxsQ29udGFpbmVycyhKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzEzMCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MjExNSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YUNvcmUuamF2YTozNjE5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMTE4KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMjgyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LmdldFJlc29sdmVkQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MjM1OSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5EeW5hbWljUHJvamVjdFJlZmVyZW5jZXMuZ2V0RGVwZW5kZW50UHJvamVjdHMoRHluYW1pY1Byb2plY3RSZWZlcmVuY2VzLmphdmE6MzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuUHJvamVjdERlc2NyaXB0aW9uLmNvbXB1dGVEeW5hbWljUmVmZXJlbmNlc0ZvclByb2plY3QoUHJvamVjdERlc2NyaXB0aW9uLmphdmE6OTQ5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLlByb2plY3REZXNjcmlwdGlvbi5nZXRBbGxCdWlsZENvbmZpZ1JlZmVyZW5jZXMoUHJvamVjdERlc2NyaXB0aW9uLmphdmE6MjY1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLlByb2plY3REZXNjcmlwdGlvbi5nZXRBbGxSZWZlcmVuY2VzKFByb2plY3REZXNjcmlwdGlvbi5qYXZhOjIyMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Qcm9qZWN0LmdldFJlZmVyZW5jZWRQcm9qZWN0cyhQcm9qZWN0LmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuQ2xvc2VVbnJlbGF0ZWRQcm9qZWN0c0FjdGlvbi5idWlsZENvbm5lY3RlZENvbXBvbmVudHMoQ2xvc2VVbnJlbGF0ZWRQcm9qZWN0c0FjdGlvbi5qYXZhOjc5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuQ2xvc2VVbnJlbGF0ZWRQcm9qZWN0c0FjdGlvbi5jb21wdXRlUmVsYXRlZChDbG9zZVVucmVsYXRlZFByb2plY3RzQWN0aW9uLmphdmE6MTk5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuQ2xvc2VVbnJlbGF0ZWRQcm9qZWN0c0FjdGlvbi5nZXRTZWxlY3RlZFJlc291cmNlcyhDbG9zZVVucmVsYXRlZFByb2plY3RzQWN0aW9uLmphdmE6MjE2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuU2VsZWN0aW9uTGlzdGVuZXJBY3Rpb24uc2VsZWN0aW9uSXNPZlR5cGUoU2VsZWN0aW9uTGlzdGVuZXJBY3Rpb24uamF2YToyNDApCisJYXQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5DbG9zZVJlc291cmNlQWN0aW9uLnVwZGF0ZVNlbGVjdGlvbihDbG9zZVJlc291cmNlQWN0aW9uLmphdmE6MjIyKQorCWF0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuQmFzZVNlbGVjdGlvbkxpc3RlbmVyQWN0aW9uLnNlbGVjdGlvbkNoYW5nZWQoQmFzZVNlbGVjdGlvbkxpc3RlbmVyQWN0aW9uLmphdmE6MTI0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLm5hdmlnYXRvci5yZXNvdXJjZXMuYWN0aW9ucy5SZXNvdXJjZU1nbXRBY3Rpb25Qcm92aWRlci51cGRhdGVBY3Rpb25CYXJzKFJlc291cmNlTWdtdEFjdGlvblByb3ZpZGVyLmphdmE6Mjg2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLm5hdmlnYXRvci5yZXNvdXJjZXMuYWN0aW9ucy5SZXNvdXJjZU1nbXRBY3Rpb25Qcm92aWRlci5maWxsQWN0aW9uQmFycyhSZXNvdXJjZU1nbXRBY3Rpb25Qcm92aWRlci5qYXZhOjg5KQorCWF0IG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5OYXZpZ2F0b3JBY3Rpb25TZXJ2aWNlJDMucnVuKE5hdmlnYXRvckFjdGlvblNlcnZpY2UuamF2YToyNjUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuTmF2aWdhdG9yQWN0aW9uU2VydmljZS5maWxsQWN0aW9uQmFycyhOYXZpZ2F0b3JBY3Rpb25TZXJ2aWNlLmphdmE6MjU4KQorCWF0IG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Db21tb25OYXZpZ2F0b3JNYW5hZ2VyJFVwZGF0ZUFjdGlvbkJhcnNKb2IkMS5ydW4oQ29tbW9uTmF2aWdhdG9yTWFuYWdlci5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLkNvbW1vbk5hdmlnYXRvck1hbmFnZXIkVXBkYXRlQWN0aW9uQmFyc0pvYi5ydW5JblVJVGhyZWFkKENvbW1vbk5hdmlnYXRvck1hbmFnZXIuamF2YTo3OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5wcm9ncmVzcy5VSUpvYi5sYW1iZGEkMChVSUpvYi5qYXZhOjk1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlJ1bm5hYmxlTG9jay5ydW4oUnVubmFibGVMb2NrLmphdmE6MzcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3luY2hyb25pemVyLnJ1bkFzeW5jTWVzc2FnZXMoU3luY2hyb25pemVyLmphdmE6MTgyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkucnVuQXN5bmNNZXNzYWdlcyhEaXNwbGF5LmphdmE6MzkwNikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnJlYWRBbmREaXNwYXRjaChEaXNwbGF5LmphdmE6MzUzNykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNS5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjExNzApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjEwNTkpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLkU0V29ya2JlbmNoLmNyZWF0ZUFuZFJ1blVJKEU0V29ya2JlbmNoLmphdmE6MTUzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkMyhXb3JrYmVuY2guamF2YTo2NjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goV29ya2JlbmNoLmphdmE6NTk3KQorCWF0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUkuY3JlYXRlQW5kUnVuV29ya2JlbmNoKFBsYXRmb3JtVUkuamF2YToxNDgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERUFwcGxpY2F0aW9uLnN0YXJ0KElERUFwcGxpY2F0aW9uLmphdmE6MTUyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuYXBwLkVjbGlwc2VBcHBIYW5kbGUucnVuKEVjbGlwc2VBcHBIYW5kbGUuamF2YToxOTYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnJ1bkFwcGxpY2F0aW9uKEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEzNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIuc3RhcnQoRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjM4OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YToyNDMpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKE5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjYyKQorCWF0IHN1bi5yZWZsZWN0LkRlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKERlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuamF2YTo0MykKKwlhdCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuaW52b2tlKE1ldGhvZC5qYXZhOjQ5OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uaW52b2tlRnJhbWV3b3JrKE1haW4uamF2YTo2NTYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmJhc2ljUnVuKE1haW4uamF2YTo1OTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLnJ1bihNYWluLmphdmE6MTQ5OCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvciA0IDAgMjAyMS0xMS0wNCAwODoxNTo0My4wOTYKKyFNRVNTQUdFIGphdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbgorIVNUQUNLIDAKK2phdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbgorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5pbml0aWFsaXplKE1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuamF2YTo0NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxODQpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlciQxMC5ydW4oSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMwNzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMjg5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjMxNikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVBbGxDb250YWluZXJzKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTMwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YToyMTE1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhQ29yZS5qYXZhOjM2MTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMxMTgpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMyODIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuZ2V0UmVzb2x2ZWRDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YToyMzU5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkR5bmFtaWNQcm9qZWN0UmVmZXJlbmNlcy5nZXREZXBlbmRlbnRQcm9qZWN0cyhEeW5hbWljUHJvamVjdFJlZmVyZW5jZXMuamF2YTozNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Qcm9qZWN0RGVzY3JpcHRpb24uY29tcHV0ZUR5bmFtaWNSZWZlcmVuY2VzRm9yUHJvamVjdChQcm9qZWN0RGVzY3JpcHRpb24uamF2YTo5NDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuUHJvamVjdERlc2NyaXB0aW9uLmdldEFsbEJ1aWxkQ29uZmlnUmVmZXJlbmNlcyhQcm9qZWN0RGVzY3JpcHRpb24uamF2YToyNjUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuUHJvamVjdERlc2NyaXB0aW9uLmdldEFsbFJlZmVyZW5jZXMoUHJvamVjdERlc2NyaXB0aW9uLmphdmE6MjIxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLlByb2plY3QuZ2V0UmVmZXJlbmNlZFByb2plY3RzKFByb2plY3QuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5DbG9zZVVucmVsYXRlZFByb2plY3RzQWN0aW9uLmJ1aWxkQ29ubmVjdGVkQ29tcG9uZW50cyhDbG9zZVVucmVsYXRlZFByb2plY3RzQWN0aW9uLmphdmE6NzkpCisJYXQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5DbG9zZVVucmVsYXRlZFByb2plY3RzQWN0aW9uLmNvbXB1dGVSZWxhdGVkKENsb3NlVW5yZWxhdGVkUHJvamVjdHNBY3Rpb24uamF2YToxOTkpCisJYXQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5DbG9zZVVucmVsYXRlZFByb2plY3RzQWN0aW9uLmdldFNlbGVjdGVkUmVzb3VyY2VzKENsb3NlVW5yZWxhdGVkUHJvamVjdHNBY3Rpb24uamF2YToyMTYpCisJYXQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5TZWxlY3Rpb25MaXN0ZW5lckFjdGlvbi5zZWxlY3Rpb25Jc09mVHlwZShTZWxlY3Rpb25MaXN0ZW5lckFjdGlvbi5qYXZhOjI0MCkKKwlhdCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLkNsb3NlUmVzb3VyY2VBY3Rpb24udXBkYXRlU2VsZWN0aW9uKENsb3NlUmVzb3VyY2VBY3Rpb24uamF2YToyMjIpCisJYXQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5CYXNlU2VsZWN0aW9uTGlzdGVuZXJBY3Rpb24uc2VsZWN0aW9uQ2hhbmdlZChCYXNlU2VsZWN0aW9uTGlzdGVuZXJBY3Rpb24uamF2YToxMjQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwubmF2aWdhdG9yLnJlc291cmNlcy5hY3Rpb25zLlJlc291cmNlTWdtdEFjdGlvblByb3ZpZGVyLnVwZGF0ZUFjdGlvbkJhcnMoUmVzb3VyY2VNZ210QWN0aW9uUHJvdmlkZXIuamF2YToyODYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwubmF2aWdhdG9yLnJlc291cmNlcy5hY3Rpb25zLlJlc291cmNlTWdtdEFjdGlvblByb3ZpZGVyLmZpbGxBY3Rpb25CYXJzKFJlc291cmNlTWdtdEFjdGlvblByb3ZpZGVyLmphdmE6ODkpCisJYXQgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLk5hdmlnYXRvckFjdGlvblNlcnZpY2UkMy5ydW4oTmF2aWdhdG9yQWN0aW9uU2VydmljZS5qYXZhOjI2NSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5OYXZpZ2F0b3JBY3Rpb25TZXJ2aWNlLmZpbGxBY3Rpb25CYXJzKE5hdmlnYXRvckFjdGlvblNlcnZpY2UuamF2YToyNTgpCisJYXQgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLkNvbW1vbk5hdmlnYXRvck1hbmFnZXIkVXBkYXRlQWN0aW9uQmFyc0pvYiQxLnJ1bihDb21tb25OYXZpZ2F0b3JNYW5hZ2VyLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuQ29tbW9uTmF2aWdhdG9yTWFuYWdlciRVcGRhdGVBY3Rpb25CYXJzSm9iLnJ1bkluVUlUaHJlYWQoQ29tbW9uTmF2aWdhdG9yTWFuYWdlci5qYXZhOjc4KQorCWF0IG9yZy5lY2xpcHNlLnVpLnByb2dyZXNzLlVJSm9iLmxhbWJkYSQwKFVJSm9iLmphdmE6OTUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuUnVubmFibGVMb2NrLnJ1bihSdW5uYWJsZUxvY2suamF2YTozNykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TeW5jaHJvbml6ZXIucnVuQXN5bmNNZXNzYWdlcyhTeW5jaHJvbml6ZXIuamF2YToxODIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5ydW5Bc3luY01lc3NhZ2VzKERpc3BsYXkuamF2YTozOTA2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkucmVhZEFuZERpc3BhdGNoKERpc3BsYXkuamF2YTozNTM3KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ1LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6MTE3MCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6MTA1OSkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guRTRXb3JrYmVuY2guY3JlYXRlQW5kUnVuVUkoRTRXb3JrYmVuY2guamF2YToxNTMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQzKFdvcmtiZW5jaC5qYXZhOjY2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChXb3JrYmVuY2guamF2YTo1OTcpCisJYXQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSS5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goUGxhdGZvcm1VSS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFQXBwbGljYXRpb24uc3RhcnQoSURFQXBwbGljYXRpb24uamF2YToxNTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5hcHAuRWNsaXBzZUFwcEhhbmRsZS5ydW4oRWNsaXBzZUFwcEhhbmRsZS5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIucnVuQXBwbGljYXRpb24oRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5zdGFydChFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6Mzg4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjI0MykKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NjIpCisJYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjQzKQorCWF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6NDk4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5pbnZva2VGcmFtZXdvcmsoTWFpbi5qYXZhOjY1NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uYmFzaWNSdW4oTWFpbi5qYXZhOjU5MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4ucnVuKE1haW4uamF2YToxNDk4KQorCishRU5UUlkgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkgNCAwIDIwMjEtMTEtMDQgMDg6MTU6NTkuMTkyCishTUVTU0FHRSBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorIVNUQUNLIDAKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldEtub3duUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo0ODApCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5DYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIkQXJ0aWZhY3QuZ2V0S25vd25SZXBvc2l0b3JpZXMoQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjIzKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmNvcmUuUDJVdGlsLmdldEtub3duUmVwb3NpdG9yaWVzKFAyVXRpbC5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnAyLmltcGwuUDJUYXNrSW1wbC5pc05lZWRlZChQMlRhc2tJbXBsLmphdmE6NzAxKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLmludGVybmFsLmNvcmUuU2V0dXBUYXNrUGVyZm9ybWVyLmluaXROZWVkZWRTZXR1cFRhc2tzKFNldHVwVGFza1BlcmZvcm1lci5qYXZhOjIyNzMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5wZXJmb3JtU3RhcnR1cChTZXR1cFVJUGx1Z2luLmphdmE6Njc5KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4uYWNjZXNzJDUoU2V0dXBVSVBsdWdpbi5qYXZhOjQxNSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luJDEkMS5ydW4oU2V0dXBVSVBsdWdpbi5qYXZhOjI1MikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTExLTA0IDA4OjM5OjA5LjAyMworIU1FU1NBR0UgRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCishU1RBQ0sgMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApCisJLi4uIDggbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3AgMSAwIDIwMjEtMTEtMDQgMDg6Mzk6MDkuMDI2CishTUVTU0FHRSBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgZnJvbSB0aGUgbW9kZWwgcmVwb3NpdG9yaWVzLiBBcmUgeW91IG9mZmxpbmU/CishU0VTU0lPTiAyMDIxLTExLTA1IDA4OjI1OjA3LjY5OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNsaXBzZS5idWlsZElkPTQuOC4wLkkyMDE4MDYxMS0wNTAwCitqYXZhLnZlcnNpb249MS44LjBfMjMxCitqYXZhLnZlbmRvcj1PcmFjbGUgQ29ycG9yYXRpb24KK0Jvb3RMb2FkZXIgY29uc3RhbnRzOiBPUz13aW4zMiwgQVJDSD14ODZfNjQsIFdTPXdpbjMyLCBOTD1kZV9ERQorRnJhbWV3b3JrIGFyZ3VtZW50czogIC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorQ29tbWFuZC1saW5lIGFyZ3VtZW50czogIC1vcyB3aW4zMiAtd3Mgd2luMzIgLWFyY2ggeDg2XzY0IC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorCishRU5UUlkgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMgNCAwIDIwMjEtMTEtMDUgMDg6MjU6MTkuNDExCishTUVTU0FHRSBGcmFtZXdvcmtFdmVudCBFUlJPUgorIVNUQUNLIDAKK29yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb246IEV4Y2VwdGlvbiBpbiBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoKSBvZiBidW5kbGUgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo4MDApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJLi4uIDEyIG1vcmUKK1Jvb3QgZXhjZXB0aW9uOgoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQuY29yZSAyIDAgMjAyMS0xMS0wNSAwODoyNTozOS44NzcKKyFNRVNTQUdFIEJ1aWx0aW4gTEZTIHN1cHBvcnQgbm90IHByZXNlbnQvZGV0ZWN0ZWQKKyFTVEFDSyAwCitqYXZhLmxhbmcuQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbjogb3JnLmVjbGlwc2UuamdpdC5sZnMuQnVpbHRpbkxGUyBjYW5ub3QgYmUgZm91bmQgYnkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlXzUuMC4wLjIwMTgwNjEzMTU1MC1yCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjUwOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZShDbGFzcy5qYXZhOjI2NCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnJlZ2lzdGVyQnVpbHRpbkxGUyhBY3RpdmF0b3IuamF2YToyNzkpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToyMTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuc291cmNlcy5TaW5nbGVTb3VyY2VQYWNrYWdlLmxvYWRDbGFzcyhTaW5nbGVTb3VyY2VQYWNrYWdlLmphdmE6MzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvciRSZXBvc2l0b3J5Q2hhbmdlU2Nhbm5lci48aW5pdD4oQWN0aXZhdG9yLmphdmE6OTIxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnNldHVwUmVwb0NoYW5nZVNjYW5uZXIoQWN0aXZhdG9yLmphdmE6MTAzNCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmdldFNvdXJjZVByb3ZpZGVycyhXb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuamF2YToxNzQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuU291cmNlUHJvdmlkZXJTZXJ2aWNlLnJlYWRSZWdpc3RyeShTb3VyY2VQcm92aWRlclNlcnZpY2UuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoJDM0LnJ1bldpdGhFeGNlcHRpb24oV29ya2JlbmNoLmphdmE6MjM3OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nJFN0YXJ0dXBSdW5uYWJsZS5ydW4oU3RhcnR1cFRocmVhZGluZy5qYXZhOjMyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlN5bmNocm9uaXplci5zeW5jRXhlYyhTeW5jaHJvbml6ZXIuamF2YToyMzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuVUlTeW5jaHJvbml6ZXIuc3luY0V4ZWMoVUlTeW5jaHJvbml6ZXIuamF2YToxNDQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zeW5jRXhlYyhEaXNwbGF5LmphdmE6NDU2NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nLnJ1bldpdGhvdXRFeGNlcHRpb25zKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTo5NSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdGlhbGl6ZURlZmF1bHRTZXJ2aWNlcyhXb3JrYmVuY2guamF2YToyMzczKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0KFdvcmtiZW5jaC5qYXZhOjE2NTQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLnJ1blVJKFdvcmtiZW5jaC5qYXZhOjI4NTkpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQzKFdvcmtiZW5jaC5qYXZhOjY1NCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChXb3JrYmVuY2guamF2YTo1OTcpCisJYXQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSS5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goUGxhdGZvcm1VSS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFQXBwbGljYXRpb24uc3RhcnQoSURFQXBwbGljYXRpb24uamF2YToxNTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5hcHAuRWNsaXBzZUFwcEhhbmRsZS5ydW4oRWNsaXBzZUFwcEhhbmRsZS5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIucnVuQXBwbGljYXRpb24oRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5zdGFydChFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6Mzg4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjI0MykKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NjIpCisJYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjQzKQorCWF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6NDk4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5pbnZva2VGcmFtZXdvcmsoTWFpbi5qYXZhOjY1NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uYmFzaWNSdW4oTWFpbi5qYXZhOjU5MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4ucnVuKE1haW4uamF2YToxNDk4KQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC51aSAyIDAgMjAyMS0xMS0wNSAwODoyNjozOC40ODUKKyFNRVNTQUdFIFdhcm5pbmc6IFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBIT01FIGlzIG5vdCBzZXQuIFRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5IHdpbGwgYmUgdXNlZCB0byBzdG9yZSB0aGUgR2l0Cit1c2VyIGdsb2JhbCBjb25maWd1cmF0aW9uIGFuZCB0byBkZWZpbmUgdGhlIGRlZmF1bHQgbG9jYXRpb24gdG8gc3RvcmUgcmVwb3NpdG9yaWVzOiAnQzpcVXNlcnNcRnJhbmNrJy4gSWYgdGhpcyBpcworbm90IGNvcnJlY3QgcGxlYXNlIHNldCB0aGUgSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgcmVzdGFydCBFY2xpcHNlLiBPdGhlcndpc2UgR2l0IGZvciBXaW5kb3dzIGFuZAorRUdpdCBtaWdodCBiZWhhdmUgZGlmZmVyZW50bHkgc2luY2UgdGhleSBzZWUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KK1RoaXMgd2FybmluZyBjYW4gYmUgc3dpdGNoZWQgb2ZmIG9uIHRoZSBUZWFtID4gR2l0ID4gQ29uZmlybWF0aW9ucyBhbmQgV2FybmluZ3MgcHJlZmVyZW5jZSBwYWdlLgorCishRU5UUlkgb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUgMiAxNyAyMDIxLTExLTA1IDA4OjI2OjQ1LjIxOAorIU1FU1NBR0UgU2VydmVyIOKAmG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlcuKAmSBmYWlsZWQgd2l0aCBleGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkLiA7IHZlcnNpb246IDIuMC43LnYyMDE3MDkwNi0xMzI3CishU1RBQ0sgMAorY29tLmdvb2dsZS5nc29uLkpzb25TeW50YXhFeGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIyNCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODg4KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4NTMpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjgwMikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIuanNvbi5Kc29uLmRlc2VyaWFsaXplKEpzb24uamF2YTo5MSkKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5JTy5yZWZyZXNoQ29uZmlndXJhdGlvbihJTy5qYXZhOjY2KQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLlNlcnZlckNvbm5lY3Rpb24uc3RhcnRVcChTZXJ2ZXJDb25uZWN0aW9uLmphdmE6MTI0KQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdElkbGVTZXJ2aWNlJERlbGVnYXRlU2VydmljZSQxLnJ1bihBYnN0cmFjdElkbGVTZXJ2aWNlLmphdmE6NjIpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkNhbGxhYmxlcyQ0LnJ1bihDYWxsYWJsZXMuamF2YToxMjIpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5zdHJlYW0uSnNvblJlYWRlci5iZWdpbk9iamVjdChKc29uUmVhZGVyLmphdmE6Mzg1KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMTMpCisJLi4uIDkgbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkgNCAwIDIwMjEtMTEtMDUgMDg6Mjc6MDEuOTY1CishTUVTU0FHRSBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorIVNUQUNLIDAKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldEtub3duUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo0ODApCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5DYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIkQXJ0aWZhY3QuZ2V0S25vd25SZXBvc2l0b3JpZXMoQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjIzKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmNvcmUuUDJVdGlsLmdldEtub3duUmVwb3NpdG9yaWVzKFAyVXRpbC5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnAyLmltcGwuUDJUYXNrSW1wbC5pc05lZWRlZChQMlRhc2tJbXBsLmphdmE6NzAxKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLmludGVybmFsLmNvcmUuU2V0dXBUYXNrUGVyZm9ybWVyLmluaXROZWVkZWRTZXR1cFRhc2tzKFNldHVwVGFza1BlcmZvcm1lci5qYXZhOjIyNzMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5wZXJmb3JtU3RhcnR1cChTZXR1cFVJUGx1Z2luLmphdmE6Njc5KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4uYWNjZXNzJDUoU2V0dXBVSVBsdWdpbi5qYXZhOjQxNSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luJDEkMS5ydW4oU2V0dXBVSVBsdWdpbi5qYXZhOjI1MikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTExLTA1IDA4OjMwOjAxLjYxNgorIU1FU1NBR0UgRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCishU1RBQ0sgMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApCisJLi4uIDggbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3AgMSAwIDIwMjEtMTEtMDUgMDg6MzA6MDEuNjIyCishTUVTU0FHRSBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgZnJvbSB0aGUgbW9kZWwgcmVwb3NpdG9yaWVzLiBBcmUgeW91IG9mZmxpbmU/CishU0VTU0lPTiAyMDIxLTExLTA1IDE3OjU1OjI2Ljc4MSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNsaXBzZS5idWlsZElkPTQuOC4wLkkyMDE4MDYxMS0wNTAwCitqYXZhLnZlcnNpb249MS44LjBfMjMxCitqYXZhLnZlbmRvcj1PcmFjbGUgQ29ycG9yYXRpb24KK0Jvb3RMb2FkZXIgY29uc3RhbnRzOiBPUz13aW4zMiwgQVJDSD14ODZfNjQsIFdTPXdpbjMyLCBOTD1kZV9ERQorRnJhbWV3b3JrIGFyZ3VtZW50czogIC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdCAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CitDb21tYW5kLWxpbmUgYXJndW1lbnRzOiAgLW9zIHdpbjMyIC13cyB3aW4zMiAtYXJjaCB4ODZfNjQgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0IC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdCAtZGF0YSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcd3NwLUtvckFQLVNlcnZpY2VzIC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorCishRU5UUlkgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMgNCAwIDIwMjEtMTEtMDUgMTc6NTU6MzIuMjkzCishTUVTU0FHRSBGcmFtZXdvcmtFdmVudCBFUlJPUgorIVNUQUNLIDAKK29yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb246IEV4Y2VwdGlvbiBpbiBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoKSBvZiBidW5kbGUgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo4MDApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJLi4uIDEyIG1vcmUKK1Jvb3QgZXhjZXB0aW9uOgoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQuY29yZSAyIDAgMjAyMS0xMS0wNSAxNzo1NTozOC4wNjcKKyFNRVNTQUdFIEJ1aWx0aW4gTEZTIHN1cHBvcnQgbm90IHByZXNlbnQvZGV0ZWN0ZWQKKyFTVEFDSyAwCitqYXZhLmxhbmcuQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbjogb3JnLmVjbGlwc2UuamdpdC5sZnMuQnVpbHRpbkxGUyBjYW5ub3QgYmUgZm91bmQgYnkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlXzUuMC4wLjIwMTgwNjEzMTU1MC1yCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjUwOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZShDbGFzcy5qYXZhOjI2NCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnJlZ2lzdGVyQnVpbHRpbkxGUyhBY3RpdmF0b3IuamF2YToyNzkpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToyMTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuc291cmNlcy5TaW5nbGVTb3VyY2VQYWNrYWdlLmxvYWRDbGFzcyhTaW5nbGVTb3VyY2VQYWNrYWdlLmphdmE6MzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvciRSZXBvc2l0b3J5Q2hhbmdlU2Nhbm5lci48aW5pdD4oQWN0aXZhdG9yLmphdmE6OTIxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnNldHVwUmVwb0NoYW5nZVNjYW5uZXIoQWN0aXZhdG9yLmphdmE6MTAzNCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmdldFNvdXJjZVByb3ZpZGVycyhXb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuamF2YToxNzQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuU291cmNlUHJvdmlkZXJTZXJ2aWNlLnJlYWRSZWdpc3RyeShTb3VyY2VQcm92aWRlclNlcnZpY2UuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoJDM0LnJ1bldpdGhFeGNlcHRpb24oV29ya2JlbmNoLmphdmE6MjM3OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nJFN0YXJ0dXBSdW5uYWJsZS5ydW4oU3RhcnR1cFRocmVhZGluZy5qYXZhOjMyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlN5bmNocm9uaXplci5zeW5jRXhlYyhTeW5jaHJvbml6ZXIuamF2YToyMzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuVUlTeW5jaHJvbml6ZXIuc3luY0V4ZWMoVUlTeW5jaHJvbml6ZXIuamF2YToxNDQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zeW5jRXhlYyhEaXNwbGF5LmphdmE6NDU2NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nLnJ1bldpdGhvdXRFeGNlcHRpb25zKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTo5NSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdGlhbGl6ZURlZmF1bHRTZXJ2aWNlcyhXb3JrYmVuY2guamF2YToyMzczKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0KFdvcmtiZW5jaC5qYXZhOjE2NTQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLnJ1blVJKFdvcmtiZW5jaC5qYXZhOjI4NTkpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQzKFdvcmtiZW5jaC5qYXZhOjY1NCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChXb3JrYmVuY2guamF2YTo1OTcpCisJYXQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSS5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goUGxhdGZvcm1VSS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFQXBwbGljYXRpb24uc3RhcnQoSURFQXBwbGljYXRpb24uamF2YToxNTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5hcHAuRWNsaXBzZUFwcEhhbmRsZS5ydW4oRWNsaXBzZUFwcEhhbmRsZS5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIucnVuQXBwbGljYXRpb24oRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5zdGFydChFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6Mzg4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjI0MykKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NjIpCisJYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjQzKQorCWF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6NDk4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5pbnZva2VGcmFtZXdvcmsoTWFpbi5qYXZhOjY1NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uYmFzaWNSdW4oTWFpbi5qYXZhOjU5MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4ucnVuKE1haW4uamF2YToxNDk4KQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC51aSAyIDAgMjAyMS0xMS0wNSAxNzo1NjoxMS42NTUKKyFNRVNTQUdFIFdhcm5pbmc6IFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBIT01FIGlzIG5vdCBzZXQuIFRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5IHdpbGwgYmUgdXNlZCB0byBzdG9yZSB0aGUgR2l0Cit1c2VyIGdsb2JhbCBjb25maWd1cmF0aW9uIGFuZCB0byBkZWZpbmUgdGhlIGRlZmF1bHQgbG9jYXRpb24gdG8gc3RvcmUgcmVwb3NpdG9yaWVzOiAnQzpcVXNlcnNcRnJhbmNrJy4gSWYgdGhpcyBpcworbm90IGNvcnJlY3QgcGxlYXNlIHNldCB0aGUgSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgcmVzdGFydCBFY2xpcHNlLiBPdGhlcndpc2UgR2l0IGZvciBXaW5kb3dzIGFuZAorRUdpdCBtaWdodCBiZWhhdmUgZGlmZmVyZW50bHkgc2luY2UgdGhleSBzZWUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KK1RoaXMgd2FybmluZyBjYW4gYmUgc3dpdGNoZWQgb2ZmIG9uIHRoZSBUZWFtID4gR2l0ID4gQ29uZmlybWF0aW9ucyBhbmQgV2FybmluZ3MgcHJlZmVyZW5jZSBwYWdlLgorCishRU5UUlkgb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUgMiAxNyAyMDIxLTExLTA1IDE3OjU2OjE0Ljk3MAorIU1FU1NBR0UgU2VydmVyIOKAmG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlcuKAmSBmYWlsZWQgd2l0aCBleGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkLiA7IHZlcnNpb246IDIuMC43LnYyMDE3MDkwNi0xMzI3CishU1RBQ0sgMAorY29tLmdvb2dsZS5nc29uLkpzb25TeW50YXhFeGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIyNCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODg4KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4NTMpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjgwMikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIuanNvbi5Kc29uLmRlc2VyaWFsaXplKEpzb24uamF2YTo5MSkKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5JTy5yZWZyZXNoQ29uZmlndXJhdGlvbihJTy5qYXZhOjY2KQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLlNlcnZlckNvbm5lY3Rpb24uc3RhcnRVcChTZXJ2ZXJDb25uZWN0aW9uLmphdmE6MTI0KQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdElkbGVTZXJ2aWNlJERlbGVnYXRlU2VydmljZSQxLnJ1bihBYnN0cmFjdElkbGVTZXJ2aWNlLmphdmE6NjIpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkNhbGxhYmxlcyQ0LnJ1bihDYWxsYWJsZXMuamF2YToxMjIpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5zdHJlYW0uSnNvblJlYWRlci5iZWdpbk9iamVjdChKc29uUmVhZGVyLmphdmE6Mzg1KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMTMpCisJLi4uIDkgbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkgNCAwIDIwMjEtMTEtMDUgMTc6NTY6MjkuMjYyCishTUVTU0FHRSBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorIVNUQUNLIDAKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldEtub3duUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo0ODApCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5DYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIkQXJ0aWZhY3QuZ2V0S25vd25SZXBvc2l0b3JpZXMoQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjIzKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmNvcmUuUDJVdGlsLmdldEtub3duUmVwb3NpdG9yaWVzKFAyVXRpbC5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnAyLmltcGwuUDJUYXNrSW1wbC5pc05lZWRlZChQMlRhc2tJbXBsLmphdmE6NzAxKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLmludGVybmFsLmNvcmUuU2V0dXBUYXNrUGVyZm9ybWVyLmluaXROZWVkZWRTZXR1cFRhc2tzKFNldHVwVGFza1BlcmZvcm1lci5qYXZhOjIyNzMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5wZXJmb3JtU3RhcnR1cChTZXR1cFVJUGx1Z2luLmphdmE6Njc5KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4uYWNjZXNzJDUoU2V0dXBVSVBsdWdpbi5qYXZhOjQxNSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luJDEkMS5ydW4oU2V0dXBVSVBsdWdpbi5qYXZhOjI1MikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTExLTA1IDE4OjAwOjU3LjAzNQorIU1FU1NBR0UgRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCishU1RBQ0sgMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApCisJLi4uIDggbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3AgMSAwIDIwMjEtMTEtMDUgMTg6MDA6NTcuMDQwCishTUVTU0FHRSBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgZnJvbSB0aGUgbW9kZWwgcmVwb3NpdG9yaWVzLiBBcmUgeW91IG9mZmxpbmU/CishU0VTU0lPTiAyMDIxLTExLTA5IDE1OjE2OjA1LjAyOSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNsaXBzZS5idWlsZElkPTQuOC4wLkkyMDE4MDYxMS0wNTAwCitqYXZhLnZlcnNpb249MS44LjBfMjMxCitqYXZhLnZlbmRvcj1PcmFjbGUgQ29ycG9yYXRpb24KK0Jvb3RMb2FkZXIgY29uc3RhbnRzOiBPUz13aW4zMiwgQVJDSD14ODZfNjQsIFdTPXdpbjMyLCBOTD1kZV9ERQorRnJhbWV3b3JrIGFyZ3VtZW50czogIC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorQ29tbWFuZC1saW5lIGFyZ3VtZW50czogIC1vcyB3aW4zMiAtd3Mgd2luMzIgLWFyY2ggeDg2XzY0IC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorCishRU5UUlkgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMgNCAwIDIwMjEtMTEtMDkgMTU6MTY6MTYuNzkyCishTUVTU0FHRSBGcmFtZXdvcmtFdmVudCBFUlJPUgorIVNUQUNLIDAKK29yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb246IEV4Y2VwdGlvbiBpbiBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoKSBvZiBidW5kbGUgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo4MDApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJLi4uIDEyIG1vcmUKK1Jvb3QgZXhjZXB0aW9uOgoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQuY29yZSAyIDAgMjAyMS0xMS0wOSAxNToxNjo0MS4xNDAKKyFNRVNTQUdFIEJ1aWx0aW4gTEZTIHN1cHBvcnQgbm90IHByZXNlbnQvZGV0ZWN0ZWQKKyFTVEFDSyAwCitqYXZhLmxhbmcuQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbjogb3JnLmVjbGlwc2UuamdpdC5sZnMuQnVpbHRpbkxGUyBjYW5ub3QgYmUgZm91bmQgYnkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlXzUuMC4wLjIwMTgwNjEzMTU1MC1yCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjUwOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZShDbGFzcy5qYXZhOjI2NCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnJlZ2lzdGVyQnVpbHRpbkxGUyhBY3RpdmF0b3IuamF2YToyNzkpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToyMTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuc291cmNlcy5TaW5nbGVTb3VyY2VQYWNrYWdlLmxvYWRDbGFzcyhTaW5nbGVTb3VyY2VQYWNrYWdlLmphdmE6MzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvciRSZXBvc2l0b3J5Q2hhbmdlU2Nhbm5lci48aW5pdD4oQWN0aXZhdG9yLmphdmE6OTIxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnNldHVwUmVwb0NoYW5nZVNjYW5uZXIoQWN0aXZhdG9yLmphdmE6MTAzNCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmdldFNvdXJjZVByb3ZpZGVycyhXb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuamF2YToxNzQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuU291cmNlUHJvdmlkZXJTZXJ2aWNlLnJlYWRSZWdpc3RyeShTb3VyY2VQcm92aWRlclNlcnZpY2UuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoJDM0LnJ1bldpdGhFeGNlcHRpb24oV29ya2JlbmNoLmphdmE6MjM3OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nJFN0YXJ0dXBSdW5uYWJsZS5ydW4oU3RhcnR1cFRocmVhZGluZy5qYXZhOjMyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlN5bmNocm9uaXplci5zeW5jRXhlYyhTeW5jaHJvbml6ZXIuamF2YToyMzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuVUlTeW5jaHJvbml6ZXIuc3luY0V4ZWMoVUlTeW5jaHJvbml6ZXIuamF2YToxNDQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zeW5jRXhlYyhEaXNwbGF5LmphdmE6NDU2NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nLnJ1bldpdGhvdXRFeGNlcHRpb25zKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTo5NSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdGlhbGl6ZURlZmF1bHRTZXJ2aWNlcyhXb3JrYmVuY2guamF2YToyMzczKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0KFdvcmtiZW5jaC5qYXZhOjE2NTQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLnJ1blVJKFdvcmtiZW5jaC5qYXZhOjI4NTkpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQzKFdvcmtiZW5jaC5qYXZhOjY1NCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChXb3JrYmVuY2guamF2YTo1OTcpCisJYXQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSS5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goUGxhdGZvcm1VSS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFQXBwbGljYXRpb24uc3RhcnQoSURFQXBwbGljYXRpb24uamF2YToxNTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5hcHAuRWNsaXBzZUFwcEhhbmRsZS5ydW4oRWNsaXBzZUFwcEhhbmRsZS5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIucnVuQXBwbGljYXRpb24oRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5zdGFydChFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6Mzg4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjI0MykKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NjIpCisJYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjQzKQorCWF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6NDk4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5pbnZva2VGcmFtZXdvcmsoTWFpbi5qYXZhOjY1NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uYmFzaWNSdW4oTWFpbi5qYXZhOjU5MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4ucnVuKE1haW4uamF2YToxNDk4KQorCishRU5UUlkgb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUgMiAxNyAyMDIxLTExLTA5IDE1OjE3OjU0LjE0NworIU1FU1NBR0UgU2VydmVyIOKAmG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlcuKAmSBmYWlsZWQgd2l0aCBleGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkLiA7IHZlcnNpb246IDIuMC43LnYyMDE3MDkwNi0xMzI3CishU1RBQ0sgMAorY29tLmdvb2dsZS5nc29uLkpzb25TeW50YXhFeGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIyNCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODg4KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4NTMpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjgwMikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIuanNvbi5Kc29uLmRlc2VyaWFsaXplKEpzb24uamF2YTo5MSkKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5JTy5yZWZyZXNoQ29uZmlndXJhdGlvbihJTy5qYXZhOjY2KQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLlNlcnZlckNvbm5lY3Rpb24uc3RhcnRVcChTZXJ2ZXJDb25uZWN0aW9uLmphdmE6MTI0KQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdElkbGVTZXJ2aWNlJERlbGVnYXRlU2VydmljZSQxLnJ1bihBYnN0cmFjdElkbGVTZXJ2aWNlLmphdmE6NjIpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkNhbGxhYmxlcyQ0LnJ1bihDYWxsYWJsZXMuamF2YToxMjIpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5zdHJlYW0uSnNvblJlYWRlci5iZWdpbk9iamVjdChKc29uUmVhZGVyLmphdmE6Mzg1KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMTMpCisJLi4uIDkgbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC51aSAyIDAgMjAyMS0xMS0wOSAxNToxNzo1NC4yMTgKKyFNRVNTQUdFIFdhcm5pbmc6IFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBIT01FIGlzIG5vdCBzZXQuIFRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5IHdpbGwgYmUgdXNlZCB0byBzdG9yZSB0aGUgR2l0Cit1c2VyIGdsb2JhbCBjb25maWd1cmF0aW9uIGFuZCB0byBkZWZpbmUgdGhlIGRlZmF1bHQgbG9jYXRpb24gdG8gc3RvcmUgcmVwb3NpdG9yaWVzOiAnQzpcVXNlcnNcRnJhbmNrJy4gSWYgdGhpcyBpcworbm90IGNvcnJlY3QgcGxlYXNlIHNldCB0aGUgSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgcmVzdGFydCBFY2xpcHNlLiBPdGhlcndpc2UgR2l0IGZvciBXaW5kb3dzIGFuZAorRUdpdCBtaWdodCBiZWhhdmUgZGlmZmVyZW50bHkgc2luY2UgdGhleSBzZWUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KK1RoaXMgd2FybmluZyBjYW4gYmUgc3dpdGNoZWQgb2ZmIG9uIHRoZSBUZWFtID4gR2l0ID4gQ29uZmlybWF0aW9ucyBhbmQgV2FybmluZ3MgcHJlZmVyZW5jZSBwYWdlLgorCishRU5UUlkgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkgNCAwIDIwMjEtMTEtMDkgMTU6MTg6MDguNjMzCishTUVTU0FHRSBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorIVNUQUNLIDAKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldEtub3duUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo0ODApCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5DYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIkQXJ0aWZhY3QuZ2V0S25vd25SZXBvc2l0b3JpZXMoQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjIzKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmNvcmUuUDJVdGlsLmdldEtub3duUmVwb3NpdG9yaWVzKFAyVXRpbC5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnAyLmltcGwuUDJUYXNrSW1wbC5pc05lZWRlZChQMlRhc2tJbXBsLmphdmE6NzAxKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLmludGVybmFsLmNvcmUuU2V0dXBUYXNrUGVyZm9ybWVyLmluaXROZWVkZWRTZXR1cFRhc2tzKFNldHVwVGFza1BlcmZvcm1lci5qYXZhOjIyNzMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5wZXJmb3JtU3RhcnR1cChTZXR1cFVJUGx1Z2luLmphdmE6Njc5KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4uYWNjZXNzJDUoU2V0dXBVSVBsdWdpbi5qYXZhOjQxNSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luJDEkMS5ydW4oU2V0dXBVSVBsdWdpbi5qYXZhOjI1MikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLm15bHluLy50YXNrTGlzdEluZGV4L3NlZ21lbnRzXzEgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5teWx5bi8udGFza0xpc3RJbmRleC9zZWdtZW50c18xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4N2Y5MTAKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5teWx5bi8udGFza0xpc3RJbmRleC9zZWdtZW50c18xCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLm15bHluLy50YXNrTGlzdEluZGV4L3dyaXRlLmxvY2sgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5teWx5bi8udGFza0xpc3RJbmRleC93cml0ZS5sb2NrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5teWx5bi8udGFza0xpc3RJbmRleC93cml0ZS5sb2NrCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5teWx5bi8udGFza3MueG1sLnppcCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLm15bHluLy50YXNrcy54bWwuemlwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZmM5YmEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5teWx5bi8udGFza3MueG1sLnppcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5teWx5bi9yZXBvc2l0b3JpZXMueG1sLnppcCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLm15bHluL3JlcG9zaXRvcmllcy54bWwuemlwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YzI0MjkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5teWx5bi9yZXBvc2l0b3JpZXMueG1sLnppcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5teWx5bi90YXNrcy54bWwuemlwIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ubXlseW4vdGFza3MueG1sLnppcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2E4Nzk5Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ubXlseW4vdGFza3MueG1sLnppcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzEvMjBkN2NkMGI5YTNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzEvMjBkN2NkMGI5YTNkMDAxYzEwYjFiMTdkZGQzMDllNmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJkZWFkZAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMS8yMGQ3Y2QwYjlhM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpAQCAtMCwwICsxLDcyOSBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnNxbC5Db25uZWN0aW9uOworaW1wb3J0IGphdmEuc3FsLkRyaXZlck1hbmFnZXI7CitpbXBvcnQgamF2YS5zcWwuUHJlcGFyZWRTdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS5zcWwuUmVzdWx0U2V0OworaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5TdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitwdWJsaWMgY2xhc3MgR2xlbW1EQgorCit7CisJc3RhdGljIHB1YmxpYyBTdHJpbmcgZGJUYWJsZSAJPSAiR2xlbW1MZW1tYXRhIjsKKwlzdGF0aWMgU3RyaW5nIGRiTGVtbWEgCQkgCT0gImxlbW1hIjsKKwlzdGF0aWMgU3RyaW5nIGRiV2YJIAkJCT0gIndmIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDEgCQkJPSAicHJvcDEiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMiAJCQk9ICJwcm9wMiI7CisKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKG92ZXJ3cml0dGVuIGJ5IEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZuYW1lREIgPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgc2VydmVySG9zdCA9ICIvL2xvY2FsaG9zdDoxNTI3LyI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChmaW5hbCBhc3NpZ25tZW50cyk6CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyRW1iID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZERyaXZlciI7CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyQ2xpZW50ID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREcml2ZXIiOworCisJZmluYWwgc3RhdGljIGJvb2xlYW4KKwkJdXNlUHJlcGFyZWRTdG10ID0gdHJ1ZTsgLy8gMT11c2UgUHJlcGFyZWRTdGF0ZW1lbnQgYW5kIG5vdCBTdGF0ZW1lbnQuCisJCisJLy8gdmFsdWVzIHRvIGJlIGluc2VydGVkOiBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYy4KKwlzdGF0aWMgU3RyaW5nIGluc2VydFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKCclcycsICclcycsICclcycsICclcycsICclcycpIjsKKwlzdGF0aWMgU3RyaW5nIGluc2VydFByZXBhcmVkUXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoPywgPywgPywgPywgPykiOworCQorCS8qCisJICogc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJICogCisJICogQXJndW1lbnRzOgorCSAqIHByb3BzCTogUHJvcGVydGllcyBsb2FkZWQgYnkgdGhlIEdsZW1tU2VydmljZXMuCisJICogTm90ZXM6CisJICogLSB0aGlzIGZ1bmN0aW9uIGxvYWRzIG9ubHkgdGhvc2UgQ29uc3RhbnRzIG5lZWRlZCBpbiB0aGlzIGNsYXNzLgorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcwlwcm9wcykKKwkKKwl7CisJZm5hbWVEQgkJIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgCSIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlzZXJ2ZXJIb3N0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJzZXJ2ZXJIb3N0IiwJIi8vbG9jYWxob3N0OjE1MjcvIik7CisJZGVyYnlEQlVSTCAJCT0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCQkJCisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCQkJCQlpbXBvcnRHbGVtbUxlbWF0YQorCSAqIFBhcmFtZXRlcnM6CisJICogZm4JCSA6IGFic29sdXRlIGZpbGUgbmFtZSBvZiBHTEVNTSBvdXRwdXQgW0lTTzg4NTktMV0gZXhwZWN0ZWQsIG5vdCBVVEYtOCEKKwkgKiBwcm9wcwkgOiBQcm9wZXJ0aWVzIHZvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgdG8gc2V0IGNvbnN0YW50cyBuZWVkZWQKKwkgKiAJCQkgICBpbiB0aGlzIGNsYXNzLgorCSAqIGRicGF0aAkgOiBsb2NhdGlvbiArIG5hbWUgb2YgZGF0YWJhc2Ugd2hlcmUgdG8gc3RvcmUgbGVtbWF0YSt3ZnMuCisJICogUmV0dXJucwkgOiAwPU9LLCAtMTogZ2VuZXJhbCBlcnJvcjsgPiAwIDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAKKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIGR5bmFtaWNhbGx5IGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqIDA0LjExLjIxL0ZCIGRicGF0aC4KKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YShTdHJpbmcgZm4sIFByb3BlcnRpZXMgcHJvcHMsIGZpbmFsIFN0cmluZyBkYnBhdGgpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YSI7CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4gPSBudWxsOworCWludAorCQluRXJyb3JzOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyB3aGVuIGluZGV4aW5nIGRhdGEgaW50byB0aGUgZGF0YWJhc2UsIHNlbGVjdCB0aGUgc3VibWl0dGVkIGRicGF0aCwKKwkvLyAobm90IHRoZSBvbmUgc3RvcmVkIGluIHRoZSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCWRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGRicGF0aDsKKwkKKwkvLyBvcGVuIHJlYWRlciBvbiBHbGVtbSBMZW1tYXRhOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCWluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCQorCQluRXJyb3JzID0gd3JpdGVEQkxlbW1hdGEoaW4pOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBmcm9tICclcychXG4iLCBmdW5jLCBmbik7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCisJLy8gY2xvc2UgUmVhZGVyOgorCXRyeSB7CisJCWluLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJbkVycm9ycyA9IC0xOworCQl9CisJCisgCWlmKCBuRXJyb3JzID09IDAgKQorIAkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQgZG9uZSBzdWNjZXNzZnVsbHkuXG4iLCBmdW5jKTsKKyAJZWxzZQorIAkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQ6ICVkIEVycm9ycyFcbiIsIGZ1bmMsIG5FcnJvcnMpOworIAkKKwlyZXR1cm4gbkVycm9yczsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YQorCQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVEQkxlbW1hdGEoKQorCSAqICAgICAgICAgICAgICAgICAgICAgICAKKwkgKiBzdG9yZXMgbGlzdCBvZiBsZW1tYXRhICsgaW5mb3MgaW50byBEZXJieSBkYi4KKwkgKiBGaWxlIGZvcm1hdDogIkxlbW1hIERlY29tcG9zaXRpb24gV2YiLAorCSAqICAgICAgICAgICAgICBlLmcuOiAiSMOkdXNlciArLSBIYXVzIi4KKwkgKiBSZXR1cm5zOiAwID0gT0sgb3IgLTE6IGdlbmVyYWwgZXJyb3Igb3IgPiAwOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIDA5LjAxLjIwL0ZCCisJICogMDQuMTEuMjEvRkIgdHVybiBhdXRvY29tbWl0IG9mZiB0byBhY2NlbGVyYXRlIGh1Z2UgYW1vdW50IG9mIGluc2VydGlvbnMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYXRhKEJ1ZmZlcmVkUmVhZGVyIGluKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hdGEiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJUHJlcGFyZWRTdGF0ZW1lbnQKKwkJc3RtdFByZXAgPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10IAkgPSBudWxsOworCVN0cmluZworCQlsaW5lOwkKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQluSW5zZXJ0ZWQgPSAwLAkvLyBuby4gb2YgbGVtbWEvd2YgcGFpcnMgaW1wb3J0ZWQuCisJCXJldCA9IDA7IC8vIE9LLgorCWJvb2xlYW4KKwkJY29udGFpbnNTcGVjOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZSwKKwkvLyBzZXQgQXV0b2NvbW1pdCA9IGZhbHNlIHRvIGFjY2VsZXJhdGUgaW5zZXJ0aW9uczoKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJY29uLnNldEF1dG9Db21taXQoZmFsc2UpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZCAoYXV0b0NvbW1pdD1vZmYpLlxuIiwgZnVuYyk7CisKKwkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQlzdG10UHJlcCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KGluc2VydFByZXBhcmVkUXVlcnkpOworCQllbHNlCisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCisJCXdoaWxlKCAobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCAhPSAzICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzISBFeHBlY3RlZCA9IDMhIENhbm5vdCBiZSBzdG9yZWQhXG4iLCBmdW5jLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCQluRXJyb3JzKys7CisJCQkJY29udGludWU7CisJCQkJfQorCQkJCisJCQkvLyBHZXQgSW5mbywgaWYgd29yZGZvcm0gY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlICctJywgaW50ZXJwdW5jdGlvbiBldGMuOgorCQkJLy8gbGVtbWFJbmZvWzJdID0gd29yZGZvcm0uCisJCQljb250YWluc1NwZWMgPSBMZW1tYUluZm8uaXNXZlNwZWNpYWxDYXNlKGxlbW1hSW5mb1syXSk7CisJCQkvLyBzdG9yZSBpbnRvIERCOgorCQkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoc3RtdFByZXAsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQllbHNlCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3Moc3RtdCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCQorCQkJaWYoIHJldCAhPSAwICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgc3RvcmUgbGVtbWEgJyVzJyBpbnRvIERCIVxuIiwgZnVuYywgbGluZSk7CisJCQkJbkVycm9ycysrOyAKKwkJCQl9CisJCQllbHNlCisJCQkJbkluc2VydGVkKys7CisJCQl9IC8vIHdoaWxlCisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIEdsZW1tIGxlbW1hdGEraW5mb3MgZnJvbSBmaWxlISBFeGl0IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsgCisJCX0JCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSAKKwkJCQlzdG10LmNsb3NlKCk7CisJCQlpZiggc3RtdFByZXAgIT0gbnVsbCApIAorCQkJCXN0bXRQcmVwLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkluZm8gOiAlczogbm8uIG9mIGxlbW1hdGEvd2YgcGFpcnMgaW5zZXJ0ZWQgPSAlZC5cbiIsIGZ1bmMsIG5JbnNlcnRlZCk7CisJCisJcmV0dXJuIG5FcnJvcnM7IC8vIDA9T0ssID4wID0gbm8uIG9mIGVycm9ycy4KKwl9IC8vIHdyaXRlREJMZW1tYXRhCisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIHJ1bGVzIGludG8gRGVyYnkgREIuCisJICogTm90ZXM6CisJICogLSB0aGlzIGlzIHRoZSB2ZXJzaW9uIHdpdGggYSBQcmVwYXJlZFF1ZXJ5LgorCSAqIFBhcmFtZXRlcnM6CisJICogc3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDE3LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKAorCQkJUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCwgCisJCQlTdHJpbmcgbGVtbWEsIAorCQkJU3RyaW5nIHdmLCAKKwkJCVN0cmluZyBkZWNvbXBvc2l0aW9uLCAKKwkJCWJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkIjsKKwlmaW5hbCBib29sZWFuCisJCWJMb2cgPSBmYWxzZTsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlib29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgCisJLy8gZm9yIGxvZ2luZyBvbmx5OgorCXNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwlpZiggYkxvZyApCisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorICAgIC8vIG5vdyBpbnNlcnQgbmV3IHZhbHVlcyBpbnRvIFByZXBhcmVkU3RhdGVtZW50OgorICAgIHRyeSB7CisgICAgCXN0bXQuc2V0U3RyaW5nKCAxLCBsZW1tYSk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKCAyLCB3Zik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbigzLCBwcm9wMSk7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig0LCBwcm9wMik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig1LCBzcGVjKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcmVwYXJlZCBzdG10ID0gJyVzJy5cbiIsICBmdW5jLCBzdG10LnRvU3RyaW5nKCkpOworICAgICAgICB9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlMSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKAkiRXJyb3I6ICVzOiB3aGlsZSBmaWxsaW5nIHByZXBhcmVkIHN0YXRlbWVudCB3aXRoIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0nJWInIHByb3AyPSclYicgc3BlYz0nJWInIVxuIiwgIAorCQkJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZTEucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisgICAgCisgICAgdHJ5IHsKKwkJLy8gZXhlY3V0ZSB0aGUgZmlsbGVkIHByZXBhcmVkIHN0YXRlbWVudDoKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZSgpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViISAobj0lZClcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMsIG4pOworIAkJCXJldHVybiAyOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDM7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZAorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3M6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gaW50byBEZXJieSBEQi4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGNvbnRhaW5zU3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDEwLjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zKFN0YXRlbWVudCBzdG10LCBTdHJpbmcgbGVtbWEsIFN0cmluZyB3ZiwgU3RyaW5nIGRlY29tcG9zaXRpb24sIGJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zIjsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlCb29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworICAgIAorICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorCXRyeSB7CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoc3FsSW5zZXJ0KTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYURhdGEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBmcm9tIHRoZSBHbGVtbURCLgorCSAqIElucHV0OiBsZW1tYSArIEdMRU1NX09QVFNfeHh4IChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWFEYXRhKExlbW1hSW5mbyBsZW1tYUluZm8sIFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYURhdGEiOworCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJbGVtbWFJbmZvLmNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJbGVtbWFJbmZvLnN0bXQgPSBsZW1tYUluZm8uY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlpbnQgciA9IHJlYWREQkxlbW1hKGxlbW1hSW5mby5zdG10LCBsZW1tYUluZm8pOworCQkJCisJCWlmKCByICE9IDAgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZ2V0IGRhdGEgZm9yIGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIVxuIiwgCisJCQkJCWZ1bmMsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwkJCXJldHVybiAxOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggbGVtbWFJbmZvLmNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hRGF0YQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGJ5IGFjY2Vzc2luZyB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dCA6IGxlbW1hICsgcHJvcDErMiAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogT3V0cHV0OiAKKwkgKiAgLSBjb250YWlucyBhIFJlc3VsdFNldCBmb3IgZmV0Y2hpbmcgdGhlIHdvcmRmb3Jtcy4KKwkgKiAJICBUaGlzIFJlc3VsdFNldCB3aWxsIGhhdmUgYmUgYmUgY2xvc2VkIHdpdGggTGVtbWFJbmZvLmNsb3NlKCkuCisJICogCSAgVGhlIG5vLiBvZiBmb3VuZCB3b3JkZm9ybXMgaXMgbm90IGtub3duIHRpbGwgd2UKKwkgKiAJICBmZXRjaCBhbGwgb2YgdGhlbSBmcm9tIFJlc3VsdFNldCEgCisJICogCS0gZHVlIHRvIFNFTEVDVCBESVNUSU5DVCBvbmx5IHVuaXEgd2YgYXJlIHJldHVybmVkLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYShTdGF0ZW1lbnQgc3RtdCwgTGVtbWFJbmZvIGxlbW1hSW5mbykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hIjsKKwlTdHJpbmcKKwkJc3FsOworCQkKKwlzcWwgPSBTdHJpbmcuZm9ybWF0KCJTRUxFQ1QgRElTVElOQ1Qgd2YgZnJvbSAlcyBXSEVSRSBsZW1tYT0nJXMnICVzICVzICVzIiwgCisJCQlkYlRhYmxlLAorCQkJbGVtbWFJbmZvLmxlbW1hLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiQU5EIHByb3AxPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAxID8gIkFORCBwcm9wMT0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiQU5EIHByb3AyPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAxID8gIkFORCBwcm9wMj0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiQU5EIHNwZWM9J3RydWUnIiAgIDogCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICJBTkQgc3BlYz0nZmFsc2UnIiAgOiAiIik7CisJCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgZnVuYywgbGVtbWFJbmZvLnByb3AxLCBsZW1tYUluZm8ucHJvcDIsIGxlbW1hSW5mby5zcGVjKTsKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbCA9ICclcycuXG4iLCBmdW5jLCBzcWwpOworCisJdHJ5IHsKKwkJbGVtbWFJbmZvLnJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoZW4gZXhlY3V0aW5nIHNxbD0nJXMnIVxuIiwgZnVuYywgc3FsKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gYWxsIHNxbCBzdHVmZiBhcmUgY2xvc2VkIG91dHNpZGUgdGhpcyBmdW5jdGlvbiwgc28gZG9uJ3QgY2xvc2UgdGhlbSBoZXJlIQorCQl9CQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3MKKwkgKiBSZXR1cm5zIEdlbmVyYWwgSW5mb3MgYWJvdXQgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIHJlYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJJbmZvcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJZGJJbmZvID0gcmVhZERiTGVtbWF0YUluZm9zKHN0bXQpOworCQkJCisJCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCByZWFkIEdlbmVyYWwgSW5mb3MgZnJvbSBHbGVtbSBEYXRhYmFzZSFcbiIsIGZ1bmMpOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSBjb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSBzdG10LmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIG1heSBiZSBudWxsLgorCQkKKwl9IC8vIHJlYWREYkluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiTGVtbWF0YUluZm9zOgorCSAqIHJlYWRzIGFuZCByZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGNvbnRlbnQgCisJICogb2YgdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIFJldHVybnMgMD1PSyBvciBlcnJvciBjb2RlID4gMC4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkxlbW1hdGFJbmZvcyhTdGF0ZW1lbnQgc3RtdCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAicmVhZERiTGVtbWFJbmZvcyI7CisJU3RyaW5nW10KKwkJc3FsID0gewkiU0VMRUNUIENPVU5UKGRpc3RpbmN0IGxlbW1hKSBmcm9tICIgKyBkYlRhYmxlICwJLy8gY291bnRzIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSwJCQkJCS8vIGNvdW50cyB0b3RhbCBuby4gb2Ygc3RvcmVkIHdvcmRmb3Jtcy4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPXRydWUiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPXRydWUifTsKKwlSZXN1bHRTZXQKKwkJcmVzID0gbnVsbDsgCisJaW50W10KKwkJbkNvdW50cyA9IG5ldyBpbnRbc3FsLmxlbmd0aF07CisJaW50CQkKKwkJaSA9IDAsIAorCQluRGlzdExlbW1hdGEgPSAtMSwJLy8gbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEgaW4gREIuCisJCW5XZnMJCSA9IC0xOwkvLyBuby4gb2Ygd29yZGZvcm1zIGluIERCLgorCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBleHRyYWN0aW5nIGFncmVnYXRlZCBpbmZvcyBhYm91dCBEYXRhYmFzZSBjb250ZW50cy4uLlxuIiwgZnVuYyk7CisJCisJZGJJbmZvID0gbmV3IEdsZW1tREJJbmZvKCk7CisKKwkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwl0cnkgeworCQlmb3IoaT0wOyBpPHNxbC5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCXJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbFtpXSk7CisJCQlpZiggcmVzLm5leHQoKSApCisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IHJlcy5nZXRJbnQoMSk7IC8vIGNvdW50IGlzIGluIGNvbHVtbiAxLgorCQkJZWxzZQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBleHRyYWN0IGNvdW50IGZyb20gJyVzJyFcbiIsIGZ1bmMsIHNxbFtpXSk7CisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IC0xOworCQkJCX0KKwkJCX0KKyAgICAgICAKKyAgICAgICAgfQorICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgIAl7CisgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogc3FsPSclcycgZmFpbGVkIVxuIiwgZnVuYywgc3FsW2ldKTsKKyAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAJfQorCWZpbmFsbHkgeworCQl0cnkgeworCQkJcmVzLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBPSworCX0gLy8gcmVhZERiTGVtbWF0YUluZm9zCisJCisJLyoqKioqKioqKioqKioqKioqKioqIFRlc3QgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zX3Rlc3QKKwkgKiBUaGlzIGlzIGRlYnVnIGNvZGUgd3JpdHRlbiB0byB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIERlcmJ5CisJICogRGF0YWJhc2UgZnJvbSBhbiBleHRlcm5hbCBKYXZhIFByb2dyYW1tLgorCSAqIDA4LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCByZWFkRGJJbmZvc190ZXN0KCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlTdHJpbmcKKwkJaW5zZXJ0U3RtdCA9ICIiOworCQorCS8vIENvbm5lY3QgdG8gRGVyYnkgZGF0YWJhc2U6CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCQorCQkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwkJdHJ5CisJCQl7CisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIAorICAgICAgICAgICAgCXNxbCA9ICJTRUxFQ1QgKiBGUk9NICIgKyBkYlRhYmxlOworICAgICAgICAgICAgUmVzdWx0U2V0IAorICAgICAgICAgICAgCXJlc3VsdCA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CisgCisgICAgICAgICAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHRhYmxlICclcyc6XG4iLCAgZnVuYywgZGJUYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQubmV4dCgpKSB7CisgICAgICAgICAgICAJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiJyVzJyA6ICclcycgOiAnJXMnIDogJyVzJyAuXG4iLCByZXN1bHQuZ2V0U3RyaW5nKDEpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygyKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMyksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDQpKTsKKyAgICAgICAgCQlpbnNlcnRTdG10ID0gaW5zZXJ0U3RtdCArICI8cD4iICsgcmVzdWx0LmdldFN0cmluZygxKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZygyKSArICIgOiAiICsKKyAgICAgICAgICAgICAgICAJCSAgICAgcmVzdWx0LmdldFN0cmluZygzKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZyg0KSArICI8L3A+IjsKKyAgICAgICAgICAgIAl9CisJCQl9CisJICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgICAgICAJeworCSAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBpbnNlcnRTdG10PSclcycgZmFpbGVkIS5cbiIsIGZ1bmMsIHN0bXQpOworICAgICAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICAgICAgY29uLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nICclcyBmYWlsZWQhXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJdHJ5IHsKKwkJY29uLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkJCisJfSAvLyByZWFkRGJJbmZvc190ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogaW1wb3J0R2xlbW1MZW1hdGFfdGVzdAorCSAqIFRlc3QgVmVyc2lvbi4KKwkgKiAxMi4xMi4xOS9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QoU3RyaW5nIGZuKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdCI7CisJSW5wdXRTdHJlYW0gCisJCWluOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluMiA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQlyOworCQorCS8qCisJICogUmVhZCBMZW1tYXRhICsgSW5mbyBmcm9tIGZpbGU6IAorCSAqLworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCQorCXRyeSB7CisJCS8vaW4gPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSggbmV3IEZpbGVJbnB1dFN0cmVhbShmbikgKTsKKwkJaW4yID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlcihmbikpOworCQl3aGlsZSggKGxpbmUgPSBpbjIucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoID09IDMgKQorCQkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBJbXBvcnQ6IGxlbT0nJXMnIERlY29tcD0nJXMnIFdmPSclcycuXG4iLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1sxXSwgbGVtbWFJbmZvWzJdKTsKKwkJCWVsc2UKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogaW1wb3J0R2xlbW1MYW1hdGE6ICclcycgaGFzICVkIGNvbXBvbmVudHMhXG4iLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IG9wZW4gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJcmV0dXJuIDE7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKworCXRyeSB7CisJCWluMi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCS8qIENoZWNrIGNvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJICovIAorCXIgPSByZWFkRGJJbmZvc190ZXN0KCk7CisJaWYoIHIgIT0gMCApCisJCXJldHVybiByOworCQkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzEvNzBjYzRlZTU1ZDNlMDAxYzEwMzVjMWVhZjM4YWY1OTAgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzEvNzBjYzRlZTU1ZDNlMDAxYzEwMzVjMWVhZjM4YWY1OTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY5OGJjYgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMS83MGNjNGVlNTVkM2UwMDFjMTAzNWMxZWFmMzhhZjU5MApAQCAtMCwwICsxLDgxMiBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnNxbC5Db25uZWN0aW9uOworaW1wb3J0IGphdmEuc3FsLkRyaXZlck1hbmFnZXI7CitpbXBvcnQgamF2YS5zcWwuUHJlcGFyZWRTdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS5zcWwuUmVzdWx0U2V0OworaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5TdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworcHVibGljIGNsYXNzIEdsZW1tREIKKworeworCXN0YXRpYyBwdWJsaWMgU3RyaW5nIGRiVGFibGUgCT0gIkdsZW1tTGVtbWF0YSI7CisJc3RhdGljIFN0cmluZyBkYkxlbW1hIAkJIAk9ICJsZW1tYSI7CisJc3RhdGljIFN0cmluZyBkYldmCSAJCQk9ICJ3ZiI7CisJc3RhdGljIFN0cmluZyBkYlByb3AxIAkJCT0gInByb3AxIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDIgCQkJPSAicHJvcDIiOworCisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChvdmVyd3JpdHRlbiBieSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCXByaXZhdGUgc3RhdGljIFN0cmluZyBmbmFtZURCID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNlcnZlckhvc3QgPSAiLy9sb2NhbGhvc3Q6MTUyNy8iOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAoZmluYWwgYXNzaWdubWVudHMpOgorCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckVtYiA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuRW1iZWRkZWREcml2ZXIiOworCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckNsaWVudCA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50RHJpdmVyIjsKKworCWZpbmFsIHN0YXRpYyBib29sZWFuCisJCXVzZVByZXBhcmVkU3RtdCA9IHRydWU7IC8vIDE9dXNlIFByZXBhcmVkU3RhdGVtZW50IGFuZCBub3QgU3RhdGVtZW50LgorCQorCS8vIHZhbHVlcyB0byBiZSBpbnNlcnRlZDogbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMuCisJc3RhdGljIFN0cmluZyBpbnNlcnRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICgnJXMnLCAnJXMnLCAnJXMnLCAnJXMnLCAnJXMnKSI7CisJc3RhdGljIFN0cmluZyBpbnNlcnRQcmVwYXJlZFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKD8sID8sID8sID8sID8pIjsKKwkKKwkvLyBDb25zdGFudHMgb2YgdGFibGUgR2xlbW1MZW1tYXRhOgorCXN0YXRpYyBmaW5hbCBpbnQgbWF4TGVtbWFTaXplCT0gNjQ7IAkvLyBtYXguIG5vLiBvZiBjaGFycywgYXMgZGVjbGFyZWQgaW4gdGFibGUgR2xlbW1MZW1tYXRhLgorCXN0YXRpYyBmaW5hbCBpbnQgbWF4V2ZTaXplCQk9IDY0OwkvLyBtYXguIG5vLiBvZiBjaGFycywgYXMgZGVjbGFyZWQgaW4gdGFibGUgR2xlbW1MZW1tYXRhLgorCQorCS8qIHZhcmlhYmxlcyAqLworCXN0YXRpYyBpbnQgbkV4Y2VwdFN0bXQJCQk9IDA7CS8vIGNvdW50IG5vLiBvZiBleGNlcHRpb25zIGZvciBwcmVwYXJlZFN0bXQuCisJc3RhdGljIGludCBuRXhjZXB0SW5zZXJ0CQk9IDA7CS8vIGNvdW50IG5vLiBvZiBleGNlcHRpb25zIGZvciBJbnNlcnRzLgorCQorCS8qCisJICogc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJICogCisJICogQXJndW1lbnRzOgorCSAqIHByb3BzCTogUHJvcGVydGllcyBsb2FkZWQgYnkgdGhlIEdsZW1tU2VydmljZXMuCisJICogTm90ZXM6CisJICogLSB0aGlzIGZ1bmN0aW9uIGxvYWRzIG9ubHkgdGhvc2UgQ29uc3RhbnRzIG5lZWRlZCBpbiB0aGlzIGNsYXNzLgorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcwlwcm9wcykKKwkKKwl7CisJZm5hbWVEQgkJIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgCSIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlzZXJ2ZXJIb3N0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJzZXJ2ZXJIb3N0IiwJIi8vbG9jYWxob3N0OjE1MjcvIik7CisJZGVyYnlEQlVSTCAJCT0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCQkJCisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKiAgICBjaGVja0RlcmJ5Q29ubmVjdGlvbjoKKwkgKiAKKwkgKiBjaGVjayBpZiBEZXJieSBOZXR3b3JrIFNlcnZlciBpcyBhdmFpbGFibGUuCisJICogUmV0dXJuczogMCAoPU9LKSBvciAtMSAob24gZXJyb3IpLgorCSAqIDA1LjExLjIxL0ZCCisJICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgY2hlY2tEZXJieUNvbm5lY3Rpb24oKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAiY2hlY2tEZXJieUNvbm5lY3Rpb24iOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlLAorCS8vIHNldCBBdXRvY29tbWl0ID0gZmFsc2UgdG8gYWNjZWxlcmF0ZSBpbnNlcnRpb25zOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyB0byAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IAorCQl7IAorCQl0cnkgeyAvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyBjaGVja19EZXJieUNvbm5lY3Rpb24KKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCQkJCQlpbXBvcnRHbGVtbUxlbWF0YQorCSAqIFBhcmFtZXRlcnM6CisJICogZm4JCSA6IGFic29sdXRlIGZpbGUgbmFtZSBvZiBHTEVNTSBvdXRwdXQgW0lTTzg4NTktMV0gZXhwZWN0ZWQsIG5vdCBVVEYtOCEKKwkgKiBwcm9wcwkgOiBQcm9wZXJ0aWVzIHZvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgdG8gc2V0IGNvbnN0YW50cyBuZWVkZWQKKwkgKiAJCQkgICBpbiB0aGlzIGNsYXNzLgorCSAqIGRicGF0aAkgOiBsb2NhdGlvbiArIG5hbWUgb2YgZGF0YWJhc2Ugd2hlcmUgdG8gc3RvcmUgbGVtbWF0YSt3ZnMuCisJICogUmV0dXJucwkgOiAwPU9LLCAtMTogZ2VuZXJhbCBlcnJvcjsgPiAwIDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAKKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIGR5bmFtaWNhbGx5IGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqIDA0LjExLjIxL0ZCIGRicGF0aC4KKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YShTdHJpbmcgZm4sIFByb3BlcnRpZXMgcHJvcHMsIGZpbmFsIFN0cmluZyBkYnBhdGgpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YSI7CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4gPSBudWxsOworCWludAorCQluRXJyb3JzOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyB3aGVuIGluZGV4aW5nIGRhdGEgaW50byB0aGUgZGF0YWJhc2UsIHNlbGVjdCB0aGUgc3VibWl0dGVkIGRicGF0aCwKKwkvLyAobm90IHRoZSBvbmUgc3RvcmVkIGluIHRoZSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCWRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGRicGF0aDsKKwkKKwkvLyBvcGVuIHJlYWRlciBvbiBHbGVtbSBMZW1tYXRhOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCWluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCQorCQluRXJyb3JzID0gd3JpdGVEQkxlbW1hdGEoaW4pOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBmcm9tICclcychXG4iLCBmdW5jLCBmbik7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCisJLy8gY2xvc2UgUmVhZGVyOgorCXRyeSB7CisJCWluLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJbkVycm9ycyA9IC0xOworCQl9CisJCisJaWYoIG5FcnJvcnMgPT0gLTEgKQorCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IFNRTCBlcnJvciB3aGVuIGNyZWF0aW5nIFNRTCBzdGF0ZW1lbnQhXG4iLCBmdW5jKTsKKwllbHNlIGlmKCBuRXJyb3JzID09IC0yICkKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGVycm9yIHRvIERlcmJ5IFNlcnZlciFcbiIsIGZ1bmMpOworCWVsc2UgaWYoIG5FcnJvcnMgPT0gMCApCisgCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydCBkb25lIHN1Y2Nlc3NmdWxseS5cbiIsIGZ1bmMpOworIAllbHNlCisgCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydDogJWQgRXJyb3JzIVxuIiwgZnVuYywgbkVycm9ycyk7CisgCQorCXJldHVybiBuRXJyb3JzOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhCisJCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAorCSAqICAgICAgICAgICAgICAgICAgICAgICB3cml0ZURCTGVtbWF0YSgpCisJICogICAgICAgICAgICAgICAgICAgICAgIAorCSAqIHN0b3JlcyBsaXN0IG9mIGxlbW1hdGEgKyBpbmZvcyBpbnRvIERlcmJ5IGRiLgorCSAqIEZpbGUgZm9ybWF0OiAiTGVtbWEgRGVjb21wb3NpdGlvbiBXZiIsCisJICogICAgICAgICAgICAgIGUuZy46ICJIw6R1c2VyICstIEhhdXMiLgorCSAqIFJldHVybnM6IDAgPSBPSyBvciAKKwkgKiAJCQktMTogU1FMIGluc2VydCBlcnJvciwgb3IKKwkgKiAJCQktMjogY29ubmVjdGlvbiBlcnJvciB0byBEZXJieSBTZXJ2ZXIsIG9yCisJICogCQkgICA+IDA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogMDkuMDEuMjAvRkIKKwkgKiAwNC4xMS4yMS9GQiB0dXJuIGF1dG9jb21taXQgb2ZmIHRvIGFjY2VsZXJhdGUgaHVnZSBhbW91bnQgb2YgaW5zZXJ0aW9ucy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hdGEoQnVmZmVyZWRSZWFkZXIgaW4pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWF0YSI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlQcmVwYXJlZFN0YXRlbWVudAorCQlzdG10UHJlcCA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgCSA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CQorCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCW5JbnNlcnRlZCA9IDAsCS8vIG5vLiBvZiBsZW1tYS93ZiBwYWlycyBpbXBvcnRlZC4KKwkJcmV0ID0gMDsgLy8gT0suCisJYm9vbGVhbgorCQljb250YWluc1NwZWM7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlLAorCS8vIHNldCBBdXRvY29tbWl0ID0gZmFsc2UgdG8gYWNjZWxlcmF0ZSBpbnNlcnRpb25zOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQljb24uc2V0QXV0b0NvbW1pdChmYWxzZSk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkIChhdXRvQ29tbWl0PW9mZikuXG4iLCBmdW5jKTsKKwkJCisJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJc3RtdFByZXAgPSBjb24ucHJlcGFyZVN0YXRlbWVudChpbnNlcnRQcmVwYXJlZFF1ZXJ5KTsKKwkJZWxzZQorCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKworCQl3aGlsZSggKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggIT0gMyApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogJyVzJyBoYXMgJWQgY29tcG9uZW50cyEgRXhwZWN0ZWQgPSAzISBDYW5ub3QgYmUgc3RvcmVkIVxuIiwgZnVuYywgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQkJbkVycm9ycysrOworCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQorCQkJLy8gR2V0IEluZm8sIGlmIHdvcmRmb3JtIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSAnLScsIGludGVycHVuY3Rpb24gZXRjLjoKKwkJCS8vIGxlbW1hSW5mb1syXSA9IHdvcmRmb3JtLgorCQkJY29udGFpbnNTcGVjID0gTGVtbWFJbmZvLmlzV2ZTcGVjaWFsQ2FzZShsZW1tYUluZm9bMl0pOworCQkJLy8gc3RvcmUgaW50byBEQjoKKwkJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKHN0bXRQcmVwLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJZWxzZQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zKHN0bXQsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQkKKwkJCWlmKCByZXQgIT0gMCApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHN0b3JlIGxlbW1hICclcycgaW50byBEQiEgKHJldD0lZClcbiIsIGZ1bmMsIGxpbmUsIHJldCk7CisJCQkJbkVycm9ycysrOyAKKwkJCQl9CisJCQllbHNlCisJCQkJbkluc2VydGVkKys7CisJCQl9IC8vIHdoaWxlCisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIEdsZW1tIGxlbW1hdGEraW5mb3MgZnJvbSBmaWxlISBFeGl0IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMzsgCisJCX0JCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiBjb24gPT0gbnVsbCA/IC0xIDogLTI7CisJCX0KKwlmaW5hbGx5IAorCQl7IAorCQl0cnkgeworCQkJLy8gaW1wb3J0YW50OiBub3cgY29tbWl0LCBhcyBhdXRvQ29tbWl0IGlzIGRlYWN0aXZhdGVkLAorCQkJLy8gdGhpcyBhbHNvIHJlbW92ZXMgZGF0YWJhc2UgbG9ja3M6CisJCQljb24uY29tbWl0KCk7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbW1pdCBzdWNjZXNzZnVsbC5cbiIsIGZ1bmMpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbW1pdCBhdCB0aGUgZW5kIG9mIHRoZSB3ZnMgbGlzdCBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJCisJCXRyeSB7IC8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIAorCQkJCXN0bXQuY2xvc2UoKTsKKwkJCWlmKCBzdG10UHJlcCAhPSBudWxsICkgCisJCQkJc3RtdFByZXAuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiSW5mbyA6ICVzOiBuby4gb2YgbGVtbWF0YS93ZiBwYWlycyBpbnNlcnRlZCA9ICVkLlxuIiwgZnVuYywgbkluc2VydGVkKTsKKwkKKwlyZXR1cm4gbkVycm9yczsgLy8gMD1PSywgPjAgPSBuby4gb2YgZXJyb3JzLgorCX0gLy8gd3JpdGVEQkxlbW1hdGEKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQ6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gcnVsZXMgaW50byBEZXJieSBEQi4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgaXMgdGhlIHZlcnNpb24gd2l0aCBhIFByZXBhcmVkUXVlcnkuCisJICogUGFyYW1ldGVyczoKKwkgKiBzcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTcuMDEuMjAvRkIKKwkgKiAwNS4xLjIxL0ZCIHJlamVjdCBsZW1tYS93ZiA+IDY0IGNoYXJzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCgKKwkJCVByZXBhcmVkU3RhdGVtZW50IHN0bXQsIAorCQkJU3RyaW5nIGxlbW1hLCAKKwkJCVN0cmluZyB3ZiwgCisJCQlTdHJpbmcgZGVjb21wb3NpdGlvbiwgCisJCQlib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCI7CisJZmluYWwgYm9vbGVhbgorCQliTG9nID0gZmFsc2U7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJYm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJLy8gY2hlY2sgc2l6ZSBvZiB3ZiBhbmQgbGVtbWEgYWdhaW5zdCBmaWVsZCBzaXplIGluIHRhYmxlIEdsZW1tTGVtbWF0YToKKwlpZiggbGVtbWEubGVuZ3RoKCkgPj0gR2xlbW1EQi5tYXhMZW1tYVNpemUgKSAKKwkJeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGxlbW1hIHJlamVjdGVkICg+ICVkKTogJyVzJyFcbiIsCisJCQkJZnVuYywgbWF4TGVtbWFTaXplLCBsZW1tYSk7CisJCXJldHVybiA0OworCQl9CisJaWYoIHdmLmxlbmd0aCgpID49IEdsZW1tREIubWF4V2ZTaXplICkgCisJCXsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3ZiByZWplY3RlZCAoPiAlZCk6ICclcychXG4iLAorCQkJCWZ1bmMsIG1heFdmU2l6ZSwgd2YpOworCQlyZXR1cm4gNTsKKwkJfQorCSAKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgCisJLy8gZm9yIGxvZ2luZyBvbmx5OgorCXNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwlpZiggYkxvZyApCisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorICAgIC8vIG5vdyBpbnNlcnQgbmV3IHZhbHVlcyBpbnRvIFByZXBhcmVkU3RhdGVtZW50OgorICAgIHRyeSB7CisgICAgCXN0bXQuc2V0U3RyaW5nKCAxLCBsZW1tYSk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKCAyLCB3Zik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbigzLCBwcm9wMSk7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig0LCBwcm9wMik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig1LCBzcGVjKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcmVwYXJlZCBzdG10ID0gJyVzJy5cbiIsICBmdW5jLCBzdG10LnRvU3RyaW5nKCkpOworICAgICAgICB9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlMSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKAkiRXJyb3I6ICVzOiB3aGlsZSBmaWxsaW5nIHByZXBhcmVkIHN0YXRlbWVudCB3aXRoIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0nJWInIHByb3AyPSclYicgc3BlYz0nJWInIVxuIiwgIAorCQkJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJaWYoICsrbkV4Y2VwdFN0bXQgPD0gMSApCisJCQllMS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKyAgICAKKyAgICB0cnkgeworCQkvLyBleGVjdXRlIHRoZSBmaWxsZWQgcHJlcGFyZWQgc3RhdGVtZW50OgorCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhIChuPSVkKVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYywgbik7CisgCQkJcmV0dXJuIDI7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQlpZiggKytuRXhjZXB0SW5zZXJ0IDw9IDEgKQorCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDM7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZAorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3M6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gaW50byBEZXJieSBEQi4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGNvbnRhaW5zU3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDEwLjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zKFN0YXRlbWVudCBzdG10LCBTdHJpbmcgbGVtbWEsIFN0cmluZyB3ZiwgU3RyaW5nIGRlY29tcG9zaXRpb24sIGJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zIjsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlCb29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworICAgIAorICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorCXRyeSB7CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoc3FsSW5zZXJ0KTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYURhdGEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBmcm9tIHRoZSBHbGVtbURCLgorCSAqIElucHV0OiBsZW1tYSArIEdMRU1NX09QVFNfeHh4IChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWFEYXRhKExlbW1hSW5mbyBsZW1tYUluZm8sIFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYURhdGEiOworCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJbGVtbWFJbmZvLmNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJbGVtbWFJbmZvLnN0bXQgPSBsZW1tYUluZm8uY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlpbnQgciA9IHJlYWREQkxlbW1hKGxlbW1hSW5mby5zdG10LCBsZW1tYUluZm8pOworCQkJCisJCWlmKCByICE9IDAgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZ2V0IGRhdGEgZm9yIGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIVxuIiwgCisJCQkJCWZ1bmMsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwkJCXJldHVybiAxOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggbGVtbWFJbmZvLmNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hRGF0YQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGJ5IGFjY2Vzc2luZyB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dCA6IGxlbW1hICsgcHJvcDErMiAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogT3V0cHV0OiAKKwkgKiAgLSBjb250YWlucyBhIFJlc3VsdFNldCBmb3IgZmV0Y2hpbmcgdGhlIHdvcmRmb3Jtcy4KKwkgKiAJICBUaGlzIFJlc3VsdFNldCB3aWxsIGhhdmUgYmUgYmUgY2xvc2VkIHdpdGggTGVtbWFJbmZvLmNsb3NlKCkuCisJICogCSAgVGhlIG5vLiBvZiBmb3VuZCB3b3JkZm9ybXMgaXMgbm90IGtub3duIHRpbGwgd2UKKwkgKiAJICBmZXRjaCBhbGwgb2YgdGhlbSBmcm9tIFJlc3VsdFNldCEgCisJICogCS0gZHVlIHRvIFNFTEVDVCBESVNUSU5DVCBvbmx5IHVuaXEgd2YgYXJlIHJldHVybmVkLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYShTdGF0ZW1lbnQgc3RtdCwgTGVtbWFJbmZvIGxlbW1hSW5mbykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hIjsKKwlTdHJpbmcKKwkJc3FsOworCQkKKwlzcWwgPSBTdHJpbmcuZm9ybWF0KCJTRUxFQ1QgRElTVElOQ1Qgd2YgZnJvbSAlcyBXSEVSRSBsZW1tYT0nJXMnICVzICVzICVzIiwgCisJCQlkYlRhYmxlLAorCQkJbGVtbWFJbmZvLmxlbW1hLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiQU5EIHByb3AxPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAxID8gIkFORCBwcm9wMT0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiQU5EIHByb3AyPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAxID8gIkFORCBwcm9wMj0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiQU5EIHNwZWM9J3RydWUnIiAgIDogCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICJBTkQgc3BlYz0nZmFsc2UnIiAgOiAiIik7CisJCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgZnVuYywgbGVtbWFJbmZvLnByb3AxLCBsZW1tYUluZm8ucHJvcDIsIGxlbW1hSW5mby5zcGVjKTsKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbCA9ICclcycuXG4iLCBmdW5jLCBzcWwpOworCisJdHJ5IHsKKwkJbGVtbWFJbmZvLnJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoZW4gZXhlY3V0aW5nIHNxbD0nJXMnIVxuIiwgZnVuYywgc3FsKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gYWxsIHNxbCBzdHVmZiBhcmUgY2xvc2VkIG91dHNpZGUgdGhpcyBmdW5jdGlvbiwgc28gZG9uJ3QgY2xvc2UgdGhlbSBoZXJlIQorCQl9CQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3MKKwkgKiBSZXR1cm5zIEdlbmVyYWwgSW5mb3MgYWJvdXQgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIHJlYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJJbmZvcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJZGJJbmZvID0gcmVhZERiTGVtbWF0YUluZm9zKHN0bXQpOworCQkJCisJCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCByZWFkIEdlbmVyYWwgSW5mb3MgZnJvbSBHbGVtbSBEYXRhYmFzZSFcbiIsIGZ1bmMpOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSBjb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSBzdG10LmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIG1heSBiZSBudWxsLgorCQkKKwl9IC8vIHJlYWREYkluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiTGVtbWF0YUluZm9zOgorCSAqIHJlYWRzIGFuZCByZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGNvbnRlbnQgCisJICogb2YgdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIFJldHVybnMgMD1PSyBvciBlcnJvciBjb2RlID4gMC4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkxlbW1hdGFJbmZvcyhTdGF0ZW1lbnQgc3RtdCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAicmVhZERiTGVtbWFJbmZvcyI7CisJU3RyaW5nW10KKwkJc3FsID0gewkiU0VMRUNUIENPVU5UKGRpc3RpbmN0IGxlbW1hKSBmcm9tICIgKyBkYlRhYmxlICwJLy8gY291bnRzIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSwJCQkJCS8vIGNvdW50cyB0b3RhbCBuby4gb2Ygc3RvcmVkIHdvcmRmb3Jtcy4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPXRydWUiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPXRydWUifTsKKwlSZXN1bHRTZXQKKwkJcmVzID0gbnVsbDsgCisJaW50W10KKwkJbkNvdW50cyA9IG5ldyBpbnRbc3FsLmxlbmd0aF07CisJaW50CQkKKwkJaSA9IDAsIAorCQluRGlzdExlbW1hdGEgPSAtMSwJLy8gbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEgaW4gREIuCisJCW5XZnMJCSA9IC0xOwkvLyBuby4gb2Ygd29yZGZvcm1zIGluIERCLgorCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBleHRyYWN0aW5nIGFncmVnYXRlZCBpbmZvcyBhYm91dCBEYXRhYmFzZSBjb250ZW50cy4uLlxuIiwgZnVuYyk7CisJCisJZGJJbmZvID0gbmV3IEdsZW1tREJJbmZvKCk7CisKKwkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwl0cnkgeworCQlmb3IoaT0wOyBpPHNxbC5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCXJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbFtpXSk7CisJCQlpZiggcmVzLm5leHQoKSApCisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IHJlcy5nZXRJbnQoMSk7IC8vIGNvdW50IGlzIGluIGNvbHVtbiAxLgorCQkJZWxzZQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBleHRyYWN0IGNvdW50IGZyb20gJyVzJyFcbiIsIGZ1bmMsIHNxbFtpXSk7CisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IC0xOworCQkJCX0KKwkJCX0KKyAgICAgICAKKyAgICAgICAgfQorICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgIAl7CisgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogc3FsPSclcycgZmFpbGVkIVxuIiwgZnVuYywgc3FsW2ldKTsKKyAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAJfQorCWZpbmFsbHkgeworCQl0cnkgeworCQkJcmVzLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBPSworCX0gLy8gcmVhZERiTGVtbWF0YUluZm9zCisJCisJLyoqKioqKioqKioqKioqKioqKioqIFRlc3QgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zX3Rlc3QKKwkgKiBUaGlzIGlzIGRlYnVnIGNvZGUgd3JpdHRlbiB0byB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIERlcmJ5CisJICogRGF0YWJhc2UgZnJvbSBhbiBleHRlcm5hbCBKYXZhIFByb2dyYW1tLgorCSAqIDA4LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCByZWFkRGJJbmZvc190ZXN0KCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlTdHJpbmcKKwkJaW5zZXJ0U3RtdCA9ICIiOworCQorCS8vIENvbm5lY3QgdG8gRGVyYnkgZGF0YWJhc2U6CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCQorCQkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwkJdHJ5CisJCQl7CisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIAorICAgICAgICAgICAgCXNxbCA9ICJTRUxFQ1QgKiBGUk9NICIgKyBkYlRhYmxlOworICAgICAgICAgICAgUmVzdWx0U2V0IAorICAgICAgICAgICAgCXJlc3VsdCA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CisgCisgICAgICAgICAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHRhYmxlICclcyc6XG4iLCAgZnVuYywgZGJUYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQubmV4dCgpKSB7CisgICAgICAgICAgICAJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiJyVzJyA6ICclcycgOiAnJXMnIDogJyVzJyAuXG4iLCByZXN1bHQuZ2V0U3RyaW5nKDEpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygyKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMyksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDQpKTsKKyAgICAgICAgCQlpbnNlcnRTdG10ID0gaW5zZXJ0U3RtdCArICI8cD4iICsgcmVzdWx0LmdldFN0cmluZygxKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZygyKSArICIgOiAiICsKKyAgICAgICAgICAgICAgICAJCSAgICAgcmVzdWx0LmdldFN0cmluZygzKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZyg0KSArICI8L3A+IjsKKyAgICAgICAgICAgIAl9CisJCQl9CisJICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgICAgICAJeworCSAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBpbnNlcnRTdG10PSclcycgZmFpbGVkIS5cbiIsIGZ1bmMsIHN0bXQpOworICAgICAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICAgICAgY29uLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nICclcyBmYWlsZWQhXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJdHJ5IHsKKwkJY29uLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkJCisJfSAvLyByZWFkRGJJbmZvc190ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogaW1wb3J0R2xlbW1MZW1hdGFfdGVzdAorCSAqIFRlc3QgVmVyc2lvbi4KKwkgKiAxMi4xMi4xOS9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QoU3RyaW5nIGZuKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdCI7CisJSW5wdXRTdHJlYW0gCisJCWluOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluMiA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQlyOworCQorCS8qCisJICogUmVhZCBMZW1tYXRhICsgSW5mbyBmcm9tIGZpbGU6IAorCSAqLworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCQorCXRyeSB7CisJCS8vaW4gPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSggbmV3IEZpbGVJbnB1dFN0cmVhbShmbikgKTsKKwkJaW4yID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlcihmbikpOworCQl3aGlsZSggKGxpbmUgPSBpbjIucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoID09IDMgKQorCQkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBJbXBvcnQ6IGxlbT0nJXMnIERlY29tcD0nJXMnIFdmPSclcycuXG4iLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1sxXSwgbGVtbWFJbmZvWzJdKTsKKwkJCWVsc2UKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogaW1wb3J0R2xlbW1MYW1hdGE6ICclcycgaGFzICVkIGNvbXBvbmVudHMhXG4iLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IG9wZW4gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJcmV0dXJuIDE7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKworCXRyeSB7CisJCWluMi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCS8qIENoZWNrIGNvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJICovIAorCXIgPSByZWFkRGJJbmZvc190ZXN0KCk7CisJaWYoIHIgIT0gMCApCisJCXJldHVybiByOworCQkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzE4LzYwM2RkOTc2OTYzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8xOC82MDNkZDk3Njk2M2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTVkNzAwCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8xOC82MDNkZDk3Njk2M2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpAQCAtMCwwICsxLDcyOSBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnNxbC5Db25uZWN0aW9uOworaW1wb3J0IGphdmEuc3FsLkRyaXZlck1hbmFnZXI7CitpbXBvcnQgamF2YS5zcWwuUHJlcGFyZWRTdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS5zcWwuUmVzdWx0U2V0OworaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5TdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitwdWJsaWMgY2xhc3MgR2xlbW1EQgorCit7CisJc3RhdGljIHB1YmxpYyBTdHJpbmcgZGJUYWJsZSAJPSAiR2xlbW1MZW1tYXRhIjsKKwlzdGF0aWMgU3RyaW5nIGRiTGVtbWEgCQkgCT0gImxlbW1hIjsKKwlzdGF0aWMgU3RyaW5nIGRiV2YJIAkJCT0gIndmIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDEgCQkJPSAicHJvcDEiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMiAJCQk9ICJwcm9wMiI7CisKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKG92ZXJ3cml0dGVuIGJ5IEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZuYW1lREIgPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgc2VydmVySG9zdCA9ICIvL2xvY2FsaG9zdDoxNTI3LyI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChmaW5hbCBhc3NpZ25tZW50cyk6CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyRW1iID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZERyaXZlciI7CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyQ2xpZW50ID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREcml2ZXIiOworCisJZmluYWwgc3RhdGljIGJvb2xlYW4KKwkJdXNlUHJlcGFyZWRTdG10ID0gdHJ1ZTsgLy8gMT11c2UgUHJlcGFyZWRTdGF0ZW1lbnQgYW5kIG5vdCBTdGF0ZW1lbnQuCisJCisJLy8gdmFsdWVzIHRvIGJlIGluc2VydGVkOiBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYy4KKwlzdGF0aWMgU3RyaW5nIGluc2VydFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKCclcycsICclcycsICclcycsICclcycsICclcycpIjsKKwlzdGF0aWMgU3RyaW5nIGluc2VydFByZXBhcmVkUXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoPywgPywgPywgPywgPykiOworCQorCS8qCisJICogc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJICogCisJICogQXJndW1lbnRzOgorCSAqIHByb3BzCTogUHJvcGVydGllcyBsb2FkZWQgYnkgdGhlIEdsZW1tU2VydmljZXMuCisJICogTm90ZXM6CisJICogLSB0aGlzIGZ1bmN0aW9uIGxvYWRzIG9ubHkgdGhvc2UgQ29uc3RhbnRzIG5lZWRlZCBpbiB0aGlzIGNsYXNzLgorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcwlwcm9wcykKKwkKKwl7CisJZm5hbWVEQgkJIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgCSIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlzZXJ2ZXJIb3N0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJzZXJ2ZXJIb3N0IiwJIi8vbG9jYWxob3N0OjE1MjcvIik7CisJZGVyYnlEQlVSTCAJCT0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCQkJCisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCQkJCQlpbXBvcnRHbGVtbUxlbWF0YQorCSAqIFBhcmFtZXRlcnM6CisJICogZm4JCSA6IGFic29sdXRlIGZpbGUgbmFtZSBvZiBHTEVNTSBvdXRwdXQgW0lTTzg4NTktMV0gZXhwZWN0ZWQsIG5vdCBVVEYtOCEKKwkgKiBwcm9wcwkgOiBQcm9wZXJ0aWVzIHZvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgdG8gc2V0IGNvbnN0YW50cyBuZWVkZWQKKwkgKiAJCQkgICBpbiB0aGlzIGNsYXNzLgorCSAqIGRicGF0aAkgOiBsb2NhdGlvbiArIG5hbWUgb2YgZGF0YWJhc2Ugd2hlcmUgdG8gc3RvcmUgbGVtbWF0YSt3ZnMuCisJICogUmV0dXJucwkgOiAwPU9LLCAtMTogZ2VuZXJhbCBlcnJvcjsgPiAwIDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAKKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIGR5bmFtaWNhbGx5IGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqIDA0LjExLjIxL0ZCIGRicGF0aC4KKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YShTdHJpbmcgZm4sIFByb3BlcnRpZXMgcHJvcHMsIGZpbmFsIFN0cmluZyBkYnBhdGgpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YSI7CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4gPSBudWxsOworCWludAorCQluRXJyb3JzOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyB3aGVuIGluZGV4aW5nIGRhdGEgaW50byB0aGUgZGF0YWJhc2UsIHNlbGVjdCB0aGUgc3VibWl0dGVkIGRicGF0aCwKKwkvLyAobm90IHRoZSBvbmUgc3RvcmVkIGluIHRoZSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCWRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGRicGF0aDsKKwkKKwkvLyBvcGVuIHJlYWRlciBvbiBHbGVtbSBMZW1tYXRhOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCWluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCQorCQluRXJyb3JzID0gd3JpdGVEQkxlbW1hdGEoaW4pOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBmcm9tICclcychXG4iLCBmdW5jLCBmbik7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCisJLy8gY2xvc2UgUmVhZGVyOgorCXRyeSB7CisJCWluLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJbkVycm9ycyA9IC0xOworCQl9CisJCisgCWlmKCBuRXJyb3JzID09IDAgKQorIAkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQgZG9uZSBzdWNjZXNzZnVsbHkuXG4iLCBmdW5jKTsKKyAJZWxzZQorIAkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQ6ICVkIEVycm9ycyFcbiIsIGZ1bmMsIG5FcnJvcnMpOworIAkKKwlyZXR1cm4gbkVycm9yczsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YQorCQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVEQkxlbW1hdGEoKQorCSAqICAgICAgICAgICAgICAgICAgICAgICAKKwkgKiBzdG9yZXMgbGlzdCBvZiBsZW1tYXRhICsgaW5mb3MgaW50byBEZXJieSBkYi4KKwkgKiBGaWxlIGZvcm1hdDogIkxlbW1hIERlY29tcG9zaXRpb24gV2YiLAorCSAqICAgICAgICAgICAgICBlLmcuOiAiSMOkdXNlciArLSBIYXVzIi4KKwkgKiBSZXR1cm5zOiAwID0gT0sgb3IgLTE6IGdlbmVyYWwgZXJyb3Igb3IgPiAwOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIDA5LjAxLjIwL0ZCCisJICogMDQuMTEuMjEvRkIgdHVybiBhdXRvY29tbWl0IG9mZiB0byBhY2NlbGVyYXRlIGh1Z2UgYW1vdW50IG9mIGluc2VydGlvbnMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYXRhKEJ1ZmZlcmVkUmVhZGVyIGluKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hdGEiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJUHJlcGFyZWRTdGF0ZW1lbnQKKwkJc3RtdFByZXAgPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10IAkgPSBudWxsOworCVN0cmluZworCQlsaW5lOwkKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQluSW5zZXJ0ZWQgPSAwLAkvLyBuby4gb2YgbGVtbWEvd2YgcGFpcnMgaW1wb3J0ZWQuCisJCXJldCA9IDA7IC8vIE9LLgorCWJvb2xlYW4KKwkJY29udGFpbnNTcGVjOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZSwKKwkvLyBzZXQgQXV0b2NvbW1pdCA9IGZhbHNlIHRvIGFjY2VsZXJhdGUgaW5zZXJ0aW9uczoKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJY29uLnNldEF1dG9Db21taXQoZmFsc2UpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZCAoYXV0b0NvbW1pdD1vZmYpLlxuIiwgZnVuYyk7CisKKwkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQlzdG10UHJlcCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KGluc2VydFByZXBhcmVkUXVlcnkpOworCQllbHNlCisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCisJCXdoaWxlKCAobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCAhPSAzICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzISBFeHBlY3RlZCA9IDMhIENhbm5vdCBiZSBzdG9yZWQhXG4iLCBmdW5jLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCQluRXJyb3JzKys7CisJCQkJY29udGludWU7CisJCQkJfQorCQkJCisJCQkvLyBHZXQgSW5mbywgaWYgd29yZGZvcm0gY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlICctJywgaW50ZXJwdW5jdGlvbiBldGMuOgorCQkJLy8gbGVtbWFJbmZvWzJdID0gd29yZGZvcm0uCisJCQljb250YWluc1NwZWMgPSBMZW1tYUluZm8uaXNXZlNwZWNpYWxDYXNlKGxlbW1hSW5mb1syXSk7CisJCQkvLyBzdG9yZSBpbnRvIERCOgorCQkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoc3RtdFByZXAsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQllbHNlCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3Moc3RtdCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCQorCQkJaWYoIHJldCAhPSAwICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgc3RvcmUgbGVtbWEgJyVzJyBpbnRvIERCIVxuIiwgZnVuYywgbGluZSk7CisJCQkJbkVycm9ycysrOyAKKwkJCQl9CisJCQllbHNlCisJCQkJbkluc2VydGVkKys7CisJCQl9IC8vIHdoaWxlCisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIEdsZW1tIGxlbW1hdGEraW5mb3MgZnJvbSBmaWxlISBFeGl0IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsgCisJCX0JCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSAKKwkJCQlzdG10LmNsb3NlKCk7CisJCQlpZiggc3RtdFByZXAgIT0gbnVsbCApIAorCQkJCXN0bXRQcmVwLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkluZm8gOiAlczogbm8uIG9mIGxlbW1hdGEvd2YgcGFpcnMgaW5zZXJ0ZWQgPSAlZC5cbiIsIGZ1bmMsIG5JbnNlcnRlZCk7CisJCisJcmV0dXJuIG5FcnJvcnM7IC8vIDA9T0ssID4wID0gbm8uIG9mIGVycm9ycy4KKwl9IC8vIHdyaXRlREJMZW1tYXRhCisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIHJ1bGVzIGludG8gRGVyYnkgREIuCisJICogTm90ZXM6CisJICogLSB0aGlzIGlzIHRoZSB2ZXJzaW9uIHdpdGggYSBQcmVwYXJlZFF1ZXJ5LgorCSAqIFBhcmFtZXRlcnM6CisJICogc3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDE3LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKAorCQkJUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCwgCisJCQlTdHJpbmcgbGVtbWEsIAorCQkJU3RyaW5nIHdmLCAKKwkJCVN0cmluZyBkZWNvbXBvc2l0aW9uLCAKKwkJCWJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkIjsKKwlmaW5hbCBib29sZWFuCisJCWJMb2cgPSBmYWxzZTsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlib29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgCisJLy8gZm9yIGxvZ2luZyBvbmx5OgorCXNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwlpZiggYkxvZyApCisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorICAgIC8vIG5vdyBpbnNlcnQgbmV3IHZhbHVlcyBpbnRvIFByZXBhcmVkU3RhdGVtZW50OgorICAgIHRyeSB7CisgICAgCXN0bXQuc2V0U3RyaW5nKCAxLCBsZW1tYSk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKCAyLCB3Zik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbigzLCBwcm9wMSk7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig0LCBwcm9wMik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig1LCBzcGVjKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcmVwYXJlZCBzdG10ID0gJyVzJy5cbiIsICBmdW5jLCBzdG10LnRvU3RyaW5nKCkpOworICAgICAgICB9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlMSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKAkiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSclYicgcHJvcDI9JyViJyBzcGVjPSclYichXG4iLCAgCisJCQkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllMS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKyAgICAKKyAgICB0cnkgeworCQkvLyBleGVjdXRlIHRoZSBmaWxsZWQgcHJlcGFyZWQgc3RhdGVtZW50OgorCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMjsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAzOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIGludG8gRGVyYnkgREIuCisJICogUGFyYW1ldGVyczoKKwkgKiBjb250YWluc1NwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxMC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvcyhTdGF0ZW1lbnQgc3RtdCwgU3RyaW5nIGxlbW1hLCBTdHJpbmcgd2YsIFN0cmluZyBkZWNvbXBvc2l0aW9uLCBib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvcyI7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJQm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIHNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAgICAKKyAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKwl0cnkgeworCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKHNxbEluc2VydCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWFEYXRhCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgZnJvbSB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dDogbGVtbWEgKyBHTEVNTV9PUFRTX3h4eCAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hRGF0YShMZW1tYUluZm8gbGVtbWFJbmZvLCBQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWFEYXRhIjsKKworCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWxlbW1hSW5mby5jb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCWxlbW1hSW5mby5zdG10ID0gbGVtbWFJbmZvLmNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJaW50IHIgPSByZWFkREJMZW1tYShsZW1tYUluZm8uc3RtdCwgbGVtbWFJbmZvKTsKKwkJCQorCQlpZiggciAhPSAwICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGdldCBkYXRhIGZvciBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyFcbiIsIAorCQkJCQlmdW5jLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGxlbW1hSW5mby5jb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYURhdGEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBieSBhY2Nlc3NpbmcgdGhlIEdsZW1tREIuCisJICogSW5wdXQgOiBsZW1tYSArIHByb3AxKzIgKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqIE91dHB1dDogCisJICogIC0gY29udGFpbnMgYSBSZXN1bHRTZXQgZm9yIGZldGNoaW5nIHRoZSB3b3JkZm9ybXMuCisJICogCSAgVGhpcyBSZXN1bHRTZXQgd2lsbCBoYXZlIGJlIGJlIGNsb3NlZCB3aXRoIExlbW1hSW5mby5jbG9zZSgpLgorCSAqIAkgIFRoZSBuby4gb2YgZm91bmQgd29yZGZvcm1zIGlzIG5vdCBrbm93biB0aWxsIHdlCisJICogCSAgZmV0Y2ggYWxsIG9mIHRoZW0gZnJvbSBSZXN1bHRTZXQhIAorCSAqIAktIGR1ZSB0byBTRUxFQ1QgRElTVElOQ1Qgb25seSB1bmlxIHdmIGFyZSByZXR1cm5lZC4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWEoU3RhdGVtZW50IHN0bXQsIExlbW1hSW5mbyBsZW1tYUluZm8pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYSI7CisJU3RyaW5nCisJCXNxbDsKKwkJCisJc3FsID0gU3RyaW5nLmZvcm1hdCgiU0VMRUNUIERJU1RJTkNUIHdmIGZyb20gJXMgV0hFUkUgbGVtbWE9JyVzJyAlcyAlcyAlcyIsIAorCQkJZGJUYWJsZSwKKwkJCWxlbW1hSW5mby5sZW1tYSwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIkFORCBwcm9wMT0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICJBTkQgcHJvcDE9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIkFORCBwcm9wMj0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICJBTkQgcHJvcDI9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAxID8gIkFORCBzcGVjPSd0cnVlJyIgICA6IAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiQU5EIHNwZWM9J2ZhbHNlJyIgIDogIiIpOworCQorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIGZ1bmMsIGxlbW1hSW5mby5wcm9wMSwgbGVtbWFJbmZvLnByb3AyLCBsZW1tYUluZm8uc3BlYyk7CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWwgPSAnJXMnLlxuIiwgZnVuYywgc3FsKTsKKworCXRyeSB7CisJCWxlbW1hSW5mby5yZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOwkKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGVuIGV4ZWN1dGluZyBzcWw9JyVzJyFcbiIsIGZ1bmMsIHNxbCk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisJZmluYWxseSB7CisJCS8vIGFsbCBzcWwgc3R1ZmYgYXJlIGNsb3NlZCBvdXRzaWRlIHRoaXMgZnVuY3Rpb24sIHNvIGRvbid0IGNsb3NlIHRoZW0gaGVyZSEKKwkJfQkKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zCisJICogUmV0dXJucyBHZW5lcmFsIEluZm9zIGFib3V0IHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiByZWFkIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiSW5mb3MoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWRiSW5mbyA9IHJlYWREYkxlbW1hdGFJbmZvcyhzdG10KTsKKwkJCQorCQlpZiggZGJJbmZvID09IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgcmVhZCBHZW5lcmFsIEluZm9zIGZyb20gR2xlbW0gRGF0YWJhc2UhXG4iLCBmdW5jKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIG51bGw7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgc3RtdC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBtYXkgYmUgbnVsbC4KKwkJCisJfSAvLyByZWFkRGJJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkxlbW1hdGFJbmZvczoKKwkgKiByZWFkcyBhbmQgcmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjb250ZW50IAorCSAqIG9mIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiBSZXR1cm5zIDA9T0sgb3IgZXJyb3IgY29kZSA+IDAuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJMZW1tYXRhSW5mb3MoU3RhdGVtZW50IHN0bXQpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInJlYWREYkxlbW1hSW5mb3MiOworCVN0cmluZ1tdCisJCXNxbCA9IHsJIlNFTEVDVCBDT1VOVChkaXN0aW5jdCBsZW1tYSkgZnJvbSAiICsgZGJUYWJsZSAsCS8vIGNvdW50cyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YS4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUsCQkJCQkvLyBjb3VudHMgdG90YWwgbm8uIG9mIHN0b3JlZCB3b3JkZm9ybXMuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj10cnVlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj10cnVlIn07CisJUmVzdWx0U2V0CisJCXJlcyA9IG51bGw7IAorCWludFtdCisJCW5Db3VudHMgPSBuZXcgaW50W3NxbC5sZW5ndGhdOworCWludAkJCisJCWkgPSAwLCAKKwkJbkRpc3RMZW1tYXRhID0gLTEsCS8vIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhIGluIERCLgorCQluV2ZzCQkgPSAtMTsJLy8gbm8uIG9mIHdvcmRmb3JtcyBpbiBEQi4KKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogZXh0cmFjdGluZyBhZ3JlZ2F0ZWQgaW5mb3MgYWJvdXQgRGF0YWJhc2UgY29udGVudHMuLi5cbiIsIGZ1bmMpOworCQorCWRiSW5mbyA9IG5ldyBHbGVtbURCSW5mbygpOworCisJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJdHJ5IHsKKwkJZm9yKGk9MDsgaTxzcWwubGVuZ3RoOyBpKyspCisJCQl7CisJCQlyZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWxbaV0pOworCQkJaWYoIHJlcy5uZXh0KCkgKQorCQkJCWRiSW5mby5jb3VudHNbaV0gPSByZXMuZ2V0SW50KDEpOyAvLyBjb3VudCBpcyBpbiBjb2x1bW4gMS4KKwkJCWVsc2UKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZXh0cmFjdCBjb3VudCBmcm9tICclcychXG4iLCBmdW5jLCBzcWxbaV0pOworCQkJCWRiSW5mby5jb3VudHNbaV0gPSAtMTsKKwkJCQl9CisJCQl9CisgICAgICAgCisgICAgICAgIH0KKyAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAJeworICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHNxbD0nJXMnIGZhaWxlZCFcbiIsIGZ1bmMsIHNxbFtpXSk7CisgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgCX0KKwlmaW5hbGx5IHsKKwkJdHJ5IHsKKwkJCXJlcy5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gT0sKKwl9IC8vIHJlYWREYkxlbW1hdGFJbmZvcworCQorCS8qKioqKioqKioqKioqKioqKioqKiBUZXN0IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQorCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvc190ZXN0CisJICogVGhpcyBpcyBkZWJ1ZyBjb2RlIHdyaXR0ZW4gdG8gdGVzdCBpZiB3ZSBjYW4gYWNjZXNzIHRoZSBEZXJieQorCSAqIERhdGFiYXNlIGZyb20gYW4gZXh0ZXJuYWwgSmF2YSBQcm9ncmFtbS4KKwkgKiAwOC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgcmVhZERiSW5mb3NfdGVzdCgpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJU3RyaW5nCisJCWluc2VydFN0bXQgPSAiIjsKKwkKKwkvLyBDb25uZWN0IHRvIERlcmJ5IGRhdGFiYXNlOgorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQkKKwkJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJCXRyeQorCQkJeworCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIFN0cmluZyAKKyAgICAgICAgICAgIAlzcWwgPSAiU0VMRUNUICogRlJPTSAiICsgZGJUYWJsZTsKKyAgICAgICAgICAgIFJlc3VsdFNldCAKKyAgICAgICAgICAgIAlyZXN1bHQgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOworIAorICAgICAgICAgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiB0YWJsZSAnJXMnOlxuIiwgIGZ1bmMsIGRiVGFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAocmVzdWx0Lm5leHQoKSkgeworICAgICAgICAgICAgCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIiclcycgOiAnJXMnIDogJyVzJyA6ICclcycgLlxuIiwgcmVzdWx0LmdldFN0cmluZygxKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMiksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDMpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZyg0KSk7CisgICAgICAgIAkJaW5zZXJ0U3RtdCA9IGluc2VydFN0bXQgKyAiPHA+IiArIHJlc3VsdC5nZXRTdHJpbmcoMSkgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoMikgKyAiIDogIiArCisgICAgICAgICAgICAgICAgCQkgICAgIHJlc3VsdC5nZXRTdHJpbmcoMykgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoNCkgKyAiPC9wPiI7CisgICAgICAgICAgICAJfQorCQkJfQorCSAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAgICAgCXsKKwkgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogaW5zZXJ0U3RtdD0nJXMnIGZhaWxlZCEuXG4iLCBmdW5jLCBzdG10KTsKKyAgICAgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIAl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGluZyAnJXMgZmFpbGVkIVxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCXJldHVybiAxOworCQl9CisJCisJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCXRyeSB7CisJCWNvbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCQorCX0gLy8gcmVhZERiSW5mb3NfdGVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIGltcG9ydEdsZW1tTGVtYXRhX3Rlc3QKKwkgKiBUZXN0IFZlcnNpb24uCisJICogMTIuMTIuMTkvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0KFN0cmluZyBmbikKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QiOworCUlucHV0U3RyZWFtIAorCQlpbjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbjIgPSBudWxsOworCVN0cmluZworCQlsaW5lOworCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJcjsKKwkKKwkvKgorCSAqIFJlYWQgTGVtbWF0YSArIEluZm8gZnJvbSBmaWxlOiAKKwkgKi8KKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQkKKwl0cnkgeworCQkvL2luID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oIG5ldyBGaWxlSW5wdXRTdHJlYW0oZm4pICk7CisJCWluMiA9IG5ldyBCdWZmZXJlZFJlYWRlciggbmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJd2hpbGUoIChsaW5lID0gaW4yLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCA9PSAzICkKKwkJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogSW1wb3J0OiBsZW09JyVzJyBEZWNvbXA9JyVzJyBXZj0nJXMnLlxuIiwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMV0sIGxlbW1hSW5mb1syXSk7CisJCQllbHNlCisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6IGltcG9ydEdsZW1tTGFtYXRhOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzIVxuIiwgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQl9CisJCX0gCisJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBvcGVuICclcychXG4iLCBmdW5jLCBmbik7CisJCXJldHVybiAxOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisKKwl0cnkgeworCQlpbjIuY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkKKwkvKiBDaGVjayBjb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCSAqLyAKKwlyID0gcmVhZERiSW5mb3NfdGVzdCgpOworCWlmKCByICE9IDAgKQorCQlyZXR1cm4gcjsKKwkJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdAorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8xOS8zMDQwZDg2NDEyM2UwMDFjMTM2M2JlYjkzMmFlNjNhMSBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMTkvMzA0MGQ4NjQxMjNlMDAxYzEzNjNiZWI5MzJhZTYzYTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk5ZDNmOQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMTkvMzA0MGQ4NjQxMjNlMDAxYzEzNjNiZWI5MzJhZTYzYTEKQEAgLTAsMCArMSw3NTggQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5zcWwuQ29ubmVjdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5EYXRhYmFzZU1ldGFEYXRhOworaW1wb3J0IGphdmEuc3FsLkRyaXZlck1hbmFnZXI7CitpbXBvcnQgamF2YS5zcWwuUHJlcGFyZWRTdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS5zcWwuUmVzdWx0U2V0OworaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5TdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitwdWJsaWMgY2xhc3MgR2xlbW1EQgorCit7CisJc3RhdGljIHB1YmxpYyBTdHJpbmcgZGJUYWJsZSAJPSAiR2xlbW1MZW1tYXRhIjsKKwlzdGF0aWMgU3RyaW5nIGRiTGVtbWEgCQkgCT0gImxlbW1hIjsKKwlzdGF0aWMgU3RyaW5nIGRiV2YJIAkJCT0gIndmIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDEgCQkJPSAicHJvcDEiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMiAJCQk9ICJwcm9wMiI7CisKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKG92ZXJ3cml0dGVuIGJ5IEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZuYW1lREIgPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgc2VydmVySG9zdCA9ICIvL2xvY2FsaG9zdDoxNTI3LyI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChmaW5hbCBhc3NpZ25tZW50cyk6CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyRW1iID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZERyaXZlciI7CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyQ2xpZW50ID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREcml2ZXIiOworCisJZmluYWwgc3RhdGljIGJvb2xlYW4KKwkJdXNlUHJlcGFyZWRTdG10ID0gdHJ1ZTsgLy8gMT11c2UgUHJlcGFyZWRTdGF0ZW1lbnQgYW5kIG5vdCBTdGF0ZW1lbnQuCisJCisJLy8gdmFsdWVzIHRvIGJlIGluc2VydGVkOiBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYy4KKwlzdGF0aWMgU3RyaW5nIGluc2VydFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKCclcycsICclcycsICclcycsICclcycsICclcycpIjsKKwlzdGF0aWMgU3RyaW5nIGluc2VydFByZXBhcmVkUXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoPywgPywgPywgPywgPykiOworCQorCS8vIENvbnN0YW50cyBvZiB0YWJsZSBHbGVtbUxlbW1hdGE6CisJc3RhdGljIGZpbmFsIGludCBtYXhMZW1tYVNpemUJPSA2NDsgCS8vIG1heC4gbm8uIG9mIGNoYXJzLCBhcyBkZWNsYXJlZCBpbiB0YWJsZSBHbGVtbUxlbW1hdGEuCisJc3RhdGljIGZpbmFsIGludCBtYXhXZlNpemUJCT0gNjQ7CS8vIG1heC4gbm8uIG9mIGNoYXJzLCBhcyBkZWNsYXJlZCBpbiB0YWJsZSBHbGVtbUxlbW1hdGEuCisJCisJLyogdmFyaWFibGVzICovCisJc3RhdGljIGludCBuRXhjZXB0U3RtdAkJCT0gMDsJLy8gY291bnQgbm8uIG9mIGV4Y2VwdGlvbnMgZm9yIHByZXBhcmVkU3RtdC4KKwlzdGF0aWMgaW50IG5FeGNlcHRJbnNlcnQJCT0gMDsJLy8gY291bnQgbm8uIG9mIGV4Y2VwdGlvbnMgZm9yIEluc2VydHMuCisJCisJLyoKKwkgKiBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkgKiAKKwkgKiBBcmd1bWVudHM6CisJICogcHJvcHMJOiBQcm9wZXJ0aWVzIGxvYWRlZCBieSB0aGUgR2xlbW1TZXJ2aWNlcy4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgZnVuY3Rpb24gbG9hZHMgb25seSB0aG9zZSBDb25zdGFudHMgbmVlZGVkIGluIHRoaXMgY2xhc3MuCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzCXByb3BzKQorCQorCXsKKwlmbmFtZURCCQkgCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAJIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCXNlcnZlckhvc3QJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgInNlcnZlckhvc3QiLAkiLy9sb2NhbGhvc3Q6MTUyNy8iKTsKKwlkZXJieURCVVJMIAkJPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJCQkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIHdoZW4gaW5kZXhpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSwgc2VsZWN0IHRoZSBzdWJtaXR0ZWQgZGJwYXRoLAorCS8vIChub3QgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZGJwYXRoOworCQorCS8vIG9wZW4gcmVhZGVyIG9uIEdsZW1tIExlbW1hdGE6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJCisJCW5FcnJvcnMgPSB3cml0ZURCTGVtbWF0YShpbik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIGZyb20gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwkvLyBjbG9zZSBSZWFkZXI6CisJdHJ5IHsKKwkJaW4uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQluRXJyb3JzID0gLTE7CisJCX0KKwkKKyAJaWYoIG5FcnJvcnMgPT0gMCApCisgCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydCBkb25lIHN1Y2Nlc3NmdWxseS5cbiIsIGZ1bmMpOworIAllbHNlCisgCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydDogJWQgRXJyb3JzIVxuIiwgZnVuYywgbkVycm9ycyk7CisgCQorCXJldHVybiBuRXJyb3JzOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhCisJCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAorCSAqICAgICAgICAgICAgICAgICAgICAgICB3cml0ZURCTGVtbWF0YSgpCisJICogICAgICAgICAgICAgICAgICAgICAgIAorCSAqIHN0b3JlcyBsaXN0IG9mIGxlbW1hdGEgKyBpbmZvcyBpbnRvIERlcmJ5IGRiLgorCSAqIEZpbGUgZm9ybWF0OiAiTGVtbWEgRGVjb21wb3NpdGlvbiBXZiIsCisJICogICAgICAgICAgICAgIGUuZy46ICJIw6R1c2VyICstIEhhdXMiLgorCSAqIFJldHVybnM6IDAgPSBPSyBvciAtMTogZ2VuZXJhbCBlcnJvciBvciA+IDA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogMDkuMDEuMjAvRkIKKwkgKiAwNC4xMS4yMS9GQiB0dXJuIGF1dG9jb21taXQgb2ZmIHRvIGFjY2VsZXJhdGUgaHVnZSBhbW91bnQgb2YgaW5zZXJ0aW9ucy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hdGEoQnVmZmVyZWRSZWFkZXIgaW4pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWF0YSI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlQcmVwYXJlZFN0YXRlbWVudAorCQlzdG10UHJlcCA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgCSA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CQorCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCW5JbnNlcnRlZCA9IDAsCS8vIG5vLiBvZiBsZW1tYS93ZiBwYWlycyBpbXBvcnRlZC4KKwkJcmV0ID0gMDsgLy8gT0suCisJYm9vbGVhbgorCQljb250YWluc1NwZWM7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlLAorCS8vIHNldCBBdXRvY29tbWl0ID0gZmFsc2UgdG8gYWNjZWxlcmF0ZSBpbnNlcnRpb25zOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQljb24uc2V0QXV0b0NvbW1pdChmYWxzZSk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkIChhdXRvQ29tbWl0PW9mZikuXG4iLCBmdW5jKTsKKworCQlEYXRhYmFzZU1ldGFEYXRhCisJCQlkYm1ldGFkYXRhID0gY29uLmdldE1ldGFEYXRhKCk7CisJCWRibWV0YWRhdGEuCisJCQorCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCXN0bXRQcmVwID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0UHJlcGFyZWRRdWVyeSk7CisJCWVsc2UKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisKKwkJd2hpbGUoIChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoICE9IDMgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6ICclcycgaGFzICVkIGNvbXBvbmVudHMhIEV4cGVjdGVkID0gMyEgQ2Fubm90IGJlIHN0b3JlZCFcbiIsIGZ1bmMsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJCW5FcnJvcnMrKzsKKwkJCQljb250aW51ZTsKKwkJCQl9CisJCQkKKwkJCS8vIEdldCBJbmZvLCBpZiB3b3JkZm9ybSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgJy0nLCBpbnRlcnB1bmN0aW9uIGV0Yy46CisJCQkvLyBsZW1tYUluZm9bMl0gPSB3b3JkZm9ybS4KKwkJCWNvbnRhaW5zU3BlYyA9IExlbW1hSW5mby5pc1dmU3BlY2lhbENhc2UobGVtbWFJbmZvWzJdKTsKKwkJCS8vIHN0b3JlIGludG8gREI6CisJCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZChzdG10UHJlcCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvcyhzdG10LCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJCisJCQlpZiggcmV0ICE9IDAgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBzdG9yZSBsZW1tYSAnJXMnIGludG8gREIhIChyZXQ9JWQpXG4iLCBmdW5jLCBsaW5lLCByZXQpOworCQkJCW5FcnJvcnMrKzsgCisJCQkJfQorCQkJZWxzZQorCQkJCW5JbnNlcnRlZCsrOworCQkJfSAvLyB3aGlsZQorCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBHbGVtbSBsZW1tYXRhK2luZm9zIGZyb20gZmlsZSEgRXhpdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7IAorCQl9CQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IAorCQl7IAorCQl0cnkgeworCQkJLy8gaW1wb3J0YW50OiBub3cgY29tbWl0LCBhcyBhdXRvQ29tbWl0IGlzIGRlYWN0aXZhdGVkLAorCQkJLy8gdGhpcyBhbHNvIHJlbW92ZXMgZGF0YWJhc2UgbG9ja3M6CisJCQljb24uY29tbWl0KCk7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbW1pdCBzdWNjZXNzZnVsbC5cbiIsIGZ1bmMpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbW1pdCBhdCB0aGUgZW5kIG9mIHRoZSB3ZnMgbGlzdCBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJCisJCXRyeSB7IC8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIAorCQkJCXN0bXQuY2xvc2UoKTsKKwkJCWlmKCBzdG10UHJlcCAhPSBudWxsICkgCisJCQkJc3RtdFByZXAuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiSW5mbyA6ICVzOiBuby4gb2YgbGVtbWF0YS93ZiBwYWlycyBpbnNlcnRlZCA9ICVkLlxuIiwgZnVuYywgbkluc2VydGVkKTsKKwkKKwlyZXR1cm4gbkVycm9yczsgLy8gMD1PSywgPjAgPSBuby4gb2YgZXJyb3JzLgorCX0gLy8gd3JpdGVEQkxlbW1hdGEKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQ6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gcnVsZXMgaW50byBEZXJieSBEQi4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgaXMgdGhlIHZlcnNpb24gd2l0aCBhIFByZXBhcmVkUXVlcnkuCisJICogUGFyYW1ldGVyczoKKwkgKiBzcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTcuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoCisJCQlQcmVwYXJlZFN0YXRlbWVudCBzdG10LCAKKwkJCVN0cmluZyBsZW1tYSwgCisJCQlTdHJpbmcgd2YsIAorCQkJU3RyaW5nIGRlY29tcG9zaXRpb24sIAorCQkJYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQiOworCWZpbmFsIGJvb2xlYW4KKwkJYkxvZyA9IGZhbHNlOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCWJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCS8vIGNoZWNrIHNpemUgb2Ygd2YgYW5kIGxlbW1hIGFnYWluc3QgZmllbGQgc2l6ZSBpbiB0YWJsZSBHbGVtbUxlbW1hdGE6CisJaWYoIGxlbW1hLmxlbmd0aCgpID49IEdsZW1tREIubWF4TGVtbWFTaXplICkgIAorCSAKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgCisJLy8gZm9yIGxvZ2luZyBvbmx5OgorCXNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwlpZiggYkxvZyApCisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorICAgIC8vIG5vdyBpbnNlcnQgbmV3IHZhbHVlcyBpbnRvIFByZXBhcmVkU3RhdGVtZW50OgorICAgIHRyeSB7CisgICAgCXN0bXQuc2V0U3RyaW5nKCAxLCBsZW1tYSk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKCAyLCB3Zik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbigzLCBwcm9wMSk7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig0LCBwcm9wMik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig1LCBzcGVjKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcmVwYXJlZCBzdG10ID0gJyVzJy5cbiIsICBmdW5jLCBzdG10LnRvU3RyaW5nKCkpOworICAgICAgICB9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlMSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKAkiRXJyb3I6ICVzOiB3aGlsZSBmaWxsaW5nIHByZXBhcmVkIHN0YXRlbWVudCB3aXRoIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0nJWInIHByb3AyPSclYicgc3BlYz0nJWInIVxuIiwgIAorCQkJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJaWYoICsrbkV4Y2VwdFN0bXQgPD0gMSApCisJCQllMS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKyAgICAKKyAgICB0cnkgeworCQkvLyBleGVjdXRlIHRoZSBmaWxsZWQgcHJlcGFyZWQgc3RhdGVtZW50OgorCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhIChuPSVkKVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYywgbik7CisgCQkJcmV0dXJuIDI7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQlpZiggKytuRXhjZXB0SW5zZXJ0IDw9IDEgKQorCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDM7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZAorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3M6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gaW50byBEZXJieSBEQi4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGNvbnRhaW5zU3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDEwLjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zKFN0YXRlbWVudCBzdG10LCBTdHJpbmcgbGVtbWEsIFN0cmluZyB3ZiwgU3RyaW5nIGRlY29tcG9zaXRpb24sIGJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zIjsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlCb29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworICAgIAorICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorCXRyeSB7CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoc3FsSW5zZXJ0KTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYURhdGEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBmcm9tIHRoZSBHbGVtbURCLgorCSAqIElucHV0OiBsZW1tYSArIEdMRU1NX09QVFNfeHh4IChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWFEYXRhKExlbW1hSW5mbyBsZW1tYUluZm8sIFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYURhdGEiOworCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJbGVtbWFJbmZvLmNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJbGVtbWFJbmZvLnN0bXQgPSBsZW1tYUluZm8uY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlpbnQgciA9IHJlYWREQkxlbW1hKGxlbW1hSW5mby5zdG10LCBsZW1tYUluZm8pOworCQkJCisJCWlmKCByICE9IDAgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZ2V0IGRhdGEgZm9yIGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIVxuIiwgCisJCQkJCWZ1bmMsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwkJCXJldHVybiAxOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggbGVtbWFJbmZvLmNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hRGF0YQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGJ5IGFjY2Vzc2luZyB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dCA6IGxlbW1hICsgcHJvcDErMiAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogT3V0cHV0OiAKKwkgKiAgLSBjb250YWlucyBhIFJlc3VsdFNldCBmb3IgZmV0Y2hpbmcgdGhlIHdvcmRmb3Jtcy4KKwkgKiAJICBUaGlzIFJlc3VsdFNldCB3aWxsIGhhdmUgYmUgYmUgY2xvc2VkIHdpdGggTGVtbWFJbmZvLmNsb3NlKCkuCisJICogCSAgVGhlIG5vLiBvZiBmb3VuZCB3b3JkZm9ybXMgaXMgbm90IGtub3duIHRpbGwgd2UKKwkgKiAJICBmZXRjaCBhbGwgb2YgdGhlbSBmcm9tIFJlc3VsdFNldCEgCisJICogCS0gZHVlIHRvIFNFTEVDVCBESVNUSU5DVCBvbmx5IHVuaXEgd2YgYXJlIHJldHVybmVkLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYShTdGF0ZW1lbnQgc3RtdCwgTGVtbWFJbmZvIGxlbW1hSW5mbykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hIjsKKwlTdHJpbmcKKwkJc3FsOworCQkKKwlzcWwgPSBTdHJpbmcuZm9ybWF0KCJTRUxFQ1QgRElTVElOQ1Qgd2YgZnJvbSAlcyBXSEVSRSBsZW1tYT0nJXMnICVzICVzICVzIiwgCisJCQlkYlRhYmxlLAorCQkJbGVtbWFJbmZvLmxlbW1hLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiQU5EIHByb3AxPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAxID8gIkFORCBwcm9wMT0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiQU5EIHByb3AyPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAxID8gIkFORCBwcm9wMj0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiQU5EIHNwZWM9J3RydWUnIiAgIDogCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICJBTkQgc3BlYz0nZmFsc2UnIiAgOiAiIik7CisJCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgZnVuYywgbGVtbWFJbmZvLnByb3AxLCBsZW1tYUluZm8ucHJvcDIsIGxlbW1hSW5mby5zcGVjKTsKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbCA9ICclcycuXG4iLCBmdW5jLCBzcWwpOworCisJdHJ5IHsKKwkJbGVtbWFJbmZvLnJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoZW4gZXhlY3V0aW5nIHNxbD0nJXMnIVxuIiwgZnVuYywgc3FsKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gYWxsIHNxbCBzdHVmZiBhcmUgY2xvc2VkIG91dHNpZGUgdGhpcyBmdW5jdGlvbiwgc28gZG9uJ3QgY2xvc2UgdGhlbSBoZXJlIQorCQl9CQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3MKKwkgKiBSZXR1cm5zIEdlbmVyYWwgSW5mb3MgYWJvdXQgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIHJlYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJJbmZvcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJZGJJbmZvID0gcmVhZERiTGVtbWF0YUluZm9zKHN0bXQpOworCQkJCisJCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCByZWFkIEdlbmVyYWwgSW5mb3MgZnJvbSBHbGVtbSBEYXRhYmFzZSFcbiIsIGZ1bmMpOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSBjb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSBzdG10LmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIG1heSBiZSBudWxsLgorCQkKKwl9IC8vIHJlYWREYkluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiTGVtbWF0YUluZm9zOgorCSAqIHJlYWRzIGFuZCByZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGNvbnRlbnQgCisJICogb2YgdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIFJldHVybnMgMD1PSyBvciBlcnJvciBjb2RlID4gMC4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkxlbW1hdGFJbmZvcyhTdGF0ZW1lbnQgc3RtdCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAicmVhZERiTGVtbWFJbmZvcyI7CisJU3RyaW5nW10KKwkJc3FsID0gewkiU0VMRUNUIENPVU5UKGRpc3RpbmN0IGxlbW1hKSBmcm9tICIgKyBkYlRhYmxlICwJLy8gY291bnRzIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSwJCQkJCS8vIGNvdW50cyB0b3RhbCBuby4gb2Ygc3RvcmVkIHdvcmRmb3Jtcy4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPXRydWUiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPXRydWUifTsKKwlSZXN1bHRTZXQKKwkJcmVzID0gbnVsbDsgCisJaW50W10KKwkJbkNvdW50cyA9IG5ldyBpbnRbc3FsLmxlbmd0aF07CisJaW50CQkKKwkJaSA9IDAsIAorCQluRGlzdExlbW1hdGEgPSAtMSwJLy8gbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEgaW4gREIuCisJCW5XZnMJCSA9IC0xOwkvLyBuby4gb2Ygd29yZGZvcm1zIGluIERCLgorCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBleHRyYWN0aW5nIGFncmVnYXRlZCBpbmZvcyBhYm91dCBEYXRhYmFzZSBjb250ZW50cy4uLlxuIiwgZnVuYyk7CisJCisJZGJJbmZvID0gbmV3IEdsZW1tREJJbmZvKCk7CisKKwkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwl0cnkgeworCQlmb3IoaT0wOyBpPHNxbC5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCXJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbFtpXSk7CisJCQlpZiggcmVzLm5leHQoKSApCisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IHJlcy5nZXRJbnQoMSk7IC8vIGNvdW50IGlzIGluIGNvbHVtbiAxLgorCQkJZWxzZQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBleHRyYWN0IGNvdW50IGZyb20gJyVzJyFcbiIsIGZ1bmMsIHNxbFtpXSk7CisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IC0xOworCQkJCX0KKwkJCX0KKyAgICAgICAKKyAgICAgICAgfQorICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgIAl7CisgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogc3FsPSclcycgZmFpbGVkIVxuIiwgZnVuYywgc3FsW2ldKTsKKyAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAJfQorCWZpbmFsbHkgeworCQl0cnkgeworCQkJcmVzLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBPSworCX0gLy8gcmVhZERiTGVtbWF0YUluZm9zCisJCisJLyoqKioqKioqKioqKioqKioqKioqIFRlc3QgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zX3Rlc3QKKwkgKiBUaGlzIGlzIGRlYnVnIGNvZGUgd3JpdHRlbiB0byB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIERlcmJ5CisJICogRGF0YWJhc2UgZnJvbSBhbiBleHRlcm5hbCBKYXZhIFByb2dyYW1tLgorCSAqIDA4LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCByZWFkRGJJbmZvc190ZXN0KCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlTdHJpbmcKKwkJaW5zZXJ0U3RtdCA9ICIiOworCQorCS8vIENvbm5lY3QgdG8gRGVyYnkgZGF0YWJhc2U6CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCQorCQkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwkJdHJ5CisJCQl7CisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIAorICAgICAgICAgICAgCXNxbCA9ICJTRUxFQ1QgKiBGUk9NICIgKyBkYlRhYmxlOworICAgICAgICAgICAgUmVzdWx0U2V0IAorICAgICAgICAgICAgCXJlc3VsdCA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CisgCisgICAgICAgICAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHRhYmxlICclcyc6XG4iLCAgZnVuYywgZGJUYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQubmV4dCgpKSB7CisgICAgICAgICAgICAJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiJyVzJyA6ICclcycgOiAnJXMnIDogJyVzJyAuXG4iLCByZXN1bHQuZ2V0U3RyaW5nKDEpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygyKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMyksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDQpKTsKKyAgICAgICAgCQlpbnNlcnRTdG10ID0gaW5zZXJ0U3RtdCArICI8cD4iICsgcmVzdWx0LmdldFN0cmluZygxKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZygyKSArICIgOiAiICsKKyAgICAgICAgICAgICAgICAJCSAgICAgcmVzdWx0LmdldFN0cmluZygzKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZyg0KSArICI8L3A+IjsKKyAgICAgICAgICAgIAl9CisJCQl9CisJICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgICAgICAJeworCSAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBpbnNlcnRTdG10PSclcycgZmFpbGVkIS5cbiIsIGZ1bmMsIHN0bXQpOworICAgICAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICAgICAgY29uLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nICclcyBmYWlsZWQhXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJdHJ5IHsKKwkJY29uLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkJCisJfSAvLyByZWFkRGJJbmZvc190ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogaW1wb3J0R2xlbW1MZW1hdGFfdGVzdAorCSAqIFRlc3QgVmVyc2lvbi4KKwkgKiAxMi4xMi4xOS9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QoU3RyaW5nIGZuKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdCI7CisJSW5wdXRTdHJlYW0gCisJCWluOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluMiA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQlyOworCQorCS8qCisJICogUmVhZCBMZW1tYXRhICsgSW5mbyBmcm9tIGZpbGU6IAorCSAqLworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCQorCXRyeSB7CisJCS8vaW4gPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSggbmV3IEZpbGVJbnB1dFN0cmVhbShmbikgKTsKKwkJaW4yID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlcihmbikpOworCQl3aGlsZSggKGxpbmUgPSBpbjIucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoID09IDMgKQorCQkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBJbXBvcnQ6IGxlbT0nJXMnIERlY29tcD0nJXMnIFdmPSclcycuXG4iLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1sxXSwgbGVtbWFJbmZvWzJdKTsKKwkJCWVsc2UKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogaW1wb3J0R2xlbW1MYW1hdGE6ICclcycgaGFzICVkIGNvbXBvbmVudHMhXG4iLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IG9wZW4gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJcmV0dXJuIDE7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKworCXRyeSB7CisJCWluMi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCS8qIENoZWNrIGNvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJICovIAorCXIgPSByZWFkRGJJbmZvc190ZXN0KCk7CisJaWYoIHIgIT0gMCApCisJCXJldHVybiByOworCQkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzFiL2UwM2VmYmVkZDEzYzAwMWMxNWU0YzdhNzc4OTE3NzNmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8xYi9lMDNlZmJlZGQxM2MwMDFjMTVlNGM3YTc3ODkxNzczZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzhmYzVlCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8xYi9lMDNlZmJlZGQxM2MwMDFjMTVlNGM3YTc3ODkxNzczZgpAQCAtMCwwICsxLDMyIEBACisjIEdsZW1tU2VydmljZXMgcHJvcGVydGllczoKKyMgZXhwZWN0ZWQgaW4gL1dFQi1JTkYvLgorCisjIyBHZW5lcmFsIHByb3BlcnRpZXM6CitHU19Xb3JraW5nUGF0aCA9IC9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL3dvcmstbGl2ZQorCisjIEdsZW1tREIgcHJvcGVydGllczoKKyMgRGVyYnlBcmNoaXZEQiA9IGRhdGFiYXNlIGZvciBhIHdob2xlIEMyLUFyY2hpdmU6CitmbmFtZURCIAkJPSAvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlBcmNoaXZEQgorI2ZuYW1lREIgCQk9IC9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQjIKK3NlcnZlckhvc3QJPSAvL2xvY2FsaG9zdDoxNTI3LworCisjIyBHbGVtbTogcHJvcGVydGllcyBmb3IgbGVtbWF0aXppbmc6CisKKyMgZm5hbWVTY3JpcHQgPSBHU19Xb3JraW5nUGF0aCArIGRvR2xlbW0KK2ZuYW1lU2NyaXB0ID0gZG9HbGVtbQorIyBmbmFtZVdmcyA9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKK2ZuYW1lV2ZzID0gZ2xfd2ZzX2luLnR4dAorIyBmbmFtZVNjcmlwdAk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKK2ZuYW1lU2NyaXB0CT0gZG9HbGVtbQorIyBmbmFtZUxlbWF0YQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKyMgbGVtMyBleHBlY3RlZCB0byBiZSBJU084ODU5LTEgZW5jb2RlZC4KK2ZuYW1lTGVtYXRhCT0gdG1wL2xlbTMKKworIyMgTG9naW5nOgorCisjIGZuYW1lT3V0ID0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKyNmbmFtZU91dCA9IEdsZW1tU2VydmljZXMtdC5sb2cKK2ZuYW1lT3V0ID0gR2xlbW1TZXJ2aWNlcy5sb2cKKyMgZm5hbWVFcnIgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisjZm5hbWVFcnIgPSBHbGVtbVNlcnZpY2VzLXQuZXJyCitmbmFtZUVyciA9IEdsZW1tU2VydmljZXMuZXJyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzFlLzMwNTQyMDQzMGEzZTAwMWMxMzYzYmViOTMyYWU2M2ExIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8xZS8zMDU0MjA0MzBhM2UwMDFjMTM2M2JlYjkzMmFlNjNhMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDQyYzdmCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8xZS8zMDU0MjA0MzBhM2UwMDFjMTM2M2JlYjkzMmFlNjNhMQpAQCAtMCwwICsxLDc0NSBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnNxbC5Db25uZWN0aW9uOworaW1wb3J0IGphdmEuc3FsLkRyaXZlck1hbmFnZXI7CitpbXBvcnQgamF2YS5zcWwuUHJlcGFyZWRTdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS5zcWwuUmVzdWx0U2V0OworaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5TdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitwdWJsaWMgY2xhc3MgR2xlbW1EQgorCit7CisJc3RhdGljIHB1YmxpYyBTdHJpbmcgZGJUYWJsZSAJPSAiR2xlbW1MZW1tYXRhIjsKKwlzdGF0aWMgU3RyaW5nIGRiTGVtbWEgCQkgCT0gImxlbW1hIjsKKwlzdGF0aWMgU3RyaW5nIGRiV2YJIAkJCT0gIndmIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDEgCQkJPSAicHJvcDEiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMiAJCQk9ICJwcm9wMiI7CisKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKG92ZXJ3cml0dGVuIGJ5IEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZuYW1lREIgPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgc2VydmVySG9zdCA9ICIvL2xvY2FsaG9zdDoxNTI3LyI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChmaW5hbCBhc3NpZ25tZW50cyk6CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyRW1iID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZERyaXZlciI7CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyQ2xpZW50ID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREcml2ZXIiOworCisJZmluYWwgc3RhdGljIGJvb2xlYW4KKwkJdXNlUHJlcGFyZWRTdG10ID0gdHJ1ZTsgLy8gMT11c2UgUHJlcGFyZWRTdGF0ZW1lbnQgYW5kIG5vdCBTdGF0ZW1lbnQuCisJCisJLy8gdmFsdWVzIHRvIGJlIGluc2VydGVkOiBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYy4KKwlzdGF0aWMgU3RyaW5nIGluc2VydFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKCclcycsICclcycsICclcycsICclcycsICclcycpIjsKKwlzdGF0aWMgU3RyaW5nIGluc2VydFByZXBhcmVkUXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoPywgPywgPywgPywgPykiOworCQorCS8qIHZhcmlhYmxlcyAqLworCXN0YXRpYyBpbnQgbkV4Y2VwdFN0bXQJCT0gMDsJLy8gY291bnQgbm8uIG9mIGV4Y2VwdGlvbnMgZm9yIHByZXBhcmVkU3RtdC4KKwlzdGF0aWMgaW50IG5FeGNlcHRJbnNlcnQJPSAwOwkvLyBjb3VudCBuby4gb2YgZXhjZXB0aW9ucyBmb3IgSW5zZXJ0cy4KKwkKKwkvKgorCSAqIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCSAqIAorCSAqIEFyZ3VtZW50czoKKwkgKiBwcm9wcwk6IFByb3BlcnRpZXMgbG9hZGVkIGJ5IHRoZSBHbGVtbVNlcnZpY2VzLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBmdW5jdGlvbiBsb2FkcyBvbmx5IHRob3NlIENvbnN0YW50cyBuZWVkZWQgaW4gdGhpcyBjbGFzcy4KKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMJcHJvcHMpCisJCisJeworCWZuYW1lREIJCSAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsIAkiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJc2VydmVySG9zdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAic2VydmVySG9zdCIsCSIvL2xvY2FsaG9zdDoxNTI3LyIpOworCWRlcmJ5REJVUkwgCQk9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkJCQorCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAkJCQkJaW1wb3J0R2xlbW1MZW1hdGEKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGZuCQkgOiBhYnNvbHV0ZSBmaWxlIG5hbWUgb2YgR0xFTU0gb3V0cHV0IFtJU084ODU5LTFdIGV4cGVjdGVkLCBub3QgVVRGLTghCisJICogcHJvcHMJIDogUHJvcGVydGllcyB2b20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIHRvIHNldCBjb25zdGFudHMgbmVlZGVkCisJICogCQkJICAgaW4gdGhpcyBjbGFzcy4KKwkgKiBkYnBhdGgJIDogbG9jYXRpb24gKyBuYW1lIG9mIGRhdGFiYXNlIHdoZXJlIHRvIHN0b3JlIGxlbW1hdGErd2ZzLgorCSAqIFJldHVybnMJIDogMD1PSywgLTE6IGdlbmVyYWwgZXJyb3I7ID4gMCA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiBkeW5hbWljYWxseSBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAwNC4xMS4yMS9GQiBkYnBhdGguCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGEoU3RyaW5nIGZuLCBQcm9wZXJ0aWVzIHByb3BzLCBmaW5hbCBTdHJpbmcgZGJwYXRoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGEiOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluID0gbnVsbDsKKwlpbnQKKwkJbkVycm9yczsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gd2hlbiBpbmRleGluZyBkYXRhIGludG8gdGhlIGRhdGFiYXNlLCBzZWxlY3QgdGhlIHN1Ym1pdHRlZCBkYnBhdGgsCisJLy8gKG5vdCB0aGUgb25lIHN0b3JlZCBpbiB0aGUgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBkYnBhdGg7CisJCisJLy8gb3BlbiByZWFkZXIgb24gR2xlbW0gTGVtbWF0YToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQlpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmbikpOworCQkKKwkJbkVycm9ycyA9IHdyaXRlREJMZW1tYXRhKGluKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgZnJvbSAnJXMnIVxuIiwgZnVuYywgZm4pOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKworCS8vIGNsb3NlIFJlYWRlcjoKKwl0cnkgeworCQlpbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCW5FcnJvcnMgPSAtMTsKKwkJfQorCQorIAlpZiggbkVycm9ycyA9PSAwICkKKyAJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0IGRvbmUgc3VjY2Vzc2Z1bGx5LlxuIiwgZnVuYyk7CisgCWVsc2UKKyAJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0OiAlZCBFcnJvcnMhXG4iLCBmdW5jLCBuRXJyb3JzKTsKKyAJCisJcmV0dXJuIG5FcnJvcnM7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGEKKwkKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCisJICogICAgICAgICAgICAgICAgICAgICAgIHdyaXRlREJMZW1tYXRhKCkKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgCisJICogc3RvcmVzIGxpc3Qgb2YgbGVtbWF0YSArIGluZm9zIGludG8gRGVyYnkgZGIuCisJICogRmlsZSBmb3JtYXQ6ICJMZW1tYSBEZWNvbXBvc2l0aW9uIFdmIiwKKwkgKiAgICAgICAgICAgICAgZS5nLjogIkjDpHVzZXIgKy0gSGF1cyIuCisJICogUmV0dXJuczogMCA9IE9LIG9yIC0xOiBnZW5lcmFsIGVycm9yIG9yID4gMDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAwOS4wMS4yMC9GQgorCSAqIDA0LjExLjIxL0ZCIHR1cm4gYXV0b2NvbW1pdCBvZmYgdG8gYWNjZWxlcmF0ZSBodWdlIGFtb3VudCBvZiBpbnNlcnRpb25zLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWF0YShCdWZmZXJlZFJlYWRlciBpbikKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYXRhIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVByZXBhcmVkU3RhdGVtZW50CisJCXN0bXRQcmVwID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCAJID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsJCisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQluRXJyb3JzID0gMCwKKwkJbkluc2VydGVkID0gMCwJLy8gbm8uIG9mIGxlbW1hL3dmIHBhaXJzIGltcG9ydGVkLgorCQlyZXQgPSAwOyAvLyBPSy4KKwlib29sZWFuCisJCWNvbnRhaW5zU3BlYzsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2UsCisJLy8gc2V0IEF1dG9jb21taXQgPSBmYWxzZSB0byBhY2NlbGVyYXRlIGluc2VydGlvbnM6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCWNvbi5zZXRBdXRvQ29tbWl0KGZhbHNlKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQgKGF1dG9Db21taXQ9b2ZmKS5cbiIsIGZ1bmMpOworCisJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJc3RtdFByZXAgPSBjb24ucHJlcGFyZVN0YXRlbWVudChpbnNlcnRQcmVwYXJlZFF1ZXJ5KTsKKwkJZWxzZQorCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKworCQl3aGlsZSggKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggIT0gMyApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogJyVzJyBoYXMgJWQgY29tcG9uZW50cyEgRXhwZWN0ZWQgPSAzISBDYW5ub3QgYmUgc3RvcmVkIVxuIiwgZnVuYywgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQkJbkVycm9ycysrOworCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQorCQkJLy8gR2V0IEluZm8sIGlmIHdvcmRmb3JtIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSAnLScsIGludGVycHVuY3Rpb24gZXRjLjoKKwkJCS8vIGxlbW1hSW5mb1syXSA9IHdvcmRmb3JtLgorCQkJY29udGFpbnNTcGVjID0gTGVtbWFJbmZvLmlzV2ZTcGVjaWFsQ2FzZShsZW1tYUluZm9bMl0pOworCQkJLy8gc3RvcmUgaW50byBEQjoKKwkJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKHN0bXRQcmVwLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJZWxzZQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zKHN0bXQsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQkKKwkJCWlmKCByZXQgIT0gMCApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHN0b3JlIGxlbW1hICclcycgaW50byBEQiEgKHJldD0lZClcbiIsIGZ1bmMsIGxpbmUsIHJldCk7CisJCQkJbkVycm9ycysrOyAKKwkJCQl9CisJCQllbHNlCisJCQkJbkluc2VydGVkKys7CisJCQl9IC8vIHdoaWxlCisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIEdsZW1tIGxlbW1hdGEraW5mb3MgZnJvbSBmaWxlISBFeGl0IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsgCisJCX0JCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCWZpbmFsbHkgCisJCXsgCisJCXRyeSB7CisJCQkvLyBpbXBvcnRhbnQ6IG5vdyBjb21taXQsIGFzIGF1dG9Db21taXQgaXMgZGVhY3RpdmF0ZWQsCisJCQkvLyB0aGlzIGFsc28gcmVtb3ZlcyBkYXRhYmFzZSBsb2NrczoKKwkJCWNvbi5jb21taXQoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29tbWl0IGF0IHRoZSBlbmQgb2YgdGhlIHdmcyBsaXN0IGZhaWxlZCFcbiIsIGZ1bmMpOworCQkJfQkJCisJCQorCQl0cnkgeyAvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSAKKwkJCQlzdG10LmNsb3NlKCk7CisJCQlpZiggc3RtdFByZXAgIT0gbnVsbCApIAorCQkJCXN0bXRQcmVwLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkluZm8gOiAlczogbm8uIG9mIGxlbW1hdGEvd2YgcGFpcnMgaW5zZXJ0ZWQgPSAlZC5cbiIsIGZ1bmMsIG5JbnNlcnRlZCk7CisJCisJcmV0dXJuIG5FcnJvcnM7IC8vIDA9T0ssID4wID0gbm8uIG9mIGVycm9ycy4KKwl9IC8vIHdyaXRlREJMZW1tYXRhCisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIHJ1bGVzIGludG8gRGVyYnkgREIuCisJICogTm90ZXM6CisJICogLSB0aGlzIGlzIHRoZSB2ZXJzaW9uIHdpdGggYSBQcmVwYXJlZFF1ZXJ5LgorCSAqIFBhcmFtZXRlcnM6CisJICogc3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDE3LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKAorCQkJUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCwgCisJCQlTdHJpbmcgbGVtbWEsIAorCQkJU3RyaW5nIHdmLCAKKwkJCVN0cmluZyBkZWNvbXBvc2l0aW9uLCAKKwkJCWJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkIjsKKwlmaW5hbCBib29sZWFuCisJCWJMb2cgPSBmYWxzZTsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlib29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgCisJLy8gZm9yIGxvZ2luZyBvbmx5OgorCXNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwlpZiggYkxvZyApCisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorICAgIC8vIG5vdyBpbnNlcnQgbmV3IHZhbHVlcyBpbnRvIFByZXBhcmVkU3RhdGVtZW50OgorICAgIHRyeSB7CisgICAgCXN0bXQuc2V0U3RyaW5nKCAxLCBsZW1tYSk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKCAyLCB3Zik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbigzLCBwcm9wMSk7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig0LCBwcm9wMik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig1LCBzcGVjKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcmVwYXJlZCBzdG10ID0gJyVzJy5cbiIsICBmdW5jLCBzdG10LnRvU3RyaW5nKCkpOworICAgICAgICB9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlMSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKAkiRXJyb3I6ICVzOiB3aGlsZSBmaWxsaW5nIHByZXBhcmVkIHN0YXRlbWVudCB3aXRoIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0nJWInIHByb3AyPSclYicgc3BlYz0nJWInIVxuIiwgIAorCQkJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJaWYoICsrbkV4Y2VwdFN0bXQgPD0gMSApCisJCQllMS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKyAgICAKKyAgICB0cnkgeworCQkvLyBleGVjdXRlIHRoZSBmaWxsZWQgcHJlcGFyZWQgc3RhdGVtZW50OgorCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhIChuPSVkKVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYywgbik7CisgCQkJcmV0dXJuIDI7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQlpZiggKytuRXhjZXB0SW5zZXJ0IDw9IDEgKQorCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDM7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZAorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3M6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gaW50byBEZXJieSBEQi4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGNvbnRhaW5zU3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDEwLjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zKFN0YXRlbWVudCBzdG10LCBTdHJpbmcgbGVtbWEsIFN0cmluZyB3ZiwgU3RyaW5nIGRlY29tcG9zaXRpb24sIGJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zIjsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlCb29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworICAgIAorICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorCXRyeSB7CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoc3FsSW5zZXJ0KTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYURhdGEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBmcm9tIHRoZSBHbGVtbURCLgorCSAqIElucHV0OiBsZW1tYSArIEdMRU1NX09QVFNfeHh4IChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWFEYXRhKExlbW1hSW5mbyBsZW1tYUluZm8sIFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYURhdGEiOworCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJbGVtbWFJbmZvLmNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJbGVtbWFJbmZvLnN0bXQgPSBsZW1tYUluZm8uY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlpbnQgciA9IHJlYWREQkxlbW1hKGxlbW1hSW5mby5zdG10LCBsZW1tYUluZm8pOworCQkJCisJCWlmKCByICE9IDAgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZ2V0IGRhdGEgZm9yIGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIVxuIiwgCisJCQkJCWZ1bmMsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwkJCXJldHVybiAxOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggbGVtbWFJbmZvLmNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hRGF0YQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGJ5IGFjY2Vzc2luZyB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dCA6IGxlbW1hICsgcHJvcDErMiAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogT3V0cHV0OiAKKwkgKiAgLSBjb250YWlucyBhIFJlc3VsdFNldCBmb3IgZmV0Y2hpbmcgdGhlIHdvcmRmb3Jtcy4KKwkgKiAJICBUaGlzIFJlc3VsdFNldCB3aWxsIGhhdmUgYmUgYmUgY2xvc2VkIHdpdGggTGVtbWFJbmZvLmNsb3NlKCkuCisJICogCSAgVGhlIG5vLiBvZiBmb3VuZCB3b3JkZm9ybXMgaXMgbm90IGtub3duIHRpbGwgd2UKKwkgKiAJICBmZXRjaCBhbGwgb2YgdGhlbSBmcm9tIFJlc3VsdFNldCEgCisJICogCS0gZHVlIHRvIFNFTEVDVCBESVNUSU5DVCBvbmx5IHVuaXEgd2YgYXJlIHJldHVybmVkLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYShTdGF0ZW1lbnQgc3RtdCwgTGVtbWFJbmZvIGxlbW1hSW5mbykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hIjsKKwlTdHJpbmcKKwkJc3FsOworCQkKKwlzcWwgPSBTdHJpbmcuZm9ybWF0KCJTRUxFQ1QgRElTVElOQ1Qgd2YgZnJvbSAlcyBXSEVSRSBsZW1tYT0nJXMnICVzICVzICVzIiwgCisJCQlkYlRhYmxlLAorCQkJbGVtbWFJbmZvLmxlbW1hLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiQU5EIHByb3AxPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAxID8gIkFORCBwcm9wMT0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiQU5EIHByb3AyPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAxID8gIkFORCBwcm9wMj0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiQU5EIHNwZWM9J3RydWUnIiAgIDogCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICJBTkQgc3BlYz0nZmFsc2UnIiAgOiAiIik7CisJCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgZnVuYywgbGVtbWFJbmZvLnByb3AxLCBsZW1tYUluZm8ucHJvcDIsIGxlbW1hSW5mby5zcGVjKTsKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbCA9ICclcycuXG4iLCBmdW5jLCBzcWwpOworCisJdHJ5IHsKKwkJbGVtbWFJbmZvLnJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoZW4gZXhlY3V0aW5nIHNxbD0nJXMnIVxuIiwgZnVuYywgc3FsKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gYWxsIHNxbCBzdHVmZiBhcmUgY2xvc2VkIG91dHNpZGUgdGhpcyBmdW5jdGlvbiwgc28gZG9uJ3QgY2xvc2UgdGhlbSBoZXJlIQorCQl9CQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3MKKwkgKiBSZXR1cm5zIEdlbmVyYWwgSW5mb3MgYWJvdXQgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIHJlYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJJbmZvcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJZGJJbmZvID0gcmVhZERiTGVtbWF0YUluZm9zKHN0bXQpOworCQkJCisJCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCByZWFkIEdlbmVyYWwgSW5mb3MgZnJvbSBHbGVtbSBEYXRhYmFzZSFcbiIsIGZ1bmMpOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSBjb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSBzdG10LmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIG1heSBiZSBudWxsLgorCQkKKwl9IC8vIHJlYWREYkluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiTGVtbWF0YUluZm9zOgorCSAqIHJlYWRzIGFuZCByZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGNvbnRlbnQgCisJICogb2YgdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIFJldHVybnMgMD1PSyBvciBlcnJvciBjb2RlID4gMC4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkxlbW1hdGFJbmZvcyhTdGF0ZW1lbnQgc3RtdCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAicmVhZERiTGVtbWFJbmZvcyI7CisJU3RyaW5nW10KKwkJc3FsID0gewkiU0VMRUNUIENPVU5UKGRpc3RpbmN0IGxlbW1hKSBmcm9tICIgKyBkYlRhYmxlICwJLy8gY291bnRzIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSwJCQkJCS8vIGNvdW50cyB0b3RhbCBuby4gb2Ygc3RvcmVkIHdvcmRmb3Jtcy4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPXRydWUiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPXRydWUifTsKKwlSZXN1bHRTZXQKKwkJcmVzID0gbnVsbDsgCisJaW50W10KKwkJbkNvdW50cyA9IG5ldyBpbnRbc3FsLmxlbmd0aF07CisJaW50CQkKKwkJaSA9IDAsIAorCQluRGlzdExlbW1hdGEgPSAtMSwJLy8gbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEgaW4gREIuCisJCW5XZnMJCSA9IC0xOwkvLyBuby4gb2Ygd29yZGZvcm1zIGluIERCLgorCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBleHRyYWN0aW5nIGFncmVnYXRlZCBpbmZvcyBhYm91dCBEYXRhYmFzZSBjb250ZW50cy4uLlxuIiwgZnVuYyk7CisJCisJZGJJbmZvID0gbmV3IEdsZW1tREJJbmZvKCk7CisKKwkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwl0cnkgeworCQlmb3IoaT0wOyBpPHNxbC5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCXJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbFtpXSk7CisJCQlpZiggcmVzLm5leHQoKSApCisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IHJlcy5nZXRJbnQoMSk7IC8vIGNvdW50IGlzIGluIGNvbHVtbiAxLgorCQkJZWxzZQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBleHRyYWN0IGNvdW50IGZyb20gJyVzJyFcbiIsIGZ1bmMsIHNxbFtpXSk7CisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IC0xOworCQkJCX0KKwkJCX0KKyAgICAgICAKKyAgICAgICAgfQorICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgIAl7CisgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogc3FsPSclcycgZmFpbGVkIVxuIiwgZnVuYywgc3FsW2ldKTsKKyAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAJfQorCWZpbmFsbHkgeworCQl0cnkgeworCQkJcmVzLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBPSworCX0gLy8gcmVhZERiTGVtbWF0YUluZm9zCisJCisJLyoqKioqKioqKioqKioqKioqKioqIFRlc3QgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zX3Rlc3QKKwkgKiBUaGlzIGlzIGRlYnVnIGNvZGUgd3JpdHRlbiB0byB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIERlcmJ5CisJICogRGF0YWJhc2UgZnJvbSBhbiBleHRlcm5hbCBKYXZhIFByb2dyYW1tLgorCSAqIDA4LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCByZWFkRGJJbmZvc190ZXN0KCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlTdHJpbmcKKwkJaW5zZXJ0U3RtdCA9ICIiOworCQorCS8vIENvbm5lY3QgdG8gRGVyYnkgZGF0YWJhc2U6CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCQorCQkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwkJdHJ5CisJCQl7CisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIAorICAgICAgICAgICAgCXNxbCA9ICJTRUxFQ1QgKiBGUk9NICIgKyBkYlRhYmxlOworICAgICAgICAgICAgUmVzdWx0U2V0IAorICAgICAgICAgICAgCXJlc3VsdCA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CisgCisgICAgICAgICAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHRhYmxlICclcyc6XG4iLCAgZnVuYywgZGJUYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQubmV4dCgpKSB7CisgICAgICAgICAgICAJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiJyVzJyA6ICclcycgOiAnJXMnIDogJyVzJyAuXG4iLCByZXN1bHQuZ2V0U3RyaW5nKDEpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygyKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMyksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDQpKTsKKyAgICAgICAgCQlpbnNlcnRTdG10ID0gaW5zZXJ0U3RtdCArICI8cD4iICsgcmVzdWx0LmdldFN0cmluZygxKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZygyKSArICIgOiAiICsKKyAgICAgICAgICAgICAgICAJCSAgICAgcmVzdWx0LmdldFN0cmluZygzKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZyg0KSArICI8L3A+IjsKKyAgICAgICAgICAgIAl9CisJCQl9CisJICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgICAgICAJeworCSAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBpbnNlcnRTdG10PSclcycgZmFpbGVkIS5cbiIsIGZ1bmMsIHN0bXQpOworICAgICAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICAgICAgY29uLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nICclcyBmYWlsZWQhXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJdHJ5IHsKKwkJY29uLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkJCisJfSAvLyByZWFkRGJJbmZvc190ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogaW1wb3J0R2xlbW1MZW1hdGFfdGVzdAorCSAqIFRlc3QgVmVyc2lvbi4KKwkgKiAxMi4xMi4xOS9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QoU3RyaW5nIGZuKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdCI7CisJSW5wdXRTdHJlYW0gCisJCWluOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluMiA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQlyOworCQorCS8qCisJICogUmVhZCBMZW1tYXRhICsgSW5mbyBmcm9tIGZpbGU6IAorCSAqLworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCQorCXRyeSB7CisJCS8vaW4gPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSggbmV3IEZpbGVJbnB1dFN0cmVhbShmbikgKTsKKwkJaW4yID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlcihmbikpOworCQl3aGlsZSggKGxpbmUgPSBpbjIucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoID09IDMgKQorCQkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBJbXBvcnQ6IGxlbT0nJXMnIERlY29tcD0nJXMnIFdmPSclcycuXG4iLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1sxXSwgbGVtbWFJbmZvWzJdKTsKKwkJCWVsc2UKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogaW1wb3J0R2xlbW1MYW1hdGE6ICclcycgaGFzICVkIGNvbXBvbmVudHMhXG4iLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IG9wZW4gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJcmV0dXJuIDE7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKworCXRyeSB7CisJCWluMi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCS8qIENoZWNrIGNvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJICovIAorCXIgPSByZWFkRGJJbmZvc190ZXN0KCk7CisJaWYoIHIgIT0gMCApCisJCXJldHVybiByOworCQkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzFlLzQwMzlmNzFmYWMyYTAwMWMxYzQxY2U1NTllYTVlMTZiIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8xZS80MDM5ZjcxZmFjMmEwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWFlYmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8xZS80MDM5ZjcxZmFjMmEwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpAQCAtMCwwICsxLDY3NCBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA2LjEwLjIxIjsgLy8iMTcuMDYuMjAiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMSI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwkJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwkJU3RyaW5nCisJCQlzdGF0dXM7CisJCVV0aWxzCisJCQl1ID0gbmV3IFV0aWxzKCk7CisJCVByb3BlcnRpZXMKKwkJCXByb3BzOworCQkKKwkJLy8gdGVzdAorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCXByb3BzLnNldFByb3BlcnR5KCJwIiwgInRlc3QiKTsKKwkJRmlsZU91dHB1dFN0cmVhbSBvdXQ7CisJCXRyeSB7CisJCQlvdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbSgiZ2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIik7CisJCQlwcm9wcy5zdG9yZShvdXQsICAidGVzdCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMiKTsKKwkJCX0gCisJCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9OworCQkKKwkJLy8gZW5kIG90ZXN0CisJCQorCQkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwkJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisJCVN5c3RlbS5vdXQucHJpbnRmKCJBUEk6ICVzOiAvaW5kZXgvc3RhdHVzLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisKKwkJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogUE9TVDogL2luZGV4L2FkZC86IHRleHQvcGxhaW4KKwkgKiBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZS4KKwkgKiBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZAorCSAqIGludG8gdGhlIGRhdGFiYXNlLgorCSAqIElucHV0OiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKi8KKwlAUGF0aCgiYWRkIikgQFBPU1QgQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGltcG9ydExlbW1hRGF0YShTdHJpbmcgbGlzdCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIGFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJCisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9hZGQvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNm77+9aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJfQorCisJLyogdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gdmlld0RCSW5mbworCisKKwkvKiB2aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIiAtIFN0YXR1czogPGk+V29yayBpbiBwcm9ncmVzcy4uLiE8L2k+KTwvaDQ+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCAhb3B0aW9ucy5lcXVhbHMoInVuZGVmIikpCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxL3Byb3AyL3NwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBHbGVtbVNlcnZpY2VzICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb25EYXRlLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJLy9TeXN0ZW0ub3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMjcvODBhY2YzZTE0YTNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzI3LzgwYWNmM2UxNGEzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YzZhMGEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzI3LzgwYWNmM2UxNGEzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsOTc1IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKKy8qIDAuMSA6IDE3LjA2LjIwL0ZCIAorICogMC4yIDogMjUuMTAuMjEvRkIKKyAqICAgICAgIGxvZ2luZyBvZiB0aGUgQVBJIFJlcXVlc3RzLgorICogICAgICAgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisgKiAgICAgICBjb3JyZWN0aW5nIGNhbGxpbmcgb2YgbGVtbWEgKyBwcm9wMS9wcm9wMi9zcGVjLgorICogICAgICAgaGFuZGxpbmcgb2YgbGVtbWF0YSB3aXRoICfDnycuCisgKiAKKyAqIEdlbmVyYWwgY29tbWVudHMgdG8gdGhlIGVuY29kaW5nIG9mIGRlcml2YXRpb25zIGZyb20gbGVtbWEgdG8gd2ZzIGFuZCBob3cgdGhleSBhcmUgZW5jb2RlZAorICogaW4gdGhlIERlcmJ5IGRhdGFiYXNlOgorICogCisgKiBHTEVNTSBlbmNvZGluZzogIAorICogICBfIF8gOiArRmxleCAgICAgICDDlmxlIC0+IMOWbCAgICAgIAorICogICArIF8gOiArQ29tcCAgICAgICDDlmxsYW1wZSAtPiDDlmwgb3IgTGFtcGUgKGNvbXBvdW5kKS4KKyAqICAgXyArIDogK290aGVyICAgICAgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm5zY2h1aCAobm8gY29tcG91bmQgZm9yICdUdXJuc2NodWgnLCBvbmx5IHByZWZpeCkuCisgKiAgICsgKyA6ICtDb21wK290aGVyIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuICsgU2NodWggKGNvbXBvdW5kIGZvciAnU2NodWgnICsgUHJlZml4KS4KKyAqIEMyIGxlbW1hdGl6YXRpb24gb3B0aW9uczoKKyAqICAgRmxleCAgKGlkZW50aWNhbCB0byBHbGVtbSkKKyAqICAgQ29tcCAgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKQorICogICBPdGhlciAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpLgorICogICBTcGVjICAob25seSBDMjogaW5jbHVkZXMgYWxsIHdmcyB3aXRoIGhpcGhlbiBhbmQvb3Igc29tZSBub24tYWxwaGFiZXRpYyBJU084ODU5LTEgY2hhcnMpCisgKiAgICAgICAgIEUuZy4gw5ZsLUV4cG9ydGUsICJNYXJrZW4iLcOWbGUuCisgKiBEZXJieSBFbmNvZGluZzoKKyAqICBwcm9wMSAJcHJvcDIJc3BlYyAgIAltZWFuaW5nIGluIEMyOgorICogIDAJCTAJCS0JCUZsZXgKKyAqICAxCQkwCQktCQlDb21wCisgKiAgMAkJMQkJLQkJT3RoZXIgKHByZWZpeCkKKyAqICAxCQkxCQktCQlDb21wICsgT3RoZXIKKyAqICAtCQktCQkwCQktU3BlYworICogIC0JCS0JCTEJCStTcGVjCisgKiAKKyAqIEV4YW1wbGVzOgorICogJlNjaHVoCQkJOiBTY2h1aCwgU2NodWhlLCAuLi4gb25seSBmbGV4aW9ucworICogJlNjaHVoK2NvbXAJCTogU2NodWhlLCBUdXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMuCisgKiAmU2NodWgrb3RoZXIJCTogU2NodWhlLCBBbnRpc2NodWhlLi4uIGZsZXhpb25zIGFuZCBwcmVmaXhlZCB3ZnMgKG5vIGNvbXBvdW5kcykuCisgKiAmU2NodWgrY29tcCtvdGhlcjogU2NodWhlLCBBbnRpc2NodWhlLCBUdXJuc2NodWhlLCBBbnRpdHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzIGFuZCAKKyAqIAkJCQkJICBwcmVmaXhlZCBzaW5nbGUgd2ZzIChBbnRpc2NodWhlKSBhbmQgcHJlZml4ZWQgY29tcG91bmRzLgorICogJlNjaHVoK3NwZWMJCTogIkFudGkiLVNjaHVoZSwgNjhnZXItU2NodWhlLi4uIG1heSBiZSBjb21iaW5lZCB3aXRoIGV2ZXJ5IG9wdGlvbnM6IGFkZHMKKyAqICAgICAgICAgICAgICAgICAgICB3ZnMgd2l0aCBoeXBoZW4gYW5kL29yIG5vbi1hbHBoYWJldGljIGNoYXJzLgorICogCisgKiBDb252ZXJzaW9uIHJ1bGVzOgorICogCisgKiAgJnNjaGxpZcOfZW4gLT4gaW50ZXJuYWwgc2VhcmNoIGZvciAnc2NobGllc3NlbicsCisgKiAgYmVjYXVzZSBHbGVtbSBvdXRwdXRzICdzcycgZm9yICfDnycuCisgKiAgCisgKiBDaGFyYWN0ZXIgRW5jb2Rpbmc6CisgKiAKKyAqIC0gV2hlbiBpbXBvcnRpbmcgd2ZzIHRvIHRoZSBEZXJieSBEYXRhYmFzZSB3aXRoIGRvQ3VybEdsZW1tU2VydmljZXMvaW5kZXhMZW1tYXRhOgorICogCisgKiAgIElOUFVUOiB3b3JkZm9ybSBsaXN0IGluIFtVVEYtOF0gOiBVVEYtOCBpcyB0aGVuIGNvbnZlcnRlZCB0byBMYXQxIGZvciBHbGVtbSwKKyAqICAgICAgICAgIHRoZSBvdXRwdXQgb2YgR2xlbW0gW0xhdDFdIGlzIHJldHVybmVkIHRvIHRoZSBHbGVtbVNlcnZpY2VzIHdpdGhvdXQgcmVjb252ZXJzaW9uCisgKiAgICAgICAgICB0byBVVEY4IGFuZCBpbXBvcnRlZCBpbnRvIERlcmJ5IERhdGFiYXNlIHVuY2hhbmdlZC4KKyAqCQkKKyAqLworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA0LjExLjIxIjsgCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4yIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVByb3BzCQk9ICIvV0VCLUlORi9HbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiOworCQorCS8vIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSByZWFkIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzICh0aGVzZSBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzKToKKwlwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCAJCT0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCXByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCQkJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwlAQ29udGV4dAorCXByaXZhdGUgU2VydmxldENvbnRleHQgc2VydmxldENvbnRleHQ7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmb3V0CT0gbnVsbDsKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZlcnIJPSBudWxsOwkJCisJCQorCS8qIAorIAkgKiAKKwkgKiAtIGFmdGVyIGxvYWRQcm9wZXJ0aWVzLCBzZXRzIHRoZSBjbGFzcyB2YXJpYWJsZSB3aXRoIGxvYWRlZCBwcm9wZXJ0eSB2YWx1ZXMuCisJICogCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCUdTX1dvcmtpbmdQYXRoIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJHU19Xb3JraW5nUGF0aCIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyIpOworCWZuYW1lV2ZzCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVdmcyIsIAkgICAiZ2xfd2ZzX2luLnR4dCIpOworCWZuYW1lV2ZzCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVXZnM7CisJZm5hbWVPdXQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lT3V0IiwgCSAgICJHbGVtbVNlcnZpY2VzLmxvZyIpOworCWZuYW1lT3V0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVPdXQ7CisJZm5hbWVFcnIJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lRXJyIiwgCSAgICJHbGVtbVNlcnZpY2VzLmVyciIpOworCWZuYW1lRXJyCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVFcnI7CisJZm5hbWVTY3JpcHQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lU2NyaXB0IiwJICAgImRvR2xlbW0iKTsKKwlmbmFtZVNjcmlwdAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lU2NyaXB0OworCWZuYW1lTGVtYXRhCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUxlbWF0YSIsICAgICJ0bXAvbGVtMyIpOworCWZuYW1lTGVtYXRhCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVMZW1hdGE7CisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKgorCSAqICBsb2dfUmVxdWVzdDoKKwkgKiAgCisJICogIC0gd3JpdGUgaW5mbyBhYm91dCBBUEkgUmVxdWVzdC4KKwkgKiAgUGFyYW1ldGVyczoKKwkgKiAgcmVxdWVzdFBhdGgJOiBwYXRoIG9mIHdlYmFwcCBhZGRyZXNzZWQgYnkgdGhlIHJlcXVlc3QuCisJICogIGZ1bmMJCTogbmFtZSBvZiB0aGUgZnVuY3Rpb24gd2hpY2ggaW1wbGVtZW50cyB0aGUgcmVxdWVzdC4KKwkgKiAgCisJICogIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGxvZ19SZXF1ZXN0KFN0cmluZyByZXF1ZXN0UGF0aCwgU3RyaW5nIGZ1bmMpCisJCisJeworCS8vIHRyYW5zZm9ybSAiZGF0ZVR0aW1lIiAtPiAiZGF0ZSB0aW1lIjoKKwkKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwlmb3V0LnByaW50ZigiIyMjICVzOiAlcyA6IHZlcnM9JyVzJywgdmRhdGU9JyVzJyByZXF1ZXN0PSclcycuXG4iLCBmdW5jLCByZXF1ZXN0UGF0aCwgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIAorCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisJZm91dC5wcmludGYoIiMjI1xuIik7CisJfSAvLyBsb2dfUmVxdWVzdAorCQkKKwkvKiBmb3JtYXREYk5hbWUKKwkgKiAKKwkgKiAtIGdldHMgbmFtZSBvZiBEYXRhYmFzZSB1c2VkIGJ5IERlcmJ5IGZyb20gcHJvcHMgCisJICogICBhbmQgZm9ybWF0IGl0IHRvIEhUTUwuCisJICogIAorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBTdHJpbmcgZm9ybWF0RGJOYW1lKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCVN0cmluZworCQlkYk5hbWU7CisJU3RyaW5nCisJCWRiUGF0aCA9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCWludAorCQlqID0gZGJQYXRoLmxhc3RJbmRleE9mKCcvJyk7CisJCisJaWYoIGogPiAwICkKKwkJZGJOYW1lID0gZGJQYXRoLnN1YnN0cmluZyhqKzEpOworCWVsc2UKKwkJZGJOYW1lID0gZGJQYXRoOworCQorCXJldHVybiBkYk5hbWU7IC8vICI8cD48Yj5EYXRhYmFzZTogIiArIGRiTmFtZSArICI8L2I+PC9wPlxuIjsKKwl9IC8vIGZvcm1hdERiTmFtZQorCisJLyoKKwkgKiBjbG9zZUxvZ1N0cmVhbXM6CisJICogCisJICogLSBjbG9zZSB0aGUgZm91dC9mZXJyIGxvZyBzdHJlYW1zLgorCSAqIAorCSAqIDI2LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGNsb3NlTG9nU3RyZWFtcygpCisJCisJeworCWlmKCBmb3V0ICE9IG51bGwpCisJCWZvdXQuY2xvc2UoKTsKKwlmb3V0ID0gbnVsbDsKKwkKKwlpZiggZmVyciAhPSBudWxsICkKKwkJZmVyci5jbG9zZSgpOworCWZlcnIgPSBudWxsOworCX0gLy8gY2xvc2VMb2dTdHJlYW1zCisJCisJLyogaW5pdF9hbmRfbG9nX1JlcXVlc3QKKwkgKiAKKwkgKiAtIGxvYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLCBzZXRzIEdsZW1tU2VydmljZXMgY29uc3RhbnRzCisJICogICBhbmQgbG9ncyB0aGUgcmVxdWVzdC4KKwkgKiAtIGxvYWQgcHJvcGVydGllcyBhbmQgc2V0IGNvbnN0YW50cyBiZWZvcmUgbG9nZ2luZyBhbnl0aGluZywgYmVjYXVzZQorCSAqICAgbG9nZ2luZyB3aWxsIGJlIGRvbmUgaW50byB0aGUgbGFzdCBzdGRvdXQvc3RkZXJyIG9wZW5lZCBpbiBnbGFzc2Zpc2gncyBKVk0sCisJICogICBlLmcuIGluIHRoZSBsb2cgb2YgYW5vdGhlciBTZXJ2aWNlLgorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBQcm9wZXJ0aWVzIGluaXRfYW5kX2xvZ19SZXF1ZXN0KFN0cmluZyBmdW5jLCBTdHJpbmcgcmVxdWVzdFBhdGgpCisJCisJeworCVN0cmluZworCQlyZWFsUGF0aCA9IHNlcnZsZXRDb250ZXh0LmdldFJlYWxQYXRoKGZuYW1lUHJvcHMpOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAoaWYgbGFzdCBwYXJhbSA9IHRydWUpOgorCVByb3BlcnRpZXMKKwkJcHJvcHMgPSBVdGlscy5sb2FkUHJvcGVydGllcyhzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpLCBmbmFtZVByb3BzLCByZWFsUGF0aCwgZmFsc2UpOworCQorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBmb3V0IGFuZCBmZXJyIGFzIHJlcGxhY2VtZW50IGZvciBzdGRvdXQvc3RkZXJyIGZvciB1c2UgaW4gR2xlbW1TZXJ2aWNlcy4KKwkvLyBkbyBub3QgdXNlIG9yIHJlZGlyZWN0IFN5c3RlbS5vdXQgYW5kIFN5c3RlbS5lcnIsIGFzIHRoZXkgd2lsbCBiZSByZWRpcmVjdGVkCisJLy8gYnkgb3RoZXIgU2VydmljZXMgaW4gdGhlIHNhbWUgZ2xhc3NmaXNoIEpWTSwgZS5nLiBieSB0aGUgV2Zvcm1TZXJ2aWNlcy4KKwlmb3V0ID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lT3V0KTsKKwlmZXJyID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lRXJyKTsKKwkKKwkvL1V0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCisJbG9nX1JlcXVlc3QocmVxdWVzdFBhdGgsIGZ1bmMpOworCQorCXJldHVybiBwcm9wczsKKwl9IC8vIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJU3RyaW5nCisJCXN0YXR1czsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9zdGF0dXMvIik7CisJCisJLy8gaHR0cFNlcnZsZXRSZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKGVudik7CisJCisJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnByb3BlcnRpZXM8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5kYXRhYmFzZTwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpLAorCQkJCQkJCXNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcykgPT0gbnVsbCA/ICJub3QgZm91bmQiIDoKKwkJCQkJCQkJcHJvcHMuaXNFbXB0eSgpID8gImVtcHR5IiA6ICJsb2FkZWQiLAorCQkJCQkJCWZvcm1hdERiTmFtZShwcm9wcykKKwkJCQkJCQkpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCWNsb3NlTG9nU3RyZWFtcygpOworCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogCisJICogZG9QT1NUX2ltcG9ydExlbW1hRGF0YToKKwkgKiAKKwkgKiBQT1NUOiAvaW5kZXgvYWRkL3tkYXRhYmFzZW5hbWV9OiB0ZXh0L3BsYWluCisJICogCisJICogUGFyYW1ldGVyczoKKwkgKiBsaXN0CQkgOiB0aGUgbGlzdCBvZiB3ZnMgc2VudCBpbiB0aGUgYm9keSBvZiB0aGUgUE9TVCByZXF1ZXN0LgorCSAqIGRicGF0aAkgOiB0aGUgbG9jYXRpb24gb2YgdGhlIGRhdGFiYXNlIHdoZXJlIHRoZSBsZW1tYSt3ZnMgYXJlIHRvIGJlIHN0b3JlZC4KKwkgKiBOb3RlcyAgICAgOgorCSAqIC0gYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UgbG9jYXRlZCBhdCAnZGF0YWJhc2VuYW1lJy4KKwkgKiAtIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkIGludG8gYSBEZXJieSBkYXRhYmFzZS4KKwkgKiBJbnB1dAkgOiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKiAwNC4xMS4yMS9GQgorCSAqIC0gc3VibWl0dGVkIGRhdGFiYXNlIHBhdGguCisJICovCisJCisJQFBhdGgoImFkZC97ZGF0YWJhc2VwYXRofSIpIAorCUBQT1NUIAorCUBDb25zdW1lcygidGV4dC9wbGFpbiIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisJCQkJCQkJKAorCQkJCQkJCVN0cmluZyAJCQkJCQkJCWxpc3QsCisJCQkJCQkJQFBhdGhQYXJhbSh2YWx1ZT0iZGF0YWJhc2VwYXRoIikgCWZpbmFsIFN0cmluZyBkYnBhdGgKKwkJCQkJCQkpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9QT1NUX2ltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gYXJMaXN0ID0gbGlzdC5zcGxpdCgiXG4iKTsKKwkKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IGZzLmdldFBhdGgoZm5hbWVXZnMpOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvYWRkLyIpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN1Ym1pdHRlZCBkYXRhYmFzZW5hbWU9JyVzJy5cbiIsIGZ1bmMsIGRicGF0aCk7CisJZm91dC5wcmludGYoIkRlYnVnOiAlczogcG9zdGVkIGxpc3QgPSAnJXMnLlxuIiwgZnVuYywgbGlzdCk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgZm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShmZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzLCBmb3V0LCBmZXJyKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZsO8aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEsIHByb3BzLCBkYnBhdGgpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCQorCX0gLy8gZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCisJLyogZG9HRVRfdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVycyA9ICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vIik7CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlmaW5hbCBTdHJpbmcKKwkJZGJOYW1lID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+ZGF0YWJhc2U8L2I+OiAlczwvcD4iLCBmb3JtYXREYk5hbWUocHJvcHMpKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgZGJOYW1lICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyBkb0dFVF92aWV3REJJbmZvCisKKworCS8qIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0PnZlcnNpb24gIiArIHZlcnNpb24gKyAiIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIHJlcXVlc3QgPSAnIiArIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikgKyAiJzwvaT48L2g0PlxuIiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDE6PC9iPiAoQzIgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9PC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+e2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYyk8L2NvZGU+PC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbDwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPsOWbD9vcHRzPWZsZXgrY29tcCtvdGhlcitzcGVjPC9jb2RlPjwvcD4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMjo8L2I+IChpbnRlcm5hbCBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX0/cHJvcDE9WzAxMl0mYW1wO3Byb3AyPVswMTJdJmFtcDtzcGVjPVswMTJdPC9jb2RlPiAod2hlcmUgZWFjaCBwcm9wMSwgcHJvcDIsIHNwZWMgaXMgb3B0aW9uYWwpLjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw/cHJvcDE9MCZhbXA7cHJvcDI9MSZhbXA7c3BlYz0yPC9jb2RlPjwvcD4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfSIpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSclZCcgcHJvcDI9JyVkJyBzcGVjPSclZCcuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwkvKiAKKwlmb3IoaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJCX0JCisJICovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoIGxlbW1hSW5mby5vcHRzU2V0dGluZyA9PSBMZW1tYUluZm8uT1BUU19TRVRUSU5HX0MyICkgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMSxwcm9wMixzcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaW50CisJCW5XZnMgPSBsZW1tYUluZm8ubldmczsKKwkKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwkvLyBsb2cgb3V0Y29tZToKKwlpZiggbldmcyA8IDAgKQorCQlmb3V0LnByaW50ZigiRXJyb3I6ICVzOiByZXR1cm5pbmcgMCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMpOworCWVsc2UKKwkJZm91dC5wcmludGYoIkRlYnVnLiAlczogcmV0dXJuaW5nICVkIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYywgbldmcyk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIG5vdGU6CisJICogLSBpZiBCcm93c2VyIHJlcXVlc3Q6IEhUVFBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAndGV4dC9odG1sLC4uLnhtbC4uLicKKwkgKiAtIGlmIFdmb3JtU2VydmljZXMgcmVxdWVzdDogSHR0cFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICdhcHBsaWNhdGlvbi9qc29uJy4KKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqIAorCSAqIC0gc3VibWl0dGVkIFVSTCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hLCBpcyBpbnRlcnByZXRlZCBieSBnbGFzc2Zpc2ggYXMKKwkgKiAgIGJlaW5nIElTTy04ODU5LTEgZW5jb2RlZC4gV2hlbiB0aGUgcmVxdWVzdCBpcyBVVEYtOCBlbmNvZGVkLCBVbWxhdXRzIGFuZAorCSAqICAgJ8OfJyBhcmUgbWlzLWludGVycHJlZGVkLCBsZWFkaW5nIHRvIGFuIGVycm9uZXJvdXMgcmVxdWVzdCB0byB0aGUgRGVyYnkKKwkgKiAgIGRhdGFiYXNlLgorCSAqIC0gUmVxdWVzdGVkIGxlbW1hICdsZW1tYScgaGFzIHRvIGJlIHRyYW5zZm9ybWVkIHRvIFVURi04IGZpcnN0LgorCSAqIC0gbm90ZTogZXZlbiB3aGVuIHN1Ym1pdHRpbmcgdGhlIEdFVCByZXF1ZXN0IGJ5IHNwZWNpZnlpbmcgJ2NoYXJlbmNvZGU9VVRGLTgnLAorCSAqICAgZ2xhc3NmaXNoIGRvZXMgbm90IGNvbnZlcnQgaXQgYXV0b21hdGljYWxseSBhcyBleHBlY3RlZC4KKwkgKiAgIAorCSAqICAyMi4xMC4yMS9GQgorCSAqIAorCSAqIC0gaWYgYWNjZXB0PWFwcGxpY2F0aW9uL2pzb24gcmV0dXJuIFVURi04IChXZm9ybVNlcnZpY2VzKS4KKwkgKiAtIGVsc2UgaWYgYWNjZXB0PXRleHQvaHRtbCBkbyBub3QgdHJhbnNmb3JtIGNoYXJhY3RlciBlbmNvZGluZyAoQnJvd3NlcikuCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBDb25zdW1lcygiYXBwbGljYXRpb24vanNvbiwgdGV4dC9odG1sIikKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCQorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCWZpbmFsIGJvb2xlYW4KKwkJYkVuY29kZUxlbW1hID0gZmFsc2U7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CisJCisJLyogdGVzdDoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJaWYoIGJFbmNvZGVMZW1tYSApCisJCXsKKwkJLy8gd2hlbiBhY2NlcHRpbmcgSlNPTiwgdXJsIGhhcyB0byBiZSBjb252ZXJ0ZWQgdG8gVVRGLTgsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYToKKwkJdHJ5IHsKKwkJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obmV3IFN0cmluZyhsZW1tYS5nZXRCeXRlcygiSVNPLTg4NTktMSIpLCAidXRmLTgiKSk7CisJCQl9IAorCQljYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlMSkgeworCQkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCQlMZW1tYVJlc3BvbnNlCisJCQkJbGVtcmVzcCA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbXJlc3ApLmJ1aWxkKCk7CisJCQl9CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW1VURi04XSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCWVsc2UKKwkJeworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbdW5jaGFuZ2VkXSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCisJLyogZG9lcyBub3QgaGVscDoKKwkgU3RyaW5nCisJIAlyZXF1ZXN0Q2hhckVuY29kaW5nID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldENoYXJhY3RlckVuY29kaW5nKCk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiByZXF1ZXN0IGNoYXJhY3RlciBlbmNvZGluZyA9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RDaGFyRW5jb2RpbmcpOworCSovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXsKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQkvL3JldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJfQorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsJCisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCS8qCisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC90ZXN0L2luZm8vIik7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL2ZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJZm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzI5LzAwZGFkNGJkM2YzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8yOS8wMGRhZDRiZDNmM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmI2ZjMyCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8yOS8wMGRhZDRiZDNmM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpAQCAtMCwwICsxLDk1OCBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCisvKiAwLjEgOiAxNy4wNi4yMC9GQiAKKyAqIDAuMiA6IDI1LjEwLjIxL0ZCCisgKiAgICAgICBsb2dpbmcgb2YgdGhlIEFQSSBSZXF1ZXN0cy4KKyAqICAgICAgIGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorICogICAgICAgY29ycmVjdGluZyBjYWxsaW5nIG9mIGxlbW1hICsgcHJvcDEvcHJvcDIvc3BlYy4KKyAqICAgICAgIGhhbmRsaW5nIG9mIGxlbW1hdGEgd2l0aCAnw58nLgorICogCisgKiBHZW5lcmFsIGNvbW1lbnRzIHRvIHRoZSBlbmNvZGluZyBvZiBkZXJpdmF0aW9ucyBmcm9tIGxlbW1hIHRvIHdmcyBhbmQgaG93IHRoZXkgYXJlIGVuY29kZWQKKyAqIGluIHRoZSBEZXJieSBkYXRhYmFzZToKKyAqIAorICogR0xFTU0gZW5jb2Rpbmc6ICAKKyAqICAgXyBfIDogK0ZsZXggICAgICAgw5ZsZSAtPiDDlmwgICAgICAKKyAqICAgKyBfIDogK0NvbXAgICAgICAgw5ZsbGFtcGUgLT4gw5ZsIG9yIExhbXBlIChjb21wb3VuZCkuCisgKiAgIF8gKyA6ICtvdGhlciAgICAgIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuc2NodWggKG5vIGNvbXBvdW5kIGZvciAnVHVybnNjaHVoJywgb25seSBwcmVmaXgpLgorICogICArICsgOiArQ29tcCtvdGhlciBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybiArIFNjaHVoIChjb21wb3VuZCBmb3IgJ1NjaHVoJyArIFByZWZpeCkuCisgKiBDMiBsZW1tYXRpemF0aW9uIG9wdGlvbnM6CisgKiAgIEZsZXggIChpZGVudGljYWwgdG8gR2xlbW0pCisgKiAgIENvbXAgIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykKKyAqICAgT3RoZXIgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKS4KKyAqICAgU3BlYyAgKG9ubHkgQzI6IGluY2x1ZGVzIGFsbCB3ZnMgd2l0aCBoaXBoZW4gYW5kL29yIHNvbWUgbm9uLWFscGhhYmV0aWMgSVNPODg1OS0xIGNoYXJzKQorICogICAgICAgICBFLmcuIMOWbC1FeHBvcnRlLCAiTWFya2VuIi3DlmxlLgorICogRGVyYnkgRW5jb2Rpbmc6CisgKiAgcHJvcDEgCXByb3AyCXNwZWMgICAJbWVhbmluZyBpbiBDMjoKKyAqICAwCQkwCQktCQlGbGV4CisgKiAgMQkJMAkJLQkJQ29tcAorICogIDAJCTEJCS0JCU90aGVyIChwcmVmaXgpCisgKiAgMQkJMQkJLQkJQ29tcCArIE90aGVyCisgKiAgLQkJLQkJMAkJLVNwZWMKKyAqICAtCQktCQkxCQkrU3BlYworICogCisgKiBFeGFtcGxlczoKKyAqICZTY2h1aAkJCTogU2NodWgsIFNjaHVoZSwgLi4uIG9ubHkgZmxleGlvbnMKKyAqICZTY2h1aCtjb21wCQk6IFNjaHVoZSwgVHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzLgorICogJlNjaHVoK290aGVyCQk6IFNjaHVoZSwgQW50aXNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgcHJlZml4ZWQgd2ZzIChubyBjb21wb3VuZHMpLgorICogJlNjaHVoK2NvbXArb3RoZXI6IFNjaHVoZSwgQW50aXNjaHVoZSwgVHVybnNjaHVoZSwgQW50aXR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcyBhbmQgCisgKiAJCQkJCSAgcHJlZml4ZWQgc2luZ2xlIHdmcyAoQW50aXNjaHVoZSkgYW5kIHByZWZpeGVkIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtzcGVjCQk6ICJBbnRpIi1TY2h1aGUsIDY4Z2VyLVNjaHVoZS4uLiBtYXkgYmUgY29tYmluZWQgd2l0aCBldmVyeSBvcHRpb25zOiBhZGRzCisgKiAgICAgICAgICAgICAgICAgICAgd2ZzIHdpdGggaHlwaGVuIGFuZC9vciBub24tYWxwaGFiZXRpYyBjaGFycy4KKyAqIAorICogQ29udmVyc2lvbiBydWxlczoKKyAqIAorICogICZzY2hsaWXDn2VuIC0+IGludGVybmFsIHNlYXJjaCBmb3IgJ3NjaGxpZXNzZW4nLAorICogIGJlY2F1c2UgR2xlbW0gb3V0cHV0cyAnc3MnIGZvciAnw58nLgorICogIAorICogQ2hhcmFjdGVyIEVuY29kaW5nOgorICogCisgKiAtIFdoZW4gaW1wb3J0aW5nIHdmcyB0byB0aGUgRGVyYnkgRGF0YWJhc2Ugd2l0aCBkb0N1cmxHbGVtbVNlcnZpY2VzL2luZGV4TGVtbWF0YToKKyAqIAorICogICBJTlBVVDogd29yZGZvcm0gbGlzdCBpbiBbVVRGLThdIDogVVRGLTggaXMgdGhlbiBjb252ZXJ0ZWQgdG8gTGF0MSBmb3IgR2xlbW0sCisgKiAgICAgICAgICB0aGUgb3V0cHV0IG9mIEdsZW1tIFtMYXQxXSBpcyByZXR1cm5lZCB0byB0aGUgR2xlbW1TZXJ2aWNlcyB3aXRob3V0IHJlY29udmVyc2lvbgorICogICAgICAgICAgdG8gVVRGOCBhbmQgaW1wb3J0ZWQgaW50byBEZXJieSBEYXRhYmFzZSB1bmNoYW5nZWQuCisgKgkJCisgKi8KKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIyOS4xMC4yMSI7IAorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMiI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVQcm9wcwkJPSAiL1dFQi1JTkYvR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIjsKKwkKKwkvLyB0aGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgcmVhZCBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyAodGhlc2UgYXJlIHRoZSBkZWZhdWx0IHZhbHVlcyk6CisJcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggCQk9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCXByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQkJCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJQENvbnRleHQKKwlwcml2YXRlIFNlcnZsZXRDb250ZXh0IHNlcnZsZXRDb250ZXh0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZm91dAk9IG51bGw7CisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmZXJyCT0gbnVsbDsJCQorCQkKKwkvKiAKKyAJICogCisJICogLSBhZnRlciBsb2FkUHJvcGVydGllcywgc2V0cyB0aGUgY2xhc3MgdmFyaWFibGUgd2l0aCBsb2FkZWQgcHJvcGVydHkgdmFsdWVzLgorCSAqIAorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlHU19Xb3JraW5nUGF0aCAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiR1NfV29ya2luZ1BhdGgiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiKTsKKwlmbmFtZVdmcwkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVXZnMiLCAJICAgImdsX3dmc19pbi50eHQiKTsKKwlmbmFtZVdmcwkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lV2ZzOworCWZuYW1lT3V0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZU91dCIsIAkgICAiR2xlbW1TZXJ2aWNlcy5sb2ciKTsKKwlmbmFtZU91dAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lT3V0OworCWZuYW1lRXJyCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUVyciIsIAkgICAiR2xlbW1TZXJ2aWNlcy5lcnIiKTsKKwlmbmFtZUVycgkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lRXJyOworCWZuYW1lU2NyaXB0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVNjcmlwdCIsCSAgICJkb0dsZW1tIik7CisJZm5hbWVTY3JpcHQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVNjcmlwdDsKKwlmbmFtZUxlbWF0YQkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVMZW1hdGEiLCAgICAidG1wL2xlbTMiKTsKKwlmbmFtZUxlbWF0YQkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lTGVtYXRhOworCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyoKKwkgKiAgbG9nX1JlcXVlc3Q6CisJICogIAorCSAqICAtIHdyaXRlIGluZm8gYWJvdXQgQVBJIFJlcXVlc3QuCisJICogIFBhcmFtZXRlcnM6CisJICogIHJlcXVlc3RQYXRoCTogcGF0aCBvZiB3ZWJhcHAgYWRkcmVzc2VkIGJ5IHRoZSByZXF1ZXN0LgorCSAqICBmdW5jCQk6IG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHdoaWNoIGltcGxlbWVudHMgdGhlIHJlcXVlc3QuCisJICogIAorCSAqICAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBsb2dfUmVxdWVzdChTdHJpbmcgcmVxdWVzdFBhdGgsIFN0cmluZyBmdW5jKQorCQorCXsKKwkvLyB0cmFuc2Zvcm0gImRhdGVUdGltZSIgLT4gImRhdGUgdGltZSI6CisJCisJZm91dC5wcmludGYoIiMjI1xuIik7CisJZm91dC5wcmludGYoIiMjIyAlczogJXMgOiB2ZXJzPSclcycsIHZkYXRlPSclcycgcmVxdWVzdD0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdFBhdGgsIHZlcnNpb24sIHZlcnNpb25EYXRlLCAKKwkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCX0gLy8gbG9nX1JlcXVlc3QKKwkJCisJLyogZm9ybWF0RGJOYW1lCisJICogCisJICogLSBnZXRzIG5hbWUgb2YgRGF0YWJhc2UgdXNlZCBieSBEZXJieSBmcm9tIHByb3BzIAorCSAqICAgYW5kIGZvcm1hdCBpdCB0byBIVE1MLgorCSAqICAKKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgU3RyaW5nIGZvcm1hdERiTmFtZShQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlTdHJpbmcKKwkJZGJOYW1lOworCVN0cmluZworCQlkYlBhdGggPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlpbnQKKwkJaiA9IGRiUGF0aC5sYXN0SW5kZXhPZignLycpOworCQorCWlmKCBqID4gMCApCisJCWRiTmFtZSA9IGRiUGF0aC5zdWJzdHJpbmcoaisxKTsKKwllbHNlCisJCWRiTmFtZSA9IGRiUGF0aDsKKwkKKwlyZXR1cm4gZGJOYW1lOyAvLyAiPHA+PGI+RGF0YWJhc2U6ICIgKyBkYk5hbWUgKyAiPC9iPjwvcD5cbiI7CisJfSAvLyBmb3JtYXREYk5hbWUKKworCS8qCisJICogY2xvc2VMb2dTdHJlYW1zOgorCSAqIAorCSAqIC0gY2xvc2UgdGhlIGZvdXQvZmVyciBsb2cgc3RyZWFtcy4KKwkgKiAKKwkgKiAyNi4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBjbG9zZUxvZ1N0cmVhbXMoKQorCQorCXsKKwlpZiggZm91dCAhPSBudWxsKQorCQlmb3V0LmNsb3NlKCk7CisJZm91dCA9IG51bGw7CisJCisJaWYoIGZlcnIgIT0gbnVsbCApCisJCWZlcnIuY2xvc2UoKTsKKwlmZXJyID0gbnVsbDsKKwl9IC8vIGNsb3NlTG9nU3RyZWFtcworCQorCS8qIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisJICogCisJICogLSBsb2FkIEdsZW1tU2VydmljZXMucHJvcGVydGllcywgc2V0cyBHbGVtbVNlcnZpY2VzIGNvbnN0YW50cworCSAqICAgYW5kIGxvZ3MgdGhlIHJlcXVlc3QuCisJICogLSBsb2FkIHByb3BlcnRpZXMgYW5kIHNldCBjb25zdGFudHMgYmVmb3JlIGxvZ2dpbmcgYW55dGhpbmcsIGJlY2F1c2UKKwkgKiAgIGxvZ2dpbmcgd2lsbCBiZSBkb25lIGludG8gdGhlIGxhc3Qgc3Rkb3V0L3N0ZGVyciBvcGVuZWQgaW4gZ2xhc3NmaXNoJ3MgSlZNLAorCSAqICAgZS5nLiBpbiB0aGUgbG9nIG9mIGFub3RoZXIgU2VydmljZS4KKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgUHJvcGVydGllcyBpbml0X2FuZF9sb2dfUmVxdWVzdChTdHJpbmcgZnVuYywgU3RyaW5nIHJlcXVlc3RQYXRoKQorCQorCXsKKwlTdHJpbmcKKwkJcmVhbFBhdGggPSBzZXJ2bGV0Q29udGV4dC5nZXRSZWFsUGF0aChmbmFtZVByb3BzKTsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKGlmIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlQcm9wZXJ0aWVzCisJCXByb3BzID0gVXRpbHMubG9hZFByb3BlcnRpZXMoc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSwgZm5hbWVQcm9wcywgcmVhbFBhdGgsIGZhbHNlKTsKKwkKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gZm91dCBhbmQgZmVyciBhcyByZXBsYWNlbWVudCBmb3Igc3Rkb3V0L3N0ZGVyciBmb3IgdXNlIGluIEdsZW1tU2VydmljZXMuCisJLy8gZG8gbm90IHVzZSBvciByZWRpcmVjdCBTeXN0ZW0ub3V0IGFuZCBTeXN0ZW0uZXJyLCBhcyB0aGV5IHdpbGwgYmUgcmVkaXJlY3RlZAorCS8vIGJ5IG90aGVyIFNlcnZpY2VzIGluIHRoZSBzYW1lIGdsYXNzZmlzaCBKVk0sIGUuZy4gYnkgdGhlIFdmb3JtU2VydmljZXMuCisJZm91dCA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZU91dCk7CisJZmVyciA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZUVycik7CisJCisJLy9VdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQorCWxvZ19SZXF1ZXN0KHJlcXVlc3RQYXRoLCBmdW5jKTsKKwkKKwlyZXR1cm4gcHJvcHM7CisJfSAvLyBpbml0X2FuZF9sb2dfUmVxdWVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCVN0cmluZworCQlzdGF0dXM7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvc3RhdHVzLyIpOworCQorCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCQorCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5wcm9wZXJ0aWVzPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+ZGF0YWJhc2U8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSwKKwkJCQkJCQlzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpID09IG51bGwgPyAibm90IGZvdW5kIiA6CisJCQkJCQkJCXByb3BzLmlzRW1wdHkoKSA/ICJlbXB0eSIgOiAibG9hZGVkIiwKKwkJCQkJCQlmb3JtYXREYk5hbWUocHJvcHMpCisJCQkJCQkJKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIAorCSAqIGRvUE9TVF9pbXBvcnRMZW1tYURhdGE6CisJICogCisJICogUE9TVDogL2luZGV4L2FkZC86IHRleHQvcGxhaW4KKwkgKiBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZS4KKwkgKiBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZAorCSAqIGludG8gdGhlIGRhdGFiYXNlLgorCSAqIElucHV0OiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKi8KKwlAUGF0aCgiYWRkIikgQFBPU1QgQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvUE9TVF9pbXBvcnRMZW1tYURhdGEoU3RyaW5nIGxpc3QpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9QT1NUX2ltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gYXJMaXN0ID0gbGlzdC5zcGxpdCgiXG4iKTsKKwkKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IGZzLmdldFBhdGgoZm5hbWVXZnMpOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvYWRkLyIpOworCQorCS8vIFdyaXRlIHN1Ym1pdHRlZCBsaXN0IG9mIHdvcmRmb3JtcyB0byBmaWxlOgorCXRyeQorCQl7CisJCW9zID0gRmlsZXMubmV3T3V0cHV0U3RyZWFtKHApOworCQlvcy53cml0ZShsaXN0LmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSkpOworCSAgICBvcy5jbG9zZSgpOworCSAgICBiRG9uZSA9IHRydWU7CisJICAgIGZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGZpbGUgJyVzJyBiZXNjaHJpZWJlbi5cbiIsIGZ1bmMsIGZuYW1lV2ZzKTsKKwkgICAgfQorCWNhdGNoKElPRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoZmVycik7CisJCX0KKyAgICAKKwlpZiggYkRvbmUgKQorCQltc2cgPSAiPHA+TGlzdCB3cml0dGVuIHRvIGZpbGU6ICIgKyBwLnRvU3RyaW5nKCkgKyAiPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+PGI+RmlsZSBFcnJvcjogPC9iPiBjYW5ub3Qgd3JpdGUgdG8gIiArIHAudG9TdHJpbmcoKSArICIhPC9wPiI7CisJCisJLyoKKwkgKiAgZXhlY3V0ZSBHbGVtbSBzaGVsbCBzY3JpcHQ6CisJICovCisJU3RyaW5nCisJCW1zZ0dsZW1tU2NyaXB0LCBtc2dJbXBvcnQ7CisJaW50IAorCQlyID0gVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0KGZuYW1lU2NyaXB0LCBmbmFtZVdmcywgZm91dCwgZmVycik7CisJCisJaWYoIHIgPT0gMCApCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEF1c2bDvGhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhLCBwcm9wcyk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJCisJfSAvLyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisKKwkvKiBkb0dFVF92aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzID0gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby8iKTsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCWZpbmFsIFN0cmluZworCQlkYk5hbWUgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5kYXRhYmFzZTwvYj46ICVzPC9wPiIsIGZvcm1hdERiTmFtZShwcm9wcykpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBkYk5hbWUgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIGRvR0VUX3ZpZXdEQkluZm8KKworCisJLyogZG9HRVRfdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+dmVyc2lvbiAiICsgdmVyc2lvbiArICIgdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgcmVxdWVzdCA9ICciICsgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSArICInPC9pPjwvaDQ+XG4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMTo8L2I+IChDMiBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX08L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT57bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKTwvY29kZT48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsPC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+w5ZsP29wdHM9ZmxleCtjb21wK290aGVyK3NwZWM8L2NvZGU+PC9wPiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAyOjwvYj4gKGludGVybmFsIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfT9wcm9wMT1bMDEyXSZhbXA7cHJvcDI9WzAxMl0mYW1wO3NwZWM9WzAxMl08L2NvZGU+ICh3aGVyZSBlYWNoIHByb3AxLCBwcm9wMiwgc3BlYyBpcyBvcHRpb25hbCkuPC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbD9wcm9wMT0wJmFtcDtwcm9wMj0xJmFtcDtzcGVjPTI8L2NvZGU+PC9wPiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Iik7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JyVkJyBwcm9wMj0nJWQnIHNwZWM9JyVkJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCS8qIAorCWZvcihpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwkJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwkJfQkKKwkgKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggbGVtbWFJbmZvLm9wdHNTZXR0aW5nID09IExlbW1hSW5mby5PUFRTX1NFVFRJTkdfQzIgKSAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZywgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxLHByb3AyLHNwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpbnQKKwkJbldmcyA9IGxlbW1hSW5mby5uV2ZzOworCQorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCS8vIGxvZyBvdXRjb21lOgorCWlmKCBuV2ZzIDwgMCApCisJCWZvdXQucHJpbnRmKCJFcnJvcjogJXM6IHJldHVybmluZyAwIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYyk7CisJZWxzZQorCQlmb3V0LnByaW50ZigiRGVidWcuICVzOiByZXR1cm5pbmcgJWQgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jLCBuV2ZzKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogbm90ZToKKwkgKiAtIGlmIEJyb3dzZXIgcmVxdWVzdDogSFRUUFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICd0ZXh0L2h0bWwsLi4ueG1sLi4uJworCSAqIC0gaWYgV2Zvcm1TZXJ2aWNlcyByZXF1ZXN0OiBIdHRwU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ2FwcGxpY2F0aW9uL2pzb24nLgorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICogCisJICogLSBzdWJtaXR0ZWQgVVJMLCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWEsIGlzIGludGVycHJldGVkIGJ5IGdsYXNzZmlzaCBhcworCSAqICAgYmVpbmcgSVNPLTg4NTktMSBlbmNvZGVkLiBXaGVuIHRoZSByZXF1ZXN0IGlzIFVURi04IGVuY29kZWQsIFVtbGF1dHMgYW5kCisJICogICAnw58nIGFyZSBtaXMtaW50ZXJwcmVkZWQsIGxlYWRpbmcgdG8gYW4gZXJyb25lcm91cyByZXF1ZXN0IHRvIHRoZSBEZXJieQorCSAqICAgZGF0YWJhc2UuCisJICogLSBSZXF1ZXN0ZWQgbGVtbWEgJ2xlbW1hJyBoYXMgdG8gYmUgdHJhbnNmb3JtZWQgdG8gVVRGLTggZmlyc3QuCisJICogLSBub3RlOiBldmVuIHdoZW4gc3VibWl0dGluZyB0aGUgR0VUIHJlcXVlc3QgYnkgc3BlY2lmeWluZyAnY2hhcmVuY29kZT1VVEYtOCcsCisJICogICBnbGFzc2Zpc2ggZG9lcyBub3QgY29udmVydCBpdCBhdXRvbWF0aWNhbGx5IGFzIGV4cGVjdGVkLgorCSAqICAgCisJICogIDIyLjEwLjIxL0ZCCisJICogCisJICogLSBpZiBhY2NlcHQ9YXBwbGljYXRpb24vanNvbiByZXR1cm4gVVRGLTggKFdmb3JtU2VydmljZXMpLgorCSAqIC0gZWxzZSBpZiBhY2NlcHQ9dGV4dC9odG1sIGRvIG5vdCB0cmFuc2Zvcm0gY2hhcmFjdGVyIGVuY29kaW5nIChCcm93c2VyKS4KKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQENvbnN1bWVzKCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2h0bWwiKQorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm87CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJZmluYWwgYm9vbGVhbgorCQliRW5jb2RlTGVtbWEgPSBmYWxzZTsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsKKwkKKwkvKiB0ZXN0OgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlpZiggYkVuY29kZUxlbW1hICkKKwkJeworCQkvLyB3aGVuIGFjY2VwdGluZyBKU09OLCB1cmwgaGFzIHRvIGJlIGNvbnZlcnRlZCB0byBVVEYtOCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hOgorCQl0cnkgeworCQkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhuZXcgU3RyaW5nKGxlbW1hLmdldEJ5dGVzKCJJU08tODg1OS0xIiksICJ1dGYtOCIpKTsKKwkJCX0gCisJCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCUxlbW1hUmVzcG9uc2UKKwkJCQlsZW1yZXNwID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtcmVzcCkuYnVpbGQoKTsKKwkJCX0KKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbVVRGLThdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisJZWxzZQorCQl7CisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFt1bmNoYW5nZWRdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisKKwkvKiBkb2VzIG5vdCBoZWxwOgorCSBTdHJpbmcKKwkgCXJlcXVlc3RDaGFyRW5jb2RpbmcgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0Q2hhcmFjdGVyRW5jb2RpbmcoKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlcXVlc3QgY2hhcmFjdGVyIGVuY29kaW5nID0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdENoYXJFbmNvZGluZyk7CisJKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJeworCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCS8vcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQl9CisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOwkKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJLyoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3Rlc3QvaW5mby8iKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vZm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQlmb3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMmEvNTAxNTU0MGY0ZjJjMDAxYzFjNDFjZTU1OWVhNWUxNmIgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzJhLzUwMTU1NDBmNGYyYzAwMWMxYzQxY2U1NTllYTVlMTZiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMjI5YmQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzJhLzUwMTU1NDBmNGYyYzAwMWMxYzQxY2U1NTllYTVlMTZiCkBAIC0wLDAgKzEsNzE5IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNi4xMC4yMSI7IC8vIjE3LjA2LjIwIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjEiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJCVN0cmluZworCQkJc3RhdHVzOworCQlVdGlscworCQkJdSA9IG5ldyBVdGlscygpOworCQlQcm9wZXJ0aWVzCisJCQlwcm9wczsKKwkJU3RyaW5nCisJCQlwcm9wTmFtZSA9ICJHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiOworCQkvLyByZWFkIHRlc3QKKwkJcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworCQkKKwkJCQkKKwkJLy9nZXRTZXJ2bGV0Q29udGV4dCguKQorCQkvLyBodHRwU2VydmxldFJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW52KTsKKy8qCisJCUlucHV0U3RyZWFtCisJCQkvL2luUHJvcCA9IEdsZW1tU2VydmljZXMuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKHByb3BOYW1lKTsKKwkJCWluUHJvcCA9IEh0dHBTZXJ2bGV0UmVxdWVzdC5jbGFzcy5nZXRSZXNvdXJjZUFzU3RyZWFtKHByb3BOYW1lKTsKKworCQlpZiggaW5Qcm9wID09IG51bGwgKQorCQkJeworCQkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGxvYWQgJyVzJyFcbiIsIGZ1bmMsIHByb3BOYW1lKTsKKwkJCXJldHVybiBudWxsOworCQkJfQorCQkKKwkJdHJ5IHsKKwkJCXByb3BzLmxvYWQoaW5Qcm9wKTsKKwkJCVNldDxFbnRyeTxPYmplY3QsT2JqZWN0Pj4KKwkJCQlwcm9wc1NldCA9IHByb3BzLmVudHJ5U2V0KCk7CisJCQkKKwkJCWZvcihFbnRyeTxPYmplY3QsIE9iamVjdD4gcHJvcEVudHJ5IDogcHJvcHNTZXQpCisJCQkJeworCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AgJXMgPSAnJXMnLlxuIiwgZnVuYywgcHJvcEVudHJ5LmdldEtleSgpLCBwcm9wRW50cnkuZ2V0VmFsdWUoKSk7CisJCQkJfQorCQkJfSAKKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBsb2FkIHByb3BzICdHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMnISIsICBmdW5jKTsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKyovCQorCQkvLyBlbmQgb2YgcmVhZCB0ZXN0CisJCQorCQkvLyB0ZXN0CisJCS8qKi8KKwkJcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworCQkKKwkJIC8qIHByb3BzLnNldFByb3BlcnR5KCJwIiwgInRlc3QiKTsKKwkJICovCisJCUZpbGVPdXRwdXRTdHJlYW0gb3V0OworCQl0cnkgeworCQkJb3V0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oImdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOworCQkJcHJvcHMuc3RvcmUob3V0LCAgInRlc3QgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIik7CisJCQl9IAorCQljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfTsKKwkJLyoqLworCQkKKwkJLy8gZW5kIG90ZXN0CisJCQorCQkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwkJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisJCVN5c3RlbS5vdXQucHJpbnRmKCJBUEk6ICVzOiAvaW5kZXgvc3RhdHVzLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisKKwkJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogUE9TVDogL2luZGV4L2FkZC86IHRleHQvcGxhaW4KKwkgKiBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZS4KKwkgKiBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZAorCSAqIGludG8gdGhlIGRhdGFiYXNlLgorCSAqIElucHV0OiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKi8KKwlAUGF0aCgiYWRkIikgQFBPU1QgQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGltcG9ydExlbW1hRGF0YShTdHJpbmcgbGlzdCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIGFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJCisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9hZGQvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNm77+9aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJfQorCisJLyogdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gdmlld0RCSW5mbworCisKKwkvKiB2aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIiAtIFN0YXR1czogPGk+V29yayBpbiBwcm9ncmVzcy4uLiE8L2k+KTwvaDQ+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCAhb3B0aW9ucy5lcXVhbHMoInVuZGVmIikpCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxL3Byb3AyL3NwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBHbGVtbVNlcnZpY2VzICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb25EYXRlLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJLy9TeXN0ZW0ub3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMmYvZTA5MjZiYjYzZjNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzJmL2UwOTI2YmI2M2YzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZTI3MWUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzJmL2UwOTI2YmI2M2YzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsOTYwIEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKKy8qIDAuMSA6IDE3LjA2LjIwL0ZCIAorICogMC4yIDogMjUuMTAuMjEvRkIKKyAqICAgICAgIGxvZ2luZyBvZiB0aGUgQVBJIFJlcXVlc3RzLgorICogICAgICAgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisgKiAgICAgICBjb3JyZWN0aW5nIGNhbGxpbmcgb2YgbGVtbWEgKyBwcm9wMS9wcm9wMi9zcGVjLgorICogICAgICAgaGFuZGxpbmcgb2YgbGVtbWF0YSB3aXRoICfDnycuCisgKiAKKyAqIEdlbmVyYWwgY29tbWVudHMgdG8gdGhlIGVuY29kaW5nIG9mIGRlcml2YXRpb25zIGZyb20gbGVtbWEgdG8gd2ZzIGFuZCBob3cgdGhleSBhcmUgZW5jb2RlZAorICogaW4gdGhlIERlcmJ5IGRhdGFiYXNlOgorICogCisgKiBHTEVNTSBlbmNvZGluZzogIAorICogICBfIF8gOiArRmxleCAgICAgICDDlmxlIC0+IMOWbCAgICAgIAorICogICArIF8gOiArQ29tcCAgICAgICDDlmxsYW1wZSAtPiDDlmwgb3IgTGFtcGUgKGNvbXBvdW5kKS4KKyAqICAgXyArIDogK290aGVyICAgICAgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm5zY2h1aCAobm8gY29tcG91bmQgZm9yICdUdXJuc2NodWgnLCBvbmx5IHByZWZpeCkuCisgKiAgICsgKyA6ICtDb21wK290aGVyIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuICsgU2NodWggKGNvbXBvdW5kIGZvciAnU2NodWgnICsgUHJlZml4KS4KKyAqIEMyIGxlbW1hdGl6YXRpb24gb3B0aW9uczoKKyAqICAgRmxleCAgKGlkZW50aWNhbCB0byBHbGVtbSkKKyAqICAgQ29tcCAgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKQorICogICBPdGhlciAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpLgorICogICBTcGVjICAob25seSBDMjogaW5jbHVkZXMgYWxsIHdmcyB3aXRoIGhpcGhlbiBhbmQvb3Igc29tZSBub24tYWxwaGFiZXRpYyBJU084ODU5LTEgY2hhcnMpCisgKiAgICAgICAgIEUuZy4gw5ZsLUV4cG9ydGUsICJNYXJrZW4iLcOWbGUuCisgKiBEZXJieSBFbmNvZGluZzoKKyAqICBwcm9wMSAJcHJvcDIJc3BlYyAgIAltZWFuaW5nIGluIEMyOgorICogIDAJCTAJCS0JCUZsZXgKKyAqICAxCQkwCQktCQlDb21wCisgKiAgMAkJMQkJLQkJT3RoZXIgKHByZWZpeCkKKyAqICAxCQkxCQktCQlDb21wICsgT3RoZXIKKyAqICAtCQktCQkwCQktU3BlYworICogIC0JCS0JCTEJCStTcGVjCisgKiAKKyAqIEV4YW1wbGVzOgorICogJlNjaHVoCQkJOiBTY2h1aCwgU2NodWhlLCAuLi4gb25seSBmbGV4aW9ucworICogJlNjaHVoK2NvbXAJCTogU2NodWhlLCBUdXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMuCisgKiAmU2NodWgrb3RoZXIJCTogU2NodWhlLCBBbnRpc2NodWhlLi4uIGZsZXhpb25zIGFuZCBwcmVmaXhlZCB3ZnMgKG5vIGNvbXBvdW5kcykuCisgKiAmU2NodWgrY29tcCtvdGhlcjogU2NodWhlLCBBbnRpc2NodWhlLCBUdXJuc2NodWhlLCBBbnRpdHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzIGFuZCAKKyAqIAkJCQkJICBwcmVmaXhlZCBzaW5nbGUgd2ZzIChBbnRpc2NodWhlKSBhbmQgcHJlZml4ZWQgY29tcG91bmRzLgorICogJlNjaHVoK3NwZWMJCTogIkFudGkiLVNjaHVoZSwgNjhnZXItU2NodWhlLi4uIG1heSBiZSBjb21iaW5lZCB3aXRoIGV2ZXJ5IG9wdGlvbnM6IGFkZHMKKyAqICAgICAgICAgICAgICAgICAgICB3ZnMgd2l0aCBoeXBoZW4gYW5kL29yIG5vbi1hbHBoYWJldGljIGNoYXJzLgorICogCisgKiBDb252ZXJzaW9uIHJ1bGVzOgorICogCisgKiAgJnNjaGxpZcOfZW4gLT4gaW50ZXJuYWwgc2VhcmNoIGZvciAnc2NobGllc3NlbicsCisgKiAgYmVjYXVzZSBHbGVtbSBvdXRwdXRzICdzcycgZm9yICfDnycuCisgKiAgCisgKiBDaGFyYWN0ZXIgRW5jb2Rpbmc6CisgKiAKKyAqIC0gV2hlbiBpbXBvcnRpbmcgd2ZzIHRvIHRoZSBEZXJieSBEYXRhYmFzZSB3aXRoIGRvQ3VybEdsZW1tU2VydmljZXMvaW5kZXhMZW1tYXRhOgorICogCisgKiAgIElOUFVUOiB3b3JkZm9ybSBsaXN0IGluIFtVVEYtOF0gOiBVVEYtOCBpcyB0aGVuIGNvbnZlcnRlZCB0byBMYXQxIGZvciBHbGVtbSwKKyAqICAgICAgICAgIHRoZSBvdXRwdXQgb2YgR2xlbW0gW0xhdDFdIGlzIHJldHVybmVkIHRvIHRoZSBHbGVtbVNlcnZpY2VzIHdpdGhvdXQgcmVjb252ZXJzaW9uCisgKiAgICAgICAgICB0byBVVEY4IGFuZCBpbXBvcnRlZCBpbnRvIERlcmJ5IERhdGFiYXNlIHVuY2hhbmdlZC4KKyAqCQkKKyAqLworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjI5LjEwLjIxIjsgCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4yIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVByb3BzCQk9ICIvV0VCLUlORi9HbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiOworCQorCS8vIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSByZWFkIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzICh0aGVzZSBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzKToKKwlwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCAJCT0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCXByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCQkJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwlAQ29udGV4dAorCXByaXZhdGUgU2VydmxldENvbnRleHQgc2VydmxldENvbnRleHQ7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmb3V0CT0gbnVsbDsKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZlcnIJPSBudWxsOwkJCisJCQorCS8qIAorIAkgKiAKKwkgKiAtIGFmdGVyIGxvYWRQcm9wZXJ0aWVzLCBzZXRzIHRoZSBjbGFzcyB2YXJpYWJsZSB3aXRoIGxvYWRlZCBwcm9wZXJ0eSB2YWx1ZXMuCisJICogCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCUdTX1dvcmtpbmdQYXRoIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJHU19Xb3JraW5nUGF0aCIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyIpOworCWZuYW1lV2ZzCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVdmcyIsIAkgICAiZ2xfd2ZzX2luLnR4dCIpOworCWZuYW1lV2ZzCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVXZnM7CisJZm5hbWVPdXQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lT3V0IiwgCSAgICJHbGVtbVNlcnZpY2VzLmxvZyIpOworCWZuYW1lT3V0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVPdXQ7CisJZm5hbWVFcnIJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lRXJyIiwgCSAgICJHbGVtbVNlcnZpY2VzLmVyciIpOworCWZuYW1lRXJyCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVFcnI7CisJZm5hbWVTY3JpcHQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lU2NyaXB0IiwJICAgImRvR2xlbW0iKTsKKwlmbmFtZVNjcmlwdAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lU2NyaXB0OworCWZuYW1lTGVtYXRhCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUxlbWF0YSIsICAgICJ0bXAvbGVtMyIpOworCWZuYW1lTGVtYXRhCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVMZW1hdGE7CisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKgorCSAqICBsb2dfUmVxdWVzdDoKKwkgKiAgCisJICogIC0gd3JpdGUgaW5mbyBhYm91dCBBUEkgUmVxdWVzdC4KKwkgKiAgUGFyYW1ldGVyczoKKwkgKiAgcmVxdWVzdFBhdGgJOiBwYXRoIG9mIHdlYmFwcCBhZGRyZXNzZWQgYnkgdGhlIHJlcXVlc3QuCisJICogIGZ1bmMJCTogbmFtZSBvZiB0aGUgZnVuY3Rpb24gd2hpY2ggaW1wbGVtZW50cyB0aGUgcmVxdWVzdC4KKwkgKiAgCisJICogIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGxvZ19SZXF1ZXN0KFN0cmluZyByZXF1ZXN0UGF0aCwgU3RyaW5nIGZ1bmMpCisJCisJeworCS8vIHRyYW5zZm9ybSAiZGF0ZVR0aW1lIiAtPiAiZGF0ZSB0aW1lIjoKKwkKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwlmb3V0LnByaW50ZigiIyMjICVzOiAlcyA6IHZlcnM9JyVzJywgdmRhdGU9JyVzJyByZXF1ZXN0PSclcycuXG4iLCBmdW5jLCByZXF1ZXN0UGF0aCwgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIAorCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisJZm91dC5wcmludGYoIiMjI1xuIik7CisJfSAvLyBsb2dfUmVxdWVzdAorCQkKKwkvKiBmb3JtYXREYk5hbWUKKwkgKiAKKwkgKiAtIGdldHMgbmFtZSBvZiBEYXRhYmFzZSB1c2VkIGJ5IERlcmJ5IGZyb20gcHJvcHMgCisJICogICBhbmQgZm9ybWF0IGl0IHRvIEhUTUwuCisJICogIAorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBTdHJpbmcgZm9ybWF0RGJOYW1lKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCVN0cmluZworCQlkYk5hbWU7CisJU3RyaW5nCisJCWRiUGF0aCA9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCWludAorCQlqID0gZGJQYXRoLmxhc3RJbmRleE9mKCcvJyk7CisJCisJaWYoIGogPiAwICkKKwkJZGJOYW1lID0gZGJQYXRoLnN1YnN0cmluZyhqKzEpOworCWVsc2UKKwkJZGJOYW1lID0gZGJQYXRoOworCQorCXJldHVybiBkYk5hbWU7IC8vICI8cD48Yj5EYXRhYmFzZTogIiArIGRiTmFtZSArICI8L2I+PC9wPlxuIjsKKwl9IC8vIGZvcm1hdERiTmFtZQorCisJLyoKKwkgKiBjbG9zZUxvZ1N0cmVhbXM6CisJICogCisJICogLSBjbG9zZSB0aGUgZm91dC9mZXJyIGxvZyBzdHJlYW1zLgorCSAqIAorCSAqIDI2LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGNsb3NlTG9nU3RyZWFtcygpCisJCisJeworCWlmKCBmb3V0ICE9IG51bGwpCisJCWZvdXQuY2xvc2UoKTsKKwlmb3V0ID0gbnVsbDsKKwkKKwlpZiggZmVyciAhPSBudWxsICkKKwkJZmVyci5jbG9zZSgpOworCWZlcnIgPSBudWxsOworCX0gLy8gY2xvc2VMb2dTdHJlYW1zCisJCisJLyogaW5pdF9hbmRfbG9nX1JlcXVlc3QKKwkgKiAKKwkgKiAtIGxvYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLCBzZXRzIEdsZW1tU2VydmljZXMgY29uc3RhbnRzCisJICogICBhbmQgbG9ncyB0aGUgcmVxdWVzdC4KKwkgKiAtIGxvYWQgcHJvcGVydGllcyBhbmQgc2V0IGNvbnN0YW50cyBiZWZvcmUgbG9nZ2luZyBhbnl0aGluZywgYmVjYXVzZQorCSAqICAgbG9nZ2luZyB3aWxsIGJlIGRvbmUgaW50byB0aGUgbGFzdCBzdGRvdXQvc3RkZXJyIG9wZW5lZCBpbiBnbGFzc2Zpc2gncyBKVk0sCisJICogICBlLmcuIGluIHRoZSBsb2cgb2YgYW5vdGhlciBTZXJ2aWNlLgorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBQcm9wZXJ0aWVzIGluaXRfYW5kX2xvZ19SZXF1ZXN0KFN0cmluZyBmdW5jLCBTdHJpbmcgcmVxdWVzdFBhdGgpCisJCisJeworCVN0cmluZworCQlyZWFsUGF0aCA9IHNlcnZsZXRDb250ZXh0LmdldFJlYWxQYXRoKGZuYW1lUHJvcHMpOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAoaWYgbGFzdCBwYXJhbSA9IHRydWUpOgorCVByb3BlcnRpZXMKKwkJcHJvcHMgPSBVdGlscy5sb2FkUHJvcGVydGllcyhzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpLCBmbmFtZVByb3BzLCByZWFsUGF0aCwgZmFsc2UpOworCQorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBmb3V0IGFuZCBmZXJyIGFzIHJlcGxhY2VtZW50IGZvciBzdGRvdXQvc3RkZXJyIGZvciB1c2UgaW4gR2xlbW1TZXJ2aWNlcy4KKwkvLyBkbyBub3QgdXNlIG9yIHJlZGlyZWN0IFN5c3RlbS5vdXQgYW5kIFN5c3RlbS5lcnIsIGFzIHRoZXkgd2lsbCBiZSByZWRpcmVjdGVkCisJLy8gYnkgb3RoZXIgU2VydmljZXMgaW4gdGhlIHNhbWUgZ2xhc3NmaXNoIEpWTSwgZS5nLiBieSB0aGUgV2Zvcm1TZXJ2aWNlcy4KKwlmb3V0ID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lT3V0KTsKKwlmZXJyID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lRXJyKTsKKwkKKwkvL1V0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCisJbG9nX1JlcXVlc3QocmVxdWVzdFBhdGgsIGZ1bmMpOworCQorCXJldHVybiBwcm9wczsKKwl9IC8vIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJU3RyaW5nCisJCXN0YXR1czsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9zdGF0dXMvIik7CisJCisJLy8gaHR0cFNlcnZsZXRSZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKGVudik7CisJCisJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnByb3BlcnRpZXM8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5kYXRhYmFzZTwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpLAorCQkJCQkJCXNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcykgPT0gbnVsbCA/ICJub3QgZm91bmQiIDoKKwkJCQkJCQkJcHJvcHMuaXNFbXB0eSgpID8gImVtcHR5IiA6ICJsb2FkZWQiLAorCQkJCQkJCWZvcm1hdERiTmFtZShwcm9wcykKKwkJCQkJCQkpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCWNsb3NlTG9nU3RyZWFtcygpOworCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogCisJICogZG9QT1NUX2ltcG9ydExlbW1hRGF0YToKKwkgKiAKKwkgKiBQT1NUOiAvaW5kZXgvYWRkLzogdGV4dC9wbGFpbgorCSAqIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlLgorCSAqIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkCisJICogaW50byB0aGUgZGF0YWJhc2UuCisJICogSW5wdXQ6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqLworCUBQYXRoKCJhZGQiKSBAUE9TVCBAQ29uc3VtZXMoInRleHQvcGxhaW4iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9QT1NUX2ltcG9ydExlbW1hRGF0YShTdHJpbmcgbGlzdCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb1BPU1RfaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSBhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCQorCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9hZGQvIik7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgZm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShmZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzLCBmb3V0LCBmZXJyKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZsO8aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSwgcHJvcHMpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCQorCX0gLy8gZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCisJLyogZG9HRVRfdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVycyA9ICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vIik7CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlmaW5hbCBTdHJpbmcKKwkJZGJOYW1lID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+ZGF0YWJhc2U8L2I+OiAlczwvcD4iLCBmb3JtYXREYk5hbWUocHJvcHMpKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgZGJOYW1lICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyBkb0dFVF92aWV3REJJbmZvCisKKworCS8qIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0PnZlcnNpb24gIiArIHZlcnNpb24gKyAiIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIHJlcXVlc3QgPSAnIiArIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikgKyAiJzwvaT48L2g0PlxuIiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDE6PC9iPiAoQzIgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9PC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+e2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYyk8L2NvZGU+PC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbDwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPsOWbD9vcHRzPWZsZXgrY29tcCtvdGhlcitzcGVjPC9jb2RlPjwvcD4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMjo8L2I+IChpbnRlcm5hbCBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX0/cHJvcDE9WzAxMl0mYW1wO3Byb3AyPVswMTJdJmFtcDtzcGVjPVswMTJdPC9jb2RlPiAod2hlcmUgZWFjaCBwcm9wMSwgcHJvcDIsIHNwZWMgaXMgb3B0aW9uYWwpLjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw/cHJvcDE9MCZhbXA7cHJvcDI9MSZhbXA7c3BlYz0yPC9jb2RlPjwvcD4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfSIpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSclZCcgcHJvcDI9JyVkJyBzcGVjPSclZCcuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwkvKiAKKwlmb3IoaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJCX0JCisJICovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoIGxlbW1hSW5mby5vcHRzU2V0dGluZyA9PSBMZW1tYUluZm8uT1BUU19TRVRUSU5HX0MyICkgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMSxwcm9wMixzcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaW50CisJCW5XZnMgPSBsZW1tYUluZm8ubldmczsKKwkKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwkvLyBsb2cgb3V0Y29tZToKKwlpZiggbldmcyA8IDAgKQorCQlmb3V0LnByaW50ZigiRXJyb3I6ICVzOiByZXR1cm5pbmcgMCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMpOworCWVsc2UKKwkJZm91dC5wcmludGYoIkRlYnVnLiAlczogcmV0dXJuaW5nICVkIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYywgbldmcyk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIG5vdGU6CisJICogLSBpZiBCcm93c2VyIHJlcXVlc3Q6IEhUVFBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAndGV4dC9odG1sLC4uLnhtbC4uLicKKwkgKiAtIGlmIFdmb3JtU2VydmljZXMgcmVxdWVzdDogSHR0cFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICdhcHBsaWNhdGlvbi9qc29uJy4KKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqIAorCSAqIC0gc3VibWl0dGVkIFVSTCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hLCBpcyBpbnRlcnByZXRlZCBieSBnbGFzc2Zpc2ggYXMKKwkgKiAgIGJlaW5nIElTTy04ODU5LTEgZW5jb2RlZC4gV2hlbiB0aGUgcmVxdWVzdCBpcyBVVEYtOCBlbmNvZGVkLCBVbWxhdXRzIGFuZAorCSAqICAgJ8OfJyBhcmUgbWlzLWludGVycHJlZGVkLCBsZWFkaW5nIHRvIGFuIGVycm9uZXJvdXMgcmVxdWVzdCB0byB0aGUgRGVyYnkKKwkgKiAgIGRhdGFiYXNlLgorCSAqIC0gUmVxdWVzdGVkIGxlbW1hICdsZW1tYScgaGFzIHRvIGJlIHRyYW5zZm9ybWVkIHRvIFVURi04IGZpcnN0LgorCSAqIC0gbm90ZTogZXZlbiB3aGVuIHN1Ym1pdHRpbmcgdGhlIEdFVCByZXF1ZXN0IGJ5IHNwZWNpZnlpbmcgJ2NoYXJlbmNvZGU9VVRGLTgnLAorCSAqICAgZ2xhc3NmaXNoIGRvZXMgbm90IGNvbnZlcnQgaXQgYXV0b21hdGljYWxseSBhcyBleHBlY3RlZC4KKwkgKiAgIAorCSAqICAyMi4xMC4yMS9GQgorCSAqIAorCSAqIC0gaWYgYWNjZXB0PWFwcGxpY2F0aW9uL2pzb24gcmV0dXJuIFVURi04IChXZm9ybVNlcnZpY2VzKS4KKwkgKiAtIGVsc2UgaWYgYWNjZXB0PXRleHQvaHRtbCBkbyBub3QgdHJhbnNmb3JtIGNoYXJhY3RlciBlbmNvZGluZyAoQnJvd3NlcikuCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBDb25zdW1lcygiYXBwbGljYXRpb24vanNvbiwgdGV4dC9odG1sIikKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCQorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCWZpbmFsIGJvb2xlYW4KKwkJYkVuY29kZUxlbW1hID0gZmFsc2U7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CisJCisJLyogdGVzdDoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJaWYoIGJFbmNvZGVMZW1tYSApCisJCXsKKwkJLy8gd2hlbiBhY2NlcHRpbmcgSlNPTiwgdXJsIGhhcyB0byBiZSBjb252ZXJ0ZWQgdG8gVVRGLTgsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYToKKwkJdHJ5IHsKKwkJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obmV3IFN0cmluZyhsZW1tYS5nZXRCeXRlcygiSVNPLTg4NTktMSIpLCAidXRmLTgiKSk7CisJCQl9IAorCQljYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlMSkgeworCQkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCQlMZW1tYVJlc3BvbnNlCisJCQkJbGVtcmVzcCA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbXJlc3ApLmJ1aWxkKCk7CisJCQl9CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW1VURi04XSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCWVsc2UKKwkJeworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbdW5jaGFuZ2VkXSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCisJLyogZG9lcyBub3QgaGVscDoKKwkgU3RyaW5nCisJIAlyZXF1ZXN0Q2hhckVuY29kaW5nID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldENoYXJhY3RlckVuY29kaW5nKCk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiByZXF1ZXN0IGNoYXJhY3RlciBlbmNvZGluZyA9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RDaGFyRW5jb2RpbmcpOworCSovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXsKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQkvL3JldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJfQorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsJCisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCS8qCisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC90ZXN0L2luZm8vIik7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL2ZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJZm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzMvNTA4MjUwMTA4MTJiMDAxYzFjNDFjZTU1OWVhNWUxNmIgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzMvNTA4MjUwMTA4MTJiMDAxYzFjNDFjZTU1OWVhNWUxNmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U4MGVmZAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMy81MDgyNTAxMDgxMmIwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpAQCAtMCwwICsxLDY5MCBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDYuMTAuMjEiOyAvLyIxNy4wNi4yMCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4xIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCQlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCQlTdHJpbmcKKwkJCXN0YXR1czsKKwkJVXRpbHMKKwkJCXUgPSBuZXcgVXRpbHMoKTsKKwkJUHJvcGVydGllcworCQkJcHJvcHM7CisJCQorCQkvLyByZWFkIHRlc3QKKwkJcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworCQkvL0h0dHBTZXJ2bGV0Q29udGV4dAorCQkKKwkJLy8gaHR0cFNlcnZsZXRSZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKGVudik7CisJCUdsZW1tU2VydmljZXMuY2xhc3MKKwkJRmlsZUlucHV0U3RyZWFtCisJCQlpblByb3AgPSBnZXRTZXJ2bGV0Q29udGV4dCgpLiBTZXJ2bGV0Q29udGV4dC4gIC5nZXRSZXNvdXJjZUFzU3RyZWFtKCJHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiKTsgLy9uZXcgRmlsZUlucHV0CisJCS8vIGVuZCBvZiByZWFkIHRlc3QKKwkJCisJCS8vIHRlc3QKKwkJLyoKKwkJcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworCQkKKwkJICogcHJvcHMuc2V0UHJvcGVydHkoInAiLCAidGVzdCIpOworCQkgKgorCQlGaWxlT3V0cHV0U3RyZWFtIG91dDsKKwkJdHJ5IHsKKwkJCW91dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKCJnbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiKTsKKwkJCXByb3BzLnN0b3JlKG91dCwgICJ0ZXN0IEdsZW1tU2VydmljZXMgcHJvcGVydGllcyIpOworCQkJfSAKKwkJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX07CisJCSovCisJCQorCQkvLyBlbmQgb3Rlc3QKKwkJCisJCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCQlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIkFQSTogJXM6IC9pbmRleC9zdGF0dXMvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKworCQlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkpOworCisJCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwkJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiBQT1NUOiAvaW5kZXgvYWRkLzogdGV4dC9wbGFpbgorCSAqIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlLgorCSAqIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkCisJICogaW50byB0aGUgZGF0YWJhc2UuCisJICogSW5wdXQ6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqLworCUBQYXRoKCJhZGQiKSBAUE9TVCBAQ29uc3VtZXMoInRleHQvcGxhaW4iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgaW1wb3J0TGVtbWFEYXRhKFN0cmluZyBsaXN0KSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gYXJMaXN0ID0gbGlzdC5zcGxpdCgiXG4iKTsKKwkKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IGZzLmdldFBhdGgoZm5hbWVXZnMpOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2FkZC8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQorCS8vIFdyaXRlIHN1Ym1pdHRlZCBsaXN0IG9mIHdvcmRmb3JtcyB0byBmaWxlOgorCXRyeQorCQl7CisJCW9zID0gRmlsZXMubmV3T3V0cHV0U3RyZWFtKHApOworCQlvcy53cml0ZShsaXN0LmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSkpOworCSAgICBvcy5jbG9zZSgpOworCSAgICBiRG9uZSA9IHRydWU7CisJICAgIFN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGZpbGUgJyVzJyBiZXNjaHJpZWJlbi5cbiIsIGZ1bmMsIGZuYW1lV2ZzKTsKKwkgICAgfQorCWNhdGNoKElPRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisJCX0KKyAgICAKKwlpZiggYkRvbmUgKQorCQltc2cgPSAiPHA+TGlzdCB3cml0dGVuIHRvIGZpbGU6ICIgKyBwLnRvU3RyaW5nKCkgKyAiPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+PGI+RmlsZSBFcnJvcjogPC9iPiBjYW5ub3Qgd3JpdGUgdG8gIiArIHAudG9TdHJpbmcoKSArICIhPC9wPiI7CisJCisJLyoKKwkgKiAgZXhlY3V0ZSBHbGVtbSBzaGVsbCBzY3JpcHQ6CisJICovCisJU3RyaW5nCisJCW1zZ0dsZW1tU2NyaXB0LCBtc2dJbXBvcnQ7CisJaW50IAorCQlyID0gVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0KGZuYW1lU2NyaXB0LCBmbmFtZVdmcyk7CisJCisJaWYoIHIgPT0gMCApCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEF1c2bvv71ocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBpbXBvcnRHbGVtbUxlbW1hdGEgcmV0dXJucyByPSVkLlxuIiwgZnVuYywgcik7CisJaWYoIG5FcnJvcnMgPT0gMCApCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiAiICsgbkVycm9ycyArICIgZXJyb3JzITwvcD4iOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGVuZGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJLy8gUmV0dXJuIEluZm9zOgorCXJldHVybiAKKwkJCSAgICI8aHRtbD4iICsKKwkJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwl9CisKKwkvKiB2aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyB2aWV3REJJbmZvCisKKworCS8qIHZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIC0gU3RhdHVzOiA8aT5Xb3JrIGluIHByb2dyZXNzLi4uITwvaT4pPC9oND5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoICFvcHRpb25zLmVxdWFscygidW5kZWYiKSkKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEvcHJvcDIvc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEdsZW1tU2VydmljZXMgJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbkRhdGUsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8zMS80MDBlM2Q4ZmQ0YjAwMDFhMTVjZWFhNTQ4MzRlYjNmNyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMzEvNDAwZTNkOGZkNGIwMDAxYTE1Y2VhYTU0ODM0ZWIzZjcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc3NDQzYQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMzEvNDAwZTNkOGZkNGIwMDAxYTE1Y2VhYTU0ODM0ZWIzZjcKQEAgLTAsMCArMSw4NiBAQAorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgCisJeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisJeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgPGdyb3VwSWQ+ZGUua29yYXAuc2VydmljZXM8L2dyb3VwSWQ+CisgIDxhcnRpZmFjdElkPkdsZW1tU2VydmljZXM8L2FydGlmYWN0SWQ+CisgIDx2ZXJzaW9uPjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KKyAgPG5hbWU+R2xlbW1TZXJ2aWNlczwvbmFtZT4KKyAgCisgIDxkZXNjcmlwdGlvbj5SRVNUZnVsbCBHbGVtbVNlcnZpY2VzIGbDvHIgS29yQVA8L2Rlc2NyaXB0aW9uPgorICAKKyAgPGRlcGVuZGVuY2llcz4KKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+CisgICAgICA8dmVyc2lvbj4zLjguMTwvdmVyc2lvbj4KKyAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICA8L2RlcGVuZGVuY3k+CisgICA8ZGVwZW5kZW5jeT4KKyAgICA8Z3JvdXBJZD5qYXZheC5zZXJ2bGV0PC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPnNlcnZsZXQtYXBpPC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjIuNTwvdmVyc2lvbj4KKyAgIDwvZGVwZW5kZW5jeT4KKyAgIDwhLS0gaHR0cHM6Ly9tdm5yZXBvc2l0b3J5LmNvbS9hcnRpZmFjdC9qYXZheC53cy5ycy9qYXZheC53cy5ycy1hcGkgLS0+CisgICA8ZGVwZW5kZW5jeT4KKyAgICA8Z3JvdXBJZD5qYXZheC53cy5yczwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5qYXZheC53cy5ycy1hcGk8L2FydGlmYWN0SWQ+CisgICAgPHZlcnNpb24+Mi4wPC92ZXJzaW9uPgorICAgPC9kZXBlbmRlbmN5PgorICAgPGRlcGVuZGVuY3k+CisgICAgPGdyb3VwSWQ+Y29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmU8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+amFja3Nvbi1jb3JlPC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjIuOS42PC92ZXJzaW9uPgorICAgIDxzY29wZT5jb21waWxlPC9zY29wZT4KKyAgIDwvZGVwZW5kZW5jeT4KKwk8ZGVwZW5kZW5jeT4KKwkgIDxncm91cElkPmNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlPC9ncm91cElkPgorCSAgPGFydGlmYWN0SWQ+amFja3Nvbi1hbm5vdGF0aW9uczwvYXJ0aWZhY3RJZD4KKwkgIDx2ZXJzaW9uPjIuOS42PC92ZXJzaW9uPgorCTwvZGVwZW5kZW5jeT4KKwk8ZGVwZW5kZW5jeT4KKwkgIDxncm91cElkPmNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlPC9ncm91cElkPgorCSAgPGFydGlmYWN0SWQ+amFja3Nvbi1kYXRhYmluZDwvYXJ0aWZhY3RJZD4KKwkgIDx2ZXJzaW9uPjIuOS42PC92ZXJzaW9uPgorCSAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KKwk8L2RlcGVuZGVuY3k+CisKKwk8ZGVwZW5kZW5jeT4KKwkJPGdyb3VwSWQ+ZGUua29yYXAuc2VydmljZXM8L2dyb3VwSWQ+CisJCTxhcnRpZmFjdElkPnV0aWxzPC9hcnRpZmFjdElkPgorCQk8dmVyc2lvbj4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisJCTxzY29wZT5ydW50aW1lPC9zY29wZT4KKwk8L2RlcGVuZGVuY3k+CisJPGRlcGVuZGVuY3k+CisJCTxncm91cElkPmRlLmtvcmFwPC9ncm91cElkPgorCQk8YXJ0aWZhY3RJZD5qc29uPC9hcnRpZmFjdElkPgorCQk8c2NvcGU+cnVudGltZTwvc2NvcGU+CisJCTx2ZXJzaW9uPjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKwk8L2RlcGVuZGVuY3k+CisgIDwvZGVwZW5kZW5jaWVzPgorICAKKyAgPGJ1aWxkPgorICAgIDxzb3VyY2VEaXJlY3Rvcnk+c3JjPC9zb3VyY2VEaXJlY3Rvcnk+CisgICAgPHBsdWdpbnM+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1jb21waWxlci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjMuNy4wPC92ZXJzaW9uPgorICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8c291cmNlPjEuODwvc291cmNlPgorICAgICAgICAgIDx0YXJnZXQ+MS44PC90YXJnZXQ+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvcGx1Z2luPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4td2FyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+My4yLjE8L3ZlcnNpb24+CisgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgIDxmYWlsT25NaXNzaW5nV2ViWG1sPmZhbHNlPC9mYWlsT25NaXNzaW5nV2ViWG1sPgorICAgICAgICAgIDx3YXJTb3VyY2VEaXJlY3Rvcnk+V2ViQ29udGVudDwvd2FyU291cmNlRGlyZWN0b3J5PgorICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICA8L3BsdWdpbj4KKyAgICA8L3BsdWdpbnM+CisgICAgPGZpbmFsTmFtZT5HbGVtbVNlcnZpY2VzPC9maW5hbE5hbWU+CisgIDwvYnVpbGQ+CisgIAorPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMzIvNTA3ODU0Y2MyNjNlMDAxYzEzNjNiZWI5MzJhZTYzYTEgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzMyLzUwNzg1NGNjMjYzZTAwMWMxMzYzYmViOTMyYWU2M2ExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkZGIxNDEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzMyLzUwNzg1NGNjMjYzZTAwMWMxMzYzYmViOTMyYWU2M2ExCkBAIC0wLDAgKzEsNzYyIEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKK2ltcG9ydCBqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7CitpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitwdWJsaWMgY2xhc3MgR2xlbW1EQgorCit7CisJc3RhdGljIHB1YmxpYyBTdHJpbmcgZGJUYWJsZSAJPSAiR2xlbW1MZW1tYXRhIjsKKwlzdGF0aWMgU3RyaW5nIGRiTGVtbWEgCQkgCT0gImxlbW1hIjsKKwlzdGF0aWMgU3RyaW5nIGRiV2YJIAkJCT0gIndmIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDEgCQkJPSAicHJvcDEiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMiAJCQk9ICJwcm9wMiI7CisKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKG92ZXJ3cml0dGVuIGJ5IEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZuYW1lREIgPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgc2VydmVySG9zdCA9ICIvL2xvY2FsaG9zdDoxNTI3LyI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChmaW5hbCBhc3NpZ25tZW50cyk6CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyRW1iID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZERyaXZlciI7CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyQ2xpZW50ID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREcml2ZXIiOworCisJZmluYWwgc3RhdGljIGJvb2xlYW4KKwkJdXNlUHJlcGFyZWRTdG10ID0gdHJ1ZTsgLy8gMT11c2UgUHJlcGFyZWRTdGF0ZW1lbnQgYW5kIG5vdCBTdGF0ZW1lbnQuCisJCisJLy8gdmFsdWVzIHRvIGJlIGluc2VydGVkOiBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYy4KKwlzdGF0aWMgU3RyaW5nIGluc2VydFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKCclcycsICclcycsICclcycsICclcycsICclcycpIjsKKwlzdGF0aWMgU3RyaW5nIGluc2VydFByZXBhcmVkUXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoPywgPywgPywgPywgPykiOworCQorCS8vIENvbnN0YW50cyBvZiB0YWJsZSBHbGVtbUxlbW1hdGE6CisJc3RhdGljIGZpbmFsIGludCBtYXhMZW1tYVNpemUJPSA2NDsgCS8vIG1heC4gbm8uIG9mIGNoYXJzLCBhcyBkZWNsYXJlZCBpbiB0YWJsZSBHbGVtbUxlbW1hdGEuCisJc3RhdGljIGZpbmFsIGludCBtYXhXZlNpemUJCT0gNjQ7CS8vIG1heC4gbm8uIG9mIGNoYXJzLCBhcyBkZWNsYXJlZCBpbiB0YWJsZSBHbGVtbUxlbW1hdGEuCisJCisJLyogdmFyaWFibGVzICovCisJc3RhdGljIGludCBuRXhjZXB0U3RtdAkJCT0gMDsJLy8gY291bnQgbm8uIG9mIGV4Y2VwdGlvbnMgZm9yIHByZXBhcmVkU3RtdC4KKwlzdGF0aWMgaW50IG5FeGNlcHRJbnNlcnQJCT0gMDsJLy8gY291bnQgbm8uIG9mIGV4Y2VwdGlvbnMgZm9yIEluc2VydHMuCisJCisJLyoKKwkgKiBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkgKiAKKwkgKiBBcmd1bWVudHM6CisJICogcHJvcHMJOiBQcm9wZXJ0aWVzIGxvYWRlZCBieSB0aGUgR2xlbW1TZXJ2aWNlcy4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgZnVuY3Rpb24gbG9hZHMgb25seSB0aG9zZSBDb25zdGFudHMgbmVlZGVkIGluIHRoaXMgY2xhc3MuCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzCXByb3BzKQorCQorCXsKKwlmbmFtZURCCQkgCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAJIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCXNlcnZlckhvc3QJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgInNlcnZlckhvc3QiLAkiLy9sb2NhbGhvc3Q6MTUyNy8iKTsKKwlkZXJieURCVVJMIAkJPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJCQkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIHdoZW4gaW5kZXhpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSwgc2VsZWN0IHRoZSBzdWJtaXR0ZWQgZGJwYXRoLAorCS8vIChub3QgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZGJwYXRoOworCQorCS8vIG9wZW4gcmVhZGVyIG9uIEdsZW1tIExlbW1hdGE6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJCisJCW5FcnJvcnMgPSB3cml0ZURCTGVtbWF0YShpbik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIGZyb20gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwkvLyBjbG9zZSBSZWFkZXI6CisJdHJ5IHsKKwkJaW4uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQluRXJyb3JzID0gLTE7CisJCX0KKwkKKyAJaWYoIG5FcnJvcnMgPT0gMCApCisgCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydCBkb25lIHN1Y2Nlc3NmdWxseS5cbiIsIGZ1bmMpOworIAllbHNlCisgCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydDogJWQgRXJyb3JzIVxuIiwgZnVuYywgbkVycm9ycyk7CisgCQorCXJldHVybiBuRXJyb3JzOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhCisJCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAorCSAqICAgICAgICAgICAgICAgICAgICAgICB3cml0ZURCTGVtbWF0YSgpCisJICogICAgICAgICAgICAgICAgICAgICAgIAorCSAqIHN0b3JlcyBsaXN0IG9mIGxlbW1hdGEgKyBpbmZvcyBpbnRvIERlcmJ5IGRiLgorCSAqIEZpbGUgZm9ybWF0OiAiTGVtbWEgRGVjb21wb3NpdGlvbiBXZiIsCisJICogICAgICAgICAgICAgIGUuZy46ICJIw6R1c2VyICstIEhhdXMiLgorCSAqIFJldHVybnM6IDAgPSBPSyBvciAtMTogZ2VuZXJhbCBlcnJvciBvciA+IDA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogMDkuMDEuMjAvRkIKKwkgKiAwNC4xMS4yMS9GQiB0dXJuIGF1dG9jb21taXQgb2ZmIHRvIGFjY2VsZXJhdGUgaHVnZSBhbW91bnQgb2YgaW5zZXJ0aW9ucy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hdGEoQnVmZmVyZWRSZWFkZXIgaW4pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWF0YSI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlQcmVwYXJlZFN0YXRlbWVudAorCQlzdG10UHJlcCA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgCSA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CQorCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCW5JbnNlcnRlZCA9IDAsCS8vIG5vLiBvZiBsZW1tYS93ZiBwYWlycyBpbXBvcnRlZC4KKwkJcmV0ID0gMDsgLy8gT0suCisJYm9vbGVhbgorCQljb250YWluc1NwZWM7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlLAorCS8vIHNldCBBdXRvY29tbWl0ID0gZmFsc2UgdG8gYWNjZWxlcmF0ZSBpbnNlcnRpb25zOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQljb24uc2V0QXV0b0NvbW1pdChmYWxzZSk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkIChhdXRvQ29tbWl0PW9mZikuXG4iLCBmdW5jKTsKKwkJCisJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJc3RtdFByZXAgPSBjb24ucHJlcGFyZVN0YXRlbWVudChpbnNlcnRQcmVwYXJlZFF1ZXJ5KTsKKwkJZWxzZQorCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKworCQl3aGlsZSggKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggIT0gMyApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogJyVzJyBoYXMgJWQgY29tcG9uZW50cyEgRXhwZWN0ZWQgPSAzISBDYW5ub3QgYmUgc3RvcmVkIVxuIiwgZnVuYywgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQkJbkVycm9ycysrOworCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQorCQkJLy8gR2V0IEluZm8sIGlmIHdvcmRmb3JtIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSAnLScsIGludGVycHVuY3Rpb24gZXRjLjoKKwkJCS8vIGxlbW1hSW5mb1syXSA9IHdvcmRmb3JtLgorCQkJY29udGFpbnNTcGVjID0gTGVtbWFJbmZvLmlzV2ZTcGVjaWFsQ2FzZShsZW1tYUluZm9bMl0pOworCQkJLy8gc3RvcmUgaW50byBEQjoKKwkJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKHN0bXRQcmVwLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJZWxzZQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zKHN0bXQsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQkKKwkJCWlmKCByZXQgIT0gMCApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHN0b3JlIGxlbW1hICclcycgaW50byBEQiEgKHJldD0lZClcbiIsIGZ1bmMsIGxpbmUsIHJldCk7CisJCQkJbkVycm9ycysrOyAKKwkJCQl9CisJCQllbHNlCisJCQkJbkluc2VydGVkKys7CisJCQl9IC8vIHdoaWxlCisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIEdsZW1tIGxlbW1hdGEraW5mb3MgZnJvbSBmaWxlISBFeGl0IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsgCisJCX0JCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCWZpbmFsbHkgCisJCXsgCisJCXRyeSB7CisJCQkvLyBpbXBvcnRhbnQ6IG5vdyBjb21taXQsIGFzIGF1dG9Db21taXQgaXMgZGVhY3RpdmF0ZWQsCisJCQkvLyB0aGlzIGFsc28gcmVtb3ZlcyBkYXRhYmFzZSBsb2NrczoKKwkJCWNvbi5jb21taXQoKTsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29tbWl0IHN1Y2Nlc3NmdWxsLlxuIiwgZnVuYyk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29tbWl0IGF0IHRoZSBlbmQgb2YgdGhlIHdmcyBsaXN0IGZhaWxlZCFcbiIsIGZ1bmMpOworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQkKKwkJdHJ5IHsgLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQkJaWYoIGNvbiAhPSBudWxsICkgCisJCQkJY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgCisJCQkJc3RtdC5jbG9zZSgpOworCQkJaWYoIHN0bXRQcmVwICE9IG51bGwgKSAKKwkJCQlzdG10UHJlcC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJJbmZvIDogJXM6IG5vLiBvZiBsZW1tYXRhL3dmIHBhaXJzIGluc2VydGVkID0gJWQuXG4iLCBmdW5jLCBuSW5zZXJ0ZWQpOworCQorCXJldHVybiBuRXJyb3JzOyAvLyAwPU9LLCA+MCA9IG5vLiBvZiBlcnJvcnMuCisJfSAvLyB3cml0ZURCTGVtbWF0YQorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZDoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBydWxlcyBpbnRvIERlcmJ5IERCLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBpcyB0aGUgdmVyc2lvbiB3aXRoIGEgUHJlcGFyZWRRdWVyeS4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIHNwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxNy4wMS4yMC9GQgorCSAqIDA1LjEuMjEvRkIgcmVqZWN0IGxlbW1hL3dmID4gNjQgY2hhcnMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKAorCQkJUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCwgCisJCQlTdHJpbmcgbGVtbWEsIAorCQkJU3RyaW5nIHdmLCAKKwkJCVN0cmluZyBkZWNvbXBvc2l0aW9uLCAKKwkJCWJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkIjsKKwlmaW5hbCBib29sZWFuCisJCWJMb2cgPSBmYWxzZTsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlib29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwkvLyBjaGVjayBzaXplIG9mIHdmIGFuZCBsZW1tYSBhZ2FpbnN0IGZpZWxkIHNpemUgaW4gdGFibGUgR2xlbW1MZW1tYXRhOgorCWlmKCBsZW1tYS5sZW5ndGgoKSA+PSBHbGVtbURCLm1heExlbW1hU2l6ZSApIAorCQl7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogbGVtbWEgcmVqZWN0ZWQgKD4gJWQpOiAnJXMnIVxuIiwKKwkJCQlmdW5jLCBtYXhMZW1tYVNpemUsIGxlbW1hKTsKKwkJcmV0dXJuIDQ7CisJCX0KKwlpZiggd2YubGVuZ3RoKCkgPj0gR2xlbW1EQi5tYXhXZlNpemUgKSAKKwkJeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdmIHJlamVjdGVkICg+ICVkKTogJyVzJyFcbiIsCisJCQkJZnVuYywgbWF4V2ZTaXplLCB3Zik7CisJCXJldHVybiA1OworCQl9CisJIAorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICAKKwkvLyBmb3IgbG9naW5nIG9ubHk6CisJc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCWlmKCBiTG9nICkKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisgICAgLy8gbm93IGluc2VydCBuZXcgdmFsdWVzIGludG8gUHJlcGFyZWRTdGF0ZW1lbnQ6CisgICAgdHJ5IHsKKyAgICAJc3RtdC5zZXRTdHJpbmcoIDEsIGxlbW1hKTsKKyAgICAgICAgc3RtdC5zZXRTdHJpbmcoIDIsIHdmKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDMsIHByb3AxKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDQsIHByb3AyKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDUsIHNwZWMpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByZXBhcmVkIHN0bXQgPSAnJXMnLlxuIiwgIGZ1bmMsIHN0bXQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUxKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoCSJFcnJvcjogJXM6IHdoaWxlIGZpbGxpbmcgcHJlcGFyZWQgc3RhdGVtZW50IHdpdGggbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSclYicgcHJvcDI9JyViJyBzcGVjPSclYichXG4iLCAgCisJCQkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQlpZiggKytuRXhjZXB0U3RtdCA8PSAxICkKKwkJCWUxLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorICAgIAorICAgIHRyeSB7CisJCS8vIGV4ZWN1dGUgdGhlIGZpbGxlZCBwcmVwYXJlZCBzdGF0ZW1lbnQ6CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiEgKG49JWQpXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLCBuKTsKKyAJCQlyZXR1cm4gMjsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWlmKCArK25FeGNlcHRJbnNlcnQgPD0gMSApCisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMzsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvczoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBpbnRvIERlcmJ5IERCLgorCSAqIFBhcmFtZXRlcnM6CisJICogY29udGFpbnNTcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTAuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3MoU3RhdGVtZW50IHN0bXQsIFN0cmluZyBsZW1tYSwgU3RyaW5nIHdmLCBTdHJpbmcgZGVjb21wb3NpdGlvbiwgYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3MiOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCUJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICBzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgICAgCisgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisJdHJ5IHsKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZShzcWxJbnNlcnQpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDE7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hRGF0YQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGZyb20gdGhlIEdsZW1tREIuCisJICogSW5wdXQ6IGxlbW1hICsgR0xFTU1fT1BUU194eHggKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYURhdGEoTGVtbWFJbmZvIGxlbW1hSW5mbywgUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hRGF0YSI7CisKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlsZW1tYUluZm8uY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlsZW1tYUluZm8uc3RtdCA9IGxlbW1hSW5mby5jb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWludCByID0gcmVhZERCTGVtbWEobGVtbWFJbmZvLnN0bXQsIGxlbW1hSW5mbyk7CisJCQkKKwkJaWYoIHIgIT0gMCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBnZXQgZGF0YSBmb3IgbGVtbWE9JyVzJyBvcHRpb25zPSclcychXG4iLCAKKwkJCQkJZnVuYywgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCQkJcmV0dXJuIDE7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBsZW1tYUluZm8uY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWFEYXRhCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgYnkgYWNjZXNzaW5nIHRoZSBHbGVtbURCLgorCSAqIElucHV0IDogbGVtbWEgKyBwcm9wMSsyIChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiBPdXRwdXQ6IAorCSAqICAtIGNvbnRhaW5zIGEgUmVzdWx0U2V0IGZvciBmZXRjaGluZyB0aGUgd29yZGZvcm1zLgorCSAqIAkgIFRoaXMgUmVzdWx0U2V0IHdpbGwgaGF2ZSBiZSBiZSBjbG9zZWQgd2l0aCBMZW1tYUluZm8uY2xvc2UoKS4KKwkgKiAJICBUaGUgbm8uIG9mIGZvdW5kIHdvcmRmb3JtcyBpcyBub3Qga25vd24gdGlsbCB3ZQorCSAqIAkgIGZldGNoIGFsbCBvZiB0aGVtIGZyb20gUmVzdWx0U2V0ISAKKwkgKiAJLSBkdWUgdG8gU0VMRUNUIERJU1RJTkNUIG9ubHkgdW5pcSB3ZiBhcmUgcmV0dXJuZWQuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hKFN0YXRlbWVudCBzdG10LCBMZW1tYUluZm8gbGVtbWFJbmZvKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWEiOworCVN0cmluZworCQlzcWw7CisJCQorCXNxbCA9IFN0cmluZy5mb3JtYXQoIlNFTEVDVCBESVNUSU5DVCB3ZiBmcm9tICVzIFdIRVJFIGxlbW1hPSclcycgJXMgJXMgJXMiLCAKKwkJCWRiVGFibGUsCisJCQlsZW1tYUluZm8ubGVtbWEsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICJBTkQgcHJvcDE9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AxID09IDEgPyAiQU5EIHByb3AxPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICJBTkQgcHJvcDI9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AyID09IDEgPyAiQU5EIHByb3AyPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICJBTkQgc3BlYz0ndHJ1ZSciICAgOiAKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIkFORCBzcGVjPSdmYWxzZSciICA6ICIiKTsKKwkKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCBmdW5jLCBsZW1tYUluZm8ucHJvcDEsIGxlbW1hSW5mby5wcm9wMiwgbGVtbWFJbmZvLnNwZWMpOworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsID0gJyVzJy5cbiIsIGZ1bmMsIHNxbCk7CisKKwl0cnkgeworCQlsZW1tYUluZm8ucmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsJCisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hlbiBleGVjdXRpbmcgc3FsPSclcychXG4iLCBmdW5jLCBzcWwpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBhbGwgc3FsIHN0dWZmIGFyZSBjbG9zZWQgb3V0c2lkZSB0aGlzIGZ1bmN0aW9uLCBzbyBkb24ndCBjbG9zZSB0aGVtIGhlcmUhCisJCX0JCisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvcworCSAqIFJldHVybnMgR2VuZXJhbCBJbmZvcyBhYm91dCB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgcmVhZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkluZm9zKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlkYkluZm8gPSByZWFkRGJMZW1tYXRhSW5mb3Moc3RtdCk7CisJCQkKKwkJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHJlYWQgR2VuZXJhbCBJbmZvcyBmcm9tIEdsZW1tIERhdGFiYXNlIVxuIiwgZnVuYyk7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiBudWxsOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIGNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIHN0bXQuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gbWF5IGJlIG51bGwuCisJCQorCX0gLy8gcmVhZERiSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJMZW1tYXRhSW5mb3M6CisJICogcmVhZHMgYW5kIHJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY29udGVudCAKKwkgKiBvZiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogUmV0dXJucyAwPU9LIG9yIGVycm9yIGNvZGUgPiAwLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiTGVtbWF0YUluZm9zKFN0YXRlbWVudCBzdG10KQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJyZWFkRGJMZW1tYUluZm9zIjsKKwlTdHJpbmdbXQorCQlzcWwgPSB7CSJTRUxFQ1QgQ09VTlQoZGlzdGluY3QgbGVtbWEpIGZyb20gIiArIGRiVGFibGUgLAkvLyBjb3VudHMgbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlLAkJCQkJLy8gY291bnRzIHRvdGFsIG5vLiBvZiBzdG9yZWQgd29yZGZvcm1zLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9dHJ1ZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9dHJ1ZSJ9OworCVJlc3VsdFNldAorCQlyZXMgPSBudWxsOyAKKwlpbnRbXQorCQluQ291bnRzID0gbmV3IGludFtzcWwubGVuZ3RoXTsKKwlpbnQJCQorCQlpID0gMCwgCisJCW5EaXN0TGVtbWF0YSA9IC0xLAkvLyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YSBpbiBEQi4KKwkJbldmcwkJID0gLTE7CS8vIG5vLiBvZiB3b3JkZm9ybXMgaW4gREIuCisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGV4dHJhY3RpbmcgYWdyZWdhdGVkIGluZm9zIGFib3V0IERhdGFiYXNlIGNvbnRlbnRzLi4uXG4iLCBmdW5jKTsKKwkKKwlkYkluZm8gPSBuZXcgR2xlbW1EQkluZm8oKTsKKworCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCXRyeSB7CisJCWZvcihpPTA7IGk8c3FsLmxlbmd0aDsgaSsrKQorCQkJeworCQkJcmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsW2ldKTsKKwkJCWlmKCByZXMubmV4dCgpICkKKwkJCQlkYkluZm8uY291bnRzW2ldID0gcmVzLmdldEludCgxKTsgLy8gY291bnQgaXMgaW4gY29sdW1uIDEuCisJCQllbHNlCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGV4dHJhY3QgY291bnQgZnJvbSAnJXMnIVxuIiwgZnVuYywgc3FsW2ldKTsKKwkJCQlkYkluZm8uY291bnRzW2ldID0gLTE7CisJCQkJfQorCQkJfQorICAgICAgIAorICAgICAgICB9CisgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgCXsKKyAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBzcWw9JyVzJyBmYWlsZWQhXG4iLCBmdW5jLCBzcWxbaV0pOworICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgIHJldHVybiBudWxsOworICAgIAl9CisJZmluYWxseSB7CisJCXRyeSB7CisJCQlyZXMuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0KKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIE9LCisJfSAvLyByZWFkRGJMZW1tYXRhSW5mb3MKKwkKKwkvKioqKioqKioqKioqKioqKioqKiogVGVzdCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3NfdGVzdAorCSAqIFRoaXMgaXMgZGVidWcgY29kZSB3cml0dGVuIHRvIHRlc3QgaWYgd2UgY2FuIGFjY2VzcyB0aGUgRGVyYnkKKwkgKiBEYXRhYmFzZSBmcm9tIGFuIGV4dGVybmFsIEphdmEgUHJvZ3JhbW0uCisJICogMDguMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IHJlYWREYkluZm9zX3Rlc3QoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCVN0cmluZworCQlpbnNlcnRTdG10ID0gIiI7CisJCisJLy8gQ29ubmVjdCB0byBEZXJieSBkYXRhYmFzZToKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkJCisJCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCQl0cnkKKwkJCXsKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBTdHJpbmcgCisgICAgICAgICAgICAJc3FsID0gIlNFTEVDVCAqIEZST00gIiArIGRiVGFibGU7CisgICAgICAgICAgICBSZXN1bHRTZXQgCisgICAgICAgICAgICAJcmVzdWx0ID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsKKyAKKyAgICAgICAgICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogdGFibGUgJyVzJzpcbiIsICBmdW5jLCBkYlRhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKHJlc3VsdC5uZXh0KCkpIHsKKyAgICAgICAgICAgIAlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCInJXMnIDogJyVzJyA6ICclcycgOiAnJXMnIC5cbiIsIHJlc3VsdC5nZXRTdHJpbmcoMSksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDIpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygzKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoNCkpOworICAgICAgICAJCWluc2VydFN0bXQgPSBpbnNlcnRTdG10ICsgIjxwPiIgKyByZXN1bHQuZ2V0U3RyaW5nKDEpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDIpICsgIiA6ICIgKworICAgICAgICAgICAgICAgIAkJICAgICByZXN1bHQuZ2V0U3RyaW5nKDMpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDQpICsgIjwvcD4iOworICAgICAgICAgICAgCX0KKwkJCX0KKwkgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgICAgIAl7CisJICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGluc2VydFN0bXQ9JyVzJyBmYWlsZWQhLlxuIiwgZnVuYywgc3RtdCk7CisgICAgICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgICAgICBjb24uY2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3RpbmcgJyVzIGZhaWxlZCFcbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwl0cnkgeworCQljb24uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQkKKwl9IC8vIHJlYWREYkluZm9zX3Rlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiBpbXBvcnRHbGVtbUxlbWF0YV90ZXN0CisJICogVGVzdCBWZXJzaW9uLgorCSAqIDEyLjEyLjE5L0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdChTdHJpbmcgZm4pCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YV90ZXN0IjsKKwlJbnB1dFN0cmVhbSAKKwkJaW47CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4yID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCXI7CisJCisJLyoKKwkgKiBSZWFkIExlbW1hdGEgKyBJbmZvIGZyb20gZmlsZTogCisJICovCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJCisJdHJ5IHsKKwkJLy9pbiA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKCBuZXcgRmlsZUlucHV0U3RyZWFtKGZuKSApOworCQlpbjIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCXdoaWxlKCAobGluZSA9IGluMi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggPT0gMyApCisJCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IEltcG9ydDogbGVtPSclcycgRGVjb21wPSclcycgV2Y9JyVzJy5cbiIsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzFdLCBsZW1tYUluZm9bMl0pOworCQkJZWxzZQorCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiBpbXBvcnRHbGVtbUxhbWF0YTogJyVzJyBoYXMgJWQgY29tcG9uZW50cyFcbiIsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJfQorCQl9IAorCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgb3BlbiAnJXMnIVxuIiwgZnVuYywgZm4pOworCQlyZXR1cm4gMTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCisJdHJ5IHsKKwkJaW4yLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQl9CisJCisJLyogQ2hlY2sgY29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwkgKi8gCisJciA9IHJlYWREYkluZm9zX3Rlc3QoKTsKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIHI7CisJCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMzMvZTBhYTNmOGM1NTNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzMzL2UwYWEzZjhjNTUzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NzQ2ZTkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzMzL2UwYWEzZjhjNTUzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsOTg1IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKKy8qIDAuMSA6IDE3LjA2LjIwL0ZCIAorICogMC4yIDogMjUuMTAuMjEvRkIKKyAqICAgICAgIGxvZ2luZyBvZiB0aGUgQVBJIFJlcXVlc3RzLgorICogICAgICAgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisgKiAgICAgICBjb3JyZWN0aW5nIGNhbGxpbmcgb2YgbGVtbWEgKyBwcm9wMS9wcm9wMi9zcGVjLgorICogICAgICAgaGFuZGxpbmcgb2YgbGVtbWF0YSB3aXRoICfDnycuCisgKiAKKyAqIEdlbmVyYWwgY29tbWVudHMgdG8gdGhlIGVuY29kaW5nIG9mIGRlcml2YXRpb25zIGZyb20gbGVtbWEgdG8gd2ZzIGFuZCBob3cgdGhleSBhcmUgZW5jb2RlZAorICogaW4gdGhlIERlcmJ5IGRhdGFiYXNlOgorICogCisgKiBHTEVNTSBlbmNvZGluZzogIAorICogICBfIF8gOiArRmxleCAgICAgICDDlmxlIC0+IMOWbCAgICAgIAorICogICArIF8gOiArQ29tcCAgICAgICDDlmxsYW1wZSAtPiDDlmwgb3IgTGFtcGUgKGNvbXBvdW5kKS4KKyAqICAgXyArIDogK290aGVyICAgICAgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm5zY2h1aCAobm8gY29tcG91bmQgZm9yICdUdXJuc2NodWgnLCBvbmx5IHByZWZpeCkuCisgKiAgICsgKyA6ICtDb21wK290aGVyIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuICsgU2NodWggKGNvbXBvdW5kIGZvciAnU2NodWgnICsgUHJlZml4KS4KKyAqIEMyIGxlbW1hdGl6YXRpb24gb3B0aW9uczoKKyAqICAgRmxleCAgKGlkZW50aWNhbCB0byBHbGVtbSkKKyAqICAgQ29tcCAgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKQorICogICBPdGhlciAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpLgorICogICBTcGVjICAob25seSBDMjogaW5jbHVkZXMgYWxsIHdmcyB3aXRoIGhpcGhlbiBhbmQvb3Igc29tZSBub24tYWxwaGFiZXRpYyBJU084ODU5LTEgY2hhcnMpCisgKiAgICAgICAgIEUuZy4gw5ZsLUV4cG9ydGUsICJNYXJrZW4iLcOWbGUuCisgKiBEZXJieSBFbmNvZGluZzoKKyAqICBwcm9wMSAJcHJvcDIJc3BlYyAgIAltZWFuaW5nIGluIEMyOgorICogIDAJCTAJCS0JCUZsZXgKKyAqICAxCQkwCQktCQlDb21wCisgKiAgMAkJMQkJLQkJT3RoZXIgKHByZWZpeCkKKyAqICAxCQkxCQktCQlDb21wICsgT3RoZXIKKyAqICAtCQktCQkwCQktU3BlYworICogIC0JCS0JCTEJCStTcGVjCisgKiAKKyAqIEV4YW1wbGVzOgorICogJlNjaHVoCQkJOiBTY2h1aCwgU2NodWhlLCAuLi4gb25seSBmbGV4aW9ucworICogJlNjaHVoK2NvbXAJCTogU2NodWhlLCBUdXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMuCisgKiAmU2NodWgrb3RoZXIJCTogU2NodWhlLCBBbnRpc2NodWhlLi4uIGZsZXhpb25zIGFuZCBwcmVmaXhlZCB3ZnMgKG5vIGNvbXBvdW5kcykuCisgKiAmU2NodWgrY29tcCtvdGhlcjogU2NodWhlLCBBbnRpc2NodWhlLCBUdXJuc2NodWhlLCBBbnRpdHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzIGFuZCAKKyAqIAkJCQkJICBwcmVmaXhlZCBzaW5nbGUgd2ZzIChBbnRpc2NodWhlKSBhbmQgcHJlZml4ZWQgY29tcG91bmRzLgorICogJlNjaHVoK3NwZWMJCTogIkFudGkiLVNjaHVoZSwgNjhnZXItU2NodWhlLi4uIG1heSBiZSBjb21iaW5lZCB3aXRoIGV2ZXJ5IG9wdGlvbnM6IGFkZHMKKyAqICAgICAgICAgICAgICAgICAgICB3ZnMgd2l0aCBoeXBoZW4gYW5kL29yIG5vbi1hbHBoYWJldGljIGNoYXJzLgorICogCisgKiBDb252ZXJzaW9uIHJ1bGVzOgorICogCisgKiAgJnNjaGxpZcOfZW4gLT4gaW50ZXJuYWwgc2VhcmNoIGZvciAnc2NobGllc3NlbicsCisgKiAgYmVjYXVzZSBHbGVtbSBvdXRwdXRzICdzcycgZm9yICfDnycuCisgKiAgCisgKiBDaGFyYWN0ZXIgRW5jb2Rpbmc6CisgKiAKKyAqIC0gV2hlbiBpbXBvcnRpbmcgd2ZzIHRvIHRoZSBEZXJieSBEYXRhYmFzZSB3aXRoIGRvQ3VybEdsZW1tU2VydmljZXMvaW5kZXhMZW1tYXRhOgorICogCisgKiAgIElOUFVUOiB3b3JkZm9ybSBsaXN0IGluIFtVVEYtOF0gOiBVVEYtOCBpcyB0aGVuIGNvbnZlcnRlZCB0byBMYXQxIGZvciBHbGVtbSwKKyAqICAgICAgICAgIHRoZSBvdXRwdXQgb2YgR2xlbW0gW0xhdDFdIGlzIHJldHVybmVkIHRvIHRoZSBHbGVtbVNlcnZpY2VzIHdpdGhvdXQgcmVjb252ZXJzaW9uCisgKiAgICAgICAgICB0byBVVEY4IGFuZCBpbXBvcnRlZCBpbnRvIERlcmJ5IERhdGFiYXNlIHVuY2hhbmdlZC4KKyAqCQkKKyAqLworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA0LjExLjIxIjsgCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4yIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVByb3BzCQk9ICIvV0VCLUlORi9HbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiOworCQorCS8vIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSByZWFkIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzICh0aGVzZSBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzKToKKwlwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCAJCT0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCXByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCQkJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwlAQ29udGV4dAorCXByaXZhdGUgU2VydmxldENvbnRleHQgc2VydmxldENvbnRleHQ7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmb3V0CT0gbnVsbDsKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZlcnIJPSBudWxsOwkJCisJCQorCS8qIAorIAkgKiAKKwkgKiAtIGFmdGVyIGxvYWRQcm9wZXJ0aWVzLCBzZXRzIHRoZSBjbGFzcyB2YXJpYWJsZSB3aXRoIGxvYWRlZCBwcm9wZXJ0eSB2YWx1ZXMuCisJICogCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCUdTX1dvcmtpbmdQYXRoIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJHU19Xb3JraW5nUGF0aCIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyIpOworCWZuYW1lV2ZzCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVdmcyIsIAkgICAiZ2xfd2ZzX2luLnR4dCIpOworCWZuYW1lV2ZzCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVXZnM7CisJZm5hbWVPdXQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lT3V0IiwgCSAgICJHbGVtbVNlcnZpY2VzLmxvZyIpOworCWZuYW1lT3V0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVPdXQ7CisJZm5hbWVFcnIJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lRXJyIiwgCSAgICJHbGVtbVNlcnZpY2VzLmVyciIpOworCWZuYW1lRXJyCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVFcnI7CisJZm5hbWVTY3JpcHQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lU2NyaXB0IiwJICAgImRvR2xlbW0iKTsKKwlmbmFtZVNjcmlwdAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lU2NyaXB0OworCWZuYW1lTGVtYXRhCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUxlbWF0YSIsICAgICJ0bXAvbGVtMyIpOworCWZuYW1lTGVtYXRhCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVMZW1hdGE7CisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKgorCSAqICBsb2dfUmVxdWVzdDoKKwkgKiAgCisJICogIC0gd3JpdGUgaW5mbyBhYm91dCBBUEkgUmVxdWVzdC4KKwkgKiAgUGFyYW1ldGVyczoKKwkgKiAgcmVxdWVzdFBhdGgJOiBwYXRoIG9mIHdlYmFwcCBhZGRyZXNzZWQgYnkgdGhlIHJlcXVlc3QuCisJICogIGZ1bmMJCTogbmFtZSBvZiB0aGUgZnVuY3Rpb24gd2hpY2ggaW1wbGVtZW50cyB0aGUgcmVxdWVzdC4KKwkgKiAgCisJICogIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGxvZ19SZXF1ZXN0KFN0cmluZyByZXF1ZXN0UGF0aCwgU3RyaW5nIGZ1bmMpCisJCisJeworCS8vIHRyYW5zZm9ybSAiZGF0ZVR0aW1lIiAtPiAiZGF0ZSB0aW1lIjoKKwkKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwlmb3V0LnByaW50ZigiIyMjICVzOiAlcyA6IHZlcnM9JyVzJywgdmRhdGU9JyVzJyByZXF1ZXN0PSclcycuXG4iLCBmdW5jLCByZXF1ZXN0UGF0aCwgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIAorCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisJZm91dC5wcmludGYoIiMjI1xuIik7CisJfSAvLyBsb2dfUmVxdWVzdAorCQkKKwkvKiBmb3JtYXREYk5hbWUKKwkgKiAKKwkgKiAtIGdldHMgbmFtZSBvZiBEYXRhYmFzZSB1c2VkIGJ5IERlcmJ5IGZyb20gcHJvcHMgCisJICogICBhbmQgZm9ybWF0IGl0IHRvIEhUTUwuCisJICogIAorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBTdHJpbmcgZm9ybWF0RGJOYW1lKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCVN0cmluZworCQlkYk5hbWU7CisJU3RyaW5nCisJCWRiUGF0aCA9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCWludAorCQlqID0gZGJQYXRoLmxhc3RJbmRleE9mKCcvJyk7CisJCisJaWYoIGogPiAwICkKKwkJZGJOYW1lID0gZGJQYXRoLnN1YnN0cmluZyhqKzEpOworCWVsc2UKKwkJZGJOYW1lID0gZGJQYXRoOworCQorCXJldHVybiBkYk5hbWU7IC8vICI8cD48Yj5EYXRhYmFzZTogIiArIGRiTmFtZSArICI8L2I+PC9wPlxuIjsKKwl9IC8vIGZvcm1hdERiTmFtZQorCisJLyoKKwkgKiBjbG9zZUxvZ1N0cmVhbXM6CisJICogCisJICogLSBjbG9zZSB0aGUgZm91dC9mZXJyIGxvZyBzdHJlYW1zLgorCSAqIAorCSAqIDI2LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGNsb3NlTG9nU3RyZWFtcygpCisJCisJeworCWlmKCBmb3V0ICE9IG51bGwpCisJCWZvdXQuY2xvc2UoKTsKKwlmb3V0ID0gbnVsbDsKKwkKKwlpZiggZmVyciAhPSBudWxsICkKKwkJZmVyci5jbG9zZSgpOworCWZlcnIgPSBudWxsOworCX0gLy8gY2xvc2VMb2dTdHJlYW1zCisJCisJLyogaW5pdF9hbmRfbG9nX1JlcXVlc3QKKwkgKiAKKwkgKiAtIGxvYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLCBzZXRzIEdsZW1tU2VydmljZXMgY29uc3RhbnRzCisJICogICBhbmQgbG9ncyB0aGUgcmVxdWVzdC4KKwkgKiAtIGxvYWQgcHJvcGVydGllcyBhbmQgc2V0IGNvbnN0YW50cyBiZWZvcmUgbG9nZ2luZyBhbnl0aGluZywgYmVjYXVzZQorCSAqICAgbG9nZ2luZyB3aWxsIGJlIGRvbmUgaW50byB0aGUgbGFzdCBzdGRvdXQvc3RkZXJyIG9wZW5lZCBpbiBnbGFzc2Zpc2gncyBKVk0sCisJICogICBlLmcuIGluIHRoZSBsb2cgb2YgYW5vdGhlciBTZXJ2aWNlLgorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBQcm9wZXJ0aWVzIGluaXRfYW5kX2xvZ19SZXF1ZXN0KFN0cmluZyBmdW5jLCBTdHJpbmcgcmVxdWVzdFBhdGgpCisJCisJeworCVN0cmluZworCQlyZWFsUGF0aCA9IHNlcnZsZXRDb250ZXh0LmdldFJlYWxQYXRoKGZuYW1lUHJvcHMpOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAoaWYgbGFzdCBwYXJhbSA9IHRydWUpOgorCVByb3BlcnRpZXMKKwkJcHJvcHMgPSBVdGlscy5sb2FkUHJvcGVydGllcyhzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpLCBmbmFtZVByb3BzLCByZWFsUGF0aCwgZmFsc2UpOworCQorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBmb3V0IGFuZCBmZXJyIGFzIHJlcGxhY2VtZW50IGZvciBzdGRvdXQvc3RkZXJyIGZvciB1c2UgaW4gR2xlbW1TZXJ2aWNlcy4KKwkvLyBkbyBub3QgdXNlIG9yIHJlZGlyZWN0IFN5c3RlbS5vdXQgYW5kIFN5c3RlbS5lcnIsIGFzIHRoZXkgd2lsbCBiZSByZWRpcmVjdGVkCisJLy8gYnkgb3RoZXIgU2VydmljZXMgaW4gdGhlIHNhbWUgZ2xhc3NmaXNoIEpWTSwgZS5nLiBieSB0aGUgV2Zvcm1TZXJ2aWNlcy4KKwlmb3V0ID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lT3V0KTsKKwlmZXJyID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lRXJyKTsKKwkKKwkvL1V0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCisJbG9nX1JlcXVlc3QocmVxdWVzdFBhdGgsIGZ1bmMpOworCQorCXJldHVybiBwcm9wczsKKwl9IC8vIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJU3RyaW5nCisJCXN0YXR1czsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9zdGF0dXMvIik7CisJCisJLy8gaHR0cFNlcnZsZXRSZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKGVudik7CisJCisJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnByb3BlcnRpZXM8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5kYXRhYmFzZTwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpLAorCQkJCQkJCXNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcykgPT0gbnVsbCA/ICJub3QgZm91bmQiIDoKKwkJCQkJCQkJcHJvcHMuaXNFbXB0eSgpID8gImVtcHR5IiA6ICJsb2FkZWQiLAorCQkJCQkJCWZvcm1hdERiTmFtZShwcm9wcykKKwkJCQkJCQkpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCWNsb3NlTG9nU3RyZWFtcygpOworCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogCisJICogZG9QT1NUX2ltcG9ydExlbW1hRGF0YToKKwkgKiAKKwkgKiBQT1NUOiAvaW5kZXgvYWRkL3tkYXRhYmFzZW5hbWV9OiB0ZXh0L3BsYWluCisJICogCisJICogUGFyYW1ldGVyczoKKwkgKiBsaXN0CQkgCTogdGhlIGxpc3Qgb2Ygd2ZzIHNlbnQgaW4gdGhlIGJvZHkgb2YgdGhlIFBPU1QgcmVxdWVzdC4KKwkgKiBkYnBhdGhFbmNvZGVkOiB0aGUgbG9jYXRpb24gb2YgdGhlIGRhdGFiYXNlIHdoZXJlIHRoZSBsZW1tYSt3ZnMgYXJlIHRvIGJlIHN0b3JlZC4KKwkgKiAgICAgICAgICAgICAJICBlbmNvZGVkIGFzICIuaG9tZS51c2VyLktvckFQLi4uLiIsIG11c3QgYmUgY29udmVydGVkIHRvCisJICogICAgICAgICAgICAJICAiL2hvbWUvdXNlci9Lb3JBUC8uLi4iCisJICogICAgICAgICAJCSAgSU1QT1JUQU5UOiBkbyBub3QgdXNlIGEgJy4nIGZvciBlbmNvZGluZyBhbnl0aGluZyBlbHNlIHRoYW4gYSAnLycuCisJICogTm90ZXMgICAgIDoKKwkgKiAtIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlIGxvY2F0ZWQgYXQgJ2RhdGFiYXNlbmFtZScuCisJICogLSBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZCBpbnRvIGEgRGVyYnkgZGF0YWJhc2UuCisJICogSW5wdXQJIDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICogMDQuMTEuMjEvRkIKKwkgKiAtIHN1Ym1pdHRlZCBkYXRhYmFzZSBwYXRoLgorCSAqLworCQorCUBQYXRoKCJhZGQve2RhdGFiYXNlcGF0aH0iKSAKKwlAUE9TVCAKKwlAQ29uc3VtZXMoInRleHQvcGxhaW4iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCQkJCQkJCSgKKwkJCQkJCQlTdHJpbmcgCQkJCQkJCQkJCSAgbGlzdCwKKwkJCQkJCQlAUGF0aFBhcmFtKHZhbHVlPSJkYXRhYmFzZXBhdGgiKSBmaW5hbCBTdHJpbmcgZGJwYXRoRW5jb2RlZAorCQkJCQkJCSkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb1BPU1RfaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSAKKwkJYXJMaXN0ID0gbGlzdC5zcGxpdCgiXG4iKTsKKwlTdHJpbmcKKwkJZGJwYXRoOworCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gbnVsbDsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2FkZC97ZGJwYXRofSIpOworCQorCWRicGF0aCA9IGRicGF0aEVuY29kZWQucmVwbGFjZSgnLicsICcvJyk7CisJCisJZm91dC5wcmludGYoIkluZm8gOiAlczogc2VsZWN0ZWQgZGF0YWJhc2UgcGF0aCA9ICclcycuXG4iLCBmdW5jLCBkYnBhdGgpOworCWZvdXQucHJpbnRmKCJJbmZvIDogJXM6IHdvcmtpbmcgZGlyZWN0b3J5ID0gJyVzJy5cbiIsIGZ1bmMsIEdTX1dvcmtpbmdQYXRoKTsKKwkKKwkvLyBzZXQgZmlsZSBhbmQgcGF0aHMgYWZ0ZXIgR1NfV29ya2luZ1BhdGggaGFzIGJlZW4gaW5pdGlhbGlzZWQ6CisJcCA9IGZzLmdldFBhdGgoZm5hbWVXZnMpOworCQorCS8vIFdyaXRlIHN1Ym1pdHRlZCBsaXN0IG9mIHdvcmRmb3JtcyB0byBmaWxlOgorCXRyeQorCQl7CisJCW9zID0gRmlsZXMubmV3T3V0cHV0U3RyZWFtKHApOworCQlvcy53cml0ZShsaXN0LmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSkpOworCSAgICBvcy5jbG9zZSgpOworCSAgICBiRG9uZSA9IHRydWU7CisJICAgIGZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGZpbGUgJyVzJyBiZXNjaHJpZWJlbi5cbiIsIGZ1bmMsIGZuYW1lV2ZzKTsKKwkgICAgfQorCWNhdGNoKElPRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoZmVycik7CisJCX0KKyAgICAKKwlpZiggYkRvbmUgKQorCQltc2cgPSAiPHA+TGlzdCB3cml0dGVuIHRvIGZpbGU6ICIgKyBwLnRvU3RyaW5nKCkgKyAiPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+PGI+RmlsZSBFcnJvcjogPC9iPiBjYW5ub3Qgd3JpdGUgdG8gIiArIHAudG9TdHJpbmcoKSArICIhPC9wPiI7CisJCisJLyoKKwkgKiAgZXhlY3V0ZSBHbGVtbSBzaGVsbCBzY3JpcHQ6CisJICovCisJU3RyaW5nCisJCW1zZ0dsZW1tU2NyaXB0LCBtc2dJbXBvcnQ7CisJaW50IAorCQlyID0gVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0KGZuYW1lU2NyaXB0LCBmbmFtZVdmcywgZm91dCwgZmVycik7CisJCisJaWYoIHIgPT0gMCApCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEF1c2bDvGhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhLCBwcm9wcywgZGJwYXRoKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBpbXBvcnRHbGVtbUxlbW1hdGEgcmV0dXJucyByPSVkLlxuIiwgZnVuYywgcik7CisJaWYoIG5FcnJvcnMgPT0gMCApCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiAiICsgbkVycm9ycyArICIgZXJyb3JzITwvcD4iOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGVuZGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJLy8gUmV0dXJuIEluZm9zOgorCXJldHVybiAKKwkJCSAgICI8aHRtbD4iICsKKwkJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwkKKwl9IC8vIGRvUE9TVF9pbXBvcnRMZW1tYURhdGEKKworCS8qIGRvR0VUX3ZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnMgPSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvLyIpOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJZmluYWwgU3RyaW5nCisJCWRiTmFtZSA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPmRhdGFiYXNlPC9iPjogJXM8L3A+IiwgZm9ybWF0RGJOYW1lKHByb3BzKSk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIGRiTmFtZSArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gZG9HRVRfdmlld0RCSW5mbworCisKKwkvKiBkb0dFVF92aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND52ZXJzaW9uICIgKyB2ZXJzaW9uICsgIiB2b20gIiArIHZlcnNpb25EYXRlICsgIiByZXF1ZXN0ID0gJyIgKyBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpICsgIic8L2k+PC9oND5cbiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAxOjwvYj4gKEMyIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfTwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPntsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpPC9jb2RlPjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw8L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT7Dlmw/b3B0cz1mbGV4K2NvbXArb3RoZXIrc3BlYzwvY29kZT48L3A+IiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDI6PC9iPiAoaW50ZXJuYWwgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9P3Byb3AxPVswMTJdJmFtcDtwcm9wMj1bMDEyXSZhbXA7c3BlYz1bMDEyXTwvY29kZT4gKHdoZXJlIGVhY2ggcHJvcDEsIHByb3AyLCBzcGVjIGlzIG9wdGlvbmFsKS48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsP3Byb3AxPTAmYW1wO3Byb3AyPTEmYW1wO3NwZWM9MjwvY29kZT48L3A+IjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0iKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0nJWQnIHByb3AyPSclZCcgc3BlYz0nJWQnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJLyogCisJZm9yKGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCQl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCQl9CQorCSAqLworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCBsZW1tYUluZm8ub3B0c1NldHRpbmcgPT0gTGVtbWFJbmZvLk9QVFNfU0VUVElOR19DMiApIAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEscHJvcDIsc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZyk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWludAorCQluV2ZzID0gbGVtbWFJbmZvLm5XZnM7CisJCisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJLy8gbG9nIG91dGNvbWU6CisJaWYoIG5XZnMgPCAwICkKKwkJZm91dC5wcmludGYoIkVycm9yOiAlczogcmV0dXJuaW5nIDAgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jKTsKKwllbHNlCisJCWZvdXQucHJpbnRmKCJEZWJ1Zy4gJXM6IHJldHVybmluZyAlZCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMsIG5XZnMpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiBub3RlOgorCSAqIC0gaWYgQnJvd3NlciByZXF1ZXN0OiBIVFRQU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ3RleHQvaHRtbCwuLi54bWwuLi4nCisJICogLSBpZiBXZm9ybVNlcnZpY2VzIHJlcXVlc3Q6IEh0dHBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAnYXBwbGljYXRpb24vanNvbicuCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKiAKKwkgKiAtIHN1Ym1pdHRlZCBVUkwsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYSwgaXMgaW50ZXJwcmV0ZWQgYnkgZ2xhc3NmaXNoIGFzCisJICogICBiZWluZyBJU08tODg1OS0xIGVuY29kZWQuIFdoZW4gdGhlIHJlcXVlc3QgaXMgVVRGLTggZW5jb2RlZCwgVW1sYXV0cyBhbmQKKwkgKiAgICfDnycgYXJlIG1pcy1pbnRlcnByZWRlZCwgbGVhZGluZyB0byBhbiBlcnJvbmVyb3VzIHJlcXVlc3QgdG8gdGhlIERlcmJ5CisJICogICBkYXRhYmFzZS4KKwkgKiAtIFJlcXVlc3RlZCBsZW1tYSAnbGVtbWEnIGhhcyB0byBiZSB0cmFuc2Zvcm1lZCB0byBVVEYtOCBmaXJzdC4KKwkgKiAtIG5vdGU6IGV2ZW4gd2hlbiBzdWJtaXR0aW5nIHRoZSBHRVQgcmVxdWVzdCBieSBzcGVjaWZ5aW5nICdjaGFyZW5jb2RlPVVURi04JywKKwkgKiAgIGdsYXNzZmlzaCBkb2VzIG5vdCBjb252ZXJ0IGl0IGF1dG9tYXRpY2FsbHkgYXMgZXhwZWN0ZWQuCisJICogICAKKwkgKiAgMjIuMTAuMjEvRkIKKwkgKiAKKwkgKiAtIGlmIGFjY2VwdD1hcHBsaWNhdGlvbi9qc29uIHJldHVybiBVVEYtOCAoV2Zvcm1TZXJ2aWNlcykuCisJICogLSBlbHNlIGlmIGFjY2VwdD10ZXh0L2h0bWwgZG8gbm90IHRyYW5zZm9ybSBjaGFyYWN0ZXIgZW5jb2RpbmcgKEJyb3dzZXIpLgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAQ29uc3VtZXMoImFwcGxpY2F0aW9uL2pzb24sIHRleHQvaHRtbCIpCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbzsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwlmaW5hbCBib29sZWFuCisJCWJFbmNvZGVMZW1tYSA9IGZhbHNlOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOworCQorCS8qIHRlc3Q6CisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWlmKCBiRW5jb2RlTGVtbWEgKQorCQl7CisJCS8vIHdoZW4gYWNjZXB0aW5nIEpTT04sIHVybCBoYXMgdG8gYmUgY29udmVydGVkIHRvIFVURi04LCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWE6CisJCXRyeSB7CisJCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKG5ldyBTdHJpbmcobGVtbWEuZ2V0Qnl0ZXMoIklTTy04ODU5LTEiKSwgInV0Zi04IikpOworCQkJfSAKKwkJY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZTEpIHsKKwkJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQkJTGVtbWFSZXNwb25zZQorCQkJCWxlbXJlc3AgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1yZXNwKS5idWlsZCgpOworCQkJfQorCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFtVVEYtOF0gb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWFJbmZvLmxlbW1hT3JpZywgb3B0aW9ucyk7CisJCX0KKwllbHNlCisJCXsKKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW3VuY2hhbmdlZF0gb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWFJbmZvLmxlbW1hT3JpZywgb3B0aW9ucyk7CisJCX0KKworCS8qIGRvZXMgbm90IGhlbHA6CisJIFN0cmluZworCSAJcmVxdWVzdENoYXJFbmNvZGluZyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRDaGFyYWN0ZXJFbmNvZGluZygpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVxdWVzdCBjaGFyYWN0ZXIgZW5jb2RpbmcgPSclcycuXG4iLCBmdW5jLCByZXF1ZXN0Q2hhckVuY29kaW5nKTsKKwkqLworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQl7CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJLy9yZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCX0KKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CQorCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwkvKgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvdGVzdC9pbmZvLyIpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9mb3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCWZvdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8zNC83MDg5YTIxZTVhM2UwMDFjMTAzNWMxZWFmMzhhZjU5MCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMzQvNzA4OWEyMWU1YTNlMDAxYzEwMzVjMWVhZjM4YWY1OTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWExZTVjYwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMzQvNzA4OWEyMWU1YTNlMDAxYzEwMzVjMWVhZjM4YWY1OTAKQEAgLTAsMCArMSw5ODQgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworLyogMC4xIDogMTcuMDYuMjAvRkIgCisgKiAwLjIgOiAyNS4xMC4yMS9GQgorICogICAgICAgbG9naW5nIG9mIHRoZSBBUEkgUmVxdWVzdHMuCisgKiAgICAgICBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKyAqICAgICAgIGNvcnJlY3RpbmcgY2FsbGluZyBvZiBsZW1tYSArIHByb3AxL3Byb3AyL3NwZWMuCisgKiAgICAgICBoYW5kbGluZyBvZiBsZW1tYXRhIHdpdGggJ8OfJy4KKyAqIAorICogR2VuZXJhbCBjb21tZW50cyB0byB0aGUgZW5jb2Rpbmcgb2YgZGVyaXZhdGlvbnMgZnJvbSBsZW1tYSB0byB3ZnMgYW5kIGhvdyB0aGV5IGFyZSBlbmNvZGVkCisgKiBpbiB0aGUgRGVyYnkgZGF0YWJhc2U6CisgKiAKKyAqIEdMRU1NIGVuY29kaW5nOiAgCisgKiAgIF8gXyA6ICtGbGV4ICAgICAgIMOWbGUgLT4gw5ZsICAgICAgCisgKiAgICsgXyA6ICtDb21wICAgICAgIMOWbGxhbXBlIC0+IMOWbCBvciBMYW1wZSAoY29tcG91bmQpLgorICogICBfICsgOiArb3RoZXIgICAgICBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybnNjaHVoIChubyBjb21wb3VuZCBmb3IgJ1R1cm5zY2h1aCcsIG9ubHkgcHJlZml4KS4KKyAqICAgKyArIDogK0NvbXArb3RoZXIgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm4gKyBTY2h1aCAoY29tcG91bmQgZm9yICdTY2h1aCcgKyBQcmVmaXgpLgorICogQzIgbGVtbWF0aXphdGlvbiBvcHRpb25zOgorICogICBGbGV4ICAoaWRlbnRpY2FsIHRvIEdsZW1tKQorICogICBDb21wICAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpCisgKiAgIE90aGVyIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykuCisgKiAgIFNwZWMgIChvbmx5IEMyOiBpbmNsdWRlcyBhbGwgd2ZzIHdpdGggaGlwaGVuIGFuZC9vciBzb21lIG5vbi1hbHBoYWJldGljIElTTzg4NTktMSBjaGFycykKKyAqICAgICAgICAgRS5nLiDDlmwtRXhwb3J0ZSwgIk1hcmtlbiItw5ZsZS4KKyAqIERlcmJ5IEVuY29kaW5nOgorICogIHByb3AxIAlwcm9wMglzcGVjICAgCW1lYW5pbmcgaW4gQzI6CisgKiAgMAkJMAkJLQkJRmxleAorICogIDEJCTAJCS0JCUNvbXAKKyAqICAwCQkxCQktCQlPdGhlciAocHJlZml4KQorICogIDEJCTEJCS0JCUNvbXAgKyBPdGhlcgorICogIC0JCS0JCTAJCS1TcGVjCisgKiAgLQkJLQkJMQkJK1NwZWMKKyAqIAorICogRXhhbXBsZXM6CisgKiAmU2NodWgJCQk6IFNjaHVoLCBTY2h1aGUsIC4uLiBvbmx5IGZsZXhpb25zCisgKiAmU2NodWgrY29tcAkJOiBTY2h1aGUsIFR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtvdGhlcgkJOiBTY2h1aGUsIEFudGlzY2h1aGUuLi4gZmxleGlvbnMgYW5kIHByZWZpeGVkIHdmcyAobm8gY29tcG91bmRzKS4KKyAqICZTY2h1aCtjb21wK290aGVyOiBTY2h1aGUsIEFudGlzY2h1aGUsIFR1cm5zY2h1aGUsIEFudGl0dXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMgYW5kIAorICogCQkJCQkgIHByZWZpeGVkIHNpbmdsZSB3ZnMgKEFudGlzY2h1aGUpIGFuZCBwcmVmaXhlZCBjb21wb3VuZHMuCisgKiAmU2NodWgrc3BlYwkJOiAiQW50aSItU2NodWhlLCA2OGdlci1TY2h1aGUuLi4gbWF5IGJlIGNvbWJpbmVkIHdpdGggZXZlcnkgb3B0aW9uczogYWRkcworICogICAgICAgICAgICAgICAgICAgIHdmcyB3aXRoIGh5cGhlbiBhbmQvb3Igbm9uLWFscGhhYmV0aWMgY2hhcnMuCisgKiAKKyAqIENvbnZlcnNpb24gcnVsZXM6CisgKiAKKyAqICAmc2NobGllw59lbiAtPiBpbnRlcm5hbCBzZWFyY2ggZm9yICdzY2hsaWVzc2VuJywKKyAqICBiZWNhdXNlIEdsZW1tIG91dHB1dHMgJ3NzJyBmb3IgJ8OfJy4KKyAqICAKKyAqIENoYXJhY3RlciBFbmNvZGluZzoKKyAqIAorICogLSBXaGVuIGltcG9ydGluZyB3ZnMgdG8gdGhlIERlcmJ5IERhdGFiYXNlIHdpdGggZG9DdXJsR2xlbW1TZXJ2aWNlcy9pbmRleExlbW1hdGE6CisgKiAKKyAqICAgSU5QVVQ6IHdvcmRmb3JtIGxpc3QgaW4gW1VURi04XSA6IFVURi04IGlzIHRoZW4gY29udmVydGVkIHRvIExhdDEgZm9yIEdsZW1tLAorICogICAgICAgICAgdGhlIG91dHB1dCBvZiBHbGVtbSBbTGF0MV0gaXMgcmV0dXJuZWQgdG8gdGhlIEdsZW1tU2VydmljZXMgd2l0aG91dCByZWNvbnZlcnNpb24KKyAqICAgICAgICAgIHRvIFVURjggYW5kIGltcG9ydGVkIGludG8gRGVyYnkgRGF0YWJhc2UgdW5jaGFuZ2VkLgorICoJCQorICovCisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDUuMTEuMjEiOyAKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjIiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lUHJvcHMJCT0gIi9XRUItSU5GL0dsZW1tU2VydmljZXMucHJvcGVydGllcyI7CisJCisJLy8gdGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHJlYWQgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgKHRoZXNlIGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMpOgorCXByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoIAkJPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCUBDb250ZXh0CisJcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBzZXJ2bGV0Q29udGV4dDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZvdXQJPSBudWxsOworCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZmVycgk9IG51bGw7CQkKKwkJCisJLyogCisgCSAqIAorCSAqIC0gYWZ0ZXIgbG9hZFByb3BlcnRpZXMsIHNldHMgdGhlIGNsYXNzIHZhcmlhYmxlIHdpdGggbG9hZGVkIHByb3BlcnR5IHZhbHVlcy4KKwkgKiAKKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJR1NfV29ya2luZ1BhdGggCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgIkdTX1dvcmtpbmdQYXRoIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIik7CisJZm5hbWVXZnMJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lV2ZzIiwgCSAgICJnbF93ZnNfaW4udHh0Iik7CisJZm5hbWVXZnMJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVdmczsKKwlmbmFtZU91dAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVPdXQiLCAJICAgIkdsZW1tU2VydmljZXMubG9nIik7CisJZm5hbWVPdXQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZU91dDsKKwlmbmFtZUVycgkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVFcnIiLCAJICAgIkdsZW1tU2VydmljZXMuZXJyIik7CisJZm5hbWVFcnIJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUVycjsKKwlmbmFtZVNjcmlwdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVTY3JpcHQiLAkgICAiZG9HbGVtbSIpOworCWZuYW1lU2NyaXB0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVTY3JpcHQ7CisJZm5hbWVMZW1hdGEJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lTGVtYXRhIiwgICAgInRtcC9sZW0zIik7CisJZm5hbWVMZW1hdGEJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUxlbWF0YTsKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qCisJICogIGxvZ19SZXF1ZXN0OgorCSAqICAKKwkgKiAgLSB3cml0ZSBpbmZvIGFib3V0IEFQSSBSZXF1ZXN0LgorCSAqICBQYXJhbWV0ZXJzOgorCSAqICByZXF1ZXN0UGF0aAk6IHBhdGggb2Ygd2ViYXBwIGFkZHJlc3NlZCBieSB0aGUgcmVxdWVzdC4KKwkgKiAgZnVuYwkJOiBuYW1lIG9mIHRoZSBmdW5jdGlvbiB3aGljaCBpbXBsZW1lbnRzIHRoZSByZXF1ZXN0LgorCSAqICAKKwkgKiAgMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgbG9nX1JlcXVlc3QoU3RyaW5nIHJlcXVlc3RQYXRoLCBTdHJpbmcgZnVuYykKKwkKKwl7CisJLy8gdHJhbnNmb3JtICJkYXRlVHRpbWUiIC0+ICJkYXRlIHRpbWUiOgorCQorCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCWZvdXQucHJpbnRmKCIjIyMgJXM6ICVzIDogdmVycz0nJXMnLCB2ZGF0ZT0nJXMnIHJlcXVlc3Q9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RQYXRoLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgCisJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwl9IC8vIGxvZ19SZXF1ZXN0CisJCQorCS8qIGZvcm1hdERiTmFtZQorCSAqIAorCSAqIC0gZ2V0cyBuYW1lIG9mIERhdGFiYXNlIHVzZWQgYnkgRGVyYnkgZnJvbSBwcm9wcyAKKwkgKiAgIGFuZCBmb3JtYXQgaXQgdG8gSFRNTC4KKwkgKiAgCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFN0cmluZyBmb3JtYXREYk5hbWUoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJU3RyaW5nCisJCWRiTmFtZTsKKwlTdHJpbmcKKwkJZGJQYXRoID0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJaW50CisJCWogPSBkYlBhdGgubGFzdEluZGV4T2YoJy8nKTsKKwkKKwlpZiggaiA+IDAgKQorCQlkYk5hbWUgPSBkYlBhdGguc3Vic3RyaW5nKGorMSk7CisJZWxzZQorCQlkYk5hbWUgPSBkYlBhdGg7CisJCisJcmV0dXJuIGRiTmFtZTsgLy8gIjxwPjxiPkRhdGFiYXNlOiAiICsgZGJOYW1lICsgIjwvYj48L3A+XG4iOworCX0gLy8gZm9ybWF0RGJOYW1lCisKKwkvKgorCSAqIGNsb3NlTG9nU3RyZWFtczoKKwkgKiAKKwkgKiAtIGNsb3NlIHRoZSBmb3V0L2ZlcnIgbG9nIHN0cmVhbXMuCisJICogCisJICogMjYuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgY2xvc2VMb2dTdHJlYW1zKCkKKwkKKwl7CisJaWYoIGZvdXQgIT0gbnVsbCkKKwkJZm91dC5jbG9zZSgpOworCWZvdXQgPSBudWxsOworCQorCWlmKCBmZXJyICE9IG51bGwgKQorCQlmZXJyLmNsb3NlKCk7CisJZmVyciA9IG51bGw7CisJfSAvLyBjbG9zZUxvZ1N0cmVhbXMKKwkKKwkvKiBpbml0X2FuZF9sb2dfUmVxdWVzdAorCSAqIAorCSAqIC0gbG9hZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMsIHNldHMgR2xlbW1TZXJ2aWNlcyBjb25zdGFudHMKKwkgKiAgIGFuZCBsb2dzIHRoZSByZXF1ZXN0LgorCSAqIC0gbG9hZCBwcm9wZXJ0aWVzIGFuZCBzZXQgY29uc3RhbnRzIGJlZm9yZSBsb2dnaW5nIGFueXRoaW5nLCBiZWNhdXNlCisJICogICBsb2dnaW5nIHdpbGwgYmUgZG9uZSBpbnRvIHRoZSBsYXN0IHN0ZG91dC9zdGRlcnIgb3BlbmVkIGluIGdsYXNzZmlzaCdzIEpWTSwKKwkgKiAgIGUuZy4gaW4gdGhlIGxvZyBvZiBhbm90aGVyIFNlcnZpY2UuCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFByb3BlcnRpZXMgaW5pdF9hbmRfbG9nX1JlcXVlc3QoU3RyaW5nIGZ1bmMsIFN0cmluZyByZXF1ZXN0UGF0aCkKKwkKKwl7CisJU3RyaW5nCisJCXJlYWxQYXRoID0gc2VydmxldENvbnRleHQuZ2V0UmVhbFBhdGgoZm5hbWVQcm9wcyk7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtIChpZiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJUHJvcGVydGllcworCQlwcm9wcyA9IFV0aWxzLmxvYWRQcm9wZXJ0aWVzKHNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcyksIGZuYW1lUHJvcHMsIHJlYWxQYXRoLCBmYWxzZSk7CisJCisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIGZvdXQgYW5kIGZlcnIgYXMgcmVwbGFjZW1lbnQgZm9yIHN0ZG91dC9zdGRlcnIgZm9yIHVzZSBpbiBHbGVtbVNlcnZpY2VzLgorCS8vIGRvIG5vdCB1c2Ugb3IgcmVkaXJlY3QgU3lzdGVtLm91dCBhbmQgU3lzdGVtLmVyciwgYXMgdGhleSB3aWxsIGJlIHJlZGlyZWN0ZWQKKwkvLyBieSBvdGhlciBTZXJ2aWNlcyBpbiB0aGUgc2FtZSBnbGFzc2Zpc2ggSlZNLCBlLmcuIGJ5IHRoZSBXZm9ybVNlcnZpY2VzLgorCWZvdXQgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVPdXQpOworCWZlcnIgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVFcnIpOworCQorCS8vVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkKKwlsb2dfUmVxdWVzdChyZXF1ZXN0UGF0aCwgZnVuYyk7CisJCisJcmV0dXJuIHByb3BzOworCX0gLy8gaW5pdF9hbmRfbG9nX1JlcXVlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwlTdHJpbmcKKwkJc3RhdHVzOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3N0YXR1cy8iKTsKKwkKKwkvLyBodHRwU2VydmxldFJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW52KTsKKwkKKwlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+cHJvcGVydGllczwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPmRhdGFiYXNlPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIiksCisJCQkJCQkJc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSA9PSBudWxsID8gIm5vdCBmb3VuZCIgOgorCQkJCQkJCQlwcm9wcy5pc0VtcHR5KCkgPyAiZW1wdHkiIDogImxvYWRlZCIsCisJCQkJCQkJZm9ybWF0RGJOYW1lKHByb3BzKQorCQkJCQkJCSk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJY2xvc2VMb2dTdHJlYW1zKCk7CisJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiAKKwkgKiBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhOgorCSAqIAorCSAqIFBPU1Q6IC9pbmRleC9hZGQve2RhdGFiYXNlbmFtZX06IHRleHQvcGxhaW4KKwkgKiAKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGxpc3QJCSAJOiB0aGUgbGlzdCBvZiB3ZnMgc2VudCBpbiB0aGUgYm9keSBvZiB0aGUgUE9TVCByZXF1ZXN0LgorCSAqIGRicGF0aEVuY29kZWQ6IHRoZSBsb2NhdGlvbiBvZiB0aGUgZGF0YWJhc2Ugd2hlcmUgdGhlIGxlbW1hK3dmcyBhcmUgdG8gYmUgc3RvcmVkLgorCSAqICAgICAgICAgICAgIAkgIGVuY29kZWQgYXMgIi5ob21lLnVzZXIuS29yQVAuLi4uIiwgbXVzdCBiZSBjb252ZXJ0ZWQgdG8KKwkgKiAgICAgICAgICAgIAkgICIvaG9tZS91c2VyL0tvckFQLy4uLiIKKwkgKiAgICAgICAgIAkJICBJTVBPUlRBTlQ6IGRvIG5vdCB1c2UgYSAnLicgZm9yIGVuY29kaW5nIGFueXRoaW5nIGVsc2UgdGhhbiBhICcvJy4KKwkgKiBOb3RlcyAgICAgOgorCSAqIC0gYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UgbG9jYXRlZCBhdCAnZGF0YWJhc2VuYW1lJy4KKwkgKiAtIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkIGludG8gYSBEZXJieSBkYXRhYmFzZS4KKwkgKiBJbnB1dAkgOiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKiAwNC4xMS4yMS9GQgorCSAqIC0gc3VibWl0dGVkIGRhdGFiYXNlIHBhdGguCisJICovCisJCisJQFBhdGgoImFkZC97ZGF0YWJhc2VwYXRofSIpIAorCUBQT1NUIAorCUBDb25zdW1lcygidGV4dC9wbGFpbiIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisJCQkJCQkJKAorCQkJCQkJCVN0cmluZyAJCQkJCQkJCQkJICBsaXN0LAorCQkJCQkJCUBQYXRoUGFyYW0odmFsdWU9ImRhdGFiYXNlcGF0aCIpIGZpbmFsIFN0cmluZyBkYnBhdGhFbmNvZGVkCisJCQkJCQkJKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvUE9TVF9pbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIAorCQlhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCVN0cmluZworCQlkYnBhdGg7CisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBudWxsOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvYWRkL3tkYnBhdGh9Iik7CisJCisJZGJwYXRoID0gZGJwYXRoRW5jb2RlZC5yZXBsYWNlKCcuJywgJy8nKTsKKwkKKwlmb3V0LnByaW50ZigiSW5mbyA6ICVzOiBzZWxlY3RlZCBkYXRhYmFzZSBwYXRoID0gJyVzJy5cbiIsIGZ1bmMsIGRicGF0aCk7CisJZm91dC5wcmludGYoIkluZm8gOiAlczogd29ya2luZyBkaXJlY3RvcnkgPSAnJXMnLlxuIiwgZnVuYywgR1NfV29ya2luZ1BhdGgpOworCQorCS8vIHNldCBmaWxlIGFuZCBwYXRocyBhZnRlciBHU19Xb3JraW5nUGF0aCBoYXMgYmVlbiBpbml0aWFsaXNlZDoKKwlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgZm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShmZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzLCBmb3V0LCBmZXJyKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZsO8aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEsIHByb3BzLCBkYnBhdGgpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwkKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJCisJfSAvLyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisKKwkvKiBkb0dFVF92aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzID0gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby8iKTsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCWZpbmFsIFN0cmluZworCQlkYk5hbWUgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5kYXRhYmFzZTwvYj46ICVzPC9wPiIsIGZvcm1hdERiTmFtZShwcm9wcykpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBkYk5hbWUgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIGRvR0VUX3ZpZXdEQkluZm8KKworCisJLyogZG9HRVRfdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+dmVyc2lvbiAiICsgdmVyc2lvbiArICIgdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgcmVxdWVzdCA9ICciICsgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSArICInPC9pPjwvaDQ+XG4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMTo8L2I+IChDMiBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX08L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT57bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKTwvY29kZT48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsPC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+w5ZsP29wdHM9ZmxleCtjb21wK290aGVyK3NwZWM8L2NvZGU+PC9wPiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAyOjwvYj4gKGludGVybmFsIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfT9wcm9wMT1bMDEyXSZhbXA7cHJvcDI9WzAxMl0mYW1wO3NwZWM9WzAxMl08L2NvZGU+ICh3aGVyZSBlYWNoIHByb3AxLCBwcm9wMiwgc3BlYyBpcyBvcHRpb25hbCkuPC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbD9wcm9wMT0wJmFtcDtwcm9wMj0xJmFtcDtzcGVjPTI8L2NvZGU+PC9wPiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Iik7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JyVkJyBwcm9wMj0nJWQnIHNwZWM9JyVkJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCS8qIAorCWZvcihpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwkJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwkJfQkKKwkgKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggbGVtbWFJbmZvLm9wdHNTZXR0aW5nID09IExlbW1hSW5mby5PUFRTX1NFVFRJTkdfQzIgKSAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZywgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxLHByb3AyLHNwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpbnQKKwkJbldmcyA9IGxlbW1hSW5mby5uV2ZzOworCQorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCS8vIGxvZyBvdXRjb21lOgorCWlmKCBuV2ZzIDwgMCApCisJCWZvdXQucHJpbnRmKCJFcnJvcjogJXM6IHJldHVybmluZyAwIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYyk7CisJZWxzZQorCQlmb3V0LnByaW50ZigiRGVidWcuICVzOiByZXR1cm5pbmcgJWQgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jLCBuV2ZzKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogbm90ZToKKwkgKiAtIGlmIEJyb3dzZXIgcmVxdWVzdDogSFRUUFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICd0ZXh0L2h0bWwsLi4ueG1sLi4uJworCSAqIC0gaWYgV2Zvcm1TZXJ2aWNlcyByZXF1ZXN0OiBIdHRwU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ2FwcGxpY2F0aW9uL2pzb24nLgorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICogCisJICogLSBzdWJtaXR0ZWQgVVJMLCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWEsIGlzIGludGVycHJldGVkIGJ5IGdsYXNzZmlzaCBhcworCSAqICAgYmVpbmcgSVNPLTg4NTktMSBlbmNvZGVkLiBXaGVuIHRoZSByZXF1ZXN0IGlzIFVURi04IGVuY29kZWQsIFVtbGF1dHMgYW5kCisJICogICAnw58nIGFyZSBtaXMtaW50ZXJwcmVkZWQsIGxlYWRpbmcgdG8gYW4gZXJyb25lcm91cyByZXF1ZXN0IHRvIHRoZSBEZXJieQorCSAqICAgZGF0YWJhc2UuCisJICogLSBSZXF1ZXN0ZWQgbGVtbWEgJ2xlbW1hJyBoYXMgdG8gYmUgdHJhbnNmb3JtZWQgdG8gVVRGLTggZmlyc3QuCisJICogLSBub3RlOiBldmVuIHdoZW4gc3VibWl0dGluZyB0aGUgR0VUIHJlcXVlc3QgYnkgc3BlY2lmeWluZyAnY2hhcmVuY29kZT1VVEYtOCcsCisJICogICBnbGFzc2Zpc2ggZG9lcyBub3QgY29udmVydCBpdCBhdXRvbWF0aWNhbGx5IGFzIGV4cGVjdGVkLgorCSAqICAgCisJICogIDIyLjEwLjIxL0ZCCisJICogCisJICogLSBpZiBhY2NlcHQ9YXBwbGljYXRpb24vanNvbiByZXR1cm4gVVRGLTggKFdmb3JtU2VydmljZXMpLgorCSAqIC0gZWxzZSBpZiBhY2NlcHQ9dGV4dC9odG1sIGRvIG5vdCB0cmFuc2Zvcm0gY2hhcmFjdGVyIGVuY29kaW5nIChCcm93c2VyKS4KKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQENvbnN1bWVzKCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2h0bWwiKQorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm87CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJZmluYWwgYm9vbGVhbgorCQliRW5jb2RlTGVtbWEgPSBmYWxzZTsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsKKwkKKwkvKiB0ZXN0OgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlpZiggYkVuY29kZUxlbW1hICkKKwkJeworCQkvLyB3aGVuIGFjY2VwdGluZyBKU09OLCB1cmwgaGFzIHRvIGJlIGNvbnZlcnRlZCB0byBVVEYtOCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hOgorCQl0cnkgeworCQkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhuZXcgU3RyaW5nKGxlbW1hLmdldEJ5dGVzKCJJU08tODg1OS0xIiksICJ1dGYtOCIpKTsKKwkJCX0gCisJCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCUxlbW1hUmVzcG9uc2UKKwkJCQlsZW1yZXNwID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtcmVzcCkuYnVpbGQoKTsKKwkJCX0KKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbVVRGLThdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisJZWxzZQorCQl7CisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFt1bmNoYW5nZWRdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisKKwkvKiBkb2VzIG5vdCBoZWxwOgorCSBTdHJpbmcKKwkgCXJlcXVlc3RDaGFyRW5jb2RpbmcgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0Q2hhcmFjdGVyRW5jb2RpbmcoKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlcXVlc3QgY2hhcmFjdGVyIGVuY29kaW5nID0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdENoYXJFbmNvZGluZyk7CisJKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJeworCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCS8vcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQl9CisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOwkKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJLyoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3Rlc3QvaW5mby8iKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vZm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQlmb3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMzkvNTA0YzYxYWY5YTNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzM5LzUwNGM2MWFmOWEzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YTc0MTAKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzM5LzUwNGM2MWFmOWEzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsNzMyIEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKK2ltcG9ydCBqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7CitpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAob3ZlcndyaXR0ZW4gYnkgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKGZpbmFsIGFzc2lnbm1lbnRzKToKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJFbWIgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIjsKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLyoKKwkgKiBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkgKiAKKwkgKiBBcmd1bWVudHM6CisJICogcHJvcHMJOiBQcm9wZXJ0aWVzIGxvYWRlZCBieSB0aGUgR2xlbW1TZXJ2aWNlcy4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgZnVuY3Rpb24gbG9hZHMgb25seSB0aG9zZSBDb25zdGFudHMgbmVlZGVkIGluIHRoaXMgY2xhc3MuCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzCXByb3BzKQorCQorCXsKKwlmbmFtZURCCQkgCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAJIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCXNlcnZlckhvc3QJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgInNlcnZlckhvc3QiLAkiLy9sb2NhbGhvc3Q6MTUyNy8iKTsKKwlkZXJieURCVVJMIAkJPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJCQkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIHdoZW4gaW5kZXhpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSwgc2VsZWN0IHRoZSBzdWJtaXR0ZWQgZGJwYXRoLAorCS8vIChub3QgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZGJwYXRoOworCQorCS8vIG9wZW4gcmVhZGVyIG9uIEdsZW1tIExlbW1hdGE6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJCisJCW5FcnJvcnMgPSB3cml0ZURCTGVtbWF0YShpbik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIGZyb20gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwkvLyBjbG9zZSBSZWFkZXI6CisJdHJ5IHsKKwkJaW4uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQluRXJyb3JzID0gLTE7CisJCX0KKwkKKyAJaWYoIG5FcnJvcnMgPT0gMCApCisgCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydCBkb25lIHN1Y2Nlc3NmdWxseS5cbiIsIGZ1bmMpOworIAllbHNlCisgCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydDogJWQgRXJyb3JzIVxuIiwgZnVuYywgbkVycm9ycyk7CisgCQorCXJldHVybiBuRXJyb3JzOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhCisJCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAorCSAqICAgICAgICAgICAgICAgICAgICAgICB3cml0ZURCTGVtbWF0YSgpCisJICogICAgICAgICAgICAgICAgICAgICAgIAorCSAqIHN0b3JlcyBsaXN0IG9mIGxlbW1hdGEgKyBpbmZvcyBpbnRvIERlcmJ5IGRiLgorCSAqIEZpbGUgZm9ybWF0OiAiTGVtbWEgRGVjb21wb3NpdGlvbiBXZiIsCisJICogICAgICAgICAgICAgIGUuZy46ICJIw6R1c2VyICstIEhhdXMiLgorCSAqIFJldHVybnM6IDAgPSBPSyBvciAtMTogZ2VuZXJhbCBlcnJvciBvciA+IDA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogMDkuMDEuMjAvRkIKKwkgKiAwNC4xMS4yMS9GQiB0dXJuIGF1dG9jb21taXQgb2ZmIHRvIGFjY2VsZXJhdGUgaHVnZSBhbW91bnQgb2YgaW5zZXJ0aW9ucy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hdGEoQnVmZmVyZWRSZWFkZXIgaW4pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWF0YSI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlQcmVwYXJlZFN0YXRlbWVudAorCQlzdG10UHJlcCA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgCSA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CQorCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCW5JbnNlcnRlZCA9IDAsCS8vIG5vLiBvZiBsZW1tYS93ZiBwYWlycyBpbXBvcnRlZC4KKwkJcmV0ID0gMDsgLy8gT0suCisJYm9vbGVhbgorCQljb250YWluc1NwZWM7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlLAorCS8vIHNldCBBdXRvY29tbWl0ID0gZmFsc2UgdG8gYWNjZWxlcmF0ZSBpbnNlcnRpb25zOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQljb24uc2V0QXV0b0NvbW1pdChmYWxzZSk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkIChhdXRvQ29tbWl0PW9mZikuXG4iLCBmdW5jKTsKKworCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCXN0bXRQcmVwID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0UHJlcGFyZWRRdWVyeSk7CisJCWVsc2UKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisKKwkJd2hpbGUoIChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoICE9IDMgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6ICclcycgaGFzICVkIGNvbXBvbmVudHMhIEV4cGVjdGVkID0gMyEgQ2Fubm90IGJlIHN0b3JlZCFcbiIsIGZ1bmMsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJCW5FcnJvcnMrKzsKKwkJCQljb250aW51ZTsKKwkJCQl9CisJCQkKKwkJCS8vIEdldCBJbmZvLCBpZiB3b3JkZm9ybSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgJy0nLCBpbnRlcnB1bmN0aW9uIGV0Yy46CisJCQkvLyBsZW1tYUluZm9bMl0gPSB3b3JkZm9ybS4KKwkJCWNvbnRhaW5zU3BlYyA9IExlbW1hSW5mby5pc1dmU3BlY2lhbENhc2UobGVtbWFJbmZvWzJdKTsKKwkJCS8vIHN0b3JlIGludG8gREI6CisJCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZChzdG10UHJlcCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvcyhzdG10LCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJCisJCQlpZiggcmV0ICE9IDAgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBzdG9yZSBsZW1tYSAnJXMnIGludG8gREIhIChyZXQ9JWQpXG4iLCBmdW5jLCBsaW5lLCByZXQpOworCQkJCW5FcnJvcnMrKzsgCisJCQkJfQorCQkJZWxzZQorCQkJCW5JbnNlcnRlZCsrOworCQkJfSAvLyB3aGlsZQorCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBHbGVtbSBsZW1tYXRhK2luZm9zIGZyb20gZmlsZSEgRXhpdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7IAorCQl9CQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJLy8gbm93IGNvbW1pdCwgYXMgYXV0b0NvbW1pdCBpcyBkZWFjdGl2YXRlZDoKKwkJCWNvbi5jb21taXQoKTsKKwkJCQorCQkJaWYoIGNvbiAhPSBudWxsICkgCisJCQkJY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgCisJCQkJc3RtdC5jbG9zZSgpOworCQkJaWYoIHN0bXRQcmVwICE9IG51bGwgKSAKKwkJCQlzdG10UHJlcC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJJbmZvIDogJXM6IG5vLiBvZiBsZW1tYXRhL3dmIHBhaXJzIGluc2VydGVkID0gJWQuXG4iLCBmdW5jLCBuSW5zZXJ0ZWQpOworCQorCXJldHVybiBuRXJyb3JzOyAvLyAwPU9LLCA+MCA9IG5vLiBvZiBlcnJvcnMuCisJfSAvLyB3cml0ZURCTGVtbWF0YQorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZDoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBydWxlcyBpbnRvIERlcmJ5IERCLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBpcyB0aGUgdmVyc2lvbiB3aXRoIGEgUHJlcGFyZWRRdWVyeS4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIHNwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxNy4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCgKKwkJCVByZXBhcmVkU3RhdGVtZW50IHN0bXQsIAorCQkJU3RyaW5nIGxlbW1hLCAKKwkJCVN0cmluZyB3ZiwgCisJCQlTdHJpbmcgZGVjb21wb3NpdGlvbiwgCisJCQlib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCI7CisJZmluYWwgYm9vbGVhbgorCQliTG9nID0gZmFsc2U7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJYm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIAorCS8vIGZvciBsb2dpbmcgb25seToKKwlzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJaWYoIGJMb2cgKQorCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKyAgICAvLyBub3cgaW5zZXJ0IG5ldyB2YWx1ZXMgaW50byBQcmVwYXJlZFN0YXRlbWVudDoKKyAgICB0cnkgeworICAgIAlzdG10LnNldFN0cmluZyggMSwgbGVtbWEpOworICAgICAgICBzdG10LnNldFN0cmluZyggMiwgd2YpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oMywgcHJvcDEpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNCwgcHJvcDIpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNSwgc3BlYyk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJlcGFyZWQgc3RtdCA9ICclcycuXG4iLCAgZnVuYywgc3RtdC50b1N0cmluZygpKTsKKyAgICAgICAgfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZTEpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigJIkVycm9yOiAlczogd2hpbGUgZmlsbGluZyBwcmVwYXJlZCBzdGF0ZW1lbnQgd2l0aCBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JyViJyBwcm9wMj0nJWInIHNwZWM9JyViJyFcbiIsICAKKwkJCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUxLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorICAgIAorICAgIHRyeSB7CisJCS8vIGV4ZWN1dGUgdGhlIGZpbGxlZCBwcmVwYXJlZCBzdGF0ZW1lbnQ6CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiEgKG49JWQpXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLCBuKTsKKyAJCQlyZXR1cm4gMjsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAzOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIGludG8gRGVyYnkgREIuCisJICogUGFyYW1ldGVyczoKKwkgKiBjb250YWluc1NwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxMC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvcyhTdGF0ZW1lbnQgc3RtdCwgU3RyaW5nIGxlbW1hLCBTdHJpbmcgd2YsIFN0cmluZyBkZWNvbXBvc2l0aW9uLCBib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvcyI7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJQm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIHNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAgICAKKyAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKwl0cnkgeworCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKHNxbEluc2VydCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWFEYXRhCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgZnJvbSB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dDogbGVtbWEgKyBHTEVNTV9PUFRTX3h4eCAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hRGF0YShMZW1tYUluZm8gbGVtbWFJbmZvLCBQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWFEYXRhIjsKKworCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWxlbW1hSW5mby5jb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCWxlbW1hSW5mby5zdG10ID0gbGVtbWFJbmZvLmNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJaW50IHIgPSByZWFkREJMZW1tYShsZW1tYUluZm8uc3RtdCwgbGVtbWFJbmZvKTsKKwkJCQorCQlpZiggciAhPSAwICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGdldCBkYXRhIGZvciBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyFcbiIsIAorCQkJCQlmdW5jLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGxlbW1hSW5mby5jb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYURhdGEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBieSBhY2Nlc3NpbmcgdGhlIEdsZW1tREIuCisJICogSW5wdXQgOiBsZW1tYSArIHByb3AxKzIgKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqIE91dHB1dDogCisJICogIC0gY29udGFpbnMgYSBSZXN1bHRTZXQgZm9yIGZldGNoaW5nIHRoZSB3b3JkZm9ybXMuCisJICogCSAgVGhpcyBSZXN1bHRTZXQgd2lsbCBoYXZlIGJlIGJlIGNsb3NlZCB3aXRoIExlbW1hSW5mby5jbG9zZSgpLgorCSAqIAkgIFRoZSBuby4gb2YgZm91bmQgd29yZGZvcm1zIGlzIG5vdCBrbm93biB0aWxsIHdlCisJICogCSAgZmV0Y2ggYWxsIG9mIHRoZW0gZnJvbSBSZXN1bHRTZXQhIAorCSAqIAktIGR1ZSB0byBTRUxFQ1QgRElTVElOQ1Qgb25seSB1bmlxIHdmIGFyZSByZXR1cm5lZC4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWEoU3RhdGVtZW50IHN0bXQsIExlbW1hSW5mbyBsZW1tYUluZm8pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYSI7CisJU3RyaW5nCisJCXNxbDsKKwkJCisJc3FsID0gU3RyaW5nLmZvcm1hdCgiU0VMRUNUIERJU1RJTkNUIHdmIGZyb20gJXMgV0hFUkUgbGVtbWE9JyVzJyAlcyAlcyAlcyIsIAorCQkJZGJUYWJsZSwKKwkJCWxlbW1hSW5mby5sZW1tYSwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIkFORCBwcm9wMT0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICJBTkQgcHJvcDE9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIkFORCBwcm9wMj0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICJBTkQgcHJvcDI9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAxID8gIkFORCBzcGVjPSd0cnVlJyIgICA6IAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiQU5EIHNwZWM9J2ZhbHNlJyIgIDogIiIpOworCQorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIGZ1bmMsIGxlbW1hSW5mby5wcm9wMSwgbGVtbWFJbmZvLnByb3AyLCBsZW1tYUluZm8uc3BlYyk7CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWwgPSAnJXMnLlxuIiwgZnVuYywgc3FsKTsKKworCXRyeSB7CisJCWxlbW1hSW5mby5yZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOwkKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGVuIGV4ZWN1dGluZyBzcWw9JyVzJyFcbiIsIGZ1bmMsIHNxbCk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisJZmluYWxseSB7CisJCS8vIGFsbCBzcWwgc3R1ZmYgYXJlIGNsb3NlZCBvdXRzaWRlIHRoaXMgZnVuY3Rpb24sIHNvIGRvbid0IGNsb3NlIHRoZW0gaGVyZSEKKwkJfQkKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zCisJICogUmV0dXJucyBHZW5lcmFsIEluZm9zIGFib3V0IHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiByZWFkIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiSW5mb3MoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWRiSW5mbyA9IHJlYWREYkxlbW1hdGFJbmZvcyhzdG10KTsKKwkJCQorCQlpZiggZGJJbmZvID09IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgcmVhZCBHZW5lcmFsIEluZm9zIGZyb20gR2xlbW0gRGF0YWJhc2UhXG4iLCBmdW5jKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIG51bGw7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgc3RtdC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBtYXkgYmUgbnVsbC4KKwkJCisJfSAvLyByZWFkRGJJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkxlbW1hdGFJbmZvczoKKwkgKiByZWFkcyBhbmQgcmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjb250ZW50IAorCSAqIG9mIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiBSZXR1cm5zIDA9T0sgb3IgZXJyb3IgY29kZSA+IDAuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJMZW1tYXRhSW5mb3MoU3RhdGVtZW50IHN0bXQpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInJlYWREYkxlbW1hSW5mb3MiOworCVN0cmluZ1tdCisJCXNxbCA9IHsJIlNFTEVDVCBDT1VOVChkaXN0aW5jdCBsZW1tYSkgZnJvbSAiICsgZGJUYWJsZSAsCS8vIGNvdW50cyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YS4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUsCQkJCQkvLyBjb3VudHMgdG90YWwgbm8uIG9mIHN0b3JlZCB3b3JkZm9ybXMuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj10cnVlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj10cnVlIn07CisJUmVzdWx0U2V0CisJCXJlcyA9IG51bGw7IAorCWludFtdCisJCW5Db3VudHMgPSBuZXcgaW50W3NxbC5sZW5ndGhdOworCWludAkJCisJCWkgPSAwLCAKKwkJbkRpc3RMZW1tYXRhID0gLTEsCS8vIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhIGluIERCLgorCQluV2ZzCQkgPSAtMTsJLy8gbm8uIG9mIHdvcmRmb3JtcyBpbiBEQi4KKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogZXh0cmFjdGluZyBhZ3JlZ2F0ZWQgaW5mb3MgYWJvdXQgRGF0YWJhc2UgY29udGVudHMuLi5cbiIsIGZ1bmMpOworCQorCWRiSW5mbyA9IG5ldyBHbGVtbURCSW5mbygpOworCisJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJdHJ5IHsKKwkJZm9yKGk9MDsgaTxzcWwubGVuZ3RoOyBpKyspCisJCQl7CisJCQlyZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWxbaV0pOworCQkJaWYoIHJlcy5uZXh0KCkgKQorCQkJCWRiSW5mby5jb3VudHNbaV0gPSByZXMuZ2V0SW50KDEpOyAvLyBjb3VudCBpcyBpbiBjb2x1bW4gMS4KKwkJCWVsc2UKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZXh0cmFjdCBjb3VudCBmcm9tICclcychXG4iLCBmdW5jLCBzcWxbaV0pOworCQkJCWRiSW5mby5jb3VudHNbaV0gPSAtMTsKKwkJCQl9CisJCQl9CisgICAgICAgCisgICAgICAgIH0KKyAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAJeworICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHNxbD0nJXMnIGZhaWxlZCFcbiIsIGZ1bmMsIHNxbFtpXSk7CisgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgCX0KKwlmaW5hbGx5IHsKKwkJdHJ5IHsKKwkJCXJlcy5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gT0sKKwl9IC8vIHJlYWREYkxlbW1hdGFJbmZvcworCQorCS8qKioqKioqKioqKioqKioqKioqKiBUZXN0IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQorCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvc190ZXN0CisJICogVGhpcyBpcyBkZWJ1ZyBjb2RlIHdyaXR0ZW4gdG8gdGVzdCBpZiB3ZSBjYW4gYWNjZXNzIHRoZSBEZXJieQorCSAqIERhdGFiYXNlIGZyb20gYW4gZXh0ZXJuYWwgSmF2YSBQcm9ncmFtbS4KKwkgKiAwOC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgcmVhZERiSW5mb3NfdGVzdCgpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJU3RyaW5nCisJCWluc2VydFN0bXQgPSAiIjsKKwkKKwkvLyBDb25uZWN0IHRvIERlcmJ5IGRhdGFiYXNlOgorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQkKKwkJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJCXRyeQorCQkJeworCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIFN0cmluZyAKKyAgICAgICAgICAgIAlzcWwgPSAiU0VMRUNUICogRlJPTSAiICsgZGJUYWJsZTsKKyAgICAgICAgICAgIFJlc3VsdFNldCAKKyAgICAgICAgICAgIAlyZXN1bHQgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOworIAorICAgICAgICAgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiB0YWJsZSAnJXMnOlxuIiwgIGZ1bmMsIGRiVGFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAocmVzdWx0Lm5leHQoKSkgeworICAgICAgICAgICAgCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIiclcycgOiAnJXMnIDogJyVzJyA6ICclcycgLlxuIiwgcmVzdWx0LmdldFN0cmluZygxKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMiksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDMpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZyg0KSk7CisgICAgICAgIAkJaW5zZXJ0U3RtdCA9IGluc2VydFN0bXQgKyAiPHA+IiArIHJlc3VsdC5nZXRTdHJpbmcoMSkgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoMikgKyAiIDogIiArCisgICAgICAgICAgICAgICAgCQkgICAgIHJlc3VsdC5nZXRTdHJpbmcoMykgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoNCkgKyAiPC9wPiI7CisgICAgICAgICAgICAJfQorCQkJfQorCSAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAgICAgCXsKKwkgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogaW5zZXJ0U3RtdD0nJXMnIGZhaWxlZCEuXG4iLCBmdW5jLCBzdG10KTsKKyAgICAgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIAl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGluZyAnJXMgZmFpbGVkIVxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCXJldHVybiAxOworCQl9CisJCisJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCXRyeSB7CisJCWNvbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCQorCX0gLy8gcmVhZERiSW5mb3NfdGVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIGltcG9ydEdsZW1tTGVtYXRhX3Rlc3QKKwkgKiBUZXN0IFZlcnNpb24uCisJICogMTIuMTIuMTkvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0KFN0cmluZyBmbikKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QiOworCUlucHV0U3RyZWFtIAorCQlpbjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbjIgPSBudWxsOworCVN0cmluZworCQlsaW5lOworCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJcjsKKwkKKwkvKgorCSAqIFJlYWQgTGVtbWF0YSArIEluZm8gZnJvbSBmaWxlOiAKKwkgKi8KKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQkKKwl0cnkgeworCQkvL2luID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oIG5ldyBGaWxlSW5wdXRTdHJlYW0oZm4pICk7CisJCWluMiA9IG5ldyBCdWZmZXJlZFJlYWRlciggbmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJd2hpbGUoIChsaW5lID0gaW4yLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCA9PSAzICkKKwkJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogSW1wb3J0OiBsZW09JyVzJyBEZWNvbXA9JyVzJyBXZj0nJXMnLlxuIiwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMV0sIGxlbW1hSW5mb1syXSk7CisJCQllbHNlCisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6IGltcG9ydEdsZW1tTGFtYXRhOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzIVxuIiwgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQl9CisJCX0gCisJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBvcGVuICclcychXG4iLCBmdW5jLCBmbik7CisJCXJldHVybiAxOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisKKwl0cnkgeworCQlpbjIuY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwkvKiBDaGVjayBjb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCSAqLyAKKwlyID0gcmVhZERiSW5mb3NfdGVzdCgpOworCWlmKCByICE9IDAgKQorCQlyZXR1cm4gcjsKKwkJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdAorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8zYi8wMGQyODQwNTI3M2UwMDFjMTM2M2JlYjkzMmFlNjNhMSBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvM2IvMDBkMjg0MDUyNzNlMDAxYzEzNjNiZWI5MzJhZTYzYTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE0YzM1OQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvM2IvMDBkMjg0MDUyNzNlMDAxYzEzNjNiZWI5MzJhZTYzYTEKQEAgLTAsMCArMSw4NjIgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5zcWwuQ29ubmVjdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5Ecml2ZXJNYW5hZ2VyOworaW1wb3J0IGphdmEuc3FsLlByZXBhcmVkU3RhdGVtZW50OworaW1wb3J0IGphdmEuc3FsLlJlc3VsdFNldDsKK2ltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CitpbXBvcnQgamF2YS5zcWwuU3RhdGVtZW50OworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAob3ZlcndyaXR0ZW4gYnkgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKGZpbmFsIGFzc2lnbm1lbnRzKToKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJFbWIgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIjsKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLy8gQ29uc3RhbnRzIG9mIHRhYmxlIEdsZW1tTGVtbWF0YToKKwlzdGF0aWMgZmluYWwgaW50IG1heExlbW1hU2l6ZQk9IDY0OyAJLy8gbWF4LiBuby4gb2YgY2hhcnMsIGFzIGRlY2xhcmVkIGluIHRhYmxlIEdsZW1tTGVtbWF0YS4KKwlzdGF0aWMgZmluYWwgaW50IG1heFdmU2l6ZQkJPSA2NDsJLy8gbWF4LiBuby4gb2YgY2hhcnMsIGFzIGRlY2xhcmVkIGluIHRhYmxlIEdsZW1tTGVtbWF0YS4KKwkKKwkvKiB2YXJpYWJsZXMgKi8KKwlzdGF0aWMgaW50IG5FeGNlcHRTdG10CQkJPSAwOwkvLyBjb3VudCBuby4gb2YgZXhjZXB0aW9ucyBmb3IgcHJlcGFyZWRTdG10LgorCXN0YXRpYyBpbnQgbkV4Y2VwdEluc2VydAkJPSAwOwkvLyBjb3VudCBuby4gb2YgZXhjZXB0aW9ucyBmb3IgSW5zZXJ0cy4KKwkKKwkvKgorCSAqIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCSAqIAorCSAqIEFyZ3VtZW50czoKKwkgKiBwcm9wcwk6IFByb3BlcnRpZXMgbG9hZGVkIGJ5IHRoZSBHbGVtbVNlcnZpY2VzLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBmdW5jdGlvbiBsb2FkcyBvbmx5IHRob3NlIENvbnN0YW50cyBuZWVkZWQgaW4gdGhpcyBjbGFzcy4KKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMJcHJvcHMpCisJCisJeworCWZuYW1lREIJCSAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsIAkiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJc2VydmVySG9zdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAic2VydmVySG9zdCIsCSIvL2xvY2FsaG9zdDoxNTI3LyIpOworCWRlcmJ5REJVUkwgCQk9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkJCQorCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyogICAgY2hlY2tEZXJieUNvbm5lY3Rpb246CisJICogCisJICogY2hlY2sgaWYgRGVyYnkgTmV0d29yayBTZXJ2ZXIgaXMgYXZhaWxhYmxlLgorCSAqIFJldHVybnM6IDAgKD1PSykgb3IgLTEgKG9uIGVycm9yKS4KKwkgKiAwNS4xMS4yMS9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIGludCBjaGVja0RlcmJ5Q29ubmVjdGlvbigpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJjaGVja0RlcmJ5Q29ubmVjdGlvbiI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCW5JbnNlcnRlZCA9IDAsCS8vIG5vLiBvZiBsZW1tYS93ZiBwYWlycyBpbXBvcnRlZC4KKwkJcmV0ID0gMDsgLy8gT0suCisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlLAorCS8vIHNldCBBdXRvY29tbWl0ID0gZmFsc2UgdG8gYWNjZWxlcmF0ZSBpbnNlcnRpb25zOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQkKKwkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQlzdG10UHJlcCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KGluc2VydFByZXBhcmVkUXVlcnkpOworCQllbHNlCisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCisJCXdoaWxlKCAobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCAhPSAzICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzISBFeHBlY3RlZCA9IDMhIENhbm5vdCBiZSBzdG9yZWQhXG4iLCBmdW5jLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCQluRXJyb3JzKys7CisJCQkJY29udGludWU7CisJCQkJfQorCQkJCisJCQkvLyBHZXQgSW5mbywgaWYgd29yZGZvcm0gY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlICctJywgaW50ZXJwdW5jdGlvbiBldGMuOgorCQkJLy8gbGVtbWFJbmZvWzJdID0gd29yZGZvcm0uCisJCQljb250YWluc1NwZWMgPSBMZW1tYUluZm8uaXNXZlNwZWNpYWxDYXNlKGxlbW1hSW5mb1syXSk7CisJCQkvLyBzdG9yZSBpbnRvIERCOgorCQkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoc3RtdFByZXAsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQllbHNlCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3Moc3RtdCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCQorCQkJaWYoIHJldCAhPSAwICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgc3RvcmUgbGVtbWEgJyVzJyBpbnRvIERCISAocmV0PSVkKVxuIiwgZnVuYywgbGluZSwgcmV0KTsKKwkJCQluRXJyb3JzKys7IAorCQkJCX0KKwkJCWVsc2UKKwkJCQluSW5zZXJ0ZWQrKzsKKwkJCX0gLy8gd2hpbGUKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgR2xlbW0gbGVtbWF0YStpbmZvcyBmcm9tIGZpbGUhIEV4aXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOyAKKwkJfQkKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisJZmluYWxseSAKKwkJeyAKKwkJdHJ5IHsKKwkJCS8vIGltcG9ydGFudDogbm93IGNvbW1pdCwgYXMgYXV0b0NvbW1pdCBpcyBkZWFjdGl2YXRlZCwKKwkJCS8vIHRoaXMgYWxzbyByZW1vdmVzIGRhdGFiYXNlIGxvY2tzOgorCQkJY29uLmNvbW1pdCgpOworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb21taXQgc3VjY2Vzc2Z1bGwuXG4iLCBmdW5jKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb21taXQgYXQgdGhlIGVuZCBvZiB0aGUgd2ZzIGxpc3QgZmFpbGVkIVxuIiwgZnVuYyk7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCQorCQl0cnkgeyAvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSAKKwkJCQlzdG10LmNsb3NlKCk7CisJCQlpZiggc3RtdFByZXAgIT0gbnVsbCApIAorCQkJCXN0bXRQcmVwLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCX0gLy8gY2hlY2tfRGVyYnlDb25uZWN0aW9uCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAkJCQkJaW1wb3J0R2xlbW1MZW1hdGEKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGZuCQkgOiBhYnNvbHV0ZSBmaWxlIG5hbWUgb2YgR0xFTU0gb3V0cHV0IFtJU084ODU5LTFdIGV4cGVjdGVkLCBub3QgVVRGLTghCisJICogcHJvcHMJIDogUHJvcGVydGllcyB2b20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIHRvIHNldCBjb25zdGFudHMgbmVlZGVkCisJICogCQkJICAgaW4gdGhpcyBjbGFzcy4KKwkgKiBkYnBhdGgJIDogbG9jYXRpb24gKyBuYW1lIG9mIGRhdGFiYXNlIHdoZXJlIHRvIHN0b3JlIGxlbW1hdGErd2ZzLgorCSAqIFJldHVybnMJIDogMD1PSywgLTE6IGdlbmVyYWwgZXJyb3I7ID4gMCA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiBkeW5hbWljYWxseSBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAwNC4xMS4yMS9GQiBkYnBhdGguCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGEoU3RyaW5nIGZuLCBQcm9wZXJ0aWVzIHByb3BzLCBmaW5hbCBTdHJpbmcgZGJwYXRoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGEiOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluID0gbnVsbDsKKwlpbnQKKwkJbkVycm9yczsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gd2hlbiBpbmRleGluZyBkYXRhIGludG8gdGhlIGRhdGFiYXNlLCBzZWxlY3QgdGhlIHN1Ym1pdHRlZCBkYnBhdGgsCisJLy8gKG5vdCB0aGUgb25lIHN0b3JlZCBpbiB0aGUgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBkYnBhdGg7CisJCisJLy8gb3BlbiByZWFkZXIgb24gR2xlbW0gTGVtbWF0YToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQlpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmbikpOworCQkKKwkJbkVycm9ycyA9IHdyaXRlREJMZW1tYXRhKGluKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgZnJvbSAnJXMnIVxuIiwgZnVuYywgZm4pOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKworCS8vIGNsb3NlIFJlYWRlcjoKKwl0cnkgeworCQlpbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCW5FcnJvcnMgPSAtMTsKKwkJfQorCQorIAlpZiggbkVycm9ycyA9PSAwICkKKyAJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0IGRvbmUgc3VjY2Vzc2Z1bGx5LlxuIiwgZnVuYyk7CisgCWVsc2UKKyAJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0OiAlZCBFcnJvcnMhXG4iLCBmdW5jLCBuRXJyb3JzKTsKKyAJCisJcmV0dXJuIG5FcnJvcnM7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGEKKwkKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCisJICogICAgICAgICAgICAgICAgICAgICAgIHdyaXRlREJMZW1tYXRhKCkKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgCisJICogc3RvcmVzIGxpc3Qgb2YgbGVtbWF0YSArIGluZm9zIGludG8gRGVyYnkgZGIuCisJICogRmlsZSBmb3JtYXQ6ICJMZW1tYSBEZWNvbXBvc2l0aW9uIFdmIiwKKwkgKiAgICAgICAgICAgICAgZS5nLjogIkjDpHVzZXIgKy0gSGF1cyIuCisJICogUmV0dXJuczogMCA9IE9LIG9yIC0xOiBnZW5lcmFsIGVycm9yIG9yID4gMDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAwOS4wMS4yMC9GQgorCSAqIDA0LjExLjIxL0ZCIHR1cm4gYXV0b2NvbW1pdCBvZmYgdG8gYWNjZWxlcmF0ZSBodWdlIGFtb3VudCBvZiBpbnNlcnRpb25zLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWF0YShCdWZmZXJlZFJlYWRlciBpbikKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYXRhIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVByZXBhcmVkU3RhdGVtZW50CisJCXN0bXRQcmVwID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCAJID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsJCisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQluRXJyb3JzID0gMCwKKwkJbkluc2VydGVkID0gMCwJLy8gbm8uIG9mIGxlbW1hL3dmIHBhaXJzIGltcG9ydGVkLgorCQlyZXQgPSAwOyAvLyBPSy4KKwlib29sZWFuCisJCWNvbnRhaW5zU3BlYzsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2UsCisJLy8gc2V0IEF1dG9jb21taXQgPSBmYWxzZSB0byBhY2NlbGVyYXRlIGluc2VydGlvbnM6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCWNvbi5zZXRBdXRvQ29tbWl0KGZhbHNlKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQgKGF1dG9Db21taXQ9b2ZmKS5cbiIsIGZ1bmMpOworCQkKKwkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQlzdG10UHJlcCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KGluc2VydFByZXBhcmVkUXVlcnkpOworCQllbHNlCisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCisJCXdoaWxlKCAobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCAhPSAzICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzISBFeHBlY3RlZCA9IDMhIENhbm5vdCBiZSBzdG9yZWQhXG4iLCBmdW5jLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCQluRXJyb3JzKys7CisJCQkJY29udGludWU7CisJCQkJfQorCQkJCisJCQkvLyBHZXQgSW5mbywgaWYgd29yZGZvcm0gY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlICctJywgaW50ZXJwdW5jdGlvbiBldGMuOgorCQkJLy8gbGVtbWFJbmZvWzJdID0gd29yZGZvcm0uCisJCQljb250YWluc1NwZWMgPSBMZW1tYUluZm8uaXNXZlNwZWNpYWxDYXNlKGxlbW1hSW5mb1syXSk7CisJCQkvLyBzdG9yZSBpbnRvIERCOgorCQkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoc3RtdFByZXAsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQllbHNlCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3Moc3RtdCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCQorCQkJaWYoIHJldCAhPSAwICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgc3RvcmUgbGVtbWEgJyVzJyBpbnRvIERCISAocmV0PSVkKVxuIiwgZnVuYywgbGluZSwgcmV0KTsKKwkJCQluRXJyb3JzKys7IAorCQkJCX0KKwkJCWVsc2UKKwkJCQluSW5zZXJ0ZWQrKzsKKwkJCX0gLy8gd2hpbGUKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgR2xlbW0gbGVtbWF0YStpbmZvcyBmcm9tIGZpbGUhIEV4aXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOyAKKwkJfQkKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisJZmluYWxseSAKKwkJeyAKKwkJdHJ5IHsKKwkJCS8vIGltcG9ydGFudDogbm93IGNvbW1pdCwgYXMgYXV0b0NvbW1pdCBpcyBkZWFjdGl2YXRlZCwKKwkJCS8vIHRoaXMgYWxzbyByZW1vdmVzIGRhdGFiYXNlIGxvY2tzOgorCQkJY29uLmNvbW1pdCgpOworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb21taXQgc3VjY2Vzc2Z1bGwuXG4iLCBmdW5jKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb21taXQgYXQgdGhlIGVuZCBvZiB0aGUgd2ZzIGxpc3QgZmFpbGVkIVxuIiwgZnVuYyk7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCQorCQl0cnkgeyAvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSAKKwkJCQlzdG10LmNsb3NlKCk7CisJCQlpZiggc3RtdFByZXAgIT0gbnVsbCApIAorCQkJCXN0bXRQcmVwLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkluZm8gOiAlczogbm8uIG9mIGxlbW1hdGEvd2YgcGFpcnMgaW5zZXJ0ZWQgPSAlZC5cbiIsIGZ1bmMsIG5JbnNlcnRlZCk7CisJCisJcmV0dXJuIG5FcnJvcnM7IC8vIDA9T0ssID4wID0gbm8uIG9mIGVycm9ycy4KKwl9IC8vIHdyaXRlREJMZW1tYXRhCisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIHJ1bGVzIGludG8gRGVyYnkgREIuCisJICogTm90ZXM6CisJICogLSB0aGlzIGlzIHRoZSB2ZXJzaW9uIHdpdGggYSBQcmVwYXJlZFF1ZXJ5LgorCSAqIFBhcmFtZXRlcnM6CisJICogc3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDE3LjAxLjIwL0ZCCisJICogMDUuMS4yMS9GQiByZWplY3QgbGVtbWEvd2YgPiA2NCBjaGFycy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoCisJCQlQcmVwYXJlZFN0YXRlbWVudCBzdG10LCAKKwkJCVN0cmluZyBsZW1tYSwgCisJCQlTdHJpbmcgd2YsIAorCQkJU3RyaW5nIGRlY29tcG9zaXRpb24sIAorCQkJYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQiOworCWZpbmFsIGJvb2xlYW4KKwkJYkxvZyA9IGZhbHNlOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCWJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCS8vIGNoZWNrIHNpemUgb2Ygd2YgYW5kIGxlbW1hIGFnYWluc3QgZmllbGQgc2l6ZSBpbiB0YWJsZSBHbGVtbUxlbW1hdGE6CisJaWYoIGxlbW1hLmxlbmd0aCgpID49IEdsZW1tREIubWF4TGVtbWFTaXplICkgCisJCXsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBsZW1tYSByZWplY3RlZCAoPiAlZCk6ICclcychXG4iLAorCQkJCWZ1bmMsIG1heExlbW1hU2l6ZSwgbGVtbWEpOworCQlyZXR1cm4gNDsKKwkJfQorCWlmKCB3Zi5sZW5ndGgoKSA+PSBHbGVtbURCLm1heFdmU2l6ZSApIAorCQl7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2YgcmVqZWN0ZWQgKD4gJWQpOiAnJXMnIVxuIiwKKwkJCQlmdW5jLCBtYXhXZlNpemUsIHdmKTsKKwkJcmV0dXJuIDU7CisJCX0KKwkgCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIAorCS8vIGZvciBsb2dpbmcgb25seToKKwlzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJaWYoIGJMb2cgKQorCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKyAgICAvLyBub3cgaW5zZXJ0IG5ldyB2YWx1ZXMgaW50byBQcmVwYXJlZFN0YXRlbWVudDoKKyAgICB0cnkgeworICAgIAlzdG10LnNldFN0cmluZyggMSwgbGVtbWEpOworICAgICAgICBzdG10LnNldFN0cmluZyggMiwgd2YpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oMywgcHJvcDEpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNCwgcHJvcDIpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNSwgc3BlYyk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJlcGFyZWQgc3RtdCA9ICclcycuXG4iLCAgZnVuYywgc3RtdC50b1N0cmluZygpKTsKKyAgICAgICAgfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZTEpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigJIkVycm9yOiAlczogd2hpbGUgZmlsbGluZyBwcmVwYXJlZCBzdGF0ZW1lbnQgd2l0aCBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JyViJyBwcm9wMj0nJWInIHNwZWM9JyViJyFcbiIsICAKKwkJCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWlmKCArK25FeGNlcHRTdG10IDw9IDEgKQorCQkJZTEucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisgICAgCisgICAgdHJ5IHsKKwkJLy8gZXhlY3V0ZSB0aGUgZmlsbGVkIHByZXBhcmVkIHN0YXRlbWVudDoKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZSgpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViISAobj0lZClcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMsIG4pOworIAkJCXJldHVybiAyOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJaWYoICsrbkV4Y2VwdEluc2VydCA8PSAxICkKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAzOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIGludG8gRGVyYnkgREIuCisJICogUGFyYW1ldGVyczoKKwkgKiBjb250YWluc1NwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxMC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvcyhTdGF0ZW1lbnQgc3RtdCwgU3RyaW5nIGxlbW1hLCBTdHJpbmcgd2YsIFN0cmluZyBkZWNvbXBvc2l0aW9uLCBib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvcyI7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJQm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIHNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAgICAKKyAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKwl0cnkgeworCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKHNxbEluc2VydCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWFEYXRhCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgZnJvbSB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dDogbGVtbWEgKyBHTEVNTV9PUFRTX3h4eCAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hRGF0YShMZW1tYUluZm8gbGVtbWFJbmZvLCBQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWFEYXRhIjsKKworCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWxlbW1hSW5mby5jb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCWxlbW1hSW5mby5zdG10ID0gbGVtbWFJbmZvLmNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJaW50IHIgPSByZWFkREJMZW1tYShsZW1tYUluZm8uc3RtdCwgbGVtbWFJbmZvKTsKKwkJCQorCQlpZiggciAhPSAwICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGdldCBkYXRhIGZvciBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyFcbiIsIAorCQkJCQlmdW5jLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGxlbW1hSW5mby5jb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYURhdGEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBieSBhY2Nlc3NpbmcgdGhlIEdsZW1tREIuCisJICogSW5wdXQgOiBsZW1tYSArIHByb3AxKzIgKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqIE91dHB1dDogCisJICogIC0gY29udGFpbnMgYSBSZXN1bHRTZXQgZm9yIGZldGNoaW5nIHRoZSB3b3JkZm9ybXMuCisJICogCSAgVGhpcyBSZXN1bHRTZXQgd2lsbCBoYXZlIGJlIGJlIGNsb3NlZCB3aXRoIExlbW1hSW5mby5jbG9zZSgpLgorCSAqIAkgIFRoZSBuby4gb2YgZm91bmQgd29yZGZvcm1zIGlzIG5vdCBrbm93biB0aWxsIHdlCisJICogCSAgZmV0Y2ggYWxsIG9mIHRoZW0gZnJvbSBSZXN1bHRTZXQhIAorCSAqIAktIGR1ZSB0byBTRUxFQ1QgRElTVElOQ1Qgb25seSB1bmlxIHdmIGFyZSByZXR1cm5lZC4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWEoU3RhdGVtZW50IHN0bXQsIExlbW1hSW5mbyBsZW1tYUluZm8pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYSI7CisJU3RyaW5nCisJCXNxbDsKKwkJCisJc3FsID0gU3RyaW5nLmZvcm1hdCgiU0VMRUNUIERJU1RJTkNUIHdmIGZyb20gJXMgV0hFUkUgbGVtbWE9JyVzJyAlcyAlcyAlcyIsIAorCQkJZGJUYWJsZSwKKwkJCWxlbW1hSW5mby5sZW1tYSwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIkFORCBwcm9wMT0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICJBTkQgcHJvcDE9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIkFORCBwcm9wMj0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICJBTkQgcHJvcDI9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAxID8gIkFORCBzcGVjPSd0cnVlJyIgICA6IAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiQU5EIHNwZWM9J2ZhbHNlJyIgIDogIiIpOworCQorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIGZ1bmMsIGxlbW1hSW5mby5wcm9wMSwgbGVtbWFJbmZvLnByb3AyLCBsZW1tYUluZm8uc3BlYyk7CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWwgPSAnJXMnLlxuIiwgZnVuYywgc3FsKTsKKworCXRyeSB7CisJCWxlbW1hSW5mby5yZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOwkKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGVuIGV4ZWN1dGluZyBzcWw9JyVzJyFcbiIsIGZ1bmMsIHNxbCk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisJZmluYWxseSB7CisJCS8vIGFsbCBzcWwgc3R1ZmYgYXJlIGNsb3NlZCBvdXRzaWRlIHRoaXMgZnVuY3Rpb24sIHNvIGRvbid0IGNsb3NlIHRoZW0gaGVyZSEKKwkJfQkKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zCisJICogUmV0dXJucyBHZW5lcmFsIEluZm9zIGFib3V0IHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiByZWFkIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiSW5mb3MoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWRiSW5mbyA9IHJlYWREYkxlbW1hdGFJbmZvcyhzdG10KTsKKwkJCQorCQlpZiggZGJJbmZvID09IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgcmVhZCBHZW5lcmFsIEluZm9zIGZyb20gR2xlbW0gRGF0YWJhc2UhXG4iLCBmdW5jKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIG51bGw7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgc3RtdC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBtYXkgYmUgbnVsbC4KKwkJCisJfSAvLyByZWFkRGJJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkxlbW1hdGFJbmZvczoKKwkgKiByZWFkcyBhbmQgcmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjb250ZW50IAorCSAqIG9mIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiBSZXR1cm5zIDA9T0sgb3IgZXJyb3IgY29kZSA+IDAuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJMZW1tYXRhSW5mb3MoU3RhdGVtZW50IHN0bXQpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInJlYWREYkxlbW1hSW5mb3MiOworCVN0cmluZ1tdCisJCXNxbCA9IHsJIlNFTEVDVCBDT1VOVChkaXN0aW5jdCBsZW1tYSkgZnJvbSAiICsgZGJUYWJsZSAsCS8vIGNvdW50cyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YS4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUsCQkJCQkvLyBjb3VudHMgdG90YWwgbm8uIG9mIHN0b3JlZCB3b3JkZm9ybXMuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj10cnVlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj10cnVlIn07CisJUmVzdWx0U2V0CisJCXJlcyA9IG51bGw7IAorCWludFtdCisJCW5Db3VudHMgPSBuZXcgaW50W3NxbC5sZW5ndGhdOworCWludAkJCisJCWkgPSAwLCAKKwkJbkRpc3RMZW1tYXRhID0gLTEsCS8vIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhIGluIERCLgorCQluV2ZzCQkgPSAtMTsJLy8gbm8uIG9mIHdvcmRmb3JtcyBpbiBEQi4KKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogZXh0cmFjdGluZyBhZ3JlZ2F0ZWQgaW5mb3MgYWJvdXQgRGF0YWJhc2UgY29udGVudHMuLi5cbiIsIGZ1bmMpOworCQorCWRiSW5mbyA9IG5ldyBHbGVtbURCSW5mbygpOworCisJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJdHJ5IHsKKwkJZm9yKGk9MDsgaTxzcWwubGVuZ3RoOyBpKyspCisJCQl7CisJCQlyZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWxbaV0pOworCQkJaWYoIHJlcy5uZXh0KCkgKQorCQkJCWRiSW5mby5jb3VudHNbaV0gPSByZXMuZ2V0SW50KDEpOyAvLyBjb3VudCBpcyBpbiBjb2x1bW4gMS4KKwkJCWVsc2UKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZXh0cmFjdCBjb3VudCBmcm9tICclcychXG4iLCBmdW5jLCBzcWxbaV0pOworCQkJCWRiSW5mby5jb3VudHNbaV0gPSAtMTsKKwkJCQl9CisJCQl9CisgICAgICAgCisgICAgICAgIH0KKyAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAJeworICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHNxbD0nJXMnIGZhaWxlZCFcbiIsIGZ1bmMsIHNxbFtpXSk7CisgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgCX0KKwlmaW5hbGx5IHsKKwkJdHJ5IHsKKwkJCXJlcy5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gT0sKKwl9IC8vIHJlYWREYkxlbW1hdGFJbmZvcworCQorCS8qKioqKioqKioqKioqKioqKioqKiBUZXN0IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQorCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvc190ZXN0CisJICogVGhpcyBpcyBkZWJ1ZyBjb2RlIHdyaXR0ZW4gdG8gdGVzdCBpZiB3ZSBjYW4gYWNjZXNzIHRoZSBEZXJieQorCSAqIERhdGFiYXNlIGZyb20gYW4gZXh0ZXJuYWwgSmF2YSBQcm9ncmFtbS4KKwkgKiAwOC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgcmVhZERiSW5mb3NfdGVzdCgpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJU3RyaW5nCisJCWluc2VydFN0bXQgPSAiIjsKKwkKKwkvLyBDb25uZWN0IHRvIERlcmJ5IGRhdGFiYXNlOgorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQkKKwkJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJCXRyeQorCQkJeworCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIFN0cmluZyAKKyAgICAgICAgICAgIAlzcWwgPSAiU0VMRUNUICogRlJPTSAiICsgZGJUYWJsZTsKKyAgICAgICAgICAgIFJlc3VsdFNldCAKKyAgICAgICAgICAgIAlyZXN1bHQgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOworIAorICAgICAgICAgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiB0YWJsZSAnJXMnOlxuIiwgIGZ1bmMsIGRiVGFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAocmVzdWx0Lm5leHQoKSkgeworICAgICAgICAgICAgCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIiclcycgOiAnJXMnIDogJyVzJyA6ICclcycgLlxuIiwgcmVzdWx0LmdldFN0cmluZygxKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMiksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDMpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZyg0KSk7CisgICAgICAgIAkJaW5zZXJ0U3RtdCA9IGluc2VydFN0bXQgKyAiPHA+IiArIHJlc3VsdC5nZXRTdHJpbmcoMSkgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoMikgKyAiIDogIiArCisgICAgICAgICAgICAgICAgCQkgICAgIHJlc3VsdC5nZXRTdHJpbmcoMykgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoNCkgKyAiPC9wPiI7CisgICAgICAgICAgICAJfQorCQkJfQorCSAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAgICAgCXsKKwkgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogaW5zZXJ0U3RtdD0nJXMnIGZhaWxlZCEuXG4iLCBmdW5jLCBzdG10KTsKKyAgICAgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIAl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGluZyAnJXMgZmFpbGVkIVxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCXJldHVybiAxOworCQl9CisJCisJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCXRyeSB7CisJCWNvbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCQorCX0gLy8gcmVhZERiSW5mb3NfdGVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIGltcG9ydEdsZW1tTGVtYXRhX3Rlc3QKKwkgKiBUZXN0IFZlcnNpb24uCisJICogMTIuMTIuMTkvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0KFN0cmluZyBmbikKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QiOworCUlucHV0U3RyZWFtIAorCQlpbjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbjIgPSBudWxsOworCVN0cmluZworCQlsaW5lOworCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJcjsKKwkKKwkvKgorCSAqIFJlYWQgTGVtbWF0YSArIEluZm8gZnJvbSBmaWxlOiAKKwkgKi8KKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQkKKwl0cnkgeworCQkvL2luID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oIG5ldyBGaWxlSW5wdXRTdHJlYW0oZm4pICk7CisJCWluMiA9IG5ldyBCdWZmZXJlZFJlYWRlciggbmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJd2hpbGUoIChsaW5lID0gaW4yLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCA9PSAzICkKKwkJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogSW1wb3J0OiBsZW09JyVzJyBEZWNvbXA9JyVzJyBXZj0nJXMnLlxuIiwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMV0sIGxlbW1hSW5mb1syXSk7CisJCQllbHNlCisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6IGltcG9ydEdsZW1tTGFtYXRhOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzIVxuIiwgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQl9CisJCX0gCisJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBvcGVuICclcychXG4iLCBmdW5jLCBmbik7CisJCXJldHVybiAxOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisKKwl0cnkgeworCQlpbjIuY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwkvKiBDaGVjayBjb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCSAqLyAKKwlyID0gcmVhZERiSW5mb3NfdGVzdCgpOworCWlmKCByICE9IDAgKQorCQlyZXR1cm4gcjsKKwkJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdAorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8zYy83MDliNWQ3NDgxMmIwMDFjMWM0MWNlNTU5ZWE1ZTE2YiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvM2MvNzA5YjVkNzQ4MTJiMDAxYzFjNDFjZTU1OWVhNWUxNmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY2NzU4NwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvM2MvNzA5YjVkNzQ4MTJiMDAxYzFjNDFjZTU1OWVhNWUxNmIKQEAgLTAsMCArMSw2OTAgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA2LjEwLjIxIjsgLy8iMTcuMDYuMjAiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMSI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwkJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwkJU3RyaW5nCisJCQlzdGF0dXM7CisJCVV0aWxzCisJCQl1ID0gbmV3IFV0aWxzKCk7CisJCVByb3BlcnRpZXMKKwkJCXByb3BzOworCQkKKwkJLy8gcmVhZCB0ZXN0CisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJLy9IdHRwU2VydmxldENvbnRleHQKKwkJCisJCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCQlGaWxlSW5wdXRTdHJlYW0KKwkJCWluUHJvcCA9IEdsZW1tU2VydmljZXMuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKCJHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiKTsKKwkJCisJCS8vIGVuZCBvZiByZWFkIHRlc3QKKwkJCisJCS8vIHRlc3QKKwkJLyoKKwkJcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworCQkKKwkJICogcHJvcHMuc2V0UHJvcGVydHkoInAiLCAidGVzdCIpOworCQkgKgorCQlGaWxlT3V0cHV0U3RyZWFtIG91dDsKKwkJdHJ5IHsKKwkJCW91dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKCJnbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiKTsKKwkJCXByb3BzLnN0b3JlKG91dCwgICJ0ZXN0IEdsZW1tU2VydmljZXMgcHJvcGVydGllcyIpOworCQkJfSAKKwkJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX07CisJCSovCisJCQorCQkvLyBlbmQgb3Rlc3QKKwkJCisJCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCQlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIkFQSTogJXM6IC9pbmRleC9zdGF0dXMvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKworCQlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkpOworCisJCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwkJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiBQT1NUOiAvaW5kZXgvYWRkLzogdGV4dC9wbGFpbgorCSAqIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlLgorCSAqIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkCisJICogaW50byB0aGUgZGF0YWJhc2UuCisJICogSW5wdXQ6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqLworCUBQYXRoKCJhZGQiKSBAUE9TVCBAQ29uc3VtZXMoInRleHQvcGxhaW4iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgaW1wb3J0TGVtbWFEYXRhKFN0cmluZyBsaXN0KSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gYXJMaXN0ID0gbGlzdC5zcGxpdCgiXG4iKTsKKwkKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IGZzLmdldFBhdGgoZm5hbWVXZnMpOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2FkZC8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQorCS8vIFdyaXRlIHN1Ym1pdHRlZCBsaXN0IG9mIHdvcmRmb3JtcyB0byBmaWxlOgorCXRyeQorCQl7CisJCW9zID0gRmlsZXMubmV3T3V0cHV0U3RyZWFtKHApOworCQlvcy53cml0ZShsaXN0LmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSkpOworCSAgICBvcy5jbG9zZSgpOworCSAgICBiRG9uZSA9IHRydWU7CisJICAgIFN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGZpbGUgJyVzJyBiZXNjaHJpZWJlbi5cbiIsIGZ1bmMsIGZuYW1lV2ZzKTsKKwkgICAgfQorCWNhdGNoKElPRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisJCX0KKyAgICAKKwlpZiggYkRvbmUgKQorCQltc2cgPSAiPHA+TGlzdCB3cml0dGVuIHRvIGZpbGU6ICIgKyBwLnRvU3RyaW5nKCkgKyAiPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+PGI+RmlsZSBFcnJvcjogPC9iPiBjYW5ub3Qgd3JpdGUgdG8gIiArIHAudG9TdHJpbmcoKSArICIhPC9wPiI7CisJCisJLyoKKwkgKiAgZXhlY3V0ZSBHbGVtbSBzaGVsbCBzY3JpcHQ6CisJICovCisJU3RyaW5nCisJCW1zZ0dsZW1tU2NyaXB0LCBtc2dJbXBvcnQ7CisJaW50IAorCQlyID0gVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0KGZuYW1lU2NyaXB0LCBmbmFtZVdmcyk7CisJCisJaWYoIHIgPT0gMCApCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEF1c2bvv71ocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBpbXBvcnRHbGVtbUxlbW1hdGEgcmV0dXJucyByPSVkLlxuIiwgZnVuYywgcik7CisJaWYoIG5FcnJvcnMgPT0gMCApCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiAiICsgbkVycm9ycyArICIgZXJyb3JzITwvcD4iOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGVuZGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJLy8gUmV0dXJuIEluZm9zOgorCXJldHVybiAKKwkJCSAgICI8aHRtbD4iICsKKwkJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwl9CisKKwkvKiB2aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyB2aWV3REJJbmZvCisKKworCS8qIHZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIC0gU3RhdHVzOiA8aT5Xb3JrIGluIHByb2dyZXNzLi4uITwvaT4pPC9oND5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoICFvcHRpb25zLmVxdWFscygidW5kZWYiKSkKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEvcHJvcDIvc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEdsZW1tU2VydmljZXMgJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbkRhdGUsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8zZi9kMDFmMDIyZjEwMmMwMDFjMWM0MWNlNTU5ZWE1ZTE2YiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvM2YvZDAxZjAyMmYxMDJjMDAxYzFjNDFjZTU1OWVhNWUxNmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZkZWZiMQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvM2YvZDAxZjAyMmYxMDJjMDAxYzFjNDFjZTU1OWVhNWUxNmIKQEAgLTAsMCArMSw3MTYgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA2LjEwLjIxIjsgLy8iMTcuMDYuMjAiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMSI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwkJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwkJU3RyaW5nCisJCQlzdGF0dXM7CisJCVV0aWxzCisJCQl1ID0gbmV3IFV0aWxzKCk7CisJCVByb3BlcnRpZXMKKwkJCXByb3BzOworCQlTdHJpbmcKKwkJCXByb3BOYW1lID0gIkdsZW1tU2VydmljZXMucHJvcGVydGllcyI7CisJCS8vIHJlYWQgdGVzdAorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCS8vSHR0cFNlcnZsZXRDb250ZXh0CisJCQorCQkvLyBodHRwU2VydmxldFJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW52KTsKKwkJSW5wdXRTdHJlYW0KKwkJCWluUHJvcCA9IEdsZW1tU2VydmljZXMuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKHByb3BOYW1lKTsKKwkJCisJCWlmKCBpblByb3AgPT0gbnVsbCApCisJCQl7CisJCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgbG9hZCAnJXMnIVxuIiwgZnVuYywgcHJvcE5hbWUpOworCQkJcmV0dXJuIG51bGw7CisJCQl9CisJCQorCQl0cnkgeworCQkJcHJvcHMubG9hZChpblByb3ApOworCQkJU2V0PEVudHJ5PE9iamVjdCxPYmplY3Q+PgorCQkJCXByb3BzU2V0ID0gcHJvcHMuZW50cnlTZXQoKTsKKwkJCQorCQkJZm9yKEVudHJ5PE9iamVjdCwgT2JqZWN0PiBwcm9wRW50cnkgOiBwcm9wc1NldCkKKwkJCQl7CisJCQkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcCAlcyA9ICclcycuXG4iLCBmdW5jLCBwcm9wRW50cnkuZ2V0S2V5KCksIHByb3BFbnRyeS5nZXRWYWx1ZSgpKTsKKwkJCQl9CisJCQl9IAorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGxvYWQgcHJvcHMgJ0dsZW1tU2VydmljZXMucHJvcGVydGllcychIiwgIGZ1bmMpOworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQkKKwkJLy8gZW5kIG9mIHJlYWQgdGVzdAorCQkKKwkJLy8gdGVzdAorCQkvKgorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCQorCQkgKiBwcm9wcy5zZXRQcm9wZXJ0eSgicCIsICJ0ZXN0Iik7CisJCSAqCisJCUZpbGVPdXRwdXRTdHJlYW0gb3V0OworCQl0cnkgeworCQkJb3V0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oImdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOworCQkJcHJvcHMuc3RvcmUob3V0LCAgInRlc3QgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIik7CisJCQl9IAorCQljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfTsKKwkJKi8KKwkJCisJCS8vIGVuZCBvdGVzdAorCQkKKwkJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiQVBJOiAlczogL2luZGV4L3N0YXR1cy8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCisJCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCQlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIFBPU1Q6IC9pbmRleC9hZGQvOiB0ZXh0L3BsYWluCisJICogYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UuCisJICogVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQKKwkgKiBpbnRvIHRoZSBkYXRhYmFzZS4KKwkgKiBJbnB1dDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICovCisJQFBhdGgoImFkZCIpIEBQT1NUIEBDb25zdW1lcygidGV4dC9wbGFpbiIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBpbXBvcnRMZW1tYURhdGEoU3RyaW5nIGxpc3QpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSBhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCQorCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvYWRkLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZu+/vWhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCX0KKworCS8qIHZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIHZpZXdEQkluZm8KKworCisJLyogdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgLSBTdGF0dXM6IDxpPldvcmsgaW4gcHJvZ3Jlc3MuLi4hPC9pPik8L2g0PlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggIW9wdGlvbnMuZXF1YWxzKCJ1bmRlZiIpKQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMS9wcm9wMi9zcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogR2xlbW1TZXJ2aWNlcyAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uRGF0ZSwgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCS8vU3lzdGVtLm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzQvMzAyNDk3NGM3ZTNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzQvMzAyNDk3NGM3ZTNkMDAxYzEwYjFiMTdkZGQzMDllNmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRhNWU1YgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNC8zMDI0OTc0YzdlM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpAQCAtMCwwICsxLDcyOSBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnNxbC5Db25uZWN0aW9uOworaW1wb3J0IGphdmEuc3FsLkRyaXZlck1hbmFnZXI7CitpbXBvcnQgamF2YS5zcWwuUHJlcGFyZWRTdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS5zcWwuUmVzdWx0U2V0OworaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5TdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitwdWJsaWMgY2xhc3MgR2xlbW1EQgorCit7CisJc3RhdGljIHB1YmxpYyBTdHJpbmcgZGJUYWJsZSAJPSAiR2xlbW1MZW1tYXRhIjsKKwlzdGF0aWMgU3RyaW5nIGRiTGVtbWEgCQkgCT0gImxlbW1hIjsKKwlzdGF0aWMgU3RyaW5nIGRiV2YJIAkJCT0gIndmIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDEgCQkJPSAicHJvcDEiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMiAJCQk9ICJwcm9wMiI7CisKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKG92ZXJ3cml0dGVuIGJ5IEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZuYW1lREIgPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgc2VydmVySG9zdCA9ICIvL2xvY2FsaG9zdDoxNTI3LyI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChmaW5hbCBhc3NpZ25tZW50cyk6CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyRW1iID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZERyaXZlciI7CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyQ2xpZW50ID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREcml2ZXIiOworCisJZmluYWwgc3RhdGljIGJvb2xlYW4KKwkJdXNlUHJlcGFyZWRTdG10ID0gdHJ1ZTsgLy8gMT11c2UgUHJlcGFyZWRTdGF0ZW1lbnQgYW5kIG5vdCBTdGF0ZW1lbnQuCisJCisJLy8gdmFsdWVzIHRvIGJlIGluc2VydGVkOiBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYy4KKwlzdGF0aWMgU3RyaW5nIGluc2VydFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKCclcycsICclcycsICclcycsICclcycsICclcycpIjsKKwlzdGF0aWMgU3RyaW5nIGluc2VydFByZXBhcmVkUXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoPywgPywgPywgPywgPykiOworCQorCS8qCisJICogc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJICogCisJICogQXJndW1lbnRzOgorCSAqIHByb3BzCTogUHJvcGVydGllcyBsb2FkZWQgYnkgdGhlIEdsZW1tU2VydmljZXMuCisJICogTm90ZXM6CisJICogLSB0aGlzIGZ1bmN0aW9uIGxvYWRzIG9ubHkgdGhvc2UgQ29uc3RhbnRzIG5lZWRlZCBpbiB0aGlzIGNsYXNzLgorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcwlwcm9wcykKKwkKKwl7CisJZm5hbWVEQgkJIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgCSIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlzZXJ2ZXJIb3N0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJzZXJ2ZXJIb3N0IiwJIi8vbG9jYWxob3N0OjE1MjcvIik7CisJZGVyYnlEQlVSTCAJCT0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCQkJCisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCQkJCQlpbXBvcnRHbGVtbUxlbWF0YQorCSAqIFBhcmFtZXRlcnM6CisJICogZm4JCSA6IGFic29sdXRlIGZpbGUgbmFtZSBvZiBHTEVNTSBvdXRwdXQgW0lTTzg4NTktMV0gZXhwZWN0ZWQsIG5vdCBVVEYtOCEKKwkgKiBwcm9wcwkgOiBQcm9wZXJ0aWVzIHZvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgdG8gc2V0IGNvbnN0YW50cyBuZWVkZWQKKwkgKiAJCQkgICBpbiB0aGlzIGNsYXNzLgorCSAqIGRicGF0aAkgOiBsb2NhdGlvbiArIG5hbWUgb2YgZGF0YWJhc2Ugd2hlcmUgdG8gc3RvcmUgbGVtbWF0YSt3ZnMuCisJICogUmV0dXJucwkgOiAwPU9LLCAtMTogZ2VuZXJhbCBlcnJvcjsgPiAwIDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAKKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIGR5bmFtaWNhbGx5IGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqIDA0LjExLjIxL0ZCIGRicGF0aC4KKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YShTdHJpbmcgZm4sIFByb3BlcnRpZXMgcHJvcHMsIGZpbmFsIFN0cmluZyBkYnBhdGgpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YSI7CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4gPSBudWxsOworCWludAorCQluRXJyb3JzOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyB3aGVuIGluZGV4aW5nIGRhdGEgaW50byB0aGUgZGF0YWJhc2UsIHNlbGVjdCB0aGUgc3VibWl0dGVkIGRicGF0aCwKKwkvLyAobm90IHRoZSBvbmUgc3RvcmVkIGluIHRoZSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCWRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGRicGF0aDsKKwkKKwkvLyBvcGVuIHJlYWRlciBvbiBHbGVtbSBMZW1tYXRhOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCWluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCQorCQluRXJyb3JzID0gd3JpdGVEQkxlbW1hdGEoaW4pOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBmcm9tICclcychXG4iLCBmdW5jLCBmbik7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAtMTsKKwkJfQorCisJLy8gY2xvc2UgUmVhZGVyOgorCXRyeSB7CisJCWluLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJbkVycm9ycyA9IC0xOworCQl9CisJCisgCWlmKCBuRXJyb3JzID09IDAgKQorIAkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQgZG9uZSBzdWNjZXNzZnVsbHkuXG4iLCBmdW5jKTsKKyAJZWxzZQorIAkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQ6ICVkIEVycm9ycyFcbiIsIGZ1bmMsIG5FcnJvcnMpOworIAkKKwlyZXR1cm4gbkVycm9yczsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YQorCQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWF0YSgpCisJICogc3RvcmVzIGxpc3Qgb2YgbGVtbWF0YSArIGluZm9zIGludG8gRGVyYnkgZGIuCisJICogRmlsZSBmb3JtYXQ6ICJMZW1tYSBEZWNvbXBvc2l0aW9uIFdmIiwKKwkgKiAgICAgICAgICAgICAgZS5nLjogIkjDpHVzZXIgKy0gSGF1cyIuCisJICogUmV0dXJuczogMCA9IE9LIG9yIC0xOiBnZW5lcmFsIGVycm9yIG9yID4gMDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAwOS4wMS4yMC9GQgorCSAqIDA0LjExLjIxL0ZCIHR1cm4gYXV0b2NvbW1pdCBvZmYgdG8gYWNjZWxlcmF0ZSBodWdlIGFtb3VudCBvZiBpbnNlcnRpb25zLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWF0YShCdWZmZXJlZFJlYWRlciBpbikKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYXRhIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVByZXBhcmVkU3RhdGVtZW50CisJCXN0bXRQcmVwID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCAJID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsJCisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQluRXJyb3JzID0gMCwKKwkJbkluc2VydGVkID0gMCwJLy8gbm8uIG9mIGxlbW1hL3dmIHBhaXJzIGltcG9ydGVkLgorCQlyZXQgPSAwOyAvLyBPSy4KKwlib29sZWFuCisJCWNvbnRhaW5zU3BlYzsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2UsCisJLy8gc2V0IEF1dG9jb21taXQgPSBmYWxzZSB0byBhY2NlbGVyYXRlIGluc2VydGlvbnM6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCWNvbi5zZXRBdXRvQ29tbWl0KGZhbHNlKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQgKGF1dG9Db21taXQ9b2ZmKS5cbiIsIGZ1bmMpOworCisJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJc3RtdFByZXAgPSBjb24ucHJlcGFyZVN0YXRlbWVudChpbnNlcnRQcmVwYXJlZFF1ZXJ5KTsKKwkJZWxzZQorCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKworCQl3aGlsZSggKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggIT0gMyApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogJyVzJyBoYXMgJWQgY29tcG9uZW50cyEgRXhwZWN0ZWQgPSAzISBDYW5ub3QgYmUgc3RvcmVkIVxuIiwgZnVuYywgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQkJbkVycm9ycysrOworCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQorCQkJLy8gR2V0IEluZm8sIGlmIHdvcmRmb3JtIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSAnLScsIGludGVycHVuY3Rpb24gZXRjLjoKKwkJCS8vIGxlbW1hSW5mb1syXSA9IHdvcmRmb3JtLgorCQkJY29udGFpbnNTcGVjID0gTGVtbWFJbmZvLmlzV2ZTcGVjaWFsQ2FzZShsZW1tYUluZm9bMl0pOworCQkJLy8gc3RvcmUgaW50byBEQjoKKwkJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKHN0bXRQcmVwLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJZWxzZQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zKHN0bXQsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQkKKwkJCWlmKCByZXQgIT0gMCApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHN0b3JlIGxlbW1hICclcycgaW50byBEQiFcbiIsIGZ1bmMsIGxpbmUpOworCQkJCW5FcnJvcnMrKzsgCisJCQkJfQorCQkJZWxzZQorCQkJCW5JbnNlcnRlZCsrOworCQkJfSAvLyB3aGlsZQorCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBHbGVtbSBsZW1tYXRhK2luZm9zIGZyb20gZmlsZSEgRXhpdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gLTE7IAorCQl9CQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgCisJCQkJY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgCisJCQkJc3RtdC5jbG9zZSgpOworCQkJaWYoIHN0bXRQcmVwICE9IG51bGwgKSAKKwkJCQlzdG10UHJlcC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQkJCisJCX0KKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJJbmZvIDogJXM6IG5vLiBvZiBsZW1tYXRhL3dmIHBhaXJzIGluc2VydGVkID0gJWQuXG4iLCBmdW5jLCBuSW5zZXJ0ZWQpOworCQorCXJldHVybiBuRXJyb3JzOyAvLyAwPU9LLCA+MCA9IG5vLiBvZiBlcnJvcnMuCisJfSAvLyB3cml0ZURCTGVtbWF0YQorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZDoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBydWxlcyBpbnRvIERlcmJ5IERCLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBpcyB0aGUgdmVyc2lvbiB3aXRoIGEgUHJlcGFyZWRRdWVyeS4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIHNwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxNy4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCgKKwkJCVByZXBhcmVkU3RhdGVtZW50IHN0bXQsIAorCQkJU3RyaW5nIGxlbW1hLCAKKwkJCVN0cmluZyB3ZiwgCisJCQlTdHJpbmcgZGVjb21wb3NpdGlvbiwgCisJCQlib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCI7CisJZmluYWwgYm9vbGVhbgorCQliTG9nID0gZmFsc2U7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJYm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIAorCS8vIGZvciBsb2dpbmcgb25seToKKwlzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJaWYoIGJMb2cgKQorCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKyAgICAvLyBub3cgaW5zZXJ0IG5ldyB2YWx1ZXMgaW50byBQcmVwYXJlZFN0YXRlbWVudDoKKyAgICB0cnkgeworICAgIAlzdG10LnNldFN0cmluZyggMSwgbGVtbWEpOworICAgICAgICBzdG10LnNldFN0cmluZyggMiwgd2YpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oMywgcHJvcDEpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNCwgcHJvcDIpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNSwgc3BlYyk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJlcGFyZWQgc3RtdCA9ICclcycuXG4iLCAgZnVuYywgc3RtdC50b1N0cmluZygpKTsKKyAgICAgICAgfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZTEpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigJIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0nJWInIHByb3AyPSclYicgc3BlYz0nJWInIVxuIiwgIAorCQkJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisgICAgCisgICAgdHJ5IHsKKwkJLy8gZXhlY3V0ZSB0aGUgZmlsbGVkIHByZXBhcmVkIHN0YXRlbWVudDoKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZSgpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDE7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfTsKKwkKKyAgICAKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvczoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBpbnRvIERlcmJ5IERCLgorCSAqIFBhcmFtZXRlcnM6CisJICogY29udGFpbnNTcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTAuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3MoU3RhdGVtZW50IHN0bXQsIFN0cmluZyBsZW1tYSwgU3RyaW5nIHdmLCBTdHJpbmcgZGVjb21wb3NpdGlvbiwgYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3MiOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCUJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICBzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgICAgCisgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisJdHJ5IHsKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZShzcWxJbnNlcnQpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDE7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hRGF0YQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGZyb20gdGhlIEdsZW1tREIuCisJICogSW5wdXQ6IGxlbW1hICsgR0xFTU1fT1BUU194eHggKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYURhdGEoTGVtbWFJbmZvIGxlbW1hSW5mbywgUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hRGF0YSI7CisKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlsZW1tYUluZm8uY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlsZW1tYUluZm8uc3RtdCA9IGxlbW1hSW5mby5jb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWludCByID0gcmVhZERCTGVtbWEobGVtbWFJbmZvLnN0bXQsIGxlbW1hSW5mbyk7CisJCQkKKwkJaWYoIHIgIT0gMCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBnZXQgZGF0YSBmb3IgbGVtbWE9JyVzJyBvcHRpb25zPSclcychXG4iLCAKKwkJCQkJZnVuYywgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCQkJcmV0dXJuIDE7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBsZW1tYUluZm8uY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWFEYXRhCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgYnkgYWNjZXNzaW5nIHRoZSBHbGVtbURCLgorCSAqIElucHV0IDogbGVtbWEgKyBwcm9wMSsyIChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiBPdXRwdXQ6IAorCSAqICAtIGNvbnRhaW5zIGEgUmVzdWx0U2V0IGZvciBmZXRjaGluZyB0aGUgd29yZGZvcm1zLgorCSAqIAkgIFRoaXMgUmVzdWx0U2V0IHdpbGwgaGF2ZSBiZSBiZSBjbG9zZWQgd2l0aCBMZW1tYUluZm8uY2xvc2UoKS4KKwkgKiAJICBUaGUgbm8uIG9mIGZvdW5kIHdvcmRmb3JtcyBpcyBub3Qga25vd24gdGlsbCB3ZQorCSAqIAkgIGZldGNoIGFsbCBvZiB0aGVtIGZyb20gUmVzdWx0U2V0ISAKKwkgKiAJLSBkdWUgdG8gU0VMRUNUIERJU1RJTkNUIG9ubHkgdW5pcSB3ZiBhcmUgcmV0dXJuZWQuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hKFN0YXRlbWVudCBzdG10LCBMZW1tYUluZm8gbGVtbWFJbmZvKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWEiOworCVN0cmluZworCQlzcWw7CisJCQorCXNxbCA9IFN0cmluZy5mb3JtYXQoIlNFTEVDVCBESVNUSU5DVCB3ZiBmcm9tICVzIFdIRVJFIGxlbW1hPSclcycgJXMgJXMgJXMiLCAKKwkJCWRiVGFibGUsCisJCQlsZW1tYUluZm8ubGVtbWEsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICJBTkQgcHJvcDE9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AxID09IDEgPyAiQU5EIHByb3AxPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICJBTkQgcHJvcDI9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AyID09IDEgPyAiQU5EIHByb3AyPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICJBTkQgc3BlYz0ndHJ1ZSciICAgOiAKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIkFORCBzcGVjPSdmYWxzZSciICA6ICIiKTsKKwkKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCBmdW5jLCBsZW1tYUluZm8ucHJvcDEsIGxlbW1hSW5mby5wcm9wMiwgbGVtbWFJbmZvLnNwZWMpOworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsID0gJyVzJy5cbiIsIGZ1bmMsIHNxbCk7CisKKwl0cnkgeworCQlsZW1tYUluZm8ucmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsJCisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hlbiBleGVjdXRpbmcgc3FsPSclcychXG4iLCBmdW5jLCBzcWwpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBhbGwgc3FsIHN0dWZmIGFyZSBjbG9zZWQgb3V0c2lkZSB0aGlzIGZ1bmN0aW9uLCBzbyBkb24ndCBjbG9zZSB0aGVtIGhlcmUhCisJCX0JCisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvcworCSAqIFJldHVybnMgR2VuZXJhbCBJbmZvcyBhYm91dCB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgcmVhZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkluZm9zKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlkYkluZm8gPSByZWFkRGJMZW1tYXRhSW5mb3Moc3RtdCk7CisJCQkKKwkJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHJlYWQgR2VuZXJhbCBJbmZvcyBmcm9tIEdsZW1tIERhdGFiYXNlIVxuIiwgZnVuYyk7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiBudWxsOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIGNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIHN0bXQuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gbWF5IGJlIG51bGwuCisJCQorCX0gLy8gcmVhZERiSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJMZW1tYXRhSW5mb3M6CisJICogcmVhZHMgYW5kIHJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY29udGVudCAKKwkgKiBvZiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogUmV0dXJucyAwPU9LIG9yIGVycm9yIGNvZGUgPiAwLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiTGVtbWF0YUluZm9zKFN0YXRlbWVudCBzdG10KQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJyZWFkRGJMZW1tYUluZm9zIjsKKwlTdHJpbmdbXQorCQlzcWwgPSB7CSJTRUxFQ1QgQ09VTlQoZGlzdGluY3QgbGVtbWEpIGZyb20gIiArIGRiVGFibGUgLAkvLyBjb3VudHMgbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlLAkJCQkJLy8gY291bnRzIHRvdGFsIG5vLiBvZiBzdG9yZWQgd29yZGZvcm1zLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9dHJ1ZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9dHJ1ZSJ9OworCVJlc3VsdFNldAorCQlyZXMgPSBudWxsOyAKKwlpbnRbXQorCQluQ291bnRzID0gbmV3IGludFtzcWwubGVuZ3RoXTsKKwlpbnQJCQorCQlpID0gMCwgCisJCW5EaXN0TGVtbWF0YSA9IC0xLAkvLyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YSBpbiBEQi4KKwkJbldmcwkJID0gLTE7CS8vIG5vLiBvZiB3b3JkZm9ybXMgaW4gREIuCisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGV4dHJhY3RpbmcgYWdyZWdhdGVkIGluZm9zIGFib3V0IERhdGFiYXNlIGNvbnRlbnRzLi4uXG4iLCBmdW5jKTsKKwkKKwlkYkluZm8gPSBuZXcgR2xlbW1EQkluZm8oKTsKKworCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCXRyeSB7CisJCWZvcihpPTA7IGk8c3FsLmxlbmd0aDsgaSsrKQorCQkJeworCQkJcmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsW2ldKTsKKwkJCWlmKCByZXMubmV4dCgpICkKKwkJCQlkYkluZm8uY291bnRzW2ldID0gcmVzLmdldEludCgxKTsgLy8gY291bnQgaXMgaW4gY29sdW1uIDEuCisJCQllbHNlCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGV4dHJhY3QgY291bnQgZnJvbSAnJXMnIVxuIiwgZnVuYywgc3FsW2ldKTsKKwkJCQlkYkluZm8uY291bnRzW2ldID0gLTE7CisJCQkJfQorCQkJfQorICAgICAgIAorICAgICAgICB9CisgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgCXsKKyAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBzcWw9JyVzJyBmYWlsZWQhXG4iLCBmdW5jLCBzcWxbaV0pOworICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBudWxsOworICAgIAl9CisJZmluYWxseSB7CisJCXRyeSB7CisJCQlyZXMuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIE9LCisJfSAvLyByZWFkRGJMZW1tYXRhSW5mb3MKKwkKKwkvKioqKioqKioqKioqKioqKioqKiogVGVzdCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3NfdGVzdAorCSAqIFRoaXMgaXMgZGVidWcgY29kZSB3cml0dGVuIHRvIHRlc3QgaWYgd2UgY2FuIGFjY2VzcyB0aGUgRGVyYnkKKwkgKiBEYXRhYmFzZSBmcm9tIGFuIGV4dGVybmFsIEphdmEgUHJvZ3JhbW0uCisJICogMDguMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IHJlYWREYkluZm9zX3Rlc3QoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCVN0cmluZworCQlpbnNlcnRTdG10ID0gIiI7CisJCisJLy8gQ29ubmVjdCB0byBEZXJieSBkYXRhYmFzZToKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkJCisJCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCQl0cnkKKwkJCXsKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBTdHJpbmcgCisgICAgICAgICAgICAJc3FsID0gIlNFTEVDVCAqIEZST00gIiArIGRiVGFibGU7CisgICAgICAgICAgICBSZXN1bHRTZXQgCisgICAgICAgICAgICAJcmVzdWx0ID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsKKyAKKyAgICAgICAgICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogdGFibGUgJyVzJzpcbiIsICBmdW5jLCBkYlRhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKHJlc3VsdC5uZXh0KCkpIHsKKyAgICAgICAgICAgIAlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCInJXMnIDogJyVzJyA6ICclcycgOiAnJXMnIC5cbiIsIHJlc3VsdC5nZXRTdHJpbmcoMSksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDIpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygzKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoNCkpOworICAgICAgICAJCWluc2VydFN0bXQgPSBpbnNlcnRTdG10ICsgIjxwPiIgKyByZXN1bHQuZ2V0U3RyaW5nKDEpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDIpICsgIiA6ICIgKworICAgICAgICAgICAgICAgIAkJICAgICByZXN1bHQuZ2V0U3RyaW5nKDMpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDQpICsgIjwvcD4iOworICAgICAgICAgICAgCX0KKwkJCX0KKwkgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgICAgIAl7CisJICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGluc2VydFN0bXQ9JyVzJyBmYWlsZWQhLlxuIiwgZnVuYywgc3RtdCk7CisgICAgICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICBjb24uY2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3RpbmcgJyVzIGZhaWxlZCFcbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwl0cnkgeworCQljb24uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQkKKwl9IC8vIHJlYWREYkluZm9zX3Rlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiBpbXBvcnRHbGVtbUxlbWF0YV90ZXN0CisJICogVGVzdCBWZXJzaW9uLgorCSAqIDEyLjEyLjE5L0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdChTdHJpbmcgZm4pCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YV90ZXN0IjsKKwlJbnB1dFN0cmVhbSAKKwkJaW47CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4yID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCXI7CisJCisJLyoKKwkgKiBSZWFkIExlbW1hdGEgKyBJbmZvIGZyb20gZmlsZTogCisJICovCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJCisJdHJ5IHsKKwkJLy9pbiA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKCBuZXcgRmlsZUlucHV0U3RyZWFtKGZuKSApOworCQlpbjIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCXdoaWxlKCAobGluZSA9IGluMi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggPT0gMyApCisJCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IEltcG9ydDogbGVtPSclcycgRGVjb21wPSclcycgV2Y9JyVzJy5cbiIsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzFdLCBsZW1tYUluZm9bMl0pOworCQkJZWxzZQorCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiBpbXBvcnRHbGVtbUxhbWF0YTogJyVzJyBoYXMgJWQgY29tcG9uZW50cyFcbiIsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJfQorCQl9IAorCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgb3BlbiAnJXMnIVxuIiwgZnVuYywgZm4pOworCQlyZXR1cm4gMTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfQorCisJdHJ5IHsKKwkJaW4yLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCisJLyogQ2hlY2sgY29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwkgKi8gCisJciA9IHJlYWREYkluZm9zX3Rlc3QoKTsKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIHI7CisJCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNC82MDJlOGQzNzlhM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNC82MDJlOGQzNzlhM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2ViMGUwCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS80LzYwMmU4ZDM3OWEzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsNzI5IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKK2ltcG9ydCBqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7CitpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAob3ZlcndyaXR0ZW4gYnkgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKGZpbmFsIGFzc2lnbm1lbnRzKToKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJFbWIgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIjsKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLyoKKwkgKiBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkgKiAKKwkgKiBBcmd1bWVudHM6CisJICogcHJvcHMJOiBQcm9wZXJ0aWVzIGxvYWRlZCBieSB0aGUgR2xlbW1TZXJ2aWNlcy4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgZnVuY3Rpb24gbG9hZHMgb25seSB0aG9zZSBDb25zdGFudHMgbmVlZGVkIGluIHRoaXMgY2xhc3MuCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzCXByb3BzKQorCQorCXsKKwlmbmFtZURCCQkgCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAJIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCXNlcnZlckhvc3QJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgInNlcnZlckhvc3QiLAkiLy9sb2NhbGhvc3Q6MTUyNy8iKTsKKwlkZXJieURCVVJMIAkJPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJCQkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIHdoZW4gaW5kZXhpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSwgc2VsZWN0IHRoZSBzdWJtaXR0ZWQgZGJwYXRoLAorCS8vIChub3QgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZGJwYXRoOworCQorCS8vIG9wZW4gcmVhZGVyIG9uIEdsZW1tIExlbW1hdGE6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJCisJCW5FcnJvcnMgPSB3cml0ZURCTGVtbWF0YShpbik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIGZyb20gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwkvLyBjbG9zZSBSZWFkZXI6CisJdHJ5IHsKKwkJaW4uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQluRXJyb3JzID0gLTE7CisJCX0KKwkKKyAJaWYoIG5FcnJvcnMgPT0gMCApCisgCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydCBkb25lIHN1Y2Nlc3NmdWxseS5cbiIsIGZ1bmMpOworIAllbHNlCisgCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydDogJWQgRXJyb3JzIVxuIiwgZnVuYywgbkVycm9ycyk7CisgCQorCXJldHVybiBuRXJyb3JzOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhCisJCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAorCSAqICAgICAgICAgICAgICAgICAgICAgICB3cml0ZURCTGVtbWF0YSgpCisJICogICAgICAgICAgICAgICAgICAgICAgIAorCSAqIHN0b3JlcyBsaXN0IG9mIGxlbW1hdGEgKyBpbmZvcyBpbnRvIERlcmJ5IGRiLgorCSAqIEZpbGUgZm9ybWF0OiAiTGVtbWEgRGVjb21wb3NpdGlvbiBXZiIsCisJICogICAgICAgICAgICAgIGUuZy46ICJIw6R1c2VyICstIEhhdXMiLgorCSAqIFJldHVybnM6IDAgPSBPSyBvciAtMTogZ2VuZXJhbCBlcnJvciBvciA+IDA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogMDkuMDEuMjAvRkIKKwkgKiAwNC4xMS4yMS9GQiB0dXJuIGF1dG9jb21taXQgb2ZmIHRvIGFjY2VsZXJhdGUgaHVnZSBhbW91bnQgb2YgaW5zZXJ0aW9ucy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hdGEoQnVmZmVyZWRSZWFkZXIgaW4pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWF0YSI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlQcmVwYXJlZFN0YXRlbWVudAorCQlzdG10UHJlcCA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgCSA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CQorCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCW5JbnNlcnRlZCA9IDAsCS8vIG5vLiBvZiBsZW1tYS93ZiBwYWlycyBpbXBvcnRlZC4KKwkJcmV0ID0gMDsgLy8gT0suCisJYm9vbGVhbgorCQljb250YWluc1NwZWM7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlLAorCS8vIHNldCBBdXRvY29tbWl0ID0gZmFsc2UgdG8gYWNjZWxlcmF0ZSBpbnNlcnRpb25zOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQljb24uc2V0QXV0b0NvbW1pdChmYWxzZSk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkIChhdXRvQ29tbWl0PW9mZikuXG4iLCBmdW5jKTsKKworCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCXN0bXRQcmVwID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0UHJlcGFyZWRRdWVyeSk7CisJCWVsc2UKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisKKwkJd2hpbGUoIChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoICE9IDMgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6ICclcycgaGFzICVkIGNvbXBvbmVudHMhIEV4cGVjdGVkID0gMyEgQ2Fubm90IGJlIHN0b3JlZCFcbiIsIGZ1bmMsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJCW5FcnJvcnMrKzsKKwkJCQljb250aW51ZTsKKwkJCQl9CisJCQkKKwkJCS8vIEdldCBJbmZvLCBpZiB3b3JkZm9ybSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgJy0nLCBpbnRlcnB1bmN0aW9uIGV0Yy46CisJCQkvLyBsZW1tYUluZm9bMl0gPSB3b3JkZm9ybS4KKwkJCWNvbnRhaW5zU3BlYyA9IExlbW1hSW5mby5pc1dmU3BlY2lhbENhc2UobGVtbWFJbmZvWzJdKTsKKwkJCS8vIHN0b3JlIGludG8gREI6CisJCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZChzdG10UHJlcCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvcyhzdG10LCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJCisJCQlpZiggcmV0ICE9IDAgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBzdG9yZSBsZW1tYSAnJXMnIGludG8gREIhIChyZXQ9JWQpXG4iLCBmdW5jLCBsaW5lLCByZXQpOworCQkJCW5FcnJvcnMrKzsgCisJCQkJfQorCQkJZWxzZQorCQkJCW5JbnNlcnRlZCsrOworCQkJfSAvLyB3aGlsZQorCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBHbGVtbSBsZW1tYXRhK2luZm9zIGZyb20gZmlsZSEgRXhpdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7IAorCQl9CQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgCisJCQkJY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgCisJCQkJc3RtdC5jbG9zZSgpOworCQkJaWYoIHN0bXRQcmVwICE9IG51bGwgKSAKKwkJCQlzdG10UHJlcC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJJbmZvIDogJXM6IG5vLiBvZiBsZW1tYXRhL3dmIHBhaXJzIGluc2VydGVkID0gJWQuXG4iLCBmdW5jLCBuSW5zZXJ0ZWQpOworCQorCXJldHVybiBuRXJyb3JzOyAvLyAwPU9LLCA+MCA9IG5vLiBvZiBlcnJvcnMuCisJfSAvLyB3cml0ZURCTGVtbWF0YQorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZDoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBydWxlcyBpbnRvIERlcmJ5IERCLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBpcyB0aGUgdmVyc2lvbiB3aXRoIGEgUHJlcGFyZWRRdWVyeS4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIHNwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxNy4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCgKKwkJCVByZXBhcmVkU3RhdGVtZW50IHN0bXQsIAorCQkJU3RyaW5nIGxlbW1hLCAKKwkJCVN0cmluZyB3ZiwgCisJCQlTdHJpbmcgZGVjb21wb3NpdGlvbiwgCisJCQlib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCI7CisJZmluYWwgYm9vbGVhbgorCQliTG9nID0gZmFsc2U7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJYm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIAorCS8vIGZvciBsb2dpbmcgb25seToKKwlzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJaWYoIGJMb2cgKQorCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKyAgICAvLyBub3cgaW5zZXJ0IG5ldyB2YWx1ZXMgaW50byBQcmVwYXJlZFN0YXRlbWVudDoKKyAgICB0cnkgeworICAgIAlzdG10LnNldFN0cmluZyggMSwgbGVtbWEpOworICAgICAgICBzdG10LnNldFN0cmluZyggMiwgd2YpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oMywgcHJvcDEpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNCwgcHJvcDIpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNSwgc3BlYyk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJlcGFyZWQgc3RtdCA9ICclcycuXG4iLCAgZnVuYywgc3RtdC50b1N0cmluZygpKTsKKyAgICAgICAgfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZTEpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigJIkVycm9yOiAlczogd2hpbGUgZmlsbGluZyBwcmVwYXJlZCBzdGF0ZW1lbnQgd2l0aCBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JyViJyBwcm9wMj0nJWInIHNwZWM9JyViJyFcbiIsICAKKwkJCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUxLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorICAgIAorICAgIHRyeSB7CisJCS8vIGV4ZWN1dGUgdGhlIGZpbGxlZCBwcmVwYXJlZCBzdGF0ZW1lbnQ6CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiEgKG49JWQpXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLCBuKTsKKyAJCQlyZXR1cm4gMjsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAzOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIGludG8gRGVyYnkgREIuCisJICogUGFyYW1ldGVyczoKKwkgKiBjb250YWluc1NwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxMC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvcyhTdGF0ZW1lbnQgc3RtdCwgU3RyaW5nIGxlbW1hLCBTdHJpbmcgd2YsIFN0cmluZyBkZWNvbXBvc2l0aW9uLCBib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvcyI7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJQm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIHNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAgICAKKyAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKwl0cnkgeworCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKHNxbEluc2VydCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWFEYXRhCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgZnJvbSB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dDogbGVtbWEgKyBHTEVNTV9PUFRTX3h4eCAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hRGF0YShMZW1tYUluZm8gbGVtbWFJbmZvLCBQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWFEYXRhIjsKKworCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWxlbW1hSW5mby5jb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCWxlbW1hSW5mby5zdG10ID0gbGVtbWFJbmZvLmNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJaW50IHIgPSByZWFkREJMZW1tYShsZW1tYUluZm8uc3RtdCwgbGVtbWFJbmZvKTsKKwkJCQorCQlpZiggciAhPSAwICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGdldCBkYXRhIGZvciBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyFcbiIsIAorCQkJCQlmdW5jLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGxlbW1hSW5mby5jb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYURhdGEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBieSBhY2Nlc3NpbmcgdGhlIEdsZW1tREIuCisJICogSW5wdXQgOiBsZW1tYSArIHByb3AxKzIgKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqIE91dHB1dDogCisJICogIC0gY29udGFpbnMgYSBSZXN1bHRTZXQgZm9yIGZldGNoaW5nIHRoZSB3b3JkZm9ybXMuCisJICogCSAgVGhpcyBSZXN1bHRTZXQgd2lsbCBoYXZlIGJlIGJlIGNsb3NlZCB3aXRoIExlbW1hSW5mby5jbG9zZSgpLgorCSAqIAkgIFRoZSBuby4gb2YgZm91bmQgd29yZGZvcm1zIGlzIG5vdCBrbm93biB0aWxsIHdlCisJICogCSAgZmV0Y2ggYWxsIG9mIHRoZW0gZnJvbSBSZXN1bHRTZXQhIAorCSAqIAktIGR1ZSB0byBTRUxFQ1QgRElTVElOQ1Qgb25seSB1bmlxIHdmIGFyZSByZXR1cm5lZC4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWEoU3RhdGVtZW50IHN0bXQsIExlbW1hSW5mbyBsZW1tYUluZm8pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYSI7CisJU3RyaW5nCisJCXNxbDsKKwkJCisJc3FsID0gU3RyaW5nLmZvcm1hdCgiU0VMRUNUIERJU1RJTkNUIHdmIGZyb20gJXMgV0hFUkUgbGVtbWE9JyVzJyAlcyAlcyAlcyIsIAorCQkJZGJUYWJsZSwKKwkJCWxlbW1hSW5mby5sZW1tYSwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIkFORCBwcm9wMT0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICJBTkQgcHJvcDE9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIkFORCBwcm9wMj0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICJBTkQgcHJvcDI9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAxID8gIkFORCBzcGVjPSd0cnVlJyIgICA6IAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiQU5EIHNwZWM9J2ZhbHNlJyIgIDogIiIpOworCQorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIGZ1bmMsIGxlbW1hSW5mby5wcm9wMSwgbGVtbWFJbmZvLnByb3AyLCBsZW1tYUluZm8uc3BlYyk7CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWwgPSAnJXMnLlxuIiwgZnVuYywgc3FsKTsKKworCXRyeSB7CisJCWxlbW1hSW5mby5yZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOwkKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGVuIGV4ZWN1dGluZyBzcWw9JyVzJyFcbiIsIGZ1bmMsIHNxbCk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisJZmluYWxseSB7CisJCS8vIGFsbCBzcWwgc3R1ZmYgYXJlIGNsb3NlZCBvdXRzaWRlIHRoaXMgZnVuY3Rpb24sIHNvIGRvbid0IGNsb3NlIHRoZW0gaGVyZSEKKwkJfQkKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zCisJICogUmV0dXJucyBHZW5lcmFsIEluZm9zIGFib3V0IHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiByZWFkIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiSW5mb3MoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWRiSW5mbyA9IHJlYWREYkxlbW1hdGFJbmZvcyhzdG10KTsKKwkJCQorCQlpZiggZGJJbmZvID09IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgcmVhZCBHZW5lcmFsIEluZm9zIGZyb20gR2xlbW0gRGF0YWJhc2UhXG4iLCBmdW5jKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIG51bGw7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgc3RtdC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBtYXkgYmUgbnVsbC4KKwkJCisJfSAvLyByZWFkRGJJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkxlbW1hdGFJbmZvczoKKwkgKiByZWFkcyBhbmQgcmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjb250ZW50IAorCSAqIG9mIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiBSZXR1cm5zIDA9T0sgb3IgZXJyb3IgY29kZSA+IDAuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJMZW1tYXRhSW5mb3MoU3RhdGVtZW50IHN0bXQpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInJlYWREYkxlbW1hSW5mb3MiOworCVN0cmluZ1tdCisJCXNxbCA9IHsJIlNFTEVDVCBDT1VOVChkaXN0aW5jdCBsZW1tYSkgZnJvbSAiICsgZGJUYWJsZSAsCS8vIGNvdW50cyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YS4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUsCQkJCQkvLyBjb3VudHMgdG90YWwgbm8uIG9mIHN0b3JlZCB3b3JkZm9ybXMuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj10cnVlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj10cnVlIn07CisJUmVzdWx0U2V0CisJCXJlcyA9IG51bGw7IAorCWludFtdCisJCW5Db3VudHMgPSBuZXcgaW50W3NxbC5sZW5ndGhdOworCWludAkJCisJCWkgPSAwLCAKKwkJbkRpc3RMZW1tYXRhID0gLTEsCS8vIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhIGluIERCLgorCQluV2ZzCQkgPSAtMTsJLy8gbm8uIG9mIHdvcmRmb3JtcyBpbiBEQi4KKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogZXh0cmFjdGluZyBhZ3JlZ2F0ZWQgaW5mb3MgYWJvdXQgRGF0YWJhc2UgY29udGVudHMuLi5cbiIsIGZ1bmMpOworCQorCWRiSW5mbyA9IG5ldyBHbGVtbURCSW5mbygpOworCisJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJdHJ5IHsKKwkJZm9yKGk9MDsgaTxzcWwubGVuZ3RoOyBpKyspCisJCQl7CisJCQlyZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWxbaV0pOworCQkJaWYoIHJlcy5uZXh0KCkgKQorCQkJCWRiSW5mby5jb3VudHNbaV0gPSByZXMuZ2V0SW50KDEpOyAvLyBjb3VudCBpcyBpbiBjb2x1bW4gMS4KKwkJCWVsc2UKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZXh0cmFjdCBjb3VudCBmcm9tICclcychXG4iLCBmdW5jLCBzcWxbaV0pOworCQkJCWRiSW5mby5jb3VudHNbaV0gPSAtMTsKKwkJCQl9CisJCQl9CisgICAgICAgCisgICAgICAgIH0KKyAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAJeworICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHNxbD0nJXMnIGZhaWxlZCFcbiIsIGZ1bmMsIHNxbFtpXSk7CisgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgCX0KKwlmaW5hbGx5IHsKKwkJdHJ5IHsKKwkJCXJlcy5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gT0sKKwl9IC8vIHJlYWREYkxlbW1hdGFJbmZvcworCQorCS8qKioqKioqKioqKioqKioqKioqKiBUZXN0IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQorCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvc190ZXN0CisJICogVGhpcyBpcyBkZWJ1ZyBjb2RlIHdyaXR0ZW4gdG8gdGVzdCBpZiB3ZSBjYW4gYWNjZXNzIHRoZSBEZXJieQorCSAqIERhdGFiYXNlIGZyb20gYW4gZXh0ZXJuYWwgSmF2YSBQcm9ncmFtbS4KKwkgKiAwOC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgcmVhZERiSW5mb3NfdGVzdCgpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJU3RyaW5nCisJCWluc2VydFN0bXQgPSAiIjsKKwkKKwkvLyBDb25uZWN0IHRvIERlcmJ5IGRhdGFiYXNlOgorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQkKKwkJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJCXRyeQorCQkJeworCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIFN0cmluZyAKKyAgICAgICAgICAgIAlzcWwgPSAiU0VMRUNUICogRlJPTSAiICsgZGJUYWJsZTsKKyAgICAgICAgICAgIFJlc3VsdFNldCAKKyAgICAgICAgICAgIAlyZXN1bHQgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOworIAorICAgICAgICAgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiB0YWJsZSAnJXMnOlxuIiwgIGZ1bmMsIGRiVGFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAocmVzdWx0Lm5leHQoKSkgeworICAgICAgICAgICAgCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIiclcycgOiAnJXMnIDogJyVzJyA6ICclcycgLlxuIiwgcmVzdWx0LmdldFN0cmluZygxKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMiksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDMpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZyg0KSk7CisgICAgICAgIAkJaW5zZXJ0U3RtdCA9IGluc2VydFN0bXQgKyAiPHA+IiArIHJlc3VsdC5nZXRTdHJpbmcoMSkgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoMikgKyAiIDogIiArCisgICAgICAgICAgICAgICAgCQkgICAgIHJlc3VsdC5nZXRTdHJpbmcoMykgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoNCkgKyAiPC9wPiI7CisgICAgICAgICAgICAJfQorCQkJfQorCSAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAgICAgCXsKKwkgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogaW5zZXJ0U3RtdD0nJXMnIGZhaWxlZCEuXG4iLCBmdW5jLCBzdG10KTsKKyAgICAgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIAl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGluZyAnJXMgZmFpbGVkIVxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCXJldHVybiAxOworCQl9CisJCisJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCXRyeSB7CisJCWNvbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCQorCX0gLy8gcmVhZERiSW5mb3NfdGVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIGltcG9ydEdsZW1tTGVtYXRhX3Rlc3QKKwkgKiBUZXN0IFZlcnNpb24uCisJICogMTIuMTIuMTkvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0KFN0cmluZyBmbikKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QiOworCUlucHV0U3RyZWFtIAorCQlpbjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbjIgPSBudWxsOworCVN0cmluZworCQlsaW5lOworCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJcjsKKwkKKwkvKgorCSAqIFJlYWQgTGVtbWF0YSArIEluZm8gZnJvbSBmaWxlOiAKKwkgKi8KKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQkKKwl0cnkgeworCQkvL2luID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oIG5ldyBGaWxlSW5wdXRTdHJlYW0oZm4pICk7CisJCWluMiA9IG5ldyBCdWZmZXJlZFJlYWRlciggbmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJd2hpbGUoIChsaW5lID0gaW4yLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCA9PSAzICkKKwkJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogSW1wb3J0OiBsZW09JyVzJyBEZWNvbXA9JyVzJyBXZj0nJXMnLlxuIiwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMV0sIGxlbW1hSW5mb1syXSk7CisJCQllbHNlCisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6IGltcG9ydEdsZW1tTGFtYXRhOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzIVxuIiwgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQl9CisJCX0gCisJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBvcGVuICclcychXG4iLCBmdW5jLCBmbik7CisJCXJldHVybiAxOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisKKwl0cnkgeworCQlpbjIuY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwkvKiBDaGVjayBjb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCSAqLyAKKwlyID0gcmVhZERiSW5mb3NfdGVzdCgpOworCWlmKCByICE9IDAgKQorCQlyZXR1cm4gcjsKKwkJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdAorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS80LzYwNmNlMmE4OTIxYTAwMWExOWIyODc1ZGUwMjcyYzZjIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS80LzYwNmNlMmE4OTIxYTAwMWExOWIyODc1ZGUwMjcyYzZjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1Mzk1MDgKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzQvNjA2Y2UyYTg5MjFhMDAxYTE5YjI4NzVkZTAyNzJjNmMKQEAgLTAsMCArMSwyOSBAQAorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgPGdyb3VwSWQ+R2xlbW1TZXJ2aWNlczI8L2dyb3VwSWQ+CisgIDxhcnRpZmFjdElkPkdsZW1tU2VydmljZXMyPC9hcnRpZmFjdElkPgorICA8dmVyc2lvbj4wLjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KKyAgPG5hbWU+R2xlbW1TZXJ2aWNlczwvbmFtZT4KKyAgPGRlc2NyaXB0aW9uPkdsZW1tU2VydmljZXMgZsO8ciBLb3JBUDwvZGVzY3JpcHRpb24+CisgIDxidWlsZD4KKyAgICA8c291cmNlRGlyZWN0b3J5PnNyYzwvc291cmNlRGlyZWN0b3J5PgorICAgIDxwbHVnaW5zPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tY29tcGlsZXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4zLjcuMDwvdmVyc2lvbj4KKyAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgPHNvdXJjZT4xLjg8L3NvdXJjZT4KKyAgICAgICAgICA8dGFyZ2V0PjEuODwvdGFyZ2V0PgorICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICA8L3BsdWdpbj4KKyAgICAgIDxwbHVnaW4+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXdhci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjMuMi4xPC92ZXJzaW9uPgorICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8d2FyU291cmNlRGlyZWN0b3J5PldlYkNvbnRlbnQ8L3dhclNvdXJjZURpcmVjdG9yeT4KKyAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgPC9wbHVnaW4+CisgICAgPC9wbHVnaW5zPgorICA8L2J1aWxkPgorPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNDEvMjA0OTRmMzU5NjNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzQxLzIwNDk0ZjM1OTYzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkYzJiMDEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzQxLzIwNDk0ZjM1OTYzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsNzMwIEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKK2ltcG9ydCBqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7CitpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAob3ZlcndyaXR0ZW4gYnkgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKGZpbmFsIGFzc2lnbm1lbnRzKToKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJFbWIgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIjsKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLyoKKwkgKiBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkgKiAKKwkgKiBBcmd1bWVudHM6CisJICogcHJvcHMJOiBQcm9wZXJ0aWVzIGxvYWRlZCBieSB0aGUgR2xlbW1TZXJ2aWNlcy4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgZnVuY3Rpb24gbG9hZHMgb25seSB0aG9zZSBDb25zdGFudHMgbmVlZGVkIGluIHRoaXMgY2xhc3MuCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzCXByb3BzKQorCQorCXsKKwlmbmFtZURCCQkgCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAJIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCXNlcnZlckhvc3QJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgInNlcnZlckhvc3QiLAkiLy9sb2NhbGhvc3Q6MTUyNy8iKTsKKwlkZXJieURCVVJMIAkJPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJCQkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIHdoZW4gaW5kZXhpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSwgc2VsZWN0IHRoZSBzdWJtaXR0ZWQgZGJwYXRoLAorCS8vIChub3QgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZGJwYXRoOworCQorCS8vIG9wZW4gcmVhZGVyIG9uIEdsZW1tIExlbW1hdGE6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJCisJCW5FcnJvcnMgPSB3cml0ZURCTGVtbWF0YShpbik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIGZyb20gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwkvLyBjbG9zZSBSZWFkZXI6CisJdHJ5IHsKKwkJaW4uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQluRXJyb3JzID0gLTE7CisJCX0KKwkKKyAJaWYoIG5FcnJvcnMgPT0gMCApCisgCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydCBkb25lIHN1Y2Nlc3NmdWxseS5cbiIsIGZ1bmMpOworIAllbHNlCisgCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydDogJWQgRXJyb3JzIVxuIiwgZnVuYywgbkVycm9ycyk7CisgCQorCXJldHVybiBuRXJyb3JzOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhCisJCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAorCSAqICAgICAgICAgICAgICAgICAgICAgICB3cml0ZURCTGVtbWF0YSgpCisJICogICAgICAgICAgICAgICAgICAgICAgIAorCSAqIHN0b3JlcyBsaXN0IG9mIGxlbW1hdGEgKyBpbmZvcyBpbnRvIERlcmJ5IGRiLgorCSAqIEZpbGUgZm9ybWF0OiAiTGVtbWEgRGVjb21wb3NpdGlvbiBXZiIsCisJICogICAgICAgICAgICAgIGUuZy46ICJIw6R1c2VyICstIEhhdXMiLgorCSAqIFJldHVybnM6IDAgPSBPSyBvciAtMTogZ2VuZXJhbCBlcnJvciBvciA+IDA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogMDkuMDEuMjAvRkIKKwkgKiAwNC4xMS4yMS9GQiB0dXJuIGF1dG9jb21taXQgb2ZmIHRvIGFjY2VsZXJhdGUgaHVnZSBhbW91bnQgb2YgaW5zZXJ0aW9ucy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hdGEoQnVmZmVyZWRSZWFkZXIgaW4pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWF0YSI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlQcmVwYXJlZFN0YXRlbWVudAorCQlzdG10UHJlcCA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgCSA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CQorCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCW5JbnNlcnRlZCA9IDAsCS8vIG5vLiBvZiBsZW1tYS93ZiBwYWlycyBpbXBvcnRlZC4KKwkJcmV0ID0gMDsgLy8gT0suCisJYm9vbGVhbgorCQljb250YWluc1NwZWM7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlLAorCS8vIHNldCBBdXRvY29tbWl0ID0gZmFsc2UgdG8gYWNjZWxlcmF0ZSBpbnNlcnRpb25zOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQljb24uc2V0QXV0b0NvbW1pdChmYWxzZSk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkIChhdXRvQ29tbWl0PW9mZikuXG4iLCBmdW5jKTsKKworCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCXN0bXRQcmVwID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0UHJlcGFyZWRRdWVyeSk7CisJCWVsc2UKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisKKwkJd2hpbGUoIChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoICE9IDMgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6ICclcycgaGFzICVkIGNvbXBvbmVudHMhIEV4cGVjdGVkID0gMyEgQ2Fubm90IGJlIHN0b3JlZCFcbiIsIGZ1bmMsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJCW5FcnJvcnMrKzsKKwkJCQljb250aW51ZTsKKwkJCQl9CisJCQkKKwkJCS8vIEdldCBJbmZvLCBpZiB3b3JkZm9ybSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgJy0nLCBpbnRlcnB1bmN0aW9uIGV0Yy46CisJCQkvLyBsZW1tYUluZm9bMl0gPSB3b3JkZm9ybS4KKwkJCWNvbnRhaW5zU3BlYyA9IExlbW1hSW5mby5pc1dmU3BlY2lhbENhc2UobGVtbWFJbmZvWzJdKTsKKwkJCS8vIHN0b3JlIGludG8gREI6CisJCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZChzdG10UHJlcCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvcyhzdG10LCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJCisJCQlpZiggcmV0ICE9IDAgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBzdG9yZSBsZW1tYSAnJXMnIGludG8gREIhXG4iLCBmdW5jLCBsaW5lKTsKKwkJCQluRXJyb3JzKys7IAorCQkJCX0KKwkJCWVsc2UKKwkJCQluSW5zZXJ0ZWQrKzsKKwkJCX0gLy8gd2hpbGUKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgR2xlbW0gbGVtbWF0YStpbmZvcyBmcm9tIGZpbGUhIEV4aXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOyAKKwkJfQkKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIAorCQkJCXN0bXQuY2xvc2UoKTsKKwkJCWlmKCBzdG10UHJlcCAhPSBudWxsICkgCisJCQkJc3RtdFByZXAuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiSW5mbyA6ICVzOiBuby4gb2YgbGVtbWF0YS93ZiBwYWlycyBpbnNlcnRlZCA9ICVkLlxuIiwgZnVuYywgbkluc2VydGVkKTsKKwkKKwlyZXR1cm4gbkVycm9yczsgLy8gMD1PSywgPjAgPSBuby4gb2YgZXJyb3JzLgorCX0gLy8gd3JpdGVEQkxlbW1hdGEKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQ6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gcnVsZXMgaW50byBEZXJieSBEQi4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgaXMgdGhlIHZlcnNpb24gd2l0aCBhIFByZXBhcmVkUXVlcnkuCisJICogUGFyYW1ldGVyczoKKwkgKiBzcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTcuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoCisJCQlQcmVwYXJlZFN0YXRlbWVudCBzdG10LCAKKwkJCVN0cmluZyBsZW1tYSwgCisJCQlTdHJpbmcgd2YsIAorCQkJU3RyaW5nIGRlY29tcG9zaXRpb24sIAorCQkJYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQiOworCWZpbmFsIGJvb2xlYW4KKwkJYkxvZyA9IGZhbHNlOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCWJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICAKKwkvLyBmb3IgbG9naW5nIG9ubHk6CisJc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCWlmKCBiTG9nICkKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisgICAgLy8gbm93IGluc2VydCBuZXcgdmFsdWVzIGludG8gUHJlcGFyZWRTdGF0ZW1lbnQ6CisgICAgdHJ5IHsKKyAgICAJc3RtdC5zZXRTdHJpbmcoIDEsIGxlbW1hKTsKKyAgICAgICAgc3RtdC5zZXRTdHJpbmcoIDIsIHdmKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDMsIHByb3AxKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDQsIHByb3AyKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDUsIHNwZWMpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByZXBhcmVkIHN0bXQgPSAnJXMnLlxuIiwgIGZ1bmMsIHN0bXQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUxKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoCSJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JyViJyBwcm9wMj0nJWInIHNwZWM9JyViJyFcbiIsICAKKwkJCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQllMS5wCisJCXJldHVybiAxOworCQl9CisgICAgCisgICAgdHJ5IHsKKwkJLy8gZXhlY3V0ZSB0aGUgZmlsbGVkIHByZXBhcmVkIHN0YXRlbWVudDoKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZSgpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDI7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMzsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvczoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBpbnRvIERlcmJ5IERCLgorCSAqIFBhcmFtZXRlcnM6CisJICogY29udGFpbnNTcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTAuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3MoU3RhdGVtZW50IHN0bXQsIFN0cmluZyBsZW1tYSwgU3RyaW5nIHdmLCBTdHJpbmcgZGVjb21wb3NpdGlvbiwgYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3MiOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCUJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICBzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgICAgCisgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisJdHJ5IHsKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZShzcWxJbnNlcnQpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDE7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hRGF0YQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGZyb20gdGhlIEdsZW1tREIuCisJICogSW5wdXQ6IGxlbW1hICsgR0xFTU1fT1BUU194eHggKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYURhdGEoTGVtbWFJbmZvIGxlbW1hSW5mbywgUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hRGF0YSI7CisKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlsZW1tYUluZm8uY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlsZW1tYUluZm8uc3RtdCA9IGxlbW1hSW5mby5jb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWludCByID0gcmVhZERCTGVtbWEobGVtbWFJbmZvLnN0bXQsIGxlbW1hSW5mbyk7CisJCQkKKwkJaWYoIHIgIT0gMCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBnZXQgZGF0YSBmb3IgbGVtbWE9JyVzJyBvcHRpb25zPSclcychXG4iLCAKKwkJCQkJZnVuYywgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCQkJcmV0dXJuIDE7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBsZW1tYUluZm8uY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWFEYXRhCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgYnkgYWNjZXNzaW5nIHRoZSBHbGVtbURCLgorCSAqIElucHV0IDogbGVtbWEgKyBwcm9wMSsyIChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiBPdXRwdXQ6IAorCSAqICAtIGNvbnRhaW5zIGEgUmVzdWx0U2V0IGZvciBmZXRjaGluZyB0aGUgd29yZGZvcm1zLgorCSAqIAkgIFRoaXMgUmVzdWx0U2V0IHdpbGwgaGF2ZSBiZSBiZSBjbG9zZWQgd2l0aCBMZW1tYUluZm8uY2xvc2UoKS4KKwkgKiAJICBUaGUgbm8uIG9mIGZvdW5kIHdvcmRmb3JtcyBpcyBub3Qga25vd24gdGlsbCB3ZQorCSAqIAkgIGZldGNoIGFsbCBvZiB0aGVtIGZyb20gUmVzdWx0U2V0ISAKKwkgKiAJLSBkdWUgdG8gU0VMRUNUIERJU1RJTkNUIG9ubHkgdW5pcSB3ZiBhcmUgcmV0dXJuZWQuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hKFN0YXRlbWVudCBzdG10LCBMZW1tYUluZm8gbGVtbWFJbmZvKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWEiOworCVN0cmluZworCQlzcWw7CisJCQorCXNxbCA9IFN0cmluZy5mb3JtYXQoIlNFTEVDVCBESVNUSU5DVCB3ZiBmcm9tICVzIFdIRVJFIGxlbW1hPSclcycgJXMgJXMgJXMiLCAKKwkJCWRiVGFibGUsCisJCQlsZW1tYUluZm8ubGVtbWEsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICJBTkQgcHJvcDE9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AxID09IDEgPyAiQU5EIHByb3AxPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICJBTkQgcHJvcDI9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AyID09IDEgPyAiQU5EIHByb3AyPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICJBTkQgc3BlYz0ndHJ1ZSciICAgOiAKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIkFORCBzcGVjPSdmYWxzZSciICA6ICIiKTsKKwkKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCBmdW5jLCBsZW1tYUluZm8ucHJvcDEsIGxlbW1hSW5mby5wcm9wMiwgbGVtbWFJbmZvLnNwZWMpOworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsID0gJyVzJy5cbiIsIGZ1bmMsIHNxbCk7CisKKwl0cnkgeworCQlsZW1tYUluZm8ucmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsJCisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hlbiBleGVjdXRpbmcgc3FsPSclcychXG4iLCBmdW5jLCBzcWwpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBhbGwgc3FsIHN0dWZmIGFyZSBjbG9zZWQgb3V0c2lkZSB0aGlzIGZ1bmN0aW9uLCBzbyBkb24ndCBjbG9zZSB0aGVtIGhlcmUhCisJCX0JCisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvcworCSAqIFJldHVybnMgR2VuZXJhbCBJbmZvcyBhYm91dCB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgcmVhZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkluZm9zKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlkYkluZm8gPSByZWFkRGJMZW1tYXRhSW5mb3Moc3RtdCk7CisJCQkKKwkJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHJlYWQgR2VuZXJhbCBJbmZvcyBmcm9tIEdsZW1tIERhdGFiYXNlIVxuIiwgZnVuYyk7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiBudWxsOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIGNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIHN0bXQuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gbWF5IGJlIG51bGwuCisJCQorCX0gLy8gcmVhZERiSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJMZW1tYXRhSW5mb3M6CisJICogcmVhZHMgYW5kIHJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY29udGVudCAKKwkgKiBvZiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogUmV0dXJucyAwPU9LIG9yIGVycm9yIGNvZGUgPiAwLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiTGVtbWF0YUluZm9zKFN0YXRlbWVudCBzdG10KQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJyZWFkRGJMZW1tYUluZm9zIjsKKwlTdHJpbmdbXQorCQlzcWwgPSB7CSJTRUxFQ1QgQ09VTlQoZGlzdGluY3QgbGVtbWEpIGZyb20gIiArIGRiVGFibGUgLAkvLyBjb3VudHMgbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlLAkJCQkJLy8gY291bnRzIHRvdGFsIG5vLiBvZiBzdG9yZWQgd29yZGZvcm1zLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9dHJ1ZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9dHJ1ZSJ9OworCVJlc3VsdFNldAorCQlyZXMgPSBudWxsOyAKKwlpbnRbXQorCQluQ291bnRzID0gbmV3IGludFtzcWwubGVuZ3RoXTsKKwlpbnQJCQorCQlpID0gMCwgCisJCW5EaXN0TGVtbWF0YSA9IC0xLAkvLyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YSBpbiBEQi4KKwkJbldmcwkJID0gLTE7CS8vIG5vLiBvZiB3b3JkZm9ybXMgaW4gREIuCisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGV4dHJhY3RpbmcgYWdyZWdhdGVkIGluZm9zIGFib3V0IERhdGFiYXNlIGNvbnRlbnRzLi4uXG4iLCBmdW5jKTsKKwkKKwlkYkluZm8gPSBuZXcgR2xlbW1EQkluZm8oKTsKKworCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCXRyeSB7CisJCWZvcihpPTA7IGk8c3FsLmxlbmd0aDsgaSsrKQorCQkJeworCQkJcmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsW2ldKTsKKwkJCWlmKCByZXMubmV4dCgpICkKKwkJCQlkYkluZm8uY291bnRzW2ldID0gcmVzLmdldEludCgxKTsgLy8gY291bnQgaXMgaW4gY29sdW1uIDEuCisJCQllbHNlCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGV4dHJhY3QgY291bnQgZnJvbSAnJXMnIVxuIiwgZnVuYywgc3FsW2ldKTsKKwkJCQlkYkluZm8uY291bnRzW2ldID0gLTE7CisJCQkJfQorCQkJfQorICAgICAgIAorICAgICAgICB9CisgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgCXsKKyAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBzcWw9JyVzJyBmYWlsZWQhXG4iLCBmdW5jLCBzcWxbaV0pOworICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBudWxsOworICAgIAl9CisJZmluYWxseSB7CisJCXRyeSB7CisJCQlyZXMuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIE9LCisJfSAvLyByZWFkRGJMZW1tYXRhSW5mb3MKKwkKKwkvKioqKioqKioqKioqKioqKioqKiogVGVzdCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3NfdGVzdAorCSAqIFRoaXMgaXMgZGVidWcgY29kZSB3cml0dGVuIHRvIHRlc3QgaWYgd2UgY2FuIGFjY2VzcyB0aGUgRGVyYnkKKwkgKiBEYXRhYmFzZSBmcm9tIGFuIGV4dGVybmFsIEphdmEgUHJvZ3JhbW0uCisJICogMDguMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IHJlYWREYkluZm9zX3Rlc3QoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCVN0cmluZworCQlpbnNlcnRTdG10ID0gIiI7CisJCisJLy8gQ29ubmVjdCB0byBEZXJieSBkYXRhYmFzZToKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkJCisJCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCQl0cnkKKwkJCXsKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBTdHJpbmcgCisgICAgICAgICAgICAJc3FsID0gIlNFTEVDVCAqIEZST00gIiArIGRiVGFibGU7CisgICAgICAgICAgICBSZXN1bHRTZXQgCisgICAgICAgICAgICAJcmVzdWx0ID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsKKyAKKyAgICAgICAgICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogdGFibGUgJyVzJzpcbiIsICBmdW5jLCBkYlRhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKHJlc3VsdC5uZXh0KCkpIHsKKyAgICAgICAgICAgIAlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCInJXMnIDogJyVzJyA6ICclcycgOiAnJXMnIC5cbiIsIHJlc3VsdC5nZXRTdHJpbmcoMSksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDIpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygzKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoNCkpOworICAgICAgICAJCWluc2VydFN0bXQgPSBpbnNlcnRTdG10ICsgIjxwPiIgKyByZXN1bHQuZ2V0U3RyaW5nKDEpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDIpICsgIiA6ICIgKworICAgICAgICAgICAgICAgIAkJICAgICByZXN1bHQuZ2V0U3RyaW5nKDMpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDQpICsgIjwvcD4iOworICAgICAgICAgICAgCX0KKwkJCX0KKwkgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgICAgIAl7CisJICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGluc2VydFN0bXQ9JyVzJyBmYWlsZWQhLlxuIiwgZnVuYywgc3RtdCk7CisgICAgICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICBjb24uY2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3RpbmcgJyVzIGZhaWxlZCFcbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwl0cnkgeworCQljb24uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQkKKwl9IC8vIHJlYWREYkluZm9zX3Rlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiBpbXBvcnRHbGVtbUxlbWF0YV90ZXN0CisJICogVGVzdCBWZXJzaW9uLgorCSAqIDEyLjEyLjE5L0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdChTdHJpbmcgZm4pCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YV90ZXN0IjsKKwlJbnB1dFN0cmVhbSAKKwkJaW47CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4yID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCXI7CisJCisJLyoKKwkgKiBSZWFkIExlbW1hdGEgKyBJbmZvIGZyb20gZmlsZTogCisJICovCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJCisJdHJ5IHsKKwkJLy9pbiA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKCBuZXcgRmlsZUlucHV0U3RyZWFtKGZuKSApOworCQlpbjIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCXdoaWxlKCAobGluZSA9IGluMi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggPT0gMyApCisJCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IEltcG9ydDogbGVtPSclcycgRGVjb21wPSclcycgV2Y9JyVzJy5cbiIsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzFdLCBsZW1tYUluZm9bMl0pOworCQkJZWxzZQorCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiBpbXBvcnRHbGVtbUxhbWF0YTogJyVzJyBoYXMgJWQgY29tcG9uZW50cyFcbiIsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJfQorCQl9IAorCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgb3BlbiAnJXMnIVxuIiwgZnVuYywgZm4pOworCQlyZXR1cm4gMTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfQorCisJdHJ5IHsKKwkJaW4yLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCisJLyogQ2hlY2sgY29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwkgKi8gCisJciA9IHJlYWREYkluZm9zX3Rlc3QoKTsKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIHI7CisJCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNDIvYTA5NzExOGU0ODNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzQyL2EwOTcxMThlNDgzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MzUzODEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzQyL2EwOTcxMThlNDgzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsOTczIEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKKy8qIDAuMSA6IDE3LjA2LjIwL0ZCIAorICogMC4yIDogMjUuMTAuMjEvRkIKKyAqICAgICAgIGxvZ2luZyBvZiB0aGUgQVBJIFJlcXVlc3RzLgorICogICAgICAgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisgKiAgICAgICBjb3JyZWN0aW5nIGNhbGxpbmcgb2YgbGVtbWEgKyBwcm9wMS9wcm9wMi9zcGVjLgorICogICAgICAgaGFuZGxpbmcgb2YgbGVtbWF0YSB3aXRoICfDnycuCisgKiAKKyAqIEdlbmVyYWwgY29tbWVudHMgdG8gdGhlIGVuY29kaW5nIG9mIGRlcml2YXRpb25zIGZyb20gbGVtbWEgdG8gd2ZzIGFuZCBob3cgdGhleSBhcmUgZW5jb2RlZAorICogaW4gdGhlIERlcmJ5IGRhdGFiYXNlOgorICogCisgKiBHTEVNTSBlbmNvZGluZzogIAorICogICBfIF8gOiArRmxleCAgICAgICDDlmxlIC0+IMOWbCAgICAgIAorICogICArIF8gOiArQ29tcCAgICAgICDDlmxsYW1wZSAtPiDDlmwgb3IgTGFtcGUgKGNvbXBvdW5kKS4KKyAqICAgXyArIDogK290aGVyICAgICAgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm5zY2h1aCAobm8gY29tcG91bmQgZm9yICdUdXJuc2NodWgnLCBvbmx5IHByZWZpeCkuCisgKiAgICsgKyA6ICtDb21wK290aGVyIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuICsgU2NodWggKGNvbXBvdW5kIGZvciAnU2NodWgnICsgUHJlZml4KS4KKyAqIEMyIGxlbW1hdGl6YXRpb24gb3B0aW9uczoKKyAqICAgRmxleCAgKGlkZW50aWNhbCB0byBHbGVtbSkKKyAqICAgQ29tcCAgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKQorICogICBPdGhlciAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpLgorICogICBTcGVjICAob25seSBDMjogaW5jbHVkZXMgYWxsIHdmcyB3aXRoIGhpcGhlbiBhbmQvb3Igc29tZSBub24tYWxwaGFiZXRpYyBJU084ODU5LTEgY2hhcnMpCisgKiAgICAgICAgIEUuZy4gw5ZsLUV4cG9ydGUsICJNYXJrZW4iLcOWbGUuCisgKiBEZXJieSBFbmNvZGluZzoKKyAqICBwcm9wMSAJcHJvcDIJc3BlYyAgIAltZWFuaW5nIGluIEMyOgorICogIDAJCTAJCS0JCUZsZXgKKyAqICAxCQkwCQktCQlDb21wCisgKiAgMAkJMQkJLQkJT3RoZXIgKHByZWZpeCkKKyAqICAxCQkxCQktCQlDb21wICsgT3RoZXIKKyAqICAtCQktCQkwCQktU3BlYworICogIC0JCS0JCTEJCStTcGVjCisgKiAKKyAqIEV4YW1wbGVzOgorICogJlNjaHVoCQkJOiBTY2h1aCwgU2NodWhlLCAuLi4gb25seSBmbGV4aW9ucworICogJlNjaHVoK2NvbXAJCTogU2NodWhlLCBUdXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMuCisgKiAmU2NodWgrb3RoZXIJCTogU2NodWhlLCBBbnRpc2NodWhlLi4uIGZsZXhpb25zIGFuZCBwcmVmaXhlZCB3ZnMgKG5vIGNvbXBvdW5kcykuCisgKiAmU2NodWgrY29tcCtvdGhlcjogU2NodWhlLCBBbnRpc2NodWhlLCBUdXJuc2NodWhlLCBBbnRpdHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzIGFuZCAKKyAqIAkJCQkJICBwcmVmaXhlZCBzaW5nbGUgd2ZzIChBbnRpc2NodWhlKSBhbmQgcHJlZml4ZWQgY29tcG91bmRzLgorICogJlNjaHVoK3NwZWMJCTogIkFudGkiLVNjaHVoZSwgNjhnZXItU2NodWhlLi4uIG1heSBiZSBjb21iaW5lZCB3aXRoIGV2ZXJ5IG9wdGlvbnM6IGFkZHMKKyAqICAgICAgICAgICAgICAgICAgICB3ZnMgd2l0aCBoeXBoZW4gYW5kL29yIG5vbi1hbHBoYWJldGljIGNoYXJzLgorICogCisgKiBDb252ZXJzaW9uIHJ1bGVzOgorICogCisgKiAgJnNjaGxpZcOfZW4gLT4gaW50ZXJuYWwgc2VhcmNoIGZvciAnc2NobGllc3NlbicsCisgKiAgYmVjYXVzZSBHbGVtbSBvdXRwdXRzICdzcycgZm9yICfDnycuCisgKiAgCisgKiBDaGFyYWN0ZXIgRW5jb2Rpbmc6CisgKiAKKyAqIC0gV2hlbiBpbXBvcnRpbmcgd2ZzIHRvIHRoZSBEZXJieSBEYXRhYmFzZSB3aXRoIGRvQ3VybEdsZW1tU2VydmljZXMvaW5kZXhMZW1tYXRhOgorICogCisgKiAgIElOUFVUOiB3b3JkZm9ybSBsaXN0IGluIFtVVEYtOF0gOiBVVEYtOCBpcyB0aGVuIGNvbnZlcnRlZCB0byBMYXQxIGZvciBHbGVtbSwKKyAqICAgICAgICAgIHRoZSBvdXRwdXQgb2YgR2xlbW0gW0xhdDFdIGlzIHJldHVybmVkIHRvIHRoZSBHbGVtbVNlcnZpY2VzIHdpdGhvdXQgcmVjb252ZXJzaW9uCisgKiAgICAgICAgICB0byBVVEY4IGFuZCBpbXBvcnRlZCBpbnRvIERlcmJ5IERhdGFiYXNlIHVuY2hhbmdlZC4KKyAqCQkKKyAqLworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA0LjExLjIxIjsgCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4yIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVByb3BzCQk9ICIvV0VCLUlORi9HbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiOworCQorCS8vIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSByZWFkIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzICh0aGVzZSBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzKToKKwlwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCAJCT0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCXByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCQkJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwlAQ29udGV4dAorCXByaXZhdGUgU2VydmxldENvbnRleHQgc2VydmxldENvbnRleHQ7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmb3V0CT0gbnVsbDsKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZlcnIJPSBudWxsOwkJCisJCQorCS8qIAorIAkgKiAKKwkgKiAtIGFmdGVyIGxvYWRQcm9wZXJ0aWVzLCBzZXRzIHRoZSBjbGFzcyB2YXJpYWJsZSB3aXRoIGxvYWRlZCBwcm9wZXJ0eSB2YWx1ZXMuCisJICogCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCUdTX1dvcmtpbmdQYXRoIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJHU19Xb3JraW5nUGF0aCIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyIpOworCWZuYW1lV2ZzCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVdmcyIsIAkgICAiZ2xfd2ZzX2luLnR4dCIpOworCWZuYW1lV2ZzCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVXZnM7CisJZm5hbWVPdXQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lT3V0IiwgCSAgICJHbGVtbVNlcnZpY2VzLmxvZyIpOworCWZuYW1lT3V0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVPdXQ7CisJZm5hbWVFcnIJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lRXJyIiwgCSAgICJHbGVtbVNlcnZpY2VzLmVyciIpOworCWZuYW1lRXJyCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVFcnI7CisJZm5hbWVTY3JpcHQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lU2NyaXB0IiwJICAgImRvR2xlbW0iKTsKKwlmbmFtZVNjcmlwdAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lU2NyaXB0OworCWZuYW1lTGVtYXRhCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUxlbWF0YSIsICAgICJ0bXAvbGVtMyIpOworCWZuYW1lTGVtYXRhCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVMZW1hdGE7CisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKgorCSAqICBsb2dfUmVxdWVzdDoKKwkgKiAgCisJICogIC0gd3JpdGUgaW5mbyBhYm91dCBBUEkgUmVxdWVzdC4KKwkgKiAgUGFyYW1ldGVyczoKKwkgKiAgcmVxdWVzdFBhdGgJOiBwYXRoIG9mIHdlYmFwcCBhZGRyZXNzZWQgYnkgdGhlIHJlcXVlc3QuCisJICogIGZ1bmMJCTogbmFtZSBvZiB0aGUgZnVuY3Rpb24gd2hpY2ggaW1wbGVtZW50cyB0aGUgcmVxdWVzdC4KKwkgKiAgCisJICogIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGxvZ19SZXF1ZXN0KFN0cmluZyByZXF1ZXN0UGF0aCwgU3RyaW5nIGZ1bmMpCisJCisJeworCS8vIHRyYW5zZm9ybSAiZGF0ZVR0aW1lIiAtPiAiZGF0ZSB0aW1lIjoKKwkKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwlmb3V0LnByaW50ZigiIyMjICVzOiAlcyA6IHZlcnM9JyVzJywgdmRhdGU9JyVzJyByZXF1ZXN0PSclcycuXG4iLCBmdW5jLCByZXF1ZXN0UGF0aCwgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIAorCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisJZm91dC5wcmludGYoIiMjI1xuIik7CisJfSAvLyBsb2dfUmVxdWVzdAorCQkKKwkvKiBmb3JtYXREYk5hbWUKKwkgKiAKKwkgKiAtIGdldHMgbmFtZSBvZiBEYXRhYmFzZSB1c2VkIGJ5IERlcmJ5IGZyb20gcHJvcHMgCisJICogICBhbmQgZm9ybWF0IGl0IHRvIEhUTUwuCisJICogIAorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBTdHJpbmcgZm9ybWF0RGJOYW1lKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCVN0cmluZworCQlkYk5hbWU7CisJU3RyaW5nCisJCWRiUGF0aCA9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCWludAorCQlqID0gZGJQYXRoLmxhc3RJbmRleE9mKCcvJyk7CisJCisJaWYoIGogPiAwICkKKwkJZGJOYW1lID0gZGJQYXRoLnN1YnN0cmluZyhqKzEpOworCWVsc2UKKwkJZGJOYW1lID0gZGJQYXRoOworCQorCXJldHVybiBkYk5hbWU7IC8vICI8cD48Yj5EYXRhYmFzZTogIiArIGRiTmFtZSArICI8L2I+PC9wPlxuIjsKKwl9IC8vIGZvcm1hdERiTmFtZQorCisJLyoKKwkgKiBjbG9zZUxvZ1N0cmVhbXM6CisJICogCisJICogLSBjbG9zZSB0aGUgZm91dC9mZXJyIGxvZyBzdHJlYW1zLgorCSAqIAorCSAqIDI2LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGNsb3NlTG9nU3RyZWFtcygpCisJCisJeworCWlmKCBmb3V0ICE9IG51bGwpCisJCWZvdXQuY2xvc2UoKTsKKwlmb3V0ID0gbnVsbDsKKwkKKwlpZiggZmVyciAhPSBudWxsICkKKwkJZmVyci5jbG9zZSgpOworCWZlcnIgPSBudWxsOworCX0gLy8gY2xvc2VMb2dTdHJlYW1zCisJCisJLyogaW5pdF9hbmRfbG9nX1JlcXVlc3QKKwkgKiAKKwkgKiAtIGxvYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLCBzZXRzIEdsZW1tU2VydmljZXMgY29uc3RhbnRzCisJICogICBhbmQgbG9ncyB0aGUgcmVxdWVzdC4KKwkgKiAtIGxvYWQgcHJvcGVydGllcyBhbmQgc2V0IGNvbnN0YW50cyBiZWZvcmUgbG9nZ2luZyBhbnl0aGluZywgYmVjYXVzZQorCSAqICAgbG9nZ2luZyB3aWxsIGJlIGRvbmUgaW50byB0aGUgbGFzdCBzdGRvdXQvc3RkZXJyIG9wZW5lZCBpbiBnbGFzc2Zpc2gncyBKVk0sCisJICogICBlLmcuIGluIHRoZSBsb2cgb2YgYW5vdGhlciBTZXJ2aWNlLgorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBQcm9wZXJ0aWVzIGluaXRfYW5kX2xvZ19SZXF1ZXN0KFN0cmluZyBmdW5jLCBTdHJpbmcgcmVxdWVzdFBhdGgpCisJCisJeworCVN0cmluZworCQlyZWFsUGF0aCA9IHNlcnZsZXRDb250ZXh0LmdldFJlYWxQYXRoKGZuYW1lUHJvcHMpOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAoaWYgbGFzdCBwYXJhbSA9IHRydWUpOgorCVByb3BlcnRpZXMKKwkJcHJvcHMgPSBVdGlscy5sb2FkUHJvcGVydGllcyhzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpLCBmbmFtZVByb3BzLCByZWFsUGF0aCwgZmFsc2UpOworCQorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBmb3V0IGFuZCBmZXJyIGFzIHJlcGxhY2VtZW50IGZvciBzdGRvdXQvc3RkZXJyIGZvciB1c2UgaW4gR2xlbW1TZXJ2aWNlcy4KKwkvLyBkbyBub3QgdXNlIG9yIHJlZGlyZWN0IFN5c3RlbS5vdXQgYW5kIFN5c3RlbS5lcnIsIGFzIHRoZXkgd2lsbCBiZSByZWRpcmVjdGVkCisJLy8gYnkgb3RoZXIgU2VydmljZXMgaW4gdGhlIHNhbWUgZ2xhc3NmaXNoIEpWTSwgZS5nLiBieSB0aGUgV2Zvcm1TZXJ2aWNlcy4KKwlmb3V0ID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lT3V0KTsKKwlmZXJyID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lRXJyKTsKKwkKKwkvL1V0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCisJbG9nX1JlcXVlc3QocmVxdWVzdFBhdGgsIGZ1bmMpOworCQorCXJldHVybiBwcm9wczsKKwl9IC8vIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJU3RyaW5nCisJCXN0YXR1czsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9zdGF0dXMvIik7CisJCisJLy8gaHR0cFNlcnZsZXRSZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKGVudik7CisJCisJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnByb3BlcnRpZXM8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5kYXRhYmFzZTwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpLAorCQkJCQkJCXNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcykgPT0gbnVsbCA/ICJub3QgZm91bmQiIDoKKwkJCQkJCQkJcHJvcHMuaXNFbXB0eSgpID8gImVtcHR5IiA6ICJsb2FkZWQiLAorCQkJCQkJCWZvcm1hdERiTmFtZShwcm9wcykKKwkJCQkJCQkpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCWNsb3NlTG9nU3RyZWFtcygpOworCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogCisJICogZG9QT1NUX2ltcG9ydExlbW1hRGF0YToKKwkgKiAKKwkgKiBQT1NUOiAvaW5kZXgvYWRkL3tkYXRhYmFzZW5hbWV9OiB0ZXh0L3BsYWluCisJICogCisJICogUGFyYW1ldGVyczoKKwkgKiBsaXN0CQkgOiB0aGUgbGlzdCBvZiB3ZnMgc2VudCBpbiB0aGUgYm9keSBvZiB0aGUgUE9TVCByZXF1ZXN0LgorCSAqIGRicGF0aAkgOiB0aGUgbG9jYXRpb24gb2YgdGhlIGRhdGFiYXNlIHdoZXJlIHRoZSBsZW1tYSt3ZnMgYXJlIHRvIGJlIHN0b3JlZC4KKwkgKiBOb3RlcyAgICAgOgorCSAqIC0gYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UgbG9jYXRlZCBhdCAnZGF0YWJhc2VuYW1lJy4KKwkgKiAtIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkIGludG8gYSBEZXJieSBkYXRhYmFzZS4KKwkgKiBJbnB1dAkgOiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKi8KKwkKKwlAUGF0aCgiYWRkL3tkYXRhYmFzZW5hbWV9IikgCisJQFBPU1QgCisJQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvUE9TVF9pbXBvcnRMZW1tYURhdGEKKwkJCQkJCQkoCisJCQkJCQkJU3RyaW5nIAkJCQkJCQkJbGlzdCwKKwkJCQkJCQlAUGF0aFBhcmFtKHZhbHVlPSJkYXRhYmFzZW5hbWUiKSAJZmluYWwgU3RyaW5nIGRicGF0aAorCQkJCQkJCSkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb1BPU1RfaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSBhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCQorCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9hZGQvIik7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogc3VibWl0dGVkIGRhdGFiYXNlbmFtZT0nJXMnLlxuIiwgZnVuYywgZGJwYXRoKTsKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBwb3N0ZWQgbGlzdCA9ICclcycuXG4iLCBmdW5jLCBsaXN0KTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBmb3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKGZlcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMsIGZvdXQsIGZlcnIpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNmw7xocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSwgcHJvcHMsIGRicGF0aCk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJCisJfSAvLyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisKKwkvKiBkb0dFVF92aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzID0gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby8iKTsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCWZpbmFsIFN0cmluZworCQlkYk5hbWUgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5kYXRhYmFzZTwvYj46ICVzPC9wPiIsIGZvcm1hdERiTmFtZShwcm9wcykpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBkYk5hbWUgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIGRvR0VUX3ZpZXdEQkluZm8KKworCisJLyogZG9HRVRfdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+dmVyc2lvbiAiICsgdmVyc2lvbiArICIgdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgcmVxdWVzdCA9ICciICsgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSArICInPC9pPjwvaDQ+XG4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMTo8L2I+IChDMiBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX08L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT57bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKTwvY29kZT48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsPC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+w5ZsP29wdHM9ZmxleCtjb21wK290aGVyK3NwZWM8L2NvZGU+PC9wPiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAyOjwvYj4gKGludGVybmFsIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfT9wcm9wMT1bMDEyXSZhbXA7cHJvcDI9WzAxMl0mYW1wO3NwZWM9WzAxMl08L2NvZGU+ICh3aGVyZSBlYWNoIHByb3AxLCBwcm9wMiwgc3BlYyBpcyBvcHRpb25hbCkuPC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbD9wcm9wMT0wJmFtcDtwcm9wMj0xJmFtcDtzcGVjPTI8L2NvZGU+PC9wPiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Iik7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JyVkJyBwcm9wMj0nJWQnIHNwZWM9JyVkJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCS8qIAorCWZvcihpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwkJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwkJfQkKKwkgKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggbGVtbWFJbmZvLm9wdHNTZXR0aW5nID09IExlbW1hSW5mby5PUFRTX1NFVFRJTkdfQzIgKSAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZywgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxLHByb3AyLHNwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpbnQKKwkJbldmcyA9IGxlbW1hSW5mby5uV2ZzOworCQorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCS8vIGxvZyBvdXRjb21lOgorCWlmKCBuV2ZzIDwgMCApCisJCWZvdXQucHJpbnRmKCJFcnJvcjogJXM6IHJldHVybmluZyAwIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYyk7CisJZWxzZQorCQlmb3V0LnByaW50ZigiRGVidWcuICVzOiByZXR1cm5pbmcgJWQgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jLCBuV2ZzKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogbm90ZToKKwkgKiAtIGlmIEJyb3dzZXIgcmVxdWVzdDogSFRUUFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICd0ZXh0L2h0bWwsLi4ueG1sLi4uJworCSAqIC0gaWYgV2Zvcm1TZXJ2aWNlcyByZXF1ZXN0OiBIdHRwU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ2FwcGxpY2F0aW9uL2pzb24nLgorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICogCisJICogLSBzdWJtaXR0ZWQgVVJMLCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWEsIGlzIGludGVycHJldGVkIGJ5IGdsYXNzZmlzaCBhcworCSAqICAgYmVpbmcgSVNPLTg4NTktMSBlbmNvZGVkLiBXaGVuIHRoZSByZXF1ZXN0IGlzIFVURi04IGVuY29kZWQsIFVtbGF1dHMgYW5kCisJICogICAnw58nIGFyZSBtaXMtaW50ZXJwcmVkZWQsIGxlYWRpbmcgdG8gYW4gZXJyb25lcm91cyByZXF1ZXN0IHRvIHRoZSBEZXJieQorCSAqICAgZGF0YWJhc2UuCisJICogLSBSZXF1ZXN0ZWQgbGVtbWEgJ2xlbW1hJyBoYXMgdG8gYmUgdHJhbnNmb3JtZWQgdG8gVVRGLTggZmlyc3QuCisJICogLSBub3RlOiBldmVuIHdoZW4gc3VibWl0dGluZyB0aGUgR0VUIHJlcXVlc3QgYnkgc3BlY2lmeWluZyAnY2hhcmVuY29kZT1VVEYtOCcsCisJICogICBnbGFzc2Zpc2ggZG9lcyBub3QgY29udmVydCBpdCBhdXRvbWF0aWNhbGx5IGFzIGV4cGVjdGVkLgorCSAqICAgCisJICogIDIyLjEwLjIxL0ZCCisJICogCisJICogLSBpZiBhY2NlcHQ9YXBwbGljYXRpb24vanNvbiByZXR1cm4gVVRGLTggKFdmb3JtU2VydmljZXMpLgorCSAqIC0gZWxzZSBpZiBhY2NlcHQ9dGV4dC9odG1sIGRvIG5vdCB0cmFuc2Zvcm0gY2hhcmFjdGVyIGVuY29kaW5nIChCcm93c2VyKS4KKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQENvbnN1bWVzKCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2h0bWwiKQorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm87CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJZmluYWwgYm9vbGVhbgorCQliRW5jb2RlTGVtbWEgPSBmYWxzZTsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsKKwkKKwkvKiB0ZXN0OgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlpZiggYkVuY29kZUxlbW1hICkKKwkJeworCQkvLyB3aGVuIGFjY2VwdGluZyBKU09OLCB1cmwgaGFzIHRvIGJlIGNvbnZlcnRlZCB0byBVVEYtOCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hOgorCQl0cnkgeworCQkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhuZXcgU3RyaW5nKGxlbW1hLmdldEJ5dGVzKCJJU08tODg1OS0xIiksICJ1dGYtOCIpKTsKKwkJCX0gCisJCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCUxlbW1hUmVzcG9uc2UKKwkJCQlsZW1yZXNwID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtcmVzcCkuYnVpbGQoKTsKKwkJCX0KKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbVVRGLThdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisJZWxzZQorCQl7CisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFt1bmNoYW5nZWRdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisKKwkvKiBkb2VzIG5vdCBoZWxwOgorCSBTdHJpbmcKKwkgCXJlcXVlc3RDaGFyRW5jb2RpbmcgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0Q2hhcmFjdGVyRW5jb2RpbmcoKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlcXVlc3QgY2hhcmFjdGVyIGVuY29kaW5nID0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdENoYXJFbmNvZGluZyk7CisJKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJeworCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCS8vcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQl9CisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOwkKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJLyoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3Rlc3QvaW5mby8iKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vZm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQlmb3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNDgvYTAyMDRlMmY1ZTNlMDAxYzEwMzVjMWVhZjM4YWY1OTAgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzQ4L2EwMjA0ZTJmNWUzZTAwMWMxMDM1YzFlYWYzOGFmNTkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NWI1YmQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzQ4L2EwMjA0ZTJmNWUzZTAwMWMxMDM1YzFlYWYzOGFmNTkwCkBAIC0wLDAgKzEsODEzIEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKK2ltcG9ydCBqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7CitpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitwdWJsaWMgY2xhc3MgR2xlbW1EQgorCit7CisJc3RhdGljIHB1YmxpYyBTdHJpbmcgZGJUYWJsZSAJPSAiR2xlbW1MZW1tYXRhIjsKKwlzdGF0aWMgU3RyaW5nIGRiTGVtbWEgCQkgCT0gImxlbW1hIjsKKwlzdGF0aWMgU3RyaW5nIGRiV2YJIAkJCT0gIndmIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDEgCQkJPSAicHJvcDEiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMiAJCQk9ICJwcm9wMiI7CisKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKG92ZXJ3cml0dGVuIGJ5IEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZuYW1lREIgPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgc2VydmVySG9zdCA9ICIvL2xvY2FsaG9zdDoxNTI3LyI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChmaW5hbCBhc3NpZ25tZW50cyk6CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyRW1iID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZERyaXZlciI7CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyQ2xpZW50ID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREcml2ZXIiOworCisJZmluYWwgc3RhdGljIGJvb2xlYW4KKwkJdXNlUHJlcGFyZWRTdG10ID0gdHJ1ZTsgLy8gMT11c2UgUHJlcGFyZWRTdGF0ZW1lbnQgYW5kIG5vdCBTdGF0ZW1lbnQuCisJCisJLy8gdmFsdWVzIHRvIGJlIGluc2VydGVkOiBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYy4KKwlzdGF0aWMgU3RyaW5nIGluc2VydFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKCclcycsICclcycsICclcycsICclcycsICclcycpIjsKKwlzdGF0aWMgU3RyaW5nIGluc2VydFByZXBhcmVkUXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoPywgPywgPywgPywgPykiOworCQorCS8vIENvbnN0YW50cyBvZiB0YWJsZSBHbGVtbUxlbW1hdGE6CisJc3RhdGljIGZpbmFsIGludCBtYXhMZW1tYVNpemUJPSA2NDsgCS8vIG1heC4gbm8uIG9mIGNoYXJzLCBhcyBkZWNsYXJlZCBpbiB0YWJsZSBHbGVtbUxlbW1hdGEuCisJc3RhdGljIGZpbmFsIGludCBtYXhXZlNpemUJCT0gNjQ7CS8vIG1heC4gbm8uIG9mIGNoYXJzLCBhcyBkZWNsYXJlZCBpbiB0YWJsZSBHbGVtbUxlbW1hdGEuCisJCisJLyogdmFyaWFibGVzICovCisJc3RhdGljIGludCBuRXhjZXB0U3RtdAkJCT0gMDsJLy8gY291bnQgbm8uIG9mIGV4Y2VwdGlvbnMgZm9yIHByZXBhcmVkU3RtdC4KKwlzdGF0aWMgaW50IG5FeGNlcHRJbnNlcnQJCT0gMDsJLy8gY291bnQgbm8uIG9mIGV4Y2VwdGlvbnMgZm9yIEluc2VydHMuCisJCisJLyoKKwkgKiBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkgKiAKKwkgKiBBcmd1bWVudHM6CisJICogcHJvcHMJOiBQcm9wZXJ0aWVzIGxvYWRlZCBieSB0aGUgR2xlbW1TZXJ2aWNlcy4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgZnVuY3Rpb24gbG9hZHMgb25seSB0aG9zZSBDb25zdGFudHMgbmVlZGVkIGluIHRoaXMgY2xhc3MuCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzCXByb3BzKQorCQorCXsKKwlmbmFtZURCCQkgCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAJIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCXNlcnZlckhvc3QJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgInNlcnZlckhvc3QiLAkiLy9sb2NhbGhvc3Q6MTUyNy8iKTsKKwlkZXJieURCVVJMIAkJPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJCQkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qICAgIGNoZWNrRGVyYnlDb25uZWN0aW9uOgorCSAqIAorCSAqIGNoZWNrIGlmIERlcmJ5IE5ldHdvcmsgU2VydmVyIGlzIGF2YWlsYWJsZS4KKwkgKiBSZXR1cm5zOiAwICg9T0spIG9yIC0xIChvbiBlcnJvcikuCisJICogMDUuMTEuMjEvRkIKKwkgKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBjaGVja0RlcmJ5Q29ubmVjdGlvbigpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJjaGVja0RlcmJ5Q29ubmVjdGlvbiI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2UsCisJLy8gc2V0IEF1dG9jb21taXQgPSBmYWxzZSB0byBhY2NlbGVyYXRlIGluc2VydGlvbnM6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nIHRvICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3RpbmcgZmFpbGVkIVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCWZpbmFsbHkgCisJCXsgCisJCXRyeSB7IC8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGNoZWNrX0RlcmJ5Q29ubmVjdGlvbgorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIHdoZW4gaW5kZXhpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSwgc2VsZWN0IHRoZSBzdWJtaXR0ZWQgZGJwYXRoLAorCS8vIChub3QgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZGJwYXRoOworCQorCS8vIG9wZW4gcmVhZGVyIG9uIEdsZW1tIExlbW1hdGE6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJCisJCW5FcnJvcnMgPSB3cml0ZURCTGVtbWF0YShpbik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIGZyb20gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwkvLyBjbG9zZSBSZWFkZXI6CisJdHJ5IHsKKwkJaW4uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQluRXJyb3JzID0gLTE7CisJCX0KKwkKKwlpZiggbkVycm9ycyA9PSAtMSApCisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogU1FMIGVycm9yIHdoZW4gY3JlYXRpbmcgU1FMIHN0YXRlbWVudCFcbiIsIGZ1bmMpOworCWVsc2UgaWYoIG5FcnJvcnMgPT0gLTIgKQorCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZXJyb3IgdG8gRGVyYnkgU2VydmVyIVxuIiwgZnVuYyk7CisJZWxzZSBpZiggbkVycm9ycyA9PSAwICkKKyAJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0IGRvbmUgc3VjY2Vzc2Z1bGx5LlxuIiwgZnVuYyk7CisgCWVsc2UKKyAJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0OiAlZCBFcnJvcnMhXG4iLCBmdW5jLCBuRXJyb3JzKTsKKyAJCisJcmV0dXJuIG5FcnJvcnM7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGEKKwkKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCisJICogICAgICAgICAgICAgICAgICAgICAgIHdyaXRlREJMZW1tYXRhKCkKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgCisJICogc3RvcmVzIGxpc3Qgb2YgbGVtbWF0YSArIGluZm9zIGludG8gRGVyYnkgZGIuCisJICogRmlsZSBmb3JtYXQ6ICJMZW1tYSBEZWNvbXBvc2l0aW9uIFdmIiwKKwkgKiAgICAgICAgICAgICAgZS5nLjogIkjDpHVzZXIgKy0gSGF1cyIuCisJICogUmV0dXJuczogIDA6IE9LIG9yIAorCSAqIAkJCS0xOiBjb25uZWN0aW9uIGVycm9yIHRvIERlcmJ5IFNlcnZlciwgb3IKKwkgKiAJCQktMjogU1FMIGVycm9yLCBvcgorCSAqIAkJCS0zOiBJL08gZXJyb3Igd2hlbiByZWFkaW5nIHdmcywgb3IKKwkgKiAJCSAgID4gMDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAwOS4wMS4yMC9GQgorCSAqIDA0LjExLjIxL0ZCIHR1cm4gYXV0b2NvbW1pdCBvZmYgdG8gYWNjZWxlcmF0ZSBodWdlIGFtb3VudCBvZiBpbnNlcnRpb25zLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWF0YShCdWZmZXJlZFJlYWRlciBpbikKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYXRhIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVByZXBhcmVkU3RhdGVtZW50CisJCXN0bXRQcmVwID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCAJID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsJCisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQluRXJyb3JzID0gMCwKKwkJbkluc2VydGVkID0gMCwJLy8gbm8uIG9mIGxlbW1hL3dmIHBhaXJzIGltcG9ydGVkLgorCQlyZXQgPSAwOyAvLyBPSy4KKwlib29sZWFuCisJCWNvbnRhaW5zU3BlYzsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2UsCisJLy8gc2V0IEF1dG9jb21taXQgPSBmYWxzZSB0byBhY2NlbGVyYXRlIGluc2VydGlvbnM6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCWNvbi5zZXRBdXRvQ29tbWl0KGZhbHNlKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQgKGF1dG9Db21taXQ9b2ZmKS5cbiIsIGZ1bmMpOworCQkKKwkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQlzdG10UHJlcCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KGluc2VydFByZXBhcmVkUXVlcnkpOworCQllbHNlCisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCisJCXdoaWxlKCAobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCAhPSAzICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzISBFeHBlY3RlZCA9IDMhIENhbm5vdCBiZSBzdG9yZWQhXG4iLCBmdW5jLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCQluRXJyb3JzKys7CisJCQkJY29udGludWU7CisJCQkJfQorCQkJCisJCQkvLyBHZXQgSW5mbywgaWYgd29yZGZvcm0gY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlICctJywgaW50ZXJwdW5jdGlvbiBldGMuOgorCQkJLy8gbGVtbWFJbmZvWzJdID0gd29yZGZvcm0uCisJCQljb250YWluc1NwZWMgPSBMZW1tYUluZm8uaXNXZlNwZWNpYWxDYXNlKGxlbW1hSW5mb1syXSk7CisJCQkvLyBzdG9yZSBpbnRvIERCOgorCQkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoc3RtdFByZXAsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQllbHNlCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3Moc3RtdCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCQorCQkJaWYoIHJldCAhPSAwICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgc3RvcmUgbGVtbWEgJyVzJyBpbnRvIERCISAocmV0PSVkKVxuIiwgZnVuYywgbGluZSwgcmV0KTsKKwkJCQluRXJyb3JzKys7IAorCQkJCX0KKwkJCWVsc2UKKwkJCQluSW5zZXJ0ZWQrKzsKKwkJCX0gLy8gd2hpbGUKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgR2xlbW0gbGVtbWF0YStpbmZvcyBmcm9tIGZpbGUhIEV4aXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0zOyAKKwkJfQkKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIGNvbiA9PSBudWxsID8gLTEgOiAtMjsKKwkJfQorCWZpbmFsbHkgCisJCXsgCisJCXRyeSB7CisJCQkvLyBpbXBvcnRhbnQ6IG5vdyBjb21taXQsIGFzIGF1dG9Db21taXQgaXMgZGVhY3RpdmF0ZWQsCisJCQkvLyB0aGlzIGFsc28gcmVtb3ZlcyBkYXRhYmFzZSBsb2NrczoKKwkJCWNvbi5jb21taXQoKTsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29tbWl0IHN1Y2Nlc3NmdWxsLlxuIiwgZnVuYyk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29tbWl0IGF0IHRoZSBlbmQgb2YgdGhlIHdmcyBsaXN0IGZhaWxlZCFcbiIsIGZ1bmMpOworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQkKKwkJdHJ5IHsgLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQkJaWYoIGNvbiAhPSBudWxsICkgCisJCQkJY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgCisJCQkJc3RtdC5jbG9zZSgpOworCQkJaWYoIHN0bXRQcmVwICE9IG51bGwgKSAKKwkJCQlzdG10UHJlcC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJJbmZvIDogJXM6IG5vLiBvZiBsZW1tYXRhL3dmIHBhaXJzIGluc2VydGVkID0gJWQuXG4iLCBmdW5jLCBuSW5zZXJ0ZWQpOworCQorCXJldHVybiBuRXJyb3JzOyAvLyAwPU9LLCA+MCA9IG5vLiBvZiBlcnJvcnMuCisJfSAvLyB3cml0ZURCTGVtbWF0YQorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZDoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBydWxlcyBpbnRvIERlcmJ5IERCLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBpcyB0aGUgdmVyc2lvbiB3aXRoIGEgUHJlcGFyZWRRdWVyeS4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIHNwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxNy4wMS4yMC9GQgorCSAqIDA1LjEuMjEvRkIgcmVqZWN0IGxlbW1hL3dmID4gNjQgY2hhcnMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKAorCQkJUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCwgCisJCQlTdHJpbmcgbGVtbWEsIAorCQkJU3RyaW5nIHdmLCAKKwkJCVN0cmluZyBkZWNvbXBvc2l0aW9uLCAKKwkJCWJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkIjsKKwlmaW5hbCBib29sZWFuCisJCWJMb2cgPSBmYWxzZTsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlib29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwkvLyBjaGVjayBzaXplIG9mIHdmIGFuZCBsZW1tYSBhZ2FpbnN0IGZpZWxkIHNpemUgaW4gdGFibGUgR2xlbW1MZW1tYXRhOgorCWlmKCBsZW1tYS5sZW5ndGgoKSA+PSBHbGVtbURCLm1heExlbW1hU2l6ZSApIAorCQl7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogbGVtbWEgcmVqZWN0ZWQgKD4gJWQpOiAnJXMnIVxuIiwKKwkJCQlmdW5jLCBtYXhMZW1tYVNpemUsIGxlbW1hKTsKKwkJcmV0dXJuIDQ7CisJCX0KKwlpZiggd2YubGVuZ3RoKCkgPj0gR2xlbW1EQi5tYXhXZlNpemUgKSAKKwkJeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdmIHJlamVjdGVkICg+ICVkKTogJyVzJyFcbiIsCisJCQkJZnVuYywgbWF4V2ZTaXplLCB3Zik7CisJCXJldHVybiA1OworCQl9CisJIAorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICAKKwkvLyBmb3IgbG9naW5nIG9ubHk6CisJc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCWlmKCBiTG9nICkKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisgICAgLy8gbm93IGluc2VydCBuZXcgdmFsdWVzIGludG8gUHJlcGFyZWRTdGF0ZW1lbnQ6CisgICAgdHJ5IHsKKyAgICAJc3RtdC5zZXRTdHJpbmcoIDEsIGxlbW1hKTsKKyAgICAgICAgc3RtdC5zZXRTdHJpbmcoIDIsIHdmKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDMsIHByb3AxKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDQsIHByb3AyKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDUsIHNwZWMpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByZXBhcmVkIHN0bXQgPSAnJXMnLlxuIiwgIGZ1bmMsIHN0bXQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUxKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoCSJFcnJvcjogJXM6IHdoaWxlIGZpbGxpbmcgcHJlcGFyZWQgc3RhdGVtZW50IHdpdGggbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSclYicgcHJvcDI9JyViJyBzcGVjPSclYichXG4iLCAgCisJCQkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQlpZiggKytuRXhjZXB0U3RtdCA8PSAxICkKKwkJCWUxLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorICAgIAorICAgIHRyeSB7CisJCS8vIGV4ZWN1dGUgdGhlIGZpbGxlZCBwcmVwYXJlZCBzdGF0ZW1lbnQ6CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiEgKG49JWQpXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLCBuKTsKKyAJCQlyZXR1cm4gMjsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWlmKCArK25FeGNlcHRJbnNlcnQgPD0gMSApCisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMzsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvczoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBpbnRvIERlcmJ5IERCLgorCSAqIFBhcmFtZXRlcnM6CisJICogY29udGFpbnNTcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTAuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3MoU3RhdGVtZW50IHN0bXQsIFN0cmluZyBsZW1tYSwgU3RyaW5nIHdmLCBTdHJpbmcgZGVjb21wb3NpdGlvbiwgYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3MiOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCUJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICBzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgICAgCisgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisJdHJ5IHsKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZShzcWxJbnNlcnQpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDE7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hRGF0YQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGZyb20gdGhlIEdsZW1tREIuCisJICogSW5wdXQ6IGxlbW1hICsgR0xFTU1fT1BUU194eHggKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYURhdGEoTGVtbWFJbmZvIGxlbW1hSW5mbywgUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hRGF0YSI7CisKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlsZW1tYUluZm8uY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlsZW1tYUluZm8uc3RtdCA9IGxlbW1hSW5mby5jb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWludCByID0gcmVhZERCTGVtbWEobGVtbWFJbmZvLnN0bXQsIGxlbW1hSW5mbyk7CisJCQkKKwkJaWYoIHIgIT0gMCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBnZXQgZGF0YSBmb3IgbGVtbWE9JyVzJyBvcHRpb25zPSclcychXG4iLCAKKwkJCQkJZnVuYywgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCQkJcmV0dXJuIDE7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBsZW1tYUluZm8uY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWFEYXRhCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgYnkgYWNjZXNzaW5nIHRoZSBHbGVtbURCLgorCSAqIElucHV0IDogbGVtbWEgKyBwcm9wMSsyIChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiBPdXRwdXQ6IAorCSAqICAtIGNvbnRhaW5zIGEgUmVzdWx0U2V0IGZvciBmZXRjaGluZyB0aGUgd29yZGZvcm1zLgorCSAqIAkgIFRoaXMgUmVzdWx0U2V0IHdpbGwgaGF2ZSBiZSBiZSBjbG9zZWQgd2l0aCBMZW1tYUluZm8uY2xvc2UoKS4KKwkgKiAJICBUaGUgbm8uIG9mIGZvdW5kIHdvcmRmb3JtcyBpcyBub3Qga25vd24gdGlsbCB3ZQorCSAqIAkgIGZldGNoIGFsbCBvZiB0aGVtIGZyb20gUmVzdWx0U2V0ISAKKwkgKiAJLSBkdWUgdG8gU0VMRUNUIERJU1RJTkNUIG9ubHkgdW5pcSB3ZiBhcmUgcmV0dXJuZWQuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hKFN0YXRlbWVudCBzdG10LCBMZW1tYUluZm8gbGVtbWFJbmZvKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWEiOworCVN0cmluZworCQlzcWw7CisJCQorCXNxbCA9IFN0cmluZy5mb3JtYXQoIlNFTEVDVCBESVNUSU5DVCB3ZiBmcm9tICVzIFdIRVJFIGxlbW1hPSclcycgJXMgJXMgJXMiLCAKKwkJCWRiVGFibGUsCisJCQlsZW1tYUluZm8ubGVtbWEsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICJBTkQgcHJvcDE9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AxID09IDEgPyAiQU5EIHByb3AxPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICJBTkQgcHJvcDI9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AyID09IDEgPyAiQU5EIHByb3AyPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICJBTkQgc3BlYz0ndHJ1ZSciICAgOiAKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIkFORCBzcGVjPSdmYWxzZSciICA6ICIiKTsKKwkKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCBmdW5jLCBsZW1tYUluZm8ucHJvcDEsIGxlbW1hSW5mby5wcm9wMiwgbGVtbWFJbmZvLnNwZWMpOworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsID0gJyVzJy5cbiIsIGZ1bmMsIHNxbCk7CisKKwl0cnkgeworCQlsZW1tYUluZm8ucmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsJCisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hlbiBleGVjdXRpbmcgc3FsPSclcychXG4iLCBmdW5jLCBzcWwpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBhbGwgc3FsIHN0dWZmIGFyZSBjbG9zZWQgb3V0c2lkZSB0aGlzIGZ1bmN0aW9uLCBzbyBkb24ndCBjbG9zZSB0aGVtIGhlcmUhCisJCX0JCisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvcworCSAqIFJldHVybnMgR2VuZXJhbCBJbmZvcyBhYm91dCB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgcmVhZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkluZm9zKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlkYkluZm8gPSByZWFkRGJMZW1tYXRhSW5mb3Moc3RtdCk7CisJCQkKKwkJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHJlYWQgR2VuZXJhbCBJbmZvcyBmcm9tIEdsZW1tIERhdGFiYXNlIVxuIiwgZnVuYyk7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiBudWxsOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIGNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIHN0bXQuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gbWF5IGJlIG51bGwuCisJCQorCX0gLy8gcmVhZERiSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJMZW1tYXRhSW5mb3M6CisJICogcmVhZHMgYW5kIHJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY29udGVudCAKKwkgKiBvZiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogUmV0dXJucyAwPU9LIG9yIGVycm9yIGNvZGUgPiAwLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiTGVtbWF0YUluZm9zKFN0YXRlbWVudCBzdG10KQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJyZWFkRGJMZW1tYUluZm9zIjsKKwlTdHJpbmdbXQorCQlzcWwgPSB7CSJTRUxFQ1QgQ09VTlQoZGlzdGluY3QgbGVtbWEpIGZyb20gIiArIGRiVGFibGUgLAkvLyBjb3VudHMgbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlLAkJCQkJLy8gY291bnRzIHRvdGFsIG5vLiBvZiBzdG9yZWQgd29yZGZvcm1zLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9dHJ1ZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9dHJ1ZSJ9OworCVJlc3VsdFNldAorCQlyZXMgPSBudWxsOyAKKwlpbnRbXQorCQluQ291bnRzID0gbmV3IGludFtzcWwubGVuZ3RoXTsKKwlpbnQJCQorCQlpID0gMCwgCisJCW5EaXN0TGVtbWF0YSA9IC0xLAkvLyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YSBpbiBEQi4KKwkJbldmcwkJID0gLTE7CS8vIG5vLiBvZiB3b3JkZm9ybXMgaW4gREIuCisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGV4dHJhY3RpbmcgYWdyZWdhdGVkIGluZm9zIGFib3V0IERhdGFiYXNlIGNvbnRlbnRzLi4uXG4iLCBmdW5jKTsKKwkKKwlkYkluZm8gPSBuZXcgR2xlbW1EQkluZm8oKTsKKworCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCXRyeSB7CisJCWZvcihpPTA7IGk8c3FsLmxlbmd0aDsgaSsrKQorCQkJeworCQkJcmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsW2ldKTsKKwkJCWlmKCByZXMubmV4dCgpICkKKwkJCQlkYkluZm8uY291bnRzW2ldID0gcmVzLmdldEludCgxKTsgLy8gY291bnQgaXMgaW4gY29sdW1uIDEuCisJCQllbHNlCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGV4dHJhY3QgY291bnQgZnJvbSAnJXMnIVxuIiwgZnVuYywgc3FsW2ldKTsKKwkJCQlkYkluZm8uY291bnRzW2ldID0gLTE7CisJCQkJfQorCQkJfQorICAgICAgIAorICAgICAgICB9CisgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgCXsKKyAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBzcWw9JyVzJyBmYWlsZWQhXG4iLCBmdW5jLCBzcWxbaV0pOworICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgIHJldHVybiBudWxsOworICAgIAl9CisJZmluYWxseSB7CisJCXRyeSB7CisJCQlyZXMuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0KKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIE9LCisJfSAvLyByZWFkRGJMZW1tYXRhSW5mb3MKKwkKKwkvKioqKioqKioqKioqKioqKioqKiogVGVzdCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3NfdGVzdAorCSAqIFRoaXMgaXMgZGVidWcgY29kZSB3cml0dGVuIHRvIHRlc3QgaWYgd2UgY2FuIGFjY2VzcyB0aGUgRGVyYnkKKwkgKiBEYXRhYmFzZSBmcm9tIGFuIGV4dGVybmFsIEphdmEgUHJvZ3JhbW0uCisJICogMDguMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IHJlYWREYkluZm9zX3Rlc3QoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCVN0cmluZworCQlpbnNlcnRTdG10ID0gIiI7CisJCisJLy8gQ29ubmVjdCB0byBEZXJieSBkYXRhYmFzZToKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkJCisJCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCQl0cnkKKwkJCXsKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBTdHJpbmcgCisgICAgICAgICAgICAJc3FsID0gIlNFTEVDVCAqIEZST00gIiArIGRiVGFibGU7CisgICAgICAgICAgICBSZXN1bHRTZXQgCisgICAgICAgICAgICAJcmVzdWx0ID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsKKyAKKyAgICAgICAgICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogdGFibGUgJyVzJzpcbiIsICBmdW5jLCBkYlRhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKHJlc3VsdC5uZXh0KCkpIHsKKyAgICAgICAgICAgIAlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCInJXMnIDogJyVzJyA6ICclcycgOiAnJXMnIC5cbiIsIHJlc3VsdC5nZXRTdHJpbmcoMSksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDIpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygzKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoNCkpOworICAgICAgICAJCWluc2VydFN0bXQgPSBpbnNlcnRTdG10ICsgIjxwPiIgKyByZXN1bHQuZ2V0U3RyaW5nKDEpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDIpICsgIiA6ICIgKworICAgICAgICAgICAgICAgIAkJICAgICByZXN1bHQuZ2V0U3RyaW5nKDMpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDQpICsgIjwvcD4iOworICAgICAgICAgICAgCX0KKwkJCX0KKwkgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgICAgIAl7CisJICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGluc2VydFN0bXQ9JyVzJyBmYWlsZWQhLlxuIiwgZnVuYywgc3RtdCk7CisgICAgICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgICAgICBjb24uY2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3RpbmcgJyVzIGZhaWxlZCFcbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwl0cnkgeworCQljb24uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQkKKwl9IC8vIHJlYWREYkluZm9zX3Rlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiBpbXBvcnRHbGVtbUxlbWF0YV90ZXN0CisJICogVGVzdCBWZXJzaW9uLgorCSAqIDEyLjEyLjE5L0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdChTdHJpbmcgZm4pCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YV90ZXN0IjsKKwlJbnB1dFN0cmVhbSAKKwkJaW47CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4yID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCXI7CisJCisJLyoKKwkgKiBSZWFkIExlbW1hdGEgKyBJbmZvIGZyb20gZmlsZTogCisJICovCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJCisJdHJ5IHsKKwkJLy9pbiA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKCBuZXcgRmlsZUlucHV0U3RyZWFtKGZuKSApOworCQlpbjIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCXdoaWxlKCAobGluZSA9IGluMi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggPT0gMyApCisJCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IEltcG9ydDogbGVtPSclcycgRGVjb21wPSclcycgV2Y9JyVzJy5cbiIsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzFdLCBsZW1tYUluZm9bMl0pOworCQkJZWxzZQorCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiBpbXBvcnRHbGVtbUxhbWF0YTogJyVzJyBoYXMgJWQgY29tcG9uZW50cyFcbiIsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJfQorCQl9IAorCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgb3BlbiAnJXMnIVxuIiwgZnVuYywgZm4pOworCQlyZXR1cm4gMTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCisJdHJ5IHsKKwkJaW4yLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQl9CisJCisJLyogQ2hlY2sgY29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwkgKi8gCisJciA9IHJlYWREYkluZm9zX3Rlc3QoKTsKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIHI7CisJCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNGEvMDA0NzI2MjMxMTNlMDAxYzEzNjNiZWI5MzJhZTYzYTEgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzRhLzAwNDcyNjIzMTEzZTAwMWMxMzYzYmViOTMyYWU2M2ExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmM2NjN2IKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzRhLzAwNDcyNjIzMTEzZTAwMWMxMzYzYmViOTMyYWU2M2ExCkBAIC0wLDAgKzEsNzQ2IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKK2ltcG9ydCBqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7CitpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAob3ZlcndyaXR0ZW4gYnkgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKGZpbmFsIGFzc2lnbm1lbnRzKToKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJFbWIgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIjsKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLyogdmFyaWFibGVzICovCisJc3RhdGljIGludCBuRXhjZXB0U3RtdAkJPSAwOwkvLyBjb3VudCBuby4gb2YgZXhjZXB0aW9ucyBmb3IgcHJlcGFyZWRTdG10LgorCXN0YXRpYyBpbnQgbkV4Y2VwdEluc2VydAk9IDA7CS8vIGNvdW50IG5vLiBvZiBleGNlcHRpb25zIGZvciBJbnNlcnRzLgorCQorCS8qCisJICogc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJICogCisJICogQXJndW1lbnRzOgorCSAqIHByb3BzCTogUHJvcGVydGllcyBsb2FkZWQgYnkgdGhlIEdsZW1tU2VydmljZXMuCisJICogTm90ZXM6CisJICogLSB0aGlzIGZ1bmN0aW9uIGxvYWRzIG9ubHkgdGhvc2UgQ29uc3RhbnRzIG5lZWRlZCBpbiB0aGlzIGNsYXNzLgorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcwlwcm9wcykKKwkKKwl7CisJZm5hbWVEQgkJIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgCSIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlzZXJ2ZXJIb3N0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJzZXJ2ZXJIb3N0IiwJIi8vbG9jYWxob3N0OjE1MjcvIik7CisJZGVyYnlEQlVSTCAJCT0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCQkJCisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCQkJCQlpbXBvcnRHbGVtbUxlbWF0YQorCSAqIFBhcmFtZXRlcnM6CisJICogZm4JCSA6IGFic29sdXRlIGZpbGUgbmFtZSBvZiBHTEVNTSBvdXRwdXQgW0lTTzg4NTktMV0gZXhwZWN0ZWQsIG5vdCBVVEYtOCEKKwkgKiBwcm9wcwkgOiBQcm9wZXJ0aWVzIHZvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgdG8gc2V0IGNvbnN0YW50cyBuZWVkZWQKKwkgKiAJCQkgICBpbiB0aGlzIGNsYXNzLgorCSAqIGRicGF0aAkgOiBsb2NhdGlvbiArIG5hbWUgb2YgZGF0YWJhc2Ugd2hlcmUgdG8gc3RvcmUgbGVtbWF0YSt3ZnMuCisJICogUmV0dXJucwkgOiAwPU9LLCAtMTogZ2VuZXJhbCBlcnJvcjsgPiAwIDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAKKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIGR5bmFtaWNhbGx5IGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqIDA0LjExLjIxL0ZCIGRicGF0aC4KKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YShTdHJpbmcgZm4sIFByb3BlcnRpZXMgcHJvcHMsIGZpbmFsIFN0cmluZyBkYnBhdGgpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YSI7CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4gPSBudWxsOworCWludAorCQluRXJyb3JzOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyB3aGVuIGluZGV4aW5nIGRhdGEgaW50byB0aGUgZGF0YWJhc2UsIHNlbGVjdCB0aGUgc3VibWl0dGVkIGRicGF0aCwKKwkvLyAobm90IHRoZSBvbmUgc3RvcmVkIGluIHRoZSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCWRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGRicGF0aDsKKwkKKwkvLyBvcGVuIHJlYWRlciBvbiBHbGVtbSBMZW1tYXRhOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCWluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCQorCQluRXJyb3JzID0gd3JpdGVEQkxlbW1hdGEoaW4pOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBmcm9tICclcychXG4iLCBmdW5jLCBmbik7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCisJLy8gY2xvc2UgUmVhZGVyOgorCXRyeSB7CisJCWluLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJbkVycm9ycyA9IC0xOworCQl9CisJCisgCWlmKCBuRXJyb3JzID09IDAgKQorIAkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQgZG9uZSBzdWNjZXNzZnVsbHkuXG4iLCBmdW5jKTsKKyAJZWxzZQorIAkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQ6ICVkIEVycm9ycyFcbiIsIGZ1bmMsIG5FcnJvcnMpOworIAkKKwlyZXR1cm4gbkVycm9yczsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YQorCQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVEQkxlbW1hdGEoKQorCSAqICAgICAgICAgICAgICAgICAgICAgICAKKwkgKiBzdG9yZXMgbGlzdCBvZiBsZW1tYXRhICsgaW5mb3MgaW50byBEZXJieSBkYi4KKwkgKiBGaWxlIGZvcm1hdDogIkxlbW1hIERlY29tcG9zaXRpb24gV2YiLAorCSAqICAgICAgICAgICAgICBlLmcuOiAiSMOkdXNlciArLSBIYXVzIi4KKwkgKiBSZXR1cm5zOiAwID0gT0sgb3IgLTE6IGdlbmVyYWwgZXJyb3Igb3IgPiAwOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIDA5LjAxLjIwL0ZCCisJICogMDQuMTEuMjEvRkIgdHVybiBhdXRvY29tbWl0IG9mZiB0byBhY2NlbGVyYXRlIGh1Z2UgYW1vdW50IG9mIGluc2VydGlvbnMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYXRhKEJ1ZmZlcmVkUmVhZGVyIGluKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hdGEiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJUHJlcGFyZWRTdGF0ZW1lbnQKKwkJc3RtdFByZXAgPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10IAkgPSBudWxsOworCVN0cmluZworCQlsaW5lOwkKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQluSW5zZXJ0ZWQgPSAwLAkvLyBuby4gb2YgbGVtbWEvd2YgcGFpcnMgaW1wb3J0ZWQuCisJCXJldCA9IDA7IC8vIE9LLgorCWJvb2xlYW4KKwkJY29udGFpbnNTcGVjOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZSwKKwkvLyBzZXQgQXV0b2NvbW1pdCA9IGZhbHNlIHRvIGFjY2VsZXJhdGUgaW5zZXJ0aW9uczoKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJY29uLnNldEF1dG9Db21taXQoZmFsc2UpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZCAoYXV0b0NvbW1pdD1vZmYpLlxuIiwgZnVuYyk7CisKKwkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQlzdG10UHJlcCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KGluc2VydFByZXBhcmVkUXVlcnkpOworCQllbHNlCisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCisJCXdoaWxlKCAobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCAhPSAzICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzISBFeHBlY3RlZCA9IDMhIENhbm5vdCBiZSBzdG9yZWQhXG4iLCBmdW5jLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCQluRXJyb3JzKys7CisJCQkJY29udGludWU7CisJCQkJfQorCQkJCisJCQkvLyBHZXQgSW5mbywgaWYgd29yZGZvcm0gY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlICctJywgaW50ZXJwdW5jdGlvbiBldGMuOgorCQkJLy8gbGVtbWFJbmZvWzJdID0gd29yZGZvcm0uCisJCQljb250YWluc1NwZWMgPSBMZW1tYUluZm8uaXNXZlNwZWNpYWxDYXNlKGxlbW1hSW5mb1syXSk7CisJCQkvLyBzdG9yZSBpbnRvIERCOgorCQkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoc3RtdFByZXAsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQllbHNlCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3Moc3RtdCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCQorCQkJaWYoIHJldCAhPSAwICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgc3RvcmUgbGVtbWEgJyVzJyBpbnRvIERCISAocmV0PSVkKVxuIiwgZnVuYywgbGluZSwgcmV0KTsKKwkJCQluRXJyb3JzKys7IAorCQkJCX0KKwkJCWVsc2UKKwkJCQluSW5zZXJ0ZWQrKzsKKwkJCX0gLy8gd2hpbGUKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgR2xlbW0gbGVtbWF0YStpbmZvcyBmcm9tIGZpbGUhIEV4aXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOyAKKwkJfQkKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisJZmluYWxseSAKKwkJeyAKKwkJdHJ5IHsKKwkJCS8vIGltcG9ydGFudDogbm93IGNvbW1pdCwgYXMgYXV0b0NvbW1pdCBpcyBkZWFjdGl2YXRlZCwKKwkJCS8vIHRoaXMgYWxzbyByZW1vdmVzIGRhdGFiYXNlIGxvY2tzOgorCQkJY29uLmNvbW1pdCgpOworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb21taXQgc3VjY2Vzc2Z1bGwuXG4iLCBmdW5jKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb21taXQgYXQgdGhlIGVuZCBvZiB0aGUgd2ZzIGxpc3QgZmFpbGVkIVxuIiwgZnVuYyk7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCQorCQl0cnkgeyAvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSAKKwkJCQlzdG10LmNsb3NlKCk7CisJCQlpZiggc3RtdFByZXAgIT0gbnVsbCApIAorCQkJCXN0bXRQcmVwLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkluZm8gOiAlczogbm8uIG9mIGxlbW1hdGEvd2YgcGFpcnMgaW5zZXJ0ZWQgPSAlZC5cbiIsIGZ1bmMsIG5JbnNlcnRlZCk7CisJCisJcmV0dXJuIG5FcnJvcnM7IC8vIDA9T0ssID4wID0gbm8uIG9mIGVycm9ycy4KKwl9IC8vIHdyaXRlREJMZW1tYXRhCisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIHJ1bGVzIGludG8gRGVyYnkgREIuCisJICogTm90ZXM6CisJICogLSB0aGlzIGlzIHRoZSB2ZXJzaW9uIHdpdGggYSBQcmVwYXJlZFF1ZXJ5LgorCSAqIFBhcmFtZXRlcnM6CisJICogc3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDE3LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKAorCQkJUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCwgCisJCQlTdHJpbmcgbGVtbWEsIAorCQkJU3RyaW5nIHdmLCAKKwkJCVN0cmluZyBkZWNvbXBvc2l0aW9uLCAKKwkJCWJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkIjsKKwlmaW5hbCBib29sZWFuCisJCWJMb2cgPSBmYWxzZTsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlib29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgCisJLy8gZm9yIGxvZ2luZyBvbmx5OgorCXNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwlpZiggYkxvZyApCisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorICAgIC8vIG5vdyBpbnNlcnQgbmV3IHZhbHVlcyBpbnRvIFByZXBhcmVkU3RhdGVtZW50OgorICAgIHRyeSB7CisgICAgCXN0bXQuc2V0U3RyaW5nKCAxLCBsZW1tYSk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKCAyLCB3Zik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbigzLCBwcm9wMSk7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig0LCBwcm9wMik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig1LCBzcGVjKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcmVwYXJlZCBzdG10ID0gJyVzJy5cbiIsICBmdW5jLCBzdG10LnRvU3RyaW5nKCkpOworICAgICAgICB9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlMSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKAkiRXJyb3I6ICVzOiB3aGlsZSBmaWxsaW5nIHByZXBhcmVkIHN0YXRlbWVudCB3aXRoIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0nJWInIHByb3AyPSclYicgc3BlYz0nJWInIVxuIiwgIAorCQkJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJaWYoICsrbkV4Y2VwdFN0bXQgPD0gMSApCisJCQllMS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKyAgICAKKyAgICB0cnkgeworCQkvLyBleGVjdXRlIHRoZSBmaWxsZWQgcHJlcGFyZWQgc3RhdGVtZW50OgorCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhIChuPSVkKVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYywgbik7CisgCQkJcmV0dXJuIDI7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQlpZiggKytuRXhjZXB0SW5zZXJ0IDw9IDEgKQorCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDM7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZAorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3M6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gaW50byBEZXJieSBEQi4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGNvbnRhaW5zU3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDEwLjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zKFN0YXRlbWVudCBzdG10LCBTdHJpbmcgbGVtbWEsIFN0cmluZyB3ZiwgU3RyaW5nIGRlY29tcG9zaXRpb24sIGJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zIjsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlCb29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworICAgIAorICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorCXRyeSB7CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoc3FsSW5zZXJ0KTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYURhdGEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBmcm9tIHRoZSBHbGVtbURCLgorCSAqIElucHV0OiBsZW1tYSArIEdMRU1NX09QVFNfeHh4IChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWFEYXRhKExlbW1hSW5mbyBsZW1tYUluZm8sIFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYURhdGEiOworCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJbGVtbWFJbmZvLmNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJbGVtbWFJbmZvLnN0bXQgPSBsZW1tYUluZm8uY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlpbnQgciA9IHJlYWREQkxlbW1hKGxlbW1hSW5mby5zdG10LCBsZW1tYUluZm8pOworCQkJCisJCWlmKCByICE9IDAgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZ2V0IGRhdGEgZm9yIGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIVxuIiwgCisJCQkJCWZ1bmMsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwkJCXJldHVybiAxOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggbGVtbWFJbmZvLmNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hRGF0YQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGJ5IGFjY2Vzc2luZyB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dCA6IGxlbW1hICsgcHJvcDErMiAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogT3V0cHV0OiAKKwkgKiAgLSBjb250YWlucyBhIFJlc3VsdFNldCBmb3IgZmV0Y2hpbmcgdGhlIHdvcmRmb3Jtcy4KKwkgKiAJICBUaGlzIFJlc3VsdFNldCB3aWxsIGhhdmUgYmUgYmUgY2xvc2VkIHdpdGggTGVtbWFJbmZvLmNsb3NlKCkuCisJICogCSAgVGhlIG5vLiBvZiBmb3VuZCB3b3JkZm9ybXMgaXMgbm90IGtub3duIHRpbGwgd2UKKwkgKiAJICBmZXRjaCBhbGwgb2YgdGhlbSBmcm9tIFJlc3VsdFNldCEgCisJICogCS0gZHVlIHRvIFNFTEVDVCBESVNUSU5DVCBvbmx5IHVuaXEgd2YgYXJlIHJldHVybmVkLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYShTdGF0ZW1lbnQgc3RtdCwgTGVtbWFJbmZvIGxlbW1hSW5mbykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hIjsKKwlTdHJpbmcKKwkJc3FsOworCQkKKwlzcWwgPSBTdHJpbmcuZm9ybWF0KCJTRUxFQ1QgRElTVElOQ1Qgd2YgZnJvbSAlcyBXSEVSRSBsZW1tYT0nJXMnICVzICVzICVzIiwgCisJCQlkYlRhYmxlLAorCQkJbGVtbWFJbmZvLmxlbW1hLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiQU5EIHByb3AxPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAxID8gIkFORCBwcm9wMT0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiQU5EIHByb3AyPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAxID8gIkFORCBwcm9wMj0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiQU5EIHNwZWM9J3RydWUnIiAgIDogCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICJBTkQgc3BlYz0nZmFsc2UnIiAgOiAiIik7CisJCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgZnVuYywgbGVtbWFJbmZvLnByb3AxLCBsZW1tYUluZm8ucHJvcDIsIGxlbW1hSW5mby5zcGVjKTsKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbCA9ICclcycuXG4iLCBmdW5jLCBzcWwpOworCisJdHJ5IHsKKwkJbGVtbWFJbmZvLnJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoZW4gZXhlY3V0aW5nIHNxbD0nJXMnIVxuIiwgZnVuYywgc3FsKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gYWxsIHNxbCBzdHVmZiBhcmUgY2xvc2VkIG91dHNpZGUgdGhpcyBmdW5jdGlvbiwgc28gZG9uJ3QgY2xvc2UgdGhlbSBoZXJlIQorCQl9CQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3MKKwkgKiBSZXR1cm5zIEdlbmVyYWwgSW5mb3MgYWJvdXQgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIHJlYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJJbmZvcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJZGJJbmZvID0gcmVhZERiTGVtbWF0YUluZm9zKHN0bXQpOworCQkJCisJCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCByZWFkIEdlbmVyYWwgSW5mb3MgZnJvbSBHbGVtbSBEYXRhYmFzZSFcbiIsIGZ1bmMpOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSBjb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSBzdG10LmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIG1heSBiZSBudWxsLgorCQkKKwl9IC8vIHJlYWREYkluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiTGVtbWF0YUluZm9zOgorCSAqIHJlYWRzIGFuZCByZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGNvbnRlbnQgCisJICogb2YgdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIFJldHVybnMgMD1PSyBvciBlcnJvciBjb2RlID4gMC4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkxlbW1hdGFJbmZvcyhTdGF0ZW1lbnQgc3RtdCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAicmVhZERiTGVtbWFJbmZvcyI7CisJU3RyaW5nW10KKwkJc3FsID0gewkiU0VMRUNUIENPVU5UKGRpc3RpbmN0IGxlbW1hKSBmcm9tICIgKyBkYlRhYmxlICwJLy8gY291bnRzIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSwJCQkJCS8vIGNvdW50cyB0b3RhbCBuby4gb2Ygc3RvcmVkIHdvcmRmb3Jtcy4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPXRydWUiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPXRydWUifTsKKwlSZXN1bHRTZXQKKwkJcmVzID0gbnVsbDsgCisJaW50W10KKwkJbkNvdW50cyA9IG5ldyBpbnRbc3FsLmxlbmd0aF07CisJaW50CQkKKwkJaSA9IDAsIAorCQluRGlzdExlbW1hdGEgPSAtMSwJLy8gbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEgaW4gREIuCisJCW5XZnMJCSA9IC0xOwkvLyBuby4gb2Ygd29yZGZvcm1zIGluIERCLgorCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBleHRyYWN0aW5nIGFncmVnYXRlZCBpbmZvcyBhYm91dCBEYXRhYmFzZSBjb250ZW50cy4uLlxuIiwgZnVuYyk7CisJCisJZGJJbmZvID0gbmV3IEdsZW1tREJJbmZvKCk7CisKKwkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwl0cnkgeworCQlmb3IoaT0wOyBpPHNxbC5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCXJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbFtpXSk7CisJCQlpZiggcmVzLm5leHQoKSApCisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IHJlcy5nZXRJbnQoMSk7IC8vIGNvdW50IGlzIGluIGNvbHVtbiAxLgorCQkJZWxzZQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBleHRyYWN0IGNvdW50IGZyb20gJyVzJyFcbiIsIGZ1bmMsIHNxbFtpXSk7CisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IC0xOworCQkJCX0KKwkJCX0KKyAgICAgICAKKyAgICAgICAgfQorICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgIAl7CisgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogc3FsPSclcycgZmFpbGVkIVxuIiwgZnVuYywgc3FsW2ldKTsKKyAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAJfQorCWZpbmFsbHkgeworCQl0cnkgeworCQkJcmVzLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBPSworCX0gLy8gcmVhZERiTGVtbWF0YUluZm9zCisJCisJLyoqKioqKioqKioqKioqKioqKioqIFRlc3QgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zX3Rlc3QKKwkgKiBUaGlzIGlzIGRlYnVnIGNvZGUgd3JpdHRlbiB0byB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIERlcmJ5CisJICogRGF0YWJhc2UgZnJvbSBhbiBleHRlcm5hbCBKYXZhIFByb2dyYW1tLgorCSAqIDA4LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCByZWFkRGJJbmZvc190ZXN0KCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlTdHJpbmcKKwkJaW5zZXJ0U3RtdCA9ICIiOworCQorCS8vIENvbm5lY3QgdG8gRGVyYnkgZGF0YWJhc2U6CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCQorCQkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwkJdHJ5CisJCQl7CisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIAorICAgICAgICAgICAgCXNxbCA9ICJTRUxFQ1QgKiBGUk9NICIgKyBkYlRhYmxlOworICAgICAgICAgICAgUmVzdWx0U2V0IAorICAgICAgICAgICAgCXJlc3VsdCA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CisgCisgICAgICAgICAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHRhYmxlICclcyc6XG4iLCAgZnVuYywgZGJUYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQubmV4dCgpKSB7CisgICAgICAgICAgICAJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiJyVzJyA6ICclcycgOiAnJXMnIDogJyVzJyAuXG4iLCByZXN1bHQuZ2V0U3RyaW5nKDEpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygyKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMyksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDQpKTsKKyAgICAgICAgCQlpbnNlcnRTdG10ID0gaW5zZXJ0U3RtdCArICI8cD4iICsgcmVzdWx0LmdldFN0cmluZygxKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZygyKSArICIgOiAiICsKKyAgICAgICAgICAgICAgICAJCSAgICAgcmVzdWx0LmdldFN0cmluZygzKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZyg0KSArICI8L3A+IjsKKyAgICAgICAgICAgIAl9CisJCQl9CisJICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgICAgICAJeworCSAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBpbnNlcnRTdG10PSclcycgZmFpbGVkIS5cbiIsIGZ1bmMsIHN0bXQpOworICAgICAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICAgICAgY29uLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nICclcyBmYWlsZWQhXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJdHJ5IHsKKwkJY29uLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkJCisJfSAvLyByZWFkRGJJbmZvc190ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogaW1wb3J0R2xlbW1MZW1hdGFfdGVzdAorCSAqIFRlc3QgVmVyc2lvbi4KKwkgKiAxMi4xMi4xOS9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QoU3RyaW5nIGZuKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdCI7CisJSW5wdXRTdHJlYW0gCisJCWluOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluMiA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQlyOworCQorCS8qCisJICogUmVhZCBMZW1tYXRhICsgSW5mbyBmcm9tIGZpbGU6IAorCSAqLworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCQorCXRyeSB7CisJCS8vaW4gPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSggbmV3IEZpbGVJbnB1dFN0cmVhbShmbikgKTsKKwkJaW4yID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlcihmbikpOworCQl3aGlsZSggKGxpbmUgPSBpbjIucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoID09IDMgKQorCQkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBJbXBvcnQ6IGxlbT0nJXMnIERlY29tcD0nJXMnIFdmPSclcycuXG4iLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1sxXSwgbGVtbWFJbmZvWzJdKTsKKwkJCWVsc2UKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogaW1wb3J0R2xlbW1MYW1hdGE6ICclcycgaGFzICVkIGNvbXBvbmVudHMhXG4iLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IG9wZW4gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJcmV0dXJuIDE7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKworCXRyeSB7CisJCWluMi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCS8qIENoZWNrIGNvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJICovIAorCXIgPSByZWFkRGJJbmZvc190ZXN0KCk7CisJaWYoIHIgIT0gMCApCisJCXJldHVybiByOworCQkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzRhL2EwZjg2NGViNGEzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS80YS9hMGY4NjRlYjRhM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2E0MWY3Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS80YS9hMGY4NjRlYjRhM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpAQCAtMCwwICsxLDk3NSBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCisvKiAwLjEgOiAxNy4wNi4yMC9GQiAKKyAqIDAuMiA6IDI1LjEwLjIxL0ZCCisgKiAgICAgICBsb2dpbmcgb2YgdGhlIEFQSSBSZXF1ZXN0cy4KKyAqICAgICAgIGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorICogICAgICAgY29ycmVjdGluZyBjYWxsaW5nIG9mIGxlbW1hICsgcHJvcDEvcHJvcDIvc3BlYy4KKyAqICAgICAgIGhhbmRsaW5nIG9mIGxlbW1hdGEgd2l0aCAnw58nLgorICogCisgKiBHZW5lcmFsIGNvbW1lbnRzIHRvIHRoZSBlbmNvZGluZyBvZiBkZXJpdmF0aW9ucyBmcm9tIGxlbW1hIHRvIHdmcyBhbmQgaG93IHRoZXkgYXJlIGVuY29kZWQKKyAqIGluIHRoZSBEZXJieSBkYXRhYmFzZToKKyAqIAorICogR0xFTU0gZW5jb2Rpbmc6ICAKKyAqICAgXyBfIDogK0ZsZXggICAgICAgw5ZsZSAtPiDDlmwgICAgICAKKyAqICAgKyBfIDogK0NvbXAgICAgICAgw5ZsbGFtcGUgLT4gw5ZsIG9yIExhbXBlIChjb21wb3VuZCkuCisgKiAgIF8gKyA6ICtvdGhlciAgICAgIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuc2NodWggKG5vIGNvbXBvdW5kIGZvciAnVHVybnNjaHVoJywgb25seSBwcmVmaXgpLgorICogICArICsgOiArQ29tcCtvdGhlciBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybiArIFNjaHVoIChjb21wb3VuZCBmb3IgJ1NjaHVoJyArIFByZWZpeCkuCisgKiBDMiBsZW1tYXRpemF0aW9uIG9wdGlvbnM6CisgKiAgIEZsZXggIChpZGVudGljYWwgdG8gR2xlbW0pCisgKiAgIENvbXAgIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykKKyAqICAgT3RoZXIgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKS4KKyAqICAgU3BlYyAgKG9ubHkgQzI6IGluY2x1ZGVzIGFsbCB3ZnMgd2l0aCBoaXBoZW4gYW5kL29yIHNvbWUgbm9uLWFscGhhYmV0aWMgSVNPODg1OS0xIGNoYXJzKQorICogICAgICAgICBFLmcuIMOWbC1FeHBvcnRlLCAiTWFya2VuIi3DlmxlLgorICogRGVyYnkgRW5jb2Rpbmc6CisgKiAgcHJvcDEgCXByb3AyCXNwZWMgICAJbWVhbmluZyBpbiBDMjoKKyAqICAwCQkwCQktCQlGbGV4CisgKiAgMQkJMAkJLQkJQ29tcAorICogIDAJCTEJCS0JCU90aGVyIChwcmVmaXgpCisgKiAgMQkJMQkJLQkJQ29tcCArIE90aGVyCisgKiAgLQkJLQkJMAkJLVNwZWMKKyAqICAtCQktCQkxCQkrU3BlYworICogCisgKiBFeGFtcGxlczoKKyAqICZTY2h1aAkJCTogU2NodWgsIFNjaHVoZSwgLi4uIG9ubHkgZmxleGlvbnMKKyAqICZTY2h1aCtjb21wCQk6IFNjaHVoZSwgVHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzLgorICogJlNjaHVoK290aGVyCQk6IFNjaHVoZSwgQW50aXNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgcHJlZml4ZWQgd2ZzIChubyBjb21wb3VuZHMpLgorICogJlNjaHVoK2NvbXArb3RoZXI6IFNjaHVoZSwgQW50aXNjaHVoZSwgVHVybnNjaHVoZSwgQW50aXR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcyBhbmQgCisgKiAJCQkJCSAgcHJlZml4ZWQgc2luZ2xlIHdmcyAoQW50aXNjaHVoZSkgYW5kIHByZWZpeGVkIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtzcGVjCQk6ICJBbnRpIi1TY2h1aGUsIDY4Z2VyLVNjaHVoZS4uLiBtYXkgYmUgY29tYmluZWQgd2l0aCBldmVyeSBvcHRpb25zOiBhZGRzCisgKiAgICAgICAgICAgICAgICAgICAgd2ZzIHdpdGggaHlwaGVuIGFuZC9vciBub24tYWxwaGFiZXRpYyBjaGFycy4KKyAqIAorICogQ29udmVyc2lvbiBydWxlczoKKyAqIAorICogICZzY2hsaWXDn2VuIC0+IGludGVybmFsIHNlYXJjaCBmb3IgJ3NjaGxpZXNzZW4nLAorICogIGJlY2F1c2UgR2xlbW0gb3V0cHV0cyAnc3MnIGZvciAnw58nLgorICogIAorICogQ2hhcmFjdGVyIEVuY29kaW5nOgorICogCisgKiAtIFdoZW4gaW1wb3J0aW5nIHdmcyB0byB0aGUgRGVyYnkgRGF0YWJhc2Ugd2l0aCBkb0N1cmxHbGVtbVNlcnZpY2VzL2luZGV4TGVtbWF0YToKKyAqIAorICogICBJTlBVVDogd29yZGZvcm0gbGlzdCBpbiBbVVRGLThdIDogVVRGLTggaXMgdGhlbiBjb252ZXJ0ZWQgdG8gTGF0MSBmb3IgR2xlbW0sCisgKiAgICAgICAgICB0aGUgb3V0cHV0IG9mIEdsZW1tIFtMYXQxXSBpcyByZXR1cm5lZCB0byB0aGUgR2xlbW1TZXJ2aWNlcyB3aXRob3V0IHJlY29udmVyc2lvbgorICogICAgICAgICAgdG8gVVRGOCBhbmQgaW1wb3J0ZWQgaW50byBEZXJieSBEYXRhYmFzZSB1bmNoYW5nZWQuCisgKgkJCisgKi8KKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNC4xMS4yMSI7IAorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMiI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVQcm9wcwkJPSAiL1dFQi1JTkYvR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIjsKKwkKKwkvLyB0aGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgcmVhZCBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyAodGhlc2UgYXJlIHRoZSBkZWZhdWx0IHZhbHVlcyk6CisJcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggCQk9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCXByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQkJCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJQENvbnRleHQKKwlwcml2YXRlIFNlcnZsZXRDb250ZXh0IHNlcnZsZXRDb250ZXh0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZm91dAk9IG51bGw7CisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmZXJyCT0gbnVsbDsJCQorCQkKKwkvKiAKKyAJICogCisJICogLSBhZnRlciBsb2FkUHJvcGVydGllcywgc2V0cyB0aGUgY2xhc3MgdmFyaWFibGUgd2l0aCBsb2FkZWQgcHJvcGVydHkgdmFsdWVzLgorCSAqIAorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlHU19Xb3JraW5nUGF0aCAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiR1NfV29ya2luZ1BhdGgiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiKTsKKwlmbmFtZVdmcwkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVXZnMiLCAJICAgImdsX3dmc19pbi50eHQiKTsKKwlmbmFtZVdmcwkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lV2ZzOworCWZuYW1lT3V0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZU91dCIsIAkgICAiR2xlbW1TZXJ2aWNlcy5sb2ciKTsKKwlmbmFtZU91dAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lT3V0OworCWZuYW1lRXJyCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUVyciIsIAkgICAiR2xlbW1TZXJ2aWNlcy5lcnIiKTsKKwlmbmFtZUVycgkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lRXJyOworCWZuYW1lU2NyaXB0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVNjcmlwdCIsCSAgICJkb0dsZW1tIik7CisJZm5hbWVTY3JpcHQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVNjcmlwdDsKKwlmbmFtZUxlbWF0YQkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVMZW1hdGEiLCAgICAidG1wL2xlbTMiKTsKKwlmbmFtZUxlbWF0YQkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lTGVtYXRhOworCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyoKKwkgKiAgbG9nX1JlcXVlc3Q6CisJICogIAorCSAqICAtIHdyaXRlIGluZm8gYWJvdXQgQVBJIFJlcXVlc3QuCisJICogIFBhcmFtZXRlcnM6CisJICogIHJlcXVlc3RQYXRoCTogcGF0aCBvZiB3ZWJhcHAgYWRkcmVzc2VkIGJ5IHRoZSByZXF1ZXN0LgorCSAqICBmdW5jCQk6IG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHdoaWNoIGltcGxlbWVudHMgdGhlIHJlcXVlc3QuCisJICogIAorCSAqICAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBsb2dfUmVxdWVzdChTdHJpbmcgcmVxdWVzdFBhdGgsIFN0cmluZyBmdW5jKQorCQorCXsKKwkvLyB0cmFuc2Zvcm0gImRhdGVUdGltZSIgLT4gImRhdGUgdGltZSI6CisJCisJZm91dC5wcmludGYoIiMjI1xuIik7CisJZm91dC5wcmludGYoIiMjIyAlczogJXMgOiB2ZXJzPSclcycsIHZkYXRlPSclcycgcmVxdWVzdD0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdFBhdGgsIHZlcnNpb24sIHZlcnNpb25EYXRlLCAKKwkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCX0gLy8gbG9nX1JlcXVlc3QKKwkJCisJLyogZm9ybWF0RGJOYW1lCisJICogCisJICogLSBnZXRzIG5hbWUgb2YgRGF0YWJhc2UgdXNlZCBieSBEZXJieSBmcm9tIHByb3BzIAorCSAqICAgYW5kIGZvcm1hdCBpdCB0byBIVE1MLgorCSAqICAKKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgU3RyaW5nIGZvcm1hdERiTmFtZShQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlTdHJpbmcKKwkJZGJOYW1lOworCVN0cmluZworCQlkYlBhdGggPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlpbnQKKwkJaiA9IGRiUGF0aC5sYXN0SW5kZXhPZignLycpOworCQorCWlmKCBqID4gMCApCisJCWRiTmFtZSA9IGRiUGF0aC5zdWJzdHJpbmcoaisxKTsKKwllbHNlCisJCWRiTmFtZSA9IGRiUGF0aDsKKwkKKwlyZXR1cm4gZGJOYW1lOyAvLyAiPHA+PGI+RGF0YWJhc2U6ICIgKyBkYk5hbWUgKyAiPC9iPjwvcD5cbiI7CisJfSAvLyBmb3JtYXREYk5hbWUKKworCS8qCisJICogY2xvc2VMb2dTdHJlYW1zOgorCSAqIAorCSAqIC0gY2xvc2UgdGhlIGZvdXQvZmVyciBsb2cgc3RyZWFtcy4KKwkgKiAKKwkgKiAyNi4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBjbG9zZUxvZ1N0cmVhbXMoKQorCQorCXsKKwlpZiggZm91dCAhPSBudWxsKQorCQlmb3V0LmNsb3NlKCk7CisJZm91dCA9IG51bGw7CisJCisJaWYoIGZlcnIgIT0gbnVsbCApCisJCWZlcnIuY2xvc2UoKTsKKwlmZXJyID0gbnVsbDsKKwl9IC8vIGNsb3NlTG9nU3RyZWFtcworCQorCS8qIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisJICogCisJICogLSBsb2FkIEdsZW1tU2VydmljZXMucHJvcGVydGllcywgc2V0cyBHbGVtbVNlcnZpY2VzIGNvbnN0YW50cworCSAqICAgYW5kIGxvZ3MgdGhlIHJlcXVlc3QuCisJICogLSBsb2FkIHByb3BlcnRpZXMgYW5kIHNldCBjb25zdGFudHMgYmVmb3JlIGxvZ2dpbmcgYW55dGhpbmcsIGJlY2F1c2UKKwkgKiAgIGxvZ2dpbmcgd2lsbCBiZSBkb25lIGludG8gdGhlIGxhc3Qgc3Rkb3V0L3N0ZGVyciBvcGVuZWQgaW4gZ2xhc3NmaXNoJ3MgSlZNLAorCSAqICAgZS5nLiBpbiB0aGUgbG9nIG9mIGFub3RoZXIgU2VydmljZS4KKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgUHJvcGVydGllcyBpbml0X2FuZF9sb2dfUmVxdWVzdChTdHJpbmcgZnVuYywgU3RyaW5nIHJlcXVlc3RQYXRoKQorCQorCXsKKwlTdHJpbmcKKwkJcmVhbFBhdGggPSBzZXJ2bGV0Q29udGV4dC5nZXRSZWFsUGF0aChmbmFtZVByb3BzKTsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKGlmIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlQcm9wZXJ0aWVzCisJCXByb3BzID0gVXRpbHMubG9hZFByb3BlcnRpZXMoc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSwgZm5hbWVQcm9wcywgcmVhbFBhdGgsIGZhbHNlKTsKKwkKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gZm91dCBhbmQgZmVyciBhcyByZXBsYWNlbWVudCBmb3Igc3Rkb3V0L3N0ZGVyciBmb3IgdXNlIGluIEdsZW1tU2VydmljZXMuCisJLy8gZG8gbm90IHVzZSBvciByZWRpcmVjdCBTeXN0ZW0ub3V0IGFuZCBTeXN0ZW0uZXJyLCBhcyB0aGV5IHdpbGwgYmUgcmVkaXJlY3RlZAorCS8vIGJ5IG90aGVyIFNlcnZpY2VzIGluIHRoZSBzYW1lIGdsYXNzZmlzaCBKVk0sIGUuZy4gYnkgdGhlIFdmb3JtU2VydmljZXMuCisJZm91dCA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZU91dCk7CisJZmVyciA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZUVycik7CisJCisJLy9VdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQorCWxvZ19SZXF1ZXN0KHJlcXVlc3RQYXRoLCBmdW5jKTsKKwkKKwlyZXR1cm4gcHJvcHM7CisJfSAvLyBpbml0X2FuZF9sb2dfUmVxdWVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCVN0cmluZworCQlzdGF0dXM7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvc3RhdHVzLyIpOworCQorCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCQorCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5wcm9wZXJ0aWVzPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+ZGF0YWJhc2U8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSwKKwkJCQkJCQlzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpID09IG51bGwgPyAibm90IGZvdW5kIiA6CisJCQkJCQkJCXByb3BzLmlzRW1wdHkoKSA/ICJlbXB0eSIgOiAibG9hZGVkIiwKKwkJCQkJCQlmb3JtYXREYk5hbWUocHJvcHMpCisJCQkJCQkJKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIAorCSAqIGRvUE9TVF9pbXBvcnRMZW1tYURhdGE6CisJICogCisJICogUE9TVDogL2luZGV4L2FkZC97ZGF0YWJhc2VuYW1lfTogdGV4dC9wbGFpbgorCSAqIAorCSAqIFBhcmFtZXRlcnM6CisJICogbGlzdAkJIDogdGhlIGxpc3Qgb2Ygd2ZzIHNlbnQgaW4gdGhlIGJvZHkgb2YgdGhlIFBPU1QgcmVxdWVzdC4KKwkgKiBkYnBhdGgJIDogdGhlIGxvY2F0aW9uIG9mIHRoZSBkYXRhYmFzZSB3aGVyZSB0aGUgbGVtbWErd2ZzIGFyZSB0byBiZSBzdG9yZWQuCisJICogTm90ZXMgICAgIDoKKwkgKiAtIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlIGxvY2F0ZWQgYXQgJ2RhdGFiYXNlbmFtZScuCisJICogLSBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZCBpbnRvIGEgRGVyYnkgZGF0YWJhc2UuCisJICogSW5wdXQJIDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICogMDQuMTEuMjEvRkIKKwkgKiAtIHN1Ym1pdHRlZCBkYXRhYmFzZSBwYXRoLgorCSAqLworCQorCUBQYXRoKCJhZGQve2RhdGFiYXNlcGF0aH0iKSAKKwlAUE9TVCAKKwlAQ29uc3VtZXMoInRleHQvcGxhaW4iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCQkJCQkJCSgKKwkJCQkJCQlTdHJpbmcgCQkJCQkJCQlsaXN0LAorCQkJCQkJCUBQYXRoUGFyYW0odmFsdWU9ImRhdGFiYXNlcGF0aCIpIAlmaW5hbCBTdHJpbmcgZGJwYXRoCisJCQkJCQkJKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvUE9TVF9pbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIGFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJCisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2FkZC8iKTsKKwkKKwlmb3V0LnByaW50ZigiSW5mbyA6ICVzOiBzZWxlY3RlZCBkYXRhYmFzZSBwYXRoID0nJXMnLlxuIiwgZnVuYywgZGJwYXRoKTsKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBwb3N0ZWQgbGlzdCA9ICclcycuXG4iLCBmdW5jLCBsaXN0KTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBmb3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKGZlcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMsIGZvdXQsIGZlcnIpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNmw7xocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSwgcHJvcHMsIGRicGF0aCk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJCisJfSAvLyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisKKwkvKiBkb0dFVF92aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzID0gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby8iKTsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCWZpbmFsIFN0cmluZworCQlkYk5hbWUgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5kYXRhYmFzZTwvYj46ICVzPC9wPiIsIGZvcm1hdERiTmFtZShwcm9wcykpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBkYk5hbWUgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIGRvR0VUX3ZpZXdEQkluZm8KKworCisJLyogZG9HRVRfdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+dmVyc2lvbiAiICsgdmVyc2lvbiArICIgdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgcmVxdWVzdCA9ICciICsgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSArICInPC9pPjwvaDQ+XG4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMTo8L2I+IChDMiBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX08L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT57bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKTwvY29kZT48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsPC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+w5ZsP29wdHM9ZmxleCtjb21wK290aGVyK3NwZWM8L2NvZGU+PC9wPiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAyOjwvYj4gKGludGVybmFsIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfT9wcm9wMT1bMDEyXSZhbXA7cHJvcDI9WzAxMl0mYW1wO3NwZWM9WzAxMl08L2NvZGU+ICh3aGVyZSBlYWNoIHByb3AxLCBwcm9wMiwgc3BlYyBpcyBvcHRpb25hbCkuPC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbD9wcm9wMT0wJmFtcDtwcm9wMj0xJmFtcDtzcGVjPTI8L2NvZGU+PC9wPiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Iik7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JyVkJyBwcm9wMj0nJWQnIHNwZWM9JyVkJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCS8qIAorCWZvcihpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwkJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwkJfQkKKwkgKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggbGVtbWFJbmZvLm9wdHNTZXR0aW5nID09IExlbW1hSW5mby5PUFRTX1NFVFRJTkdfQzIgKSAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZywgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxLHByb3AyLHNwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpbnQKKwkJbldmcyA9IGxlbW1hSW5mby5uV2ZzOworCQorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCS8vIGxvZyBvdXRjb21lOgorCWlmKCBuV2ZzIDwgMCApCisJCWZvdXQucHJpbnRmKCJFcnJvcjogJXM6IHJldHVybmluZyAwIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYyk7CisJZWxzZQorCQlmb3V0LnByaW50ZigiRGVidWcuICVzOiByZXR1cm5pbmcgJWQgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jLCBuV2ZzKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogbm90ZToKKwkgKiAtIGlmIEJyb3dzZXIgcmVxdWVzdDogSFRUUFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICd0ZXh0L2h0bWwsLi4ueG1sLi4uJworCSAqIC0gaWYgV2Zvcm1TZXJ2aWNlcyByZXF1ZXN0OiBIdHRwU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ2FwcGxpY2F0aW9uL2pzb24nLgorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICogCisJICogLSBzdWJtaXR0ZWQgVVJMLCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWEsIGlzIGludGVycHJldGVkIGJ5IGdsYXNzZmlzaCBhcworCSAqICAgYmVpbmcgSVNPLTg4NTktMSBlbmNvZGVkLiBXaGVuIHRoZSByZXF1ZXN0IGlzIFVURi04IGVuY29kZWQsIFVtbGF1dHMgYW5kCisJICogICAnw58nIGFyZSBtaXMtaW50ZXJwcmVkZWQsIGxlYWRpbmcgdG8gYW4gZXJyb25lcm91cyByZXF1ZXN0IHRvIHRoZSBEZXJieQorCSAqICAgZGF0YWJhc2UuCisJICogLSBSZXF1ZXN0ZWQgbGVtbWEgJ2xlbW1hJyBoYXMgdG8gYmUgdHJhbnNmb3JtZWQgdG8gVVRGLTggZmlyc3QuCisJICogLSBub3RlOiBldmVuIHdoZW4gc3VibWl0dGluZyB0aGUgR0VUIHJlcXVlc3QgYnkgc3BlY2lmeWluZyAnY2hhcmVuY29kZT1VVEYtOCcsCisJICogICBnbGFzc2Zpc2ggZG9lcyBub3QgY29udmVydCBpdCBhdXRvbWF0aWNhbGx5IGFzIGV4cGVjdGVkLgorCSAqICAgCisJICogIDIyLjEwLjIxL0ZCCisJICogCisJICogLSBpZiBhY2NlcHQ9YXBwbGljYXRpb24vanNvbiByZXR1cm4gVVRGLTggKFdmb3JtU2VydmljZXMpLgorCSAqIC0gZWxzZSBpZiBhY2NlcHQ9dGV4dC9odG1sIGRvIG5vdCB0cmFuc2Zvcm0gY2hhcmFjdGVyIGVuY29kaW5nIChCcm93c2VyKS4KKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQENvbnN1bWVzKCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2h0bWwiKQorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm87CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJZmluYWwgYm9vbGVhbgorCQliRW5jb2RlTGVtbWEgPSBmYWxzZTsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsKKwkKKwkvKiB0ZXN0OgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlpZiggYkVuY29kZUxlbW1hICkKKwkJeworCQkvLyB3aGVuIGFjY2VwdGluZyBKU09OLCB1cmwgaGFzIHRvIGJlIGNvbnZlcnRlZCB0byBVVEYtOCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hOgorCQl0cnkgeworCQkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhuZXcgU3RyaW5nKGxlbW1hLmdldEJ5dGVzKCJJU08tODg1OS0xIiksICJ1dGYtOCIpKTsKKwkJCX0gCisJCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCUxlbW1hUmVzcG9uc2UKKwkJCQlsZW1yZXNwID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtcmVzcCkuYnVpbGQoKTsKKwkJCX0KKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbVVRGLThdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisJZWxzZQorCQl7CisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFt1bmNoYW5nZWRdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisKKwkvKiBkb2VzIG5vdCBoZWxwOgorCSBTdHJpbmcKKwkgCXJlcXVlc3RDaGFyRW5jb2RpbmcgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0Q2hhcmFjdGVyRW5jb2RpbmcoKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlcXVlc3QgY2hhcmFjdGVyIGVuY29kaW5nID0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdENoYXJFbmNvZGluZyk7CisJKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJeworCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCS8vcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQl9CisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOwkKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJLyoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3Rlc3QvaW5mby8iKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vZm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQlmb3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNGEvYzAzODBjMjlhNTJhMDAxYzFjNDFjZTU1OWVhNWUxNmIgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzRhL2MwMzgwYzI5YTUyYTAwMWMxYzQxY2U1NTllYTVlMTZiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MmI3MGQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzRhL2MwMzgwYzI5YTUyYTAwMWMxYzQxY2U1NTllYTVlMTZiCkBAIC0wLDAgKzEsNjUwIEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNi4xMC4yMSI7IC8vIjE3LjA2LjIwIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjEiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKQorCQorCXsKKwkJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwkJU3RyaW5nCisJCQlzdGF0dXM7CisJCVV0aWxzCisJCQl1ID0gbmV3IFV0aWxzKCk7CisJCQorCQkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwkJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisJCVN5c3RlbS5vdXQucHJpbnRmKCJBUEk6ICVzOiAvaW5kZXgvc3RhdHVzLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisKKwkJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogUE9TVDogL2luZGV4L2FkZC86IHRleHQvcGxhaW4KKwkgKiBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZS4KKwkgKiBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZAorCSAqIGludG8gdGhlIGRhdGFiYXNlLgorCSAqIElucHV0OiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKi8KKwlAUGF0aCgiYWRkIikgQFBPU1QgQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGltcG9ydExlbW1hRGF0YShTdHJpbmcgbGlzdCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIGFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJCisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9hZGQvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNm77+9aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJfQorCisJLyogdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gdmlld0RCSW5mbworCisKKwkvKiB2aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIiAtIFN0YXR1czogPGk+V29yayBpbiBwcm9ncmVzcy4uLiE8L2k+KTwvaDQ+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCAhb3B0aW9ucy5lcXVhbHMoInVuZGVmIikpCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxL3Byb3AyL3NwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBHbGVtbVNlcnZpY2VzICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb25EYXRlLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJLy9TeXN0ZW0ub3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNGMvYzA5NjVlOTY0MjNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzRjL2MwOTY1ZTk2NDIzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMGZkNGMKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzRjL2MwOTY1ZTk2NDIzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsOTY1IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKKy8qIDAuMSA6IDE3LjA2LjIwL0ZCIAorICogMC4yIDogMjUuMTAuMjEvRkIKKyAqICAgICAgIGxvZ2luZyBvZiB0aGUgQVBJIFJlcXVlc3RzLgorICogICAgICAgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisgKiAgICAgICBjb3JyZWN0aW5nIGNhbGxpbmcgb2YgbGVtbWEgKyBwcm9wMS9wcm9wMi9zcGVjLgorICogICAgICAgaGFuZGxpbmcgb2YgbGVtbWF0YSB3aXRoICfDnycuCisgKiAKKyAqIEdlbmVyYWwgY29tbWVudHMgdG8gdGhlIGVuY29kaW5nIG9mIGRlcml2YXRpb25zIGZyb20gbGVtbWEgdG8gd2ZzIGFuZCBob3cgdGhleSBhcmUgZW5jb2RlZAorICogaW4gdGhlIERlcmJ5IGRhdGFiYXNlOgorICogCisgKiBHTEVNTSBlbmNvZGluZzogIAorICogICBfIF8gOiArRmxleCAgICAgICDDlmxlIC0+IMOWbCAgICAgIAorICogICArIF8gOiArQ29tcCAgICAgICDDlmxsYW1wZSAtPiDDlmwgb3IgTGFtcGUgKGNvbXBvdW5kKS4KKyAqICAgXyArIDogK290aGVyICAgICAgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm5zY2h1aCAobm8gY29tcG91bmQgZm9yICdUdXJuc2NodWgnLCBvbmx5IHByZWZpeCkuCisgKiAgICsgKyA6ICtDb21wK290aGVyIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuICsgU2NodWggKGNvbXBvdW5kIGZvciAnU2NodWgnICsgUHJlZml4KS4KKyAqIEMyIGxlbW1hdGl6YXRpb24gb3B0aW9uczoKKyAqICAgRmxleCAgKGlkZW50aWNhbCB0byBHbGVtbSkKKyAqICAgQ29tcCAgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKQorICogICBPdGhlciAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpLgorICogICBTcGVjICAob25seSBDMjogaW5jbHVkZXMgYWxsIHdmcyB3aXRoIGhpcGhlbiBhbmQvb3Igc29tZSBub24tYWxwaGFiZXRpYyBJU084ODU5LTEgY2hhcnMpCisgKiAgICAgICAgIEUuZy4gw5ZsLUV4cG9ydGUsICJNYXJrZW4iLcOWbGUuCisgKiBEZXJieSBFbmNvZGluZzoKKyAqICBwcm9wMSAJcHJvcDIJc3BlYyAgIAltZWFuaW5nIGluIEMyOgorICogIDAJCTAJCS0JCUZsZXgKKyAqICAxCQkwCQktCQlDb21wCisgKiAgMAkJMQkJLQkJT3RoZXIgKHByZWZpeCkKKyAqICAxCQkxCQktCQlDb21wICsgT3RoZXIKKyAqICAtCQktCQkwCQktU3BlYworICogIC0JCS0JCTEJCStTcGVjCisgKiAKKyAqIEV4YW1wbGVzOgorICogJlNjaHVoCQkJOiBTY2h1aCwgU2NodWhlLCAuLi4gb25seSBmbGV4aW9ucworICogJlNjaHVoK2NvbXAJCTogU2NodWhlLCBUdXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMuCisgKiAmU2NodWgrb3RoZXIJCTogU2NodWhlLCBBbnRpc2NodWhlLi4uIGZsZXhpb25zIGFuZCBwcmVmaXhlZCB3ZnMgKG5vIGNvbXBvdW5kcykuCisgKiAmU2NodWgrY29tcCtvdGhlcjogU2NodWhlLCBBbnRpc2NodWhlLCBUdXJuc2NodWhlLCBBbnRpdHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzIGFuZCAKKyAqIAkJCQkJICBwcmVmaXhlZCBzaW5nbGUgd2ZzIChBbnRpc2NodWhlKSBhbmQgcHJlZml4ZWQgY29tcG91bmRzLgorICogJlNjaHVoK3NwZWMJCTogIkFudGkiLVNjaHVoZSwgNjhnZXItU2NodWhlLi4uIG1heSBiZSBjb21iaW5lZCB3aXRoIGV2ZXJ5IG9wdGlvbnM6IGFkZHMKKyAqICAgICAgICAgICAgICAgICAgICB3ZnMgd2l0aCBoeXBoZW4gYW5kL29yIG5vbi1hbHBoYWJldGljIGNoYXJzLgorICogCisgKiBDb252ZXJzaW9uIHJ1bGVzOgorICogCisgKiAgJnNjaGxpZcOfZW4gLT4gaW50ZXJuYWwgc2VhcmNoIGZvciAnc2NobGllc3NlbicsCisgKiAgYmVjYXVzZSBHbGVtbSBvdXRwdXRzICdzcycgZm9yICfDnycuCisgKiAgCisgKiBDaGFyYWN0ZXIgRW5jb2Rpbmc6CisgKiAKKyAqIC0gV2hlbiBpbXBvcnRpbmcgd2ZzIHRvIHRoZSBEZXJieSBEYXRhYmFzZSB3aXRoIGRvQ3VybEdsZW1tU2VydmljZXMvaW5kZXhMZW1tYXRhOgorICogCisgKiAgIElOUFVUOiB3b3JkZm9ybSBsaXN0IGluIFtVVEYtOF0gOiBVVEYtOCBpcyB0aGVuIGNvbnZlcnRlZCB0byBMYXQxIGZvciBHbGVtbSwKKyAqICAgICAgICAgIHRoZSBvdXRwdXQgb2YgR2xlbW0gW0xhdDFdIGlzIHJldHVybmVkIHRvIHRoZSBHbGVtbVNlcnZpY2VzIHdpdGhvdXQgcmVjb252ZXJzaW9uCisgKiAgICAgICAgICB0byBVVEY4IGFuZCBpbXBvcnRlZCBpbnRvIERlcmJ5IERhdGFiYXNlIHVuY2hhbmdlZC4KKyAqCQkKKyAqLworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA0LjExLjIxIjsgCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4yIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVByb3BzCQk9ICIvV0VCLUlORi9HbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiOworCQorCS8vIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSByZWFkIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzICh0aGVzZSBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzKToKKwlwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCAJCT0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCXByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCQkJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwlAQ29udGV4dAorCXByaXZhdGUgU2VydmxldENvbnRleHQgc2VydmxldENvbnRleHQ7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmb3V0CT0gbnVsbDsKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZlcnIJPSBudWxsOwkJCisJCQorCS8qIAorIAkgKiAKKwkgKiAtIGFmdGVyIGxvYWRQcm9wZXJ0aWVzLCBzZXRzIHRoZSBjbGFzcyB2YXJpYWJsZSB3aXRoIGxvYWRlZCBwcm9wZXJ0eSB2YWx1ZXMuCisJICogCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCUdTX1dvcmtpbmdQYXRoIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJHU19Xb3JraW5nUGF0aCIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyIpOworCWZuYW1lV2ZzCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVdmcyIsIAkgICAiZ2xfd2ZzX2luLnR4dCIpOworCWZuYW1lV2ZzCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVXZnM7CisJZm5hbWVPdXQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lT3V0IiwgCSAgICJHbGVtbVNlcnZpY2VzLmxvZyIpOworCWZuYW1lT3V0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVPdXQ7CisJZm5hbWVFcnIJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lRXJyIiwgCSAgICJHbGVtbVNlcnZpY2VzLmVyciIpOworCWZuYW1lRXJyCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVFcnI7CisJZm5hbWVTY3JpcHQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lU2NyaXB0IiwJICAgImRvR2xlbW0iKTsKKwlmbmFtZVNjcmlwdAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lU2NyaXB0OworCWZuYW1lTGVtYXRhCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUxlbWF0YSIsICAgICJ0bXAvbGVtMyIpOworCWZuYW1lTGVtYXRhCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVMZW1hdGE7CisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKgorCSAqICBsb2dfUmVxdWVzdDoKKwkgKiAgCisJICogIC0gd3JpdGUgaW5mbyBhYm91dCBBUEkgUmVxdWVzdC4KKwkgKiAgUGFyYW1ldGVyczoKKwkgKiAgcmVxdWVzdFBhdGgJOiBwYXRoIG9mIHdlYmFwcCBhZGRyZXNzZWQgYnkgdGhlIHJlcXVlc3QuCisJICogIGZ1bmMJCTogbmFtZSBvZiB0aGUgZnVuY3Rpb24gd2hpY2ggaW1wbGVtZW50cyB0aGUgcmVxdWVzdC4KKwkgKiAgCisJICogIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGxvZ19SZXF1ZXN0KFN0cmluZyByZXF1ZXN0UGF0aCwgU3RyaW5nIGZ1bmMpCisJCisJeworCS8vIHRyYW5zZm9ybSAiZGF0ZVR0aW1lIiAtPiAiZGF0ZSB0aW1lIjoKKwkKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwlmb3V0LnByaW50ZigiIyMjICVzOiAlcyA6IHZlcnM9JyVzJywgdmRhdGU9JyVzJyByZXF1ZXN0PSclcycuXG4iLCBmdW5jLCByZXF1ZXN0UGF0aCwgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIAorCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisJZm91dC5wcmludGYoIiMjI1xuIik7CisJfSAvLyBsb2dfUmVxdWVzdAorCQkKKwkvKiBmb3JtYXREYk5hbWUKKwkgKiAKKwkgKiAtIGdldHMgbmFtZSBvZiBEYXRhYmFzZSB1c2VkIGJ5IERlcmJ5IGZyb20gcHJvcHMgCisJICogICBhbmQgZm9ybWF0IGl0IHRvIEhUTUwuCisJICogIAorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBTdHJpbmcgZm9ybWF0RGJOYW1lKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCVN0cmluZworCQlkYk5hbWU7CisJU3RyaW5nCisJCWRiUGF0aCA9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCWludAorCQlqID0gZGJQYXRoLmxhc3RJbmRleE9mKCcvJyk7CisJCisJaWYoIGogPiAwICkKKwkJZGJOYW1lID0gZGJQYXRoLnN1YnN0cmluZyhqKzEpOworCWVsc2UKKwkJZGJOYW1lID0gZGJQYXRoOworCQorCXJldHVybiBkYk5hbWU7IC8vICI8cD48Yj5EYXRhYmFzZTogIiArIGRiTmFtZSArICI8L2I+PC9wPlxuIjsKKwl9IC8vIGZvcm1hdERiTmFtZQorCisJLyoKKwkgKiBjbG9zZUxvZ1N0cmVhbXM6CisJICogCisJICogLSBjbG9zZSB0aGUgZm91dC9mZXJyIGxvZyBzdHJlYW1zLgorCSAqIAorCSAqIDI2LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGNsb3NlTG9nU3RyZWFtcygpCisJCisJeworCWlmKCBmb3V0ICE9IG51bGwpCisJCWZvdXQuY2xvc2UoKTsKKwlmb3V0ID0gbnVsbDsKKwkKKwlpZiggZmVyciAhPSBudWxsICkKKwkJZmVyci5jbG9zZSgpOworCWZlcnIgPSBudWxsOworCX0gLy8gY2xvc2VMb2dTdHJlYW1zCisJCisJLyogaW5pdF9hbmRfbG9nX1JlcXVlc3QKKwkgKiAKKwkgKiAtIGxvYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLCBzZXRzIEdsZW1tU2VydmljZXMgY29uc3RhbnRzCisJICogICBhbmQgbG9ncyB0aGUgcmVxdWVzdC4KKwkgKiAtIGxvYWQgcHJvcGVydGllcyBhbmQgc2V0IGNvbnN0YW50cyBiZWZvcmUgbG9nZ2luZyBhbnl0aGluZywgYmVjYXVzZQorCSAqICAgbG9nZ2luZyB3aWxsIGJlIGRvbmUgaW50byB0aGUgbGFzdCBzdGRvdXQvc3RkZXJyIG9wZW5lZCBpbiBnbGFzc2Zpc2gncyBKVk0sCisJICogICBlLmcuIGluIHRoZSBsb2cgb2YgYW5vdGhlciBTZXJ2aWNlLgorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBQcm9wZXJ0aWVzIGluaXRfYW5kX2xvZ19SZXF1ZXN0KFN0cmluZyBmdW5jLCBTdHJpbmcgcmVxdWVzdFBhdGgpCisJCisJeworCVN0cmluZworCQlyZWFsUGF0aCA9IHNlcnZsZXRDb250ZXh0LmdldFJlYWxQYXRoKGZuYW1lUHJvcHMpOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAoaWYgbGFzdCBwYXJhbSA9IHRydWUpOgorCVByb3BlcnRpZXMKKwkJcHJvcHMgPSBVdGlscy5sb2FkUHJvcGVydGllcyhzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpLCBmbmFtZVByb3BzLCByZWFsUGF0aCwgZmFsc2UpOworCQorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBmb3V0IGFuZCBmZXJyIGFzIHJlcGxhY2VtZW50IGZvciBzdGRvdXQvc3RkZXJyIGZvciB1c2UgaW4gR2xlbW1TZXJ2aWNlcy4KKwkvLyBkbyBub3QgdXNlIG9yIHJlZGlyZWN0IFN5c3RlbS5vdXQgYW5kIFN5c3RlbS5lcnIsIGFzIHRoZXkgd2lsbCBiZSByZWRpcmVjdGVkCisJLy8gYnkgb3RoZXIgU2VydmljZXMgaW4gdGhlIHNhbWUgZ2xhc3NmaXNoIEpWTSwgZS5nLiBieSB0aGUgV2Zvcm1TZXJ2aWNlcy4KKwlmb3V0ID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lT3V0KTsKKwlmZXJyID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lRXJyKTsKKwkKKwkvL1V0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCisJbG9nX1JlcXVlc3QocmVxdWVzdFBhdGgsIGZ1bmMpOworCQorCXJldHVybiBwcm9wczsKKwl9IC8vIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJU3RyaW5nCisJCXN0YXR1czsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9zdGF0dXMvIik7CisJCisJLy8gaHR0cFNlcnZsZXRSZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKGVudik7CisJCisJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnByb3BlcnRpZXM8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5kYXRhYmFzZTwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpLAorCQkJCQkJCXNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcykgPT0gbnVsbCA/ICJub3QgZm91bmQiIDoKKwkJCQkJCQkJcHJvcHMuaXNFbXB0eSgpID8gImVtcHR5IiA6ICJsb2FkZWQiLAorCQkJCQkJCWZvcm1hdERiTmFtZShwcm9wcykKKwkJCQkJCQkpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCWNsb3NlTG9nU3RyZWFtcygpOworCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogCisJICogZG9QT1NUX2ltcG9ydExlbW1hRGF0YToKKwkgKiAKKwkgKiBQT1NUOiAvaW5kZXgvYWRkLzogdGV4dC9wbGFpbgorCSAqIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlLgorCSAqIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkCisJICogaW50byB0aGUgZGF0YWJhc2UuCisJICogSW5wdXQ6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqLworCQorCUBQYXRoKCJhZGQve2RhdGFiYXNlbmFtZSIpIAorCUBQT1NUIAorCUBDb25zdW1lcygidGV4dC9wbGFpbiIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhKAorCQkJCQkJCVN0cmluZyAJCQkJCQlsaXN0LAorCQkJCQkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCWZpbmFsIFN0cmluZyBkYm5hbWUKKwkJCQkJCQkpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9QT1NUX2ltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gYXJMaXN0ID0gbGlzdC5zcGxpdCgiXG4iKTsKKwkKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IGZzLmdldFBhdGgoZm5hbWVXZnMpOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvYWRkLyIpOworCQorCS8vIFdyaXRlIHN1Ym1pdHRlZCBsaXN0IG9mIHdvcmRmb3JtcyB0byBmaWxlOgorCXRyeQorCQl7CisJCW9zID0gRmlsZXMubmV3T3V0cHV0U3RyZWFtKHApOworCQlvcy53cml0ZShsaXN0LmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSkpOworCSAgICBvcy5jbG9zZSgpOworCSAgICBiRG9uZSA9IHRydWU7CisJICAgIGZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGZpbGUgJyVzJyBiZXNjaHJpZWJlbi5cbiIsIGZ1bmMsIGZuYW1lV2ZzKTsKKwkgICAgfQorCWNhdGNoKElPRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoZmVycik7CisJCX0KKyAgICAKKwlpZiggYkRvbmUgKQorCQltc2cgPSAiPHA+TGlzdCB3cml0dGVuIHRvIGZpbGU6ICIgKyBwLnRvU3RyaW5nKCkgKyAiPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+PGI+RmlsZSBFcnJvcjogPC9iPiBjYW5ub3Qgd3JpdGUgdG8gIiArIHAudG9TdHJpbmcoKSArICIhPC9wPiI7CisJCisJLyoKKwkgKiAgZXhlY3V0ZSBHbGVtbSBzaGVsbCBzY3JpcHQ6CisJICovCisJU3RyaW5nCisJCW1zZ0dsZW1tU2NyaXB0LCBtc2dJbXBvcnQ7CisJaW50IAorCQlyID0gVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0KGZuYW1lU2NyaXB0LCBmbmFtZVdmcywgZm91dCwgZmVycik7CisJCisJaWYoIHIgPT0gMCApCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEF1c2bDvGhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhLCBwcm9wcyk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJCisJfSAvLyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisKKwkvKiBkb0dFVF92aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzID0gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby8iKTsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCWZpbmFsIFN0cmluZworCQlkYk5hbWUgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5kYXRhYmFzZTwvYj46ICVzPC9wPiIsIGZvcm1hdERiTmFtZShwcm9wcykpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBkYk5hbWUgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIGRvR0VUX3ZpZXdEQkluZm8KKworCisJLyogZG9HRVRfdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+dmVyc2lvbiAiICsgdmVyc2lvbiArICIgdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgcmVxdWVzdCA9ICciICsgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSArICInPC9pPjwvaDQ+XG4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMTo8L2I+IChDMiBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX08L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT57bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKTwvY29kZT48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsPC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+w5ZsP29wdHM9ZmxleCtjb21wK290aGVyK3NwZWM8L2NvZGU+PC9wPiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAyOjwvYj4gKGludGVybmFsIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfT9wcm9wMT1bMDEyXSZhbXA7cHJvcDI9WzAxMl0mYW1wO3NwZWM9WzAxMl08L2NvZGU+ICh3aGVyZSBlYWNoIHByb3AxLCBwcm9wMiwgc3BlYyBpcyBvcHRpb25hbCkuPC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbD9wcm9wMT0wJmFtcDtwcm9wMj0xJmFtcDtzcGVjPTI8L2NvZGU+PC9wPiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Iik7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JyVkJyBwcm9wMj0nJWQnIHNwZWM9JyVkJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCS8qIAorCWZvcihpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwkJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwkJfQkKKwkgKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggbGVtbWFJbmZvLm9wdHNTZXR0aW5nID09IExlbW1hSW5mby5PUFRTX1NFVFRJTkdfQzIgKSAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZywgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxLHByb3AyLHNwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpbnQKKwkJbldmcyA9IGxlbW1hSW5mby5uV2ZzOworCQorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCS8vIGxvZyBvdXRjb21lOgorCWlmKCBuV2ZzIDwgMCApCisJCWZvdXQucHJpbnRmKCJFcnJvcjogJXM6IHJldHVybmluZyAwIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYyk7CisJZWxzZQorCQlmb3V0LnByaW50ZigiRGVidWcuICVzOiByZXR1cm5pbmcgJWQgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jLCBuV2ZzKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogbm90ZToKKwkgKiAtIGlmIEJyb3dzZXIgcmVxdWVzdDogSFRUUFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICd0ZXh0L2h0bWwsLi4ueG1sLi4uJworCSAqIC0gaWYgV2Zvcm1TZXJ2aWNlcyByZXF1ZXN0OiBIdHRwU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ2FwcGxpY2F0aW9uL2pzb24nLgorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICogCisJICogLSBzdWJtaXR0ZWQgVVJMLCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWEsIGlzIGludGVycHJldGVkIGJ5IGdsYXNzZmlzaCBhcworCSAqICAgYmVpbmcgSVNPLTg4NTktMSBlbmNvZGVkLiBXaGVuIHRoZSByZXF1ZXN0IGlzIFVURi04IGVuY29kZWQsIFVtbGF1dHMgYW5kCisJICogICAnw58nIGFyZSBtaXMtaW50ZXJwcmVkZWQsIGxlYWRpbmcgdG8gYW4gZXJyb25lcm91cyByZXF1ZXN0IHRvIHRoZSBEZXJieQorCSAqICAgZGF0YWJhc2UuCisJICogLSBSZXF1ZXN0ZWQgbGVtbWEgJ2xlbW1hJyBoYXMgdG8gYmUgdHJhbnNmb3JtZWQgdG8gVVRGLTggZmlyc3QuCisJICogLSBub3RlOiBldmVuIHdoZW4gc3VibWl0dGluZyB0aGUgR0VUIHJlcXVlc3QgYnkgc3BlY2lmeWluZyAnY2hhcmVuY29kZT1VVEYtOCcsCisJICogICBnbGFzc2Zpc2ggZG9lcyBub3QgY29udmVydCBpdCBhdXRvbWF0aWNhbGx5IGFzIGV4cGVjdGVkLgorCSAqICAgCisJICogIDIyLjEwLjIxL0ZCCisJICogCisJICogLSBpZiBhY2NlcHQ9YXBwbGljYXRpb24vanNvbiByZXR1cm4gVVRGLTggKFdmb3JtU2VydmljZXMpLgorCSAqIC0gZWxzZSBpZiBhY2NlcHQ9dGV4dC9odG1sIGRvIG5vdCB0cmFuc2Zvcm0gY2hhcmFjdGVyIGVuY29kaW5nIChCcm93c2VyKS4KKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQENvbnN1bWVzKCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2h0bWwiKQorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm87CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJZmluYWwgYm9vbGVhbgorCQliRW5jb2RlTGVtbWEgPSBmYWxzZTsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsKKwkKKwkvKiB0ZXN0OgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlpZiggYkVuY29kZUxlbW1hICkKKwkJeworCQkvLyB3aGVuIGFjY2VwdGluZyBKU09OLCB1cmwgaGFzIHRvIGJlIGNvbnZlcnRlZCB0byBVVEYtOCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hOgorCQl0cnkgeworCQkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhuZXcgU3RyaW5nKGxlbW1hLmdldEJ5dGVzKCJJU08tODg1OS0xIiksICJ1dGYtOCIpKTsKKwkJCX0gCisJCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCUxlbW1hUmVzcG9uc2UKKwkJCQlsZW1yZXNwID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtcmVzcCkuYnVpbGQoKTsKKwkJCX0KKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbVVRGLThdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisJZWxzZQorCQl7CisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFt1bmNoYW5nZWRdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisKKwkvKiBkb2VzIG5vdCBoZWxwOgorCSBTdHJpbmcKKwkgCXJlcXVlc3RDaGFyRW5jb2RpbmcgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0Q2hhcmFjdGVyRW5jb2RpbmcoKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlcXVlc3QgY2hhcmFjdGVyIGVuY29kaW5nID0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdENoYXJFbmNvZGluZyk7CisJKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJeworCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCS8vcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQl9CisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOwkKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJLyoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3Rlc3QvaW5mby8iKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vZm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQlmb3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNGUvYjA5ZGRmNTI1ZDNlMDAxYzEwMzVjMWVhZjM4YWY1OTAgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzRlL2IwOWRkZjUyNWQzZTAwMWMxMDM1YzFlYWYzOGFmNTkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYjJhZjMKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzRlL2IwOWRkZjUyNWQzZTAwMWMxMDM1YzFlYWYzOGFmNTkwCkBAIC0wLDAgKzEsODA4IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKK2ltcG9ydCBqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7CitpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitwdWJsaWMgY2xhc3MgR2xlbW1EQgorCit7CisJc3RhdGljIHB1YmxpYyBTdHJpbmcgZGJUYWJsZSAJPSAiR2xlbW1MZW1tYXRhIjsKKwlzdGF0aWMgU3RyaW5nIGRiTGVtbWEgCQkgCT0gImxlbW1hIjsKKwlzdGF0aWMgU3RyaW5nIGRiV2YJIAkJCT0gIndmIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDEgCQkJPSAicHJvcDEiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMiAJCQk9ICJwcm9wMiI7CisKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKG92ZXJ3cml0dGVuIGJ5IEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZuYW1lREIgPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgc2VydmVySG9zdCA9ICIvL2xvY2FsaG9zdDoxNTI3LyI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChmaW5hbCBhc3NpZ25tZW50cyk6CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyRW1iID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZERyaXZlciI7CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyQ2xpZW50ID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREcml2ZXIiOworCisJZmluYWwgc3RhdGljIGJvb2xlYW4KKwkJdXNlUHJlcGFyZWRTdG10ID0gdHJ1ZTsgLy8gMT11c2UgUHJlcGFyZWRTdGF0ZW1lbnQgYW5kIG5vdCBTdGF0ZW1lbnQuCisJCisJLy8gdmFsdWVzIHRvIGJlIGluc2VydGVkOiBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYy4KKwlzdGF0aWMgU3RyaW5nIGluc2VydFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKCclcycsICclcycsICclcycsICclcycsICclcycpIjsKKwlzdGF0aWMgU3RyaW5nIGluc2VydFByZXBhcmVkUXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoPywgPywgPywgPywgPykiOworCQorCS8vIENvbnN0YW50cyBvZiB0YWJsZSBHbGVtbUxlbW1hdGE6CisJc3RhdGljIGZpbmFsIGludCBtYXhMZW1tYVNpemUJPSA2NDsgCS8vIG1heC4gbm8uIG9mIGNoYXJzLCBhcyBkZWNsYXJlZCBpbiB0YWJsZSBHbGVtbUxlbW1hdGEuCisJc3RhdGljIGZpbmFsIGludCBtYXhXZlNpemUJCT0gNjQ7CS8vIG1heC4gbm8uIG9mIGNoYXJzLCBhcyBkZWNsYXJlZCBpbiB0YWJsZSBHbGVtbUxlbW1hdGEuCisJCisJLyogdmFyaWFibGVzICovCisJc3RhdGljIGludCBuRXhjZXB0U3RtdAkJCT0gMDsJLy8gY291bnQgbm8uIG9mIGV4Y2VwdGlvbnMgZm9yIHByZXBhcmVkU3RtdC4KKwlzdGF0aWMgaW50IG5FeGNlcHRJbnNlcnQJCT0gMDsJLy8gY291bnQgbm8uIG9mIGV4Y2VwdGlvbnMgZm9yIEluc2VydHMuCisJCisJLyoKKwkgKiBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkgKiAKKwkgKiBBcmd1bWVudHM6CisJICogcHJvcHMJOiBQcm9wZXJ0aWVzIGxvYWRlZCBieSB0aGUgR2xlbW1TZXJ2aWNlcy4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgZnVuY3Rpb24gbG9hZHMgb25seSB0aG9zZSBDb25zdGFudHMgbmVlZGVkIGluIHRoaXMgY2xhc3MuCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzCXByb3BzKQorCQorCXsKKwlmbmFtZURCCQkgCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAJIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCXNlcnZlckhvc3QJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgInNlcnZlckhvc3QiLAkiLy9sb2NhbGhvc3Q6MTUyNy8iKTsKKwlkZXJieURCVVJMIAkJPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJCQkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qICAgIGNoZWNrRGVyYnlDb25uZWN0aW9uOgorCSAqIAorCSAqIGNoZWNrIGlmIERlcmJ5IE5ldHdvcmsgU2VydmVyIGlzIGF2YWlsYWJsZS4KKwkgKiBSZXR1cm5zOiAwICg9T0spIG9yIC0xIChvbiBlcnJvcikuCisJICogMDUuMTEuMjEvRkIKKwkgKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBjaGVja0RlcmJ5Q29ubmVjdGlvbigpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJjaGVja0RlcmJ5Q29ubmVjdGlvbiI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2UsCisJLy8gc2V0IEF1dG9jb21taXQgPSBmYWxzZSB0byBhY2NlbGVyYXRlIGluc2VydGlvbnM6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nIHRvICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3RpbmcgZmFpbGVkIVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCWZpbmFsbHkgCisJCXsgCisJCXRyeSB7IC8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGNoZWNrX0RlcmJ5Q29ubmVjdGlvbgorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIHdoZW4gaW5kZXhpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSwgc2VsZWN0IHRoZSBzdWJtaXR0ZWQgZGJwYXRoLAorCS8vIChub3QgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZGJwYXRoOworCQorCS8vIG9wZW4gcmVhZGVyIG9uIEdsZW1tIExlbW1hdGE6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJCisJCW5FcnJvcnMgPSB3cml0ZURCTGVtbWF0YShpbik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIGZyb20gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwkvLyBjbG9zZSBSZWFkZXI6CisJdHJ5IHsKKwkJaW4uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQluRXJyb3JzID0gLTE7CisJCX0KKwkKKyAJaWYoIG5FcnJvcnMgPT0gMCApCisgCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydCBkb25lIHN1Y2Nlc3NmdWxseS5cbiIsIGZ1bmMpOworIAllbHNlCisgCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydDogJWQgRXJyb3JzIVxuIiwgZnVuYywgbkVycm9ycyk7CisgCQorCXJldHVybiBuRXJyb3JzOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhCisJCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAorCSAqICAgICAgICAgICAgICAgICAgICAgICB3cml0ZURCTGVtbWF0YSgpCisJICogICAgICAgICAgICAgICAgICAgICAgIAorCSAqIHN0b3JlcyBsaXN0IG9mIGxlbW1hdGEgKyBpbmZvcyBpbnRvIERlcmJ5IGRiLgorCSAqIEZpbGUgZm9ybWF0OiAiTGVtbWEgRGVjb21wb3NpdGlvbiBXZiIsCisJICogICAgICAgICAgICAgIGUuZy46ICJIw6R1c2VyICstIEhhdXMiLgorCSAqIFJldHVybnM6IDAgPSBPSyBvciAKKwkgKiAJCQktMTogU1FMIGluc2VydCBlcnJvciwgb3IKKwkgKiAJCQktMjogY29ubmVjdGlvbiBlcnJvciB0byBEZXJieSBTZXJ2ZXIsIG9yCisJICogCQkgICA+IDA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogMDkuMDEuMjAvRkIKKwkgKiAwNC4xMS4yMS9GQiB0dXJuIGF1dG9jb21taXQgb2ZmIHRvIGFjY2VsZXJhdGUgaHVnZSBhbW91bnQgb2YgaW5zZXJ0aW9ucy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hdGEoQnVmZmVyZWRSZWFkZXIgaW4pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWF0YSI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlQcmVwYXJlZFN0YXRlbWVudAorCQlzdG10UHJlcCA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgCSA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CQorCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCW5JbnNlcnRlZCA9IDAsCS8vIG5vLiBvZiBsZW1tYS93ZiBwYWlycyBpbXBvcnRlZC4KKwkJcmV0ID0gMDsgLy8gT0suCisJYm9vbGVhbgorCQljb250YWluc1NwZWM7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlLAorCS8vIHNldCBBdXRvY29tbWl0ID0gZmFsc2UgdG8gYWNjZWxlcmF0ZSBpbnNlcnRpb25zOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQljb24uc2V0QXV0b0NvbW1pdChmYWxzZSk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkIChhdXRvQ29tbWl0PW9mZikuXG4iLCBmdW5jKTsKKwkJCisJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJc3RtdFByZXAgPSBjb24ucHJlcGFyZVN0YXRlbWVudChpbnNlcnRQcmVwYXJlZFF1ZXJ5KTsKKwkJZWxzZQorCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKworCQl3aGlsZSggKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggIT0gMyApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogJyVzJyBoYXMgJWQgY29tcG9uZW50cyEgRXhwZWN0ZWQgPSAzISBDYW5ub3QgYmUgc3RvcmVkIVxuIiwgZnVuYywgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQkJbkVycm9ycysrOworCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQorCQkJLy8gR2V0IEluZm8sIGlmIHdvcmRmb3JtIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSAnLScsIGludGVycHVuY3Rpb24gZXRjLjoKKwkJCS8vIGxlbW1hSW5mb1syXSA9IHdvcmRmb3JtLgorCQkJY29udGFpbnNTcGVjID0gTGVtbWFJbmZvLmlzV2ZTcGVjaWFsQ2FzZShsZW1tYUluZm9bMl0pOworCQkJLy8gc3RvcmUgaW50byBEQjoKKwkJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKHN0bXRQcmVwLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJZWxzZQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zKHN0bXQsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQkKKwkJCWlmKCByZXQgIT0gMCApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHN0b3JlIGxlbW1hICclcycgaW50byBEQiEgKHJldD0lZClcbiIsIGZ1bmMsIGxpbmUsIHJldCk7CisJCQkJbkVycm9ycysrOyAKKwkJCQl9CisJCQllbHNlCisJCQkJbkluc2VydGVkKys7CisJCQl9IC8vIHdoaWxlCisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIEdsZW1tIGxlbW1hdGEraW5mb3MgZnJvbSBmaWxlISBFeGl0IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMjsgCisJCX0JCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCWZpbmFsbHkgCisJCXsgCisJCXRyeSB7CisJCQkvLyBpbXBvcnRhbnQ6IG5vdyBjb21taXQsIGFzIGF1dG9Db21taXQgaXMgZGVhY3RpdmF0ZWQsCisJCQkvLyB0aGlzIGFsc28gcmVtb3ZlcyBkYXRhYmFzZSBsb2NrczoKKwkJCWNvbi5jb21taXQoKTsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29tbWl0IHN1Y2Nlc3NmdWxsLlxuIiwgZnVuYyk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29tbWl0IGF0IHRoZSBlbmQgb2YgdGhlIHdmcyBsaXN0IGZhaWxlZCFcbiIsIGZ1bmMpOworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQkKKwkJdHJ5IHsgLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQkJaWYoIGNvbiAhPSBudWxsICkgCisJCQkJY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgCisJCQkJc3RtdC5jbG9zZSgpOworCQkJaWYoIHN0bXRQcmVwICE9IG51bGwgKSAKKwkJCQlzdG10UHJlcC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJJbmZvIDogJXM6IG5vLiBvZiBsZW1tYXRhL3dmIHBhaXJzIGluc2VydGVkID0gJWQuXG4iLCBmdW5jLCBuSW5zZXJ0ZWQpOworCQorCXJldHVybiBuRXJyb3JzOyAvLyAwPU9LLCA+MCA9IG5vLiBvZiBlcnJvcnMuCisJfSAvLyB3cml0ZURCTGVtbWF0YQorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZDoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBydWxlcyBpbnRvIERlcmJ5IERCLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBpcyB0aGUgdmVyc2lvbiB3aXRoIGEgUHJlcGFyZWRRdWVyeS4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIHNwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxNy4wMS4yMC9GQgorCSAqIDA1LjEuMjEvRkIgcmVqZWN0IGxlbW1hL3dmID4gNjQgY2hhcnMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKAorCQkJUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCwgCisJCQlTdHJpbmcgbGVtbWEsIAorCQkJU3RyaW5nIHdmLCAKKwkJCVN0cmluZyBkZWNvbXBvc2l0aW9uLCAKKwkJCWJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkIjsKKwlmaW5hbCBib29sZWFuCisJCWJMb2cgPSBmYWxzZTsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlib29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwkvLyBjaGVjayBzaXplIG9mIHdmIGFuZCBsZW1tYSBhZ2FpbnN0IGZpZWxkIHNpemUgaW4gdGFibGUgR2xlbW1MZW1tYXRhOgorCWlmKCBsZW1tYS5sZW5ndGgoKSA+PSBHbGVtbURCLm1heExlbW1hU2l6ZSApIAorCQl7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogbGVtbWEgcmVqZWN0ZWQgKD4gJWQpOiAnJXMnIVxuIiwKKwkJCQlmdW5jLCBtYXhMZW1tYVNpemUsIGxlbW1hKTsKKwkJcmV0dXJuIDQ7CisJCX0KKwlpZiggd2YubGVuZ3RoKCkgPj0gR2xlbW1EQi5tYXhXZlNpemUgKSAKKwkJeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdmIHJlamVjdGVkICg+ICVkKTogJyVzJyFcbiIsCisJCQkJZnVuYywgbWF4V2ZTaXplLCB3Zik7CisJCXJldHVybiA1OworCQl9CisJIAorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICAKKwkvLyBmb3IgbG9naW5nIG9ubHk6CisJc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCWlmKCBiTG9nICkKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisgICAgLy8gbm93IGluc2VydCBuZXcgdmFsdWVzIGludG8gUHJlcGFyZWRTdGF0ZW1lbnQ6CisgICAgdHJ5IHsKKyAgICAJc3RtdC5zZXRTdHJpbmcoIDEsIGxlbW1hKTsKKyAgICAgICAgc3RtdC5zZXRTdHJpbmcoIDIsIHdmKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDMsIHByb3AxKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDQsIHByb3AyKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDUsIHNwZWMpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByZXBhcmVkIHN0bXQgPSAnJXMnLlxuIiwgIGZ1bmMsIHN0bXQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUxKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoCSJFcnJvcjogJXM6IHdoaWxlIGZpbGxpbmcgcHJlcGFyZWQgc3RhdGVtZW50IHdpdGggbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSclYicgcHJvcDI9JyViJyBzcGVjPSclYichXG4iLCAgCisJCQkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQlpZiggKytuRXhjZXB0U3RtdCA8PSAxICkKKwkJCWUxLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorICAgIAorICAgIHRyeSB7CisJCS8vIGV4ZWN1dGUgdGhlIGZpbGxlZCBwcmVwYXJlZCBzdGF0ZW1lbnQ6CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiEgKG49JWQpXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLCBuKTsKKyAJCQlyZXR1cm4gMjsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWlmKCArK25FeGNlcHRJbnNlcnQgPD0gMSApCisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMzsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvczoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBpbnRvIERlcmJ5IERCLgorCSAqIFBhcmFtZXRlcnM6CisJICogY29udGFpbnNTcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTAuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3MoU3RhdGVtZW50IHN0bXQsIFN0cmluZyBsZW1tYSwgU3RyaW5nIHdmLCBTdHJpbmcgZGVjb21wb3NpdGlvbiwgYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3MiOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCUJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICBzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgICAgCisgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisJdHJ5IHsKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZShzcWxJbnNlcnQpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDE7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hRGF0YQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGZyb20gdGhlIEdsZW1tREIuCisJICogSW5wdXQ6IGxlbW1hICsgR0xFTU1fT1BUU194eHggKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYURhdGEoTGVtbWFJbmZvIGxlbW1hSW5mbywgUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hRGF0YSI7CisKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlsZW1tYUluZm8uY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlsZW1tYUluZm8uc3RtdCA9IGxlbW1hSW5mby5jb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWludCByID0gcmVhZERCTGVtbWEobGVtbWFJbmZvLnN0bXQsIGxlbW1hSW5mbyk7CisJCQkKKwkJaWYoIHIgIT0gMCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBnZXQgZGF0YSBmb3IgbGVtbWE9JyVzJyBvcHRpb25zPSclcychXG4iLCAKKwkJCQkJZnVuYywgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCQkJcmV0dXJuIDE7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBsZW1tYUluZm8uY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWFEYXRhCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgYnkgYWNjZXNzaW5nIHRoZSBHbGVtbURCLgorCSAqIElucHV0IDogbGVtbWEgKyBwcm9wMSsyIChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiBPdXRwdXQ6IAorCSAqICAtIGNvbnRhaW5zIGEgUmVzdWx0U2V0IGZvciBmZXRjaGluZyB0aGUgd29yZGZvcm1zLgorCSAqIAkgIFRoaXMgUmVzdWx0U2V0IHdpbGwgaGF2ZSBiZSBiZSBjbG9zZWQgd2l0aCBMZW1tYUluZm8uY2xvc2UoKS4KKwkgKiAJICBUaGUgbm8uIG9mIGZvdW5kIHdvcmRmb3JtcyBpcyBub3Qga25vd24gdGlsbCB3ZQorCSAqIAkgIGZldGNoIGFsbCBvZiB0aGVtIGZyb20gUmVzdWx0U2V0ISAKKwkgKiAJLSBkdWUgdG8gU0VMRUNUIERJU1RJTkNUIG9ubHkgdW5pcSB3ZiBhcmUgcmV0dXJuZWQuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hKFN0YXRlbWVudCBzdG10LCBMZW1tYUluZm8gbGVtbWFJbmZvKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWEiOworCVN0cmluZworCQlzcWw7CisJCQorCXNxbCA9IFN0cmluZy5mb3JtYXQoIlNFTEVDVCBESVNUSU5DVCB3ZiBmcm9tICVzIFdIRVJFIGxlbW1hPSclcycgJXMgJXMgJXMiLCAKKwkJCWRiVGFibGUsCisJCQlsZW1tYUluZm8ubGVtbWEsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICJBTkQgcHJvcDE9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AxID09IDEgPyAiQU5EIHByb3AxPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICJBTkQgcHJvcDI9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AyID09IDEgPyAiQU5EIHByb3AyPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICJBTkQgc3BlYz0ndHJ1ZSciICAgOiAKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIkFORCBzcGVjPSdmYWxzZSciICA6ICIiKTsKKwkKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCBmdW5jLCBsZW1tYUluZm8ucHJvcDEsIGxlbW1hSW5mby5wcm9wMiwgbGVtbWFJbmZvLnNwZWMpOworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsID0gJyVzJy5cbiIsIGZ1bmMsIHNxbCk7CisKKwl0cnkgeworCQlsZW1tYUluZm8ucmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsJCisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hlbiBleGVjdXRpbmcgc3FsPSclcychXG4iLCBmdW5jLCBzcWwpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBhbGwgc3FsIHN0dWZmIGFyZSBjbG9zZWQgb3V0c2lkZSB0aGlzIGZ1bmN0aW9uLCBzbyBkb24ndCBjbG9zZSB0aGVtIGhlcmUhCisJCX0JCisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvcworCSAqIFJldHVybnMgR2VuZXJhbCBJbmZvcyBhYm91dCB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgcmVhZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkluZm9zKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlkYkluZm8gPSByZWFkRGJMZW1tYXRhSW5mb3Moc3RtdCk7CisJCQkKKwkJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHJlYWQgR2VuZXJhbCBJbmZvcyBmcm9tIEdsZW1tIERhdGFiYXNlIVxuIiwgZnVuYyk7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiBudWxsOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIGNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIHN0bXQuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gbWF5IGJlIG51bGwuCisJCQorCX0gLy8gcmVhZERiSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJMZW1tYXRhSW5mb3M6CisJICogcmVhZHMgYW5kIHJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY29udGVudCAKKwkgKiBvZiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogUmV0dXJucyAwPU9LIG9yIGVycm9yIGNvZGUgPiAwLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiTGVtbWF0YUluZm9zKFN0YXRlbWVudCBzdG10KQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJyZWFkRGJMZW1tYUluZm9zIjsKKwlTdHJpbmdbXQorCQlzcWwgPSB7CSJTRUxFQ1QgQ09VTlQoZGlzdGluY3QgbGVtbWEpIGZyb20gIiArIGRiVGFibGUgLAkvLyBjb3VudHMgbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlLAkJCQkJLy8gY291bnRzIHRvdGFsIG5vLiBvZiBzdG9yZWQgd29yZGZvcm1zLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9dHJ1ZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9dHJ1ZSJ9OworCVJlc3VsdFNldAorCQlyZXMgPSBudWxsOyAKKwlpbnRbXQorCQluQ291bnRzID0gbmV3IGludFtzcWwubGVuZ3RoXTsKKwlpbnQJCQorCQlpID0gMCwgCisJCW5EaXN0TGVtbWF0YSA9IC0xLAkvLyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YSBpbiBEQi4KKwkJbldmcwkJID0gLTE7CS8vIG5vLiBvZiB3b3JkZm9ybXMgaW4gREIuCisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGV4dHJhY3RpbmcgYWdyZWdhdGVkIGluZm9zIGFib3V0IERhdGFiYXNlIGNvbnRlbnRzLi4uXG4iLCBmdW5jKTsKKwkKKwlkYkluZm8gPSBuZXcgR2xlbW1EQkluZm8oKTsKKworCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCXRyeSB7CisJCWZvcihpPTA7IGk8c3FsLmxlbmd0aDsgaSsrKQorCQkJeworCQkJcmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsW2ldKTsKKwkJCWlmKCByZXMubmV4dCgpICkKKwkJCQlkYkluZm8uY291bnRzW2ldID0gcmVzLmdldEludCgxKTsgLy8gY291bnQgaXMgaW4gY29sdW1uIDEuCisJCQllbHNlCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGV4dHJhY3QgY291bnQgZnJvbSAnJXMnIVxuIiwgZnVuYywgc3FsW2ldKTsKKwkJCQlkYkluZm8uY291bnRzW2ldID0gLTE7CisJCQkJfQorCQkJfQorICAgICAgIAorICAgICAgICB9CisgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgCXsKKyAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBzcWw9JyVzJyBmYWlsZWQhXG4iLCBmdW5jLCBzcWxbaV0pOworICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgIHJldHVybiBudWxsOworICAgIAl9CisJZmluYWxseSB7CisJCXRyeSB7CisJCQlyZXMuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0KKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIE9LCisJfSAvLyByZWFkRGJMZW1tYXRhSW5mb3MKKwkKKwkvKioqKioqKioqKioqKioqKioqKiogVGVzdCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3NfdGVzdAorCSAqIFRoaXMgaXMgZGVidWcgY29kZSB3cml0dGVuIHRvIHRlc3QgaWYgd2UgY2FuIGFjY2VzcyB0aGUgRGVyYnkKKwkgKiBEYXRhYmFzZSBmcm9tIGFuIGV4dGVybmFsIEphdmEgUHJvZ3JhbW0uCisJICogMDguMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IHJlYWREYkluZm9zX3Rlc3QoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCVN0cmluZworCQlpbnNlcnRTdG10ID0gIiI7CisJCisJLy8gQ29ubmVjdCB0byBEZXJieSBkYXRhYmFzZToKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkJCisJCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCQl0cnkKKwkJCXsKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBTdHJpbmcgCisgICAgICAgICAgICAJc3FsID0gIlNFTEVDVCAqIEZST00gIiArIGRiVGFibGU7CisgICAgICAgICAgICBSZXN1bHRTZXQgCisgICAgICAgICAgICAJcmVzdWx0ID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsKKyAKKyAgICAgICAgICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogdGFibGUgJyVzJzpcbiIsICBmdW5jLCBkYlRhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKHJlc3VsdC5uZXh0KCkpIHsKKyAgICAgICAgICAgIAlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCInJXMnIDogJyVzJyA6ICclcycgOiAnJXMnIC5cbiIsIHJlc3VsdC5nZXRTdHJpbmcoMSksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDIpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygzKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoNCkpOworICAgICAgICAJCWluc2VydFN0bXQgPSBpbnNlcnRTdG10ICsgIjxwPiIgKyByZXN1bHQuZ2V0U3RyaW5nKDEpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDIpICsgIiA6ICIgKworICAgICAgICAgICAgICAgIAkJICAgICByZXN1bHQuZ2V0U3RyaW5nKDMpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDQpICsgIjwvcD4iOworICAgICAgICAgICAgCX0KKwkJCX0KKwkgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgICAgIAl7CisJICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGluc2VydFN0bXQ9JyVzJyBmYWlsZWQhLlxuIiwgZnVuYywgc3RtdCk7CisgICAgICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgICAgICBjb24uY2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3RpbmcgJyVzIGZhaWxlZCFcbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwl0cnkgeworCQljb24uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQkKKwl9IC8vIHJlYWREYkluZm9zX3Rlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiBpbXBvcnRHbGVtbUxlbWF0YV90ZXN0CisJICogVGVzdCBWZXJzaW9uLgorCSAqIDEyLjEyLjE5L0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdChTdHJpbmcgZm4pCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YV90ZXN0IjsKKwlJbnB1dFN0cmVhbSAKKwkJaW47CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4yID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCXI7CisJCisJLyoKKwkgKiBSZWFkIExlbW1hdGEgKyBJbmZvIGZyb20gZmlsZTogCisJICovCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJCisJdHJ5IHsKKwkJLy9pbiA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKCBuZXcgRmlsZUlucHV0U3RyZWFtKGZuKSApOworCQlpbjIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCXdoaWxlKCAobGluZSA9IGluMi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggPT0gMyApCisJCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IEltcG9ydDogbGVtPSclcycgRGVjb21wPSclcycgV2Y9JyVzJy5cbiIsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzFdLCBsZW1tYUluZm9bMl0pOworCQkJZWxzZQorCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiBpbXBvcnRHbGVtbUxhbWF0YTogJyVzJyBoYXMgJWQgY29tcG9uZW50cyFcbiIsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJfQorCQl9IAorCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgb3BlbiAnJXMnIVxuIiwgZnVuYywgZm4pOworCQlyZXR1cm4gMTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCisJdHJ5IHsKKwkJaW4yLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQl9CisJCisJLyogQ2hlY2sgY29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwkgKi8gCisJciA9IHJlYWREYkluZm9zX3Rlc3QoKTsKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIHI7CisJCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNTEvYTAxNTlmNjA1YTNlMDAxYzEwMzVjMWVhZjM4YWY1OTAgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzUxL2EwMTU5ZjYwNWEzZTAwMWMxMDM1YzFlYWYzOGFmNTkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5YmU5YjQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzUxL2EwMTU5ZjYwNWEzZTAwMWMxMDM1YzFlYWYzOGFmNTkwCkBAIC0wLDAgKzEsOTg4IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKKy8qIDAuMSA6IDE3LjA2LjIwL0ZCIAorICogMC4yIDogMjUuMTAuMjEvRkIKKyAqICAgICAgIGxvZ2luZyBvZiB0aGUgQVBJIFJlcXVlc3RzLgorICogICAgICAgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisgKiAgICAgICBjb3JyZWN0aW5nIGNhbGxpbmcgb2YgbGVtbWEgKyBwcm9wMS9wcm9wMi9zcGVjLgorICogICAgICAgaGFuZGxpbmcgb2YgbGVtbWF0YSB3aXRoICfDnycuCisgKiAKKyAqIEdlbmVyYWwgY29tbWVudHMgdG8gdGhlIGVuY29kaW5nIG9mIGRlcml2YXRpb25zIGZyb20gbGVtbWEgdG8gd2ZzIGFuZCBob3cgdGhleSBhcmUgZW5jb2RlZAorICogaW4gdGhlIERlcmJ5IGRhdGFiYXNlOgorICogCisgKiBHTEVNTSBlbmNvZGluZzogIAorICogICBfIF8gOiArRmxleCAgICAgICDDlmxlIC0+IMOWbCAgICAgIAorICogICArIF8gOiArQ29tcCAgICAgICDDlmxsYW1wZSAtPiDDlmwgb3IgTGFtcGUgKGNvbXBvdW5kKS4KKyAqICAgXyArIDogK290aGVyICAgICAgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm5zY2h1aCAobm8gY29tcG91bmQgZm9yICdUdXJuc2NodWgnLCBvbmx5IHByZWZpeCkuCisgKiAgICsgKyA6ICtDb21wK290aGVyIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuICsgU2NodWggKGNvbXBvdW5kIGZvciAnU2NodWgnICsgUHJlZml4KS4KKyAqIEMyIGxlbW1hdGl6YXRpb24gb3B0aW9uczoKKyAqICAgRmxleCAgKGlkZW50aWNhbCB0byBHbGVtbSkKKyAqICAgQ29tcCAgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKQorICogICBPdGhlciAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpLgorICogICBTcGVjICAob25seSBDMjogaW5jbHVkZXMgYWxsIHdmcyB3aXRoIGhpcGhlbiBhbmQvb3Igc29tZSBub24tYWxwaGFiZXRpYyBJU084ODU5LTEgY2hhcnMpCisgKiAgICAgICAgIEUuZy4gw5ZsLUV4cG9ydGUsICJNYXJrZW4iLcOWbGUuCisgKiBEZXJieSBFbmNvZGluZzoKKyAqICBwcm9wMSAJcHJvcDIJc3BlYyAgIAltZWFuaW5nIGluIEMyOgorICogIDAJCTAJCS0JCUZsZXgKKyAqICAxCQkwCQktCQlDb21wCisgKiAgMAkJMQkJLQkJT3RoZXIgKHByZWZpeCkKKyAqICAxCQkxCQktCQlDb21wICsgT3RoZXIKKyAqICAtCQktCQkwCQktU3BlYworICogIC0JCS0JCTEJCStTcGVjCisgKiAKKyAqIEV4YW1wbGVzOgorICogJlNjaHVoCQkJOiBTY2h1aCwgU2NodWhlLCAuLi4gb25seSBmbGV4aW9ucworICogJlNjaHVoK2NvbXAJCTogU2NodWhlLCBUdXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMuCisgKiAmU2NodWgrb3RoZXIJCTogU2NodWhlLCBBbnRpc2NodWhlLi4uIGZsZXhpb25zIGFuZCBwcmVmaXhlZCB3ZnMgKG5vIGNvbXBvdW5kcykuCisgKiAmU2NodWgrY29tcCtvdGhlcjogU2NodWhlLCBBbnRpc2NodWhlLCBUdXJuc2NodWhlLCBBbnRpdHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzIGFuZCAKKyAqIAkJCQkJICBwcmVmaXhlZCBzaW5nbGUgd2ZzIChBbnRpc2NodWhlKSBhbmQgcHJlZml4ZWQgY29tcG91bmRzLgorICogJlNjaHVoK3NwZWMJCTogIkFudGkiLVNjaHVoZSwgNjhnZXItU2NodWhlLi4uIG1heSBiZSBjb21iaW5lZCB3aXRoIGV2ZXJ5IG9wdGlvbnM6IGFkZHMKKyAqICAgICAgICAgICAgICAgICAgICB3ZnMgd2l0aCBoeXBoZW4gYW5kL29yIG5vbi1hbHBoYWJldGljIGNoYXJzLgorICogCisgKiBDb252ZXJzaW9uIHJ1bGVzOgorICogCisgKiAgJnNjaGxpZcOfZW4gLT4gaW50ZXJuYWwgc2VhcmNoIGZvciAnc2NobGllc3NlbicsCisgKiAgYmVjYXVzZSBHbGVtbSBvdXRwdXRzICdzcycgZm9yICfDnycuCisgKiAgCisgKiBDaGFyYWN0ZXIgRW5jb2Rpbmc6CisgKiAKKyAqIC0gV2hlbiBpbXBvcnRpbmcgd2ZzIHRvIHRoZSBEZXJieSBEYXRhYmFzZSB3aXRoIGRvQ3VybEdsZW1tU2VydmljZXMvaW5kZXhMZW1tYXRhOgorICogCisgKiAgIElOUFVUOiB3b3JkZm9ybSBsaXN0IGluIFtVVEYtOF0gOiBVVEYtOCBpcyB0aGVuIGNvbnZlcnRlZCB0byBMYXQxIGZvciBHbGVtbSwKKyAqICAgICAgICAgIHRoZSBvdXRwdXQgb2YgR2xlbW0gW0xhdDFdIGlzIHJldHVybmVkIHRvIHRoZSBHbGVtbVNlcnZpY2VzIHdpdGhvdXQgcmVjb252ZXJzaW9uCisgKiAgICAgICAgICB0byBVVEY4IGFuZCBpbXBvcnRlZCBpbnRvIERlcmJ5IERhdGFiYXNlIHVuY2hhbmdlZC4KKyAqCQkKKyAqLworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA1LjExLjIxIjsgCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4yIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVByb3BzCQk9ICIvV0VCLUlORi9HbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiOworCQorCS8vIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSByZWFkIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzICh0aGVzZSBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzKToKKwlwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCAJCT0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCXByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCQkJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwlAQ29udGV4dAorCXByaXZhdGUgU2VydmxldENvbnRleHQgc2VydmxldENvbnRleHQ7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmb3V0CT0gbnVsbDsKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZlcnIJPSBudWxsOwkJCisJCQorCS8qIAorIAkgKiAKKwkgKiAtIGFmdGVyIGxvYWRQcm9wZXJ0aWVzLCBzZXRzIHRoZSBjbGFzcyB2YXJpYWJsZSB3aXRoIGxvYWRlZCBwcm9wZXJ0eSB2YWx1ZXMuCisJICogCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCUdTX1dvcmtpbmdQYXRoIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJHU19Xb3JraW5nUGF0aCIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyIpOworCWZuYW1lV2ZzCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVdmcyIsIAkgICAiZ2xfd2ZzX2luLnR4dCIpOworCWZuYW1lV2ZzCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVXZnM7CisJZm5hbWVPdXQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lT3V0IiwgCSAgICJHbGVtbVNlcnZpY2VzLmxvZyIpOworCWZuYW1lT3V0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVPdXQ7CisJZm5hbWVFcnIJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lRXJyIiwgCSAgICJHbGVtbVNlcnZpY2VzLmVyciIpOworCWZuYW1lRXJyCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVFcnI7CisJZm5hbWVTY3JpcHQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lU2NyaXB0IiwJICAgImRvR2xlbW0iKTsKKwlmbmFtZVNjcmlwdAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lU2NyaXB0OworCWZuYW1lTGVtYXRhCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUxlbWF0YSIsICAgICJ0bXAvbGVtMyIpOworCWZuYW1lTGVtYXRhCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVMZW1hdGE7CisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKgorCSAqICBsb2dfUmVxdWVzdDoKKwkgKiAgCisJICogIC0gd3JpdGUgaW5mbyBhYm91dCBBUEkgUmVxdWVzdC4KKwkgKiAgUGFyYW1ldGVyczoKKwkgKiAgcmVxdWVzdFBhdGgJOiBwYXRoIG9mIHdlYmFwcCBhZGRyZXNzZWQgYnkgdGhlIHJlcXVlc3QuCisJICogIGZ1bmMJCTogbmFtZSBvZiB0aGUgZnVuY3Rpb24gd2hpY2ggaW1wbGVtZW50cyB0aGUgcmVxdWVzdC4KKwkgKiAgCisJICogIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGxvZ19SZXF1ZXN0KFN0cmluZyByZXF1ZXN0UGF0aCwgU3RyaW5nIGZ1bmMpCisJCisJeworCS8vIHRyYW5zZm9ybSAiZGF0ZVR0aW1lIiAtPiAiZGF0ZSB0aW1lIjoKKwkKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwlmb3V0LnByaW50ZigiIyMjICVzOiAlcyA6IHZlcnM9JyVzJywgdmRhdGU9JyVzJyByZXF1ZXN0PSclcycuXG4iLCBmdW5jLCByZXF1ZXN0UGF0aCwgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIAorCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisJZm91dC5wcmludGYoIiMjI1xuIik7CisJfSAvLyBsb2dfUmVxdWVzdAorCQkKKwkvKiBmb3JtYXREYk5hbWUKKwkgKiAKKwkgKiAtIGdldHMgbmFtZSBvZiBEYXRhYmFzZSB1c2VkIGJ5IERlcmJ5IGZyb20gcHJvcHMgCisJICogICBhbmQgZm9ybWF0IGl0IHRvIEhUTUwuCisJICogIAorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBTdHJpbmcgZm9ybWF0RGJOYW1lKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCVN0cmluZworCQlkYk5hbWU7CisJU3RyaW5nCisJCWRiUGF0aCA9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCWludAorCQlqID0gZGJQYXRoLmxhc3RJbmRleE9mKCcvJyk7CisJCisJaWYoIGogPiAwICkKKwkJZGJOYW1lID0gZGJQYXRoLnN1YnN0cmluZyhqKzEpOworCWVsc2UKKwkJZGJOYW1lID0gZGJQYXRoOworCQorCXJldHVybiBkYk5hbWU7IC8vICI8cD48Yj5EYXRhYmFzZTogIiArIGRiTmFtZSArICI8L2I+PC9wPlxuIjsKKwl9IC8vIGZvcm1hdERiTmFtZQorCisJLyoKKwkgKiBjbG9zZUxvZ1N0cmVhbXM6CisJICogCisJICogLSBjbG9zZSB0aGUgZm91dC9mZXJyIGxvZyBzdHJlYW1zLgorCSAqIAorCSAqIDI2LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGNsb3NlTG9nU3RyZWFtcygpCisJCisJeworCWlmKCBmb3V0ICE9IG51bGwpCisJCWZvdXQuY2xvc2UoKTsKKwlmb3V0ID0gbnVsbDsKKwkKKwlpZiggZmVyciAhPSBudWxsICkKKwkJZmVyci5jbG9zZSgpOworCWZlcnIgPSBudWxsOworCX0gLy8gY2xvc2VMb2dTdHJlYW1zCisJCisJLyogaW5pdF9hbmRfbG9nX1JlcXVlc3QKKwkgKiAKKwkgKiAtIGxvYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLCBzZXRzIEdsZW1tU2VydmljZXMgY29uc3RhbnRzCisJICogICBhbmQgbG9ncyB0aGUgcmVxdWVzdC4KKwkgKiAtIGxvYWQgcHJvcGVydGllcyBhbmQgc2V0IGNvbnN0YW50cyBiZWZvcmUgbG9nZ2luZyBhbnl0aGluZywgYmVjYXVzZQorCSAqICAgbG9nZ2luZyB3aWxsIGJlIGRvbmUgaW50byB0aGUgbGFzdCBzdGRvdXQvc3RkZXJyIG9wZW5lZCBpbiBnbGFzc2Zpc2gncyBKVk0sCisJICogICBlLmcuIGluIHRoZSBsb2cgb2YgYW5vdGhlciBTZXJ2aWNlLgorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBQcm9wZXJ0aWVzIGluaXRfYW5kX2xvZ19SZXF1ZXN0KFN0cmluZyBmdW5jLCBTdHJpbmcgcmVxdWVzdFBhdGgpCisJCisJeworCVN0cmluZworCQlyZWFsUGF0aCA9IHNlcnZsZXRDb250ZXh0LmdldFJlYWxQYXRoKGZuYW1lUHJvcHMpOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAoaWYgbGFzdCBwYXJhbSA9IHRydWUpOgorCVByb3BlcnRpZXMKKwkJcHJvcHMgPSBVdGlscy5sb2FkUHJvcGVydGllcyhzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpLCBmbmFtZVByb3BzLCByZWFsUGF0aCwgZmFsc2UpOworCQorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBmb3V0IGFuZCBmZXJyIGFzIHJlcGxhY2VtZW50IGZvciBzdGRvdXQvc3RkZXJyIGZvciB1c2UgaW4gR2xlbW1TZXJ2aWNlcy4KKwkvLyBkbyBub3QgdXNlIG9yIHJlZGlyZWN0IFN5c3RlbS5vdXQgYW5kIFN5c3RlbS5lcnIsIGFzIHRoZXkgd2lsbCBiZSByZWRpcmVjdGVkCisJLy8gYnkgb3RoZXIgU2VydmljZXMgaW4gdGhlIHNhbWUgZ2xhc3NmaXNoIEpWTSwgZS5nLiBieSB0aGUgV2Zvcm1TZXJ2aWNlcy4KKwlmb3V0ID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lT3V0KTsKKwlmZXJyID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lRXJyKTsKKwkKKwkvL1V0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCisJbG9nX1JlcXVlc3QocmVxdWVzdFBhdGgsIGZ1bmMpOworCQorCXJldHVybiBwcm9wczsKKwl9IC8vIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJU3RyaW5nCisJCXN0YXR1czsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCWJvb2xlYW4KKwkJYkRlcmJ5U2VydmVyQ29ubmVjdGVkID0gZmFsc2U7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3N0YXR1cy8iKTsKKwkKKwliRGVyYnlTZXJ2ZXJDb25uZWN0ZWQgPSBHbGVtbURCLmNoZWNrRGVyYnlDb25uZWN0aW9uKCkgPT0gMCA/IHRydWUgOiBmYWxzZTsKKwkKKwkvLyBodHRwU2VydmxldFJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW52KTsKKwkKKwlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+cHJvcGVydGllczwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPmRhdGFiYXNlPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIiksCisJCQkJCQkJc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSA9PSBudWxsID8gIm5vdCBmb3VuZCIgOgorCQkJCQkJCQlwcm9wcy5pc0VtcHR5KCkgPyAiZW1wdHkiIDogImxvYWRlZCIsCisJCQkJCQkJZm9ybWF0RGJOYW1lKHByb3BzKQorCQkJCQkJCSk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJY2xvc2VMb2dTdHJlYW1zKCk7CisJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiAKKwkgKiBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhOgorCSAqIAorCSAqIFBPU1Q6IC9pbmRleC9hZGQve2RhdGFiYXNlbmFtZX06IHRleHQvcGxhaW4KKwkgKiAKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGxpc3QJCSAJOiB0aGUgbGlzdCBvZiB3ZnMgc2VudCBpbiB0aGUgYm9keSBvZiB0aGUgUE9TVCByZXF1ZXN0LgorCSAqIGRicGF0aEVuY29kZWQ6IHRoZSBsb2NhdGlvbiBvZiB0aGUgZGF0YWJhc2Ugd2hlcmUgdGhlIGxlbW1hK3dmcyBhcmUgdG8gYmUgc3RvcmVkLgorCSAqICAgICAgICAgICAgIAkgIGVuY29kZWQgYXMgIi5ob21lLnVzZXIuS29yQVAuLi4uIiwgbXVzdCBiZSBjb252ZXJ0ZWQgdG8KKwkgKiAgICAgICAgICAgIAkgICIvaG9tZS91c2VyL0tvckFQLy4uLiIKKwkgKiAgICAgICAgIAkJICBJTVBPUlRBTlQ6IGRvIG5vdCB1c2UgYSAnLicgZm9yIGVuY29kaW5nIGFueXRoaW5nIGVsc2UgdGhhbiBhICcvJy4KKwkgKiBOb3RlcyAgICAgOgorCSAqIC0gYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UgbG9jYXRlZCBhdCAnZGF0YWJhc2VuYW1lJy4KKwkgKiAtIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkIGludG8gYSBEZXJieSBkYXRhYmFzZS4KKwkgKiBJbnB1dAkgOiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKiAwNC4xMS4yMS9GQgorCSAqIC0gc3VibWl0dGVkIGRhdGFiYXNlIHBhdGguCisJICovCisJCisJQFBhdGgoImFkZC97ZGF0YWJhc2VwYXRofSIpIAorCUBQT1NUIAorCUBDb25zdW1lcygidGV4dC9wbGFpbiIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisJCQkJCQkJKAorCQkJCQkJCVN0cmluZyAJCQkJCQkJCQkJICBsaXN0LAorCQkJCQkJCUBQYXRoUGFyYW0odmFsdWU9ImRhdGFiYXNlcGF0aCIpIGZpbmFsIFN0cmluZyBkYnBhdGhFbmNvZGVkCisJCQkJCQkJKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvUE9TVF9pbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIAorCQlhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCVN0cmluZworCQlkYnBhdGg7CisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBudWxsOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvYWRkL3tkYnBhdGh9Iik7CisJCisJZGJwYXRoID0gZGJwYXRoRW5jb2RlZC5yZXBsYWNlKCcuJywgJy8nKTsKKwkKKwlmb3V0LnByaW50ZigiSW5mbyA6ICVzOiBzZWxlY3RlZCBkYXRhYmFzZSBwYXRoID0gJyVzJy5cbiIsIGZ1bmMsIGRicGF0aCk7CisJZm91dC5wcmludGYoIkluZm8gOiAlczogd29ya2luZyBkaXJlY3RvcnkgPSAnJXMnLlxuIiwgZnVuYywgR1NfV29ya2luZ1BhdGgpOworCQorCS8vIHNldCBmaWxlIGFuZCBwYXRocyBhZnRlciBHU19Xb3JraW5nUGF0aCBoYXMgYmVlbiBpbml0aWFsaXNlZDoKKwlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgZm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShmZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzLCBmb3V0LCBmZXJyKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZsO8aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEsIHByb3BzLCBkYnBhdGgpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwkKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJCisJfSAvLyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisKKwkvKiBkb0dFVF92aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzID0gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby8iKTsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCWZpbmFsIFN0cmluZworCQlkYk5hbWUgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5kYXRhYmFzZTwvYj46ICVzPC9wPiIsIGZvcm1hdERiTmFtZShwcm9wcykpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBkYk5hbWUgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIGRvR0VUX3ZpZXdEQkluZm8KKworCisJLyogZG9HRVRfdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+dmVyc2lvbiAiICsgdmVyc2lvbiArICIgdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgcmVxdWVzdCA9ICciICsgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSArICInPC9pPjwvaDQ+XG4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMTo8L2I+IChDMiBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX08L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT57bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKTwvY29kZT48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsPC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+w5ZsP29wdHM9ZmxleCtjb21wK290aGVyK3NwZWM8L2NvZGU+PC9wPiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAyOjwvYj4gKGludGVybmFsIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfT9wcm9wMT1bMDEyXSZhbXA7cHJvcDI9WzAxMl0mYW1wO3NwZWM9WzAxMl08L2NvZGU+ICh3aGVyZSBlYWNoIHByb3AxLCBwcm9wMiwgc3BlYyBpcyBvcHRpb25hbCkuPC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbD9wcm9wMT0wJmFtcDtwcm9wMj0xJmFtcDtzcGVjPTI8L2NvZGU+PC9wPiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Iik7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JyVkJyBwcm9wMj0nJWQnIHNwZWM9JyVkJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCS8qIAorCWZvcihpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwkJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwkJfQkKKwkgKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggbGVtbWFJbmZvLm9wdHNTZXR0aW5nID09IExlbW1hSW5mby5PUFRTX1NFVFRJTkdfQzIgKSAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZywgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxLHByb3AyLHNwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpbnQKKwkJbldmcyA9IGxlbW1hSW5mby5uV2ZzOworCQorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCS8vIGxvZyBvdXRjb21lOgorCWlmKCBuV2ZzIDwgMCApCisJCWZvdXQucHJpbnRmKCJFcnJvcjogJXM6IHJldHVybmluZyAwIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYyk7CisJZWxzZQorCQlmb3V0LnByaW50ZigiRGVidWcuICVzOiByZXR1cm5pbmcgJWQgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jLCBuV2ZzKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogbm90ZToKKwkgKiAtIGlmIEJyb3dzZXIgcmVxdWVzdDogSFRUUFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICd0ZXh0L2h0bWwsLi4ueG1sLi4uJworCSAqIC0gaWYgV2Zvcm1TZXJ2aWNlcyByZXF1ZXN0OiBIdHRwU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ2FwcGxpY2F0aW9uL2pzb24nLgorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICogCisJICogLSBzdWJtaXR0ZWQgVVJMLCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWEsIGlzIGludGVycHJldGVkIGJ5IGdsYXNzZmlzaCBhcworCSAqICAgYmVpbmcgSVNPLTg4NTktMSBlbmNvZGVkLiBXaGVuIHRoZSByZXF1ZXN0IGlzIFVURi04IGVuY29kZWQsIFVtbGF1dHMgYW5kCisJICogICAnw58nIGFyZSBtaXMtaW50ZXJwcmVkZWQsIGxlYWRpbmcgdG8gYW4gZXJyb25lcm91cyByZXF1ZXN0IHRvIHRoZSBEZXJieQorCSAqICAgZGF0YWJhc2UuCisJICogLSBSZXF1ZXN0ZWQgbGVtbWEgJ2xlbW1hJyBoYXMgdG8gYmUgdHJhbnNmb3JtZWQgdG8gVVRGLTggZmlyc3QuCisJICogLSBub3RlOiBldmVuIHdoZW4gc3VibWl0dGluZyB0aGUgR0VUIHJlcXVlc3QgYnkgc3BlY2lmeWluZyAnY2hhcmVuY29kZT1VVEYtOCcsCisJICogICBnbGFzc2Zpc2ggZG9lcyBub3QgY29udmVydCBpdCBhdXRvbWF0aWNhbGx5IGFzIGV4cGVjdGVkLgorCSAqICAgCisJICogIDIyLjEwLjIxL0ZCCisJICogCisJICogLSBpZiBhY2NlcHQ9YXBwbGljYXRpb24vanNvbiByZXR1cm4gVVRGLTggKFdmb3JtU2VydmljZXMpLgorCSAqIC0gZWxzZSBpZiBhY2NlcHQ9dGV4dC9odG1sIGRvIG5vdCB0cmFuc2Zvcm0gY2hhcmFjdGVyIGVuY29kaW5nIChCcm93c2VyKS4KKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQENvbnN1bWVzKCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2h0bWwiKQorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm87CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJZmluYWwgYm9vbGVhbgorCQliRW5jb2RlTGVtbWEgPSBmYWxzZTsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsKKwkKKwkvKiB0ZXN0OgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlpZiggYkVuY29kZUxlbW1hICkKKwkJeworCQkvLyB3aGVuIGFjY2VwdGluZyBKU09OLCB1cmwgaGFzIHRvIGJlIGNvbnZlcnRlZCB0byBVVEYtOCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hOgorCQl0cnkgeworCQkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhuZXcgU3RyaW5nKGxlbW1hLmdldEJ5dGVzKCJJU08tODg1OS0xIiksICJ1dGYtOCIpKTsKKwkJCX0gCisJCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCUxlbW1hUmVzcG9uc2UKKwkJCQlsZW1yZXNwID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtcmVzcCkuYnVpbGQoKTsKKwkJCX0KKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbVVRGLThdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisJZWxzZQorCQl7CisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFt1bmNoYW5nZWRdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisKKwkvKiBkb2VzIG5vdCBoZWxwOgorCSBTdHJpbmcKKwkgCXJlcXVlc3RDaGFyRW5jb2RpbmcgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0Q2hhcmFjdGVyRW5jb2RpbmcoKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlcXVlc3QgY2hhcmFjdGVyIGVuY29kaW5nID0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdENoYXJFbmNvZGluZyk7CisJKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJeworCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCS8vcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQl9CisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOwkKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJLyoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3Rlc3QvaW5mby8iKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vZm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQlmb3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNTEvYzAwZDk0MzY4NTJiMDAxYzFjNDFjZTU1OWVhNWUxNmIgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzUxL2MwMGQ5NDM2ODUyYjAwMWMxYzQxY2U1NTllYTVlMTZiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2OWZlODUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzUxL2MwMGQ5NDM2ODUyYjAwMWMxYzQxY2U1NTllYTVlMTZiCkBAIC0wLDAgKzEsNzAyIEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA2LjEwLjIxIjsgLy8iMTcuMDYuMjAiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMSI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwkJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwkJU3RyaW5nCisJCQlzdGF0dXM7CisJCVV0aWxzCisJCQl1ID0gbmV3IFV0aWxzKCk7CisJCVByb3BlcnRpZXMKKwkJCXByb3BzOworCQkKKwkJLy8gcmVhZCB0ZXN0CisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJLy9IdHRwU2VydmxldENvbnRleHQKKwkJCisJCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCQlJbnB1dFN0cmVhbQorCQkJaW5Qcm9wID0gR2xlbW1TZXJ2aWNlcy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpLmdldFJlc291cmNlQXNTdHJlYW0oIkdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOworCQkKKwkJdHJ5IHsKKwkJCXByb3BzLmxvYWQoaW5Qcm9wKTsKKwkJCVNldDxTdHJpbmc+CisJCQkJc2V0UHJvcHMgPSBwcm9wcy5zdHJpbmdQcm9wZXJ0eU5hbWVzKCk7CisJCQl9IAorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGxvYWQgcHJvcHMgJ0dsZW1tU2VydmljZXMucHJvcGVydGllcychIiwgIGZ1bmMpOworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQkKKwkJLy8gZW5kIG9mIHJlYWQgdGVzdAorCQkKKwkJLy8gdGVzdAorCQkvKgorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCQorCQkgKiBwcm9wcy5zZXRQcm9wZXJ0eSgicCIsICJ0ZXN0Iik7CisJCSAqCisJCUZpbGVPdXRwdXRTdHJlYW0gb3V0OworCQl0cnkgeworCQkJb3V0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oImdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOworCQkJcHJvcHMuc3RvcmUob3V0LCAgInRlc3QgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIik7CisJCQl9IAorCQljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfTsKKwkJKi8KKwkJCisJCS8vIGVuZCBvdGVzdAorCQkKKwkJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiQVBJOiAlczogL2luZGV4L3N0YXR1cy8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCisJCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCQlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIFBPU1Q6IC9pbmRleC9hZGQvOiB0ZXh0L3BsYWluCisJICogYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UuCisJICogVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQKKwkgKiBpbnRvIHRoZSBkYXRhYmFzZS4KKwkgKiBJbnB1dDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICovCisJQFBhdGgoImFkZCIpIEBQT1NUIEBDb25zdW1lcygidGV4dC9wbGFpbiIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBpbXBvcnRMZW1tYURhdGEoU3RyaW5nIGxpc3QpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSBhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCQorCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvYWRkLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZu+/vWhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCX0KKworCS8qIHZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIHZpZXdEQkluZm8KKworCisJLyogdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgLSBTdGF0dXM6IDxpPldvcmsgaW4gcHJvZ3Jlc3MuLi4hPC9pPik8L2g0PlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggIW9wdGlvbnMuZXF1YWxzKCJ1bmRlZiIpKQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMS9wcm9wMi9zcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogR2xlbW1TZXJ2aWNlcyAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uRGF0ZSwgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCS8vU3lzdGVtLm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzU0L2QwZTRmZjFmNTJiYTAwMWExYTY3ODc5YjA1MmNjNzdjIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS81NC9kMGU0ZmYxZjUyYmEwMDFhMWE2Nzg3OWIwNTJjYzc3YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGJlOTY5Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS81NC9kMGU0ZmYxZjUyYmEwMDFhMWE2Nzg3OWIwNTJjYzc3YwpAQCAtMCwwICsxLDMxIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorIDxoZWFkPgorICA8dGl0bGU+V29yZGZvcm0gU2VydmljZXMgKGluY2x1ZGluZyBHbGVtbSBTZXJ2aWNlcyk8L3RpdGxlPgorICA8IS0tIGxvYWQgY2xpZW50IGphdmFzY3JpcHQgbGlicmFyeSAtLT4KKyAgPHNjcmlwdCBzcmM9Imh0dHBzOi8va29yYXAuaWRzLW1hbm5oZWltLmRlL2pzL2tvcmFwLXBsdWdpbi0wLjIuanMiCisgICAgICAgICAgZGF0YS1zZXJ2ZXI9Imh0dHBzOi8va29yYXAuaWRzLW1hbm5oZWltLmRlLyI+PC9zY3JpcHQ+CisgPC9oZWFkPgorIDxib2R5PgorICA8c2NyaXB0PgorICAgICAgIGxldCBkYXRhID0geworICAgICAgICAgJ2FjdGlvbicgOiAncGlwZScsCisgICAgICAgICAnc2VydmljZScgOiAnaHR0cDovL2MwcjRmdC5pZHMtbWFubmhlaW0uZGU6NDA5MTMvd2Zvcm1TZXJ2aWNlcy0wLjEtU05BUFNIT1Qvd2Zvcm1TZXJ2aWNlcy9xdWVyeScKKyAgICAgICB9OworCisgICAgICAgZnVuY3Rpb24gcGx1Z2luaXQgKHApIHsKKyAgICAgICAgIHAub25NZXNzYWdlID0gZnVuY3Rpb24obXNnKSB7CisgICAgICAgICAgIGlmIChtc2cua2V5ID09ICdnbGVtbScpIHsKKyAgICAgICAgICAgICBpZiAobXNnLnZhbHVlKSB7CisgICAgICAgICAgICAgICBkYXRhWydqb2InXSA9ICdhZGQnOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgIGRhdGFbJ2pvYiddID0gJ2RlbCc7CisgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICBLb3JBUGx1Z2luLnNlbmRNc2coZGF0YSk7CisgICAgICAgICAgIH07CisgICAgICAgICB9OworICAgICAgIH07CisgICAgIDwvc2NyaXB0PgorICAgPC9ib2R5PgorPC9odG1sPiAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzU1LzIwOTA1MmI3NDIzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS81NS8yMDkwNTJiNzQyM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzQxYmMxCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS81NS8yMDkwNTJiNzQyM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpAQCAtMCwwICsxLDk2OSBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCisvKiAwLjEgOiAxNy4wNi4yMC9GQiAKKyAqIDAuMiA6IDI1LjEwLjIxL0ZCCisgKiAgICAgICBsb2dpbmcgb2YgdGhlIEFQSSBSZXF1ZXN0cy4KKyAqICAgICAgIGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorICogICAgICAgY29ycmVjdGluZyBjYWxsaW5nIG9mIGxlbW1hICsgcHJvcDEvcHJvcDIvc3BlYy4KKyAqICAgICAgIGhhbmRsaW5nIG9mIGxlbW1hdGEgd2l0aCAnw58nLgorICogCisgKiBHZW5lcmFsIGNvbW1lbnRzIHRvIHRoZSBlbmNvZGluZyBvZiBkZXJpdmF0aW9ucyBmcm9tIGxlbW1hIHRvIHdmcyBhbmQgaG93IHRoZXkgYXJlIGVuY29kZWQKKyAqIGluIHRoZSBEZXJieSBkYXRhYmFzZToKKyAqIAorICogR0xFTU0gZW5jb2Rpbmc6ICAKKyAqICAgXyBfIDogK0ZsZXggICAgICAgw5ZsZSAtPiDDlmwgICAgICAKKyAqICAgKyBfIDogK0NvbXAgICAgICAgw5ZsbGFtcGUgLT4gw5ZsIG9yIExhbXBlIChjb21wb3VuZCkuCisgKiAgIF8gKyA6ICtvdGhlciAgICAgIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuc2NodWggKG5vIGNvbXBvdW5kIGZvciAnVHVybnNjaHVoJywgb25seSBwcmVmaXgpLgorICogICArICsgOiArQ29tcCtvdGhlciBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybiArIFNjaHVoIChjb21wb3VuZCBmb3IgJ1NjaHVoJyArIFByZWZpeCkuCisgKiBDMiBsZW1tYXRpemF0aW9uIG9wdGlvbnM6CisgKiAgIEZsZXggIChpZGVudGljYWwgdG8gR2xlbW0pCisgKiAgIENvbXAgIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykKKyAqICAgT3RoZXIgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKS4KKyAqICAgU3BlYyAgKG9ubHkgQzI6IGluY2x1ZGVzIGFsbCB3ZnMgd2l0aCBoaXBoZW4gYW5kL29yIHNvbWUgbm9uLWFscGhhYmV0aWMgSVNPODg1OS0xIGNoYXJzKQorICogICAgICAgICBFLmcuIMOWbC1FeHBvcnRlLCAiTWFya2VuIi3DlmxlLgorICogRGVyYnkgRW5jb2Rpbmc6CisgKiAgcHJvcDEgCXByb3AyCXNwZWMgICAJbWVhbmluZyBpbiBDMjoKKyAqICAwCQkwCQktCQlGbGV4CisgKiAgMQkJMAkJLQkJQ29tcAorICogIDAJCTEJCS0JCU90aGVyIChwcmVmaXgpCisgKiAgMQkJMQkJLQkJQ29tcCArIE90aGVyCisgKiAgLQkJLQkJMAkJLVNwZWMKKyAqICAtCQktCQkxCQkrU3BlYworICogCisgKiBFeGFtcGxlczoKKyAqICZTY2h1aAkJCTogU2NodWgsIFNjaHVoZSwgLi4uIG9ubHkgZmxleGlvbnMKKyAqICZTY2h1aCtjb21wCQk6IFNjaHVoZSwgVHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzLgorICogJlNjaHVoK290aGVyCQk6IFNjaHVoZSwgQW50aXNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgcHJlZml4ZWQgd2ZzIChubyBjb21wb3VuZHMpLgorICogJlNjaHVoK2NvbXArb3RoZXI6IFNjaHVoZSwgQW50aXNjaHVoZSwgVHVybnNjaHVoZSwgQW50aXR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcyBhbmQgCisgKiAJCQkJCSAgcHJlZml4ZWQgc2luZ2xlIHdmcyAoQW50aXNjaHVoZSkgYW5kIHByZWZpeGVkIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtzcGVjCQk6ICJBbnRpIi1TY2h1aGUsIDY4Z2VyLVNjaHVoZS4uLiBtYXkgYmUgY29tYmluZWQgd2l0aCBldmVyeSBvcHRpb25zOiBhZGRzCisgKiAgICAgICAgICAgICAgICAgICAgd2ZzIHdpdGggaHlwaGVuIGFuZC9vciBub24tYWxwaGFiZXRpYyBjaGFycy4KKyAqIAorICogQ29udmVyc2lvbiBydWxlczoKKyAqIAorICogICZzY2hsaWXDn2VuIC0+IGludGVybmFsIHNlYXJjaCBmb3IgJ3NjaGxpZXNzZW4nLAorICogIGJlY2F1c2UgR2xlbW0gb3V0cHV0cyAnc3MnIGZvciAnw58nLgorICogIAorICogQ2hhcmFjdGVyIEVuY29kaW5nOgorICogCisgKiAtIFdoZW4gaW1wb3J0aW5nIHdmcyB0byB0aGUgRGVyYnkgRGF0YWJhc2Ugd2l0aCBkb0N1cmxHbGVtbVNlcnZpY2VzL2luZGV4TGVtbWF0YToKKyAqIAorICogICBJTlBVVDogd29yZGZvcm0gbGlzdCBpbiBbVVRGLThdIDogVVRGLTggaXMgdGhlbiBjb252ZXJ0ZWQgdG8gTGF0MSBmb3IgR2xlbW0sCisgKiAgICAgICAgICB0aGUgb3V0cHV0IG9mIEdsZW1tIFtMYXQxXSBpcyByZXR1cm5lZCB0byB0aGUgR2xlbW1TZXJ2aWNlcyB3aXRob3V0IHJlY29udmVyc2lvbgorICogICAgICAgICAgdG8gVVRGOCBhbmQgaW1wb3J0ZWQgaW50byBEZXJieSBEYXRhYmFzZSB1bmNoYW5nZWQuCisgKgkJCisgKi8KKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNC4xMS4yMSI7IAorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMiI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVQcm9wcwkJPSAiL1dFQi1JTkYvR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIjsKKwkKKwkvLyB0aGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgcmVhZCBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyAodGhlc2UgYXJlIHRoZSBkZWZhdWx0IHZhbHVlcyk6CisJcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggCQk9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCXByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQkJCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJQENvbnRleHQKKwlwcml2YXRlIFNlcnZsZXRDb250ZXh0IHNlcnZsZXRDb250ZXh0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZm91dAk9IG51bGw7CisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmZXJyCT0gbnVsbDsJCQorCQkKKwkvKiAKKyAJICogCisJICogLSBhZnRlciBsb2FkUHJvcGVydGllcywgc2V0cyB0aGUgY2xhc3MgdmFyaWFibGUgd2l0aCBsb2FkZWQgcHJvcGVydHkgdmFsdWVzLgorCSAqIAorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlHU19Xb3JraW5nUGF0aCAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiR1NfV29ya2luZ1BhdGgiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiKTsKKwlmbmFtZVdmcwkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVXZnMiLCAJICAgImdsX3dmc19pbi50eHQiKTsKKwlmbmFtZVdmcwkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lV2ZzOworCWZuYW1lT3V0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZU91dCIsIAkgICAiR2xlbW1TZXJ2aWNlcy5sb2ciKTsKKwlmbmFtZU91dAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lT3V0OworCWZuYW1lRXJyCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUVyciIsIAkgICAiR2xlbW1TZXJ2aWNlcy5lcnIiKTsKKwlmbmFtZUVycgkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lRXJyOworCWZuYW1lU2NyaXB0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVNjcmlwdCIsCSAgICJkb0dsZW1tIik7CisJZm5hbWVTY3JpcHQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVNjcmlwdDsKKwlmbmFtZUxlbWF0YQkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVMZW1hdGEiLCAgICAidG1wL2xlbTMiKTsKKwlmbmFtZUxlbWF0YQkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lTGVtYXRhOworCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyoKKwkgKiAgbG9nX1JlcXVlc3Q6CisJICogIAorCSAqICAtIHdyaXRlIGluZm8gYWJvdXQgQVBJIFJlcXVlc3QuCisJICogIFBhcmFtZXRlcnM6CisJICogIHJlcXVlc3RQYXRoCTogcGF0aCBvZiB3ZWJhcHAgYWRkcmVzc2VkIGJ5IHRoZSByZXF1ZXN0LgorCSAqICBmdW5jCQk6IG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHdoaWNoIGltcGxlbWVudHMgdGhlIHJlcXVlc3QuCisJICogIAorCSAqICAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBsb2dfUmVxdWVzdChTdHJpbmcgcmVxdWVzdFBhdGgsIFN0cmluZyBmdW5jKQorCQorCXsKKwkvLyB0cmFuc2Zvcm0gImRhdGVUdGltZSIgLT4gImRhdGUgdGltZSI6CisJCisJZm91dC5wcmludGYoIiMjI1xuIik7CisJZm91dC5wcmludGYoIiMjIyAlczogJXMgOiB2ZXJzPSclcycsIHZkYXRlPSclcycgcmVxdWVzdD0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdFBhdGgsIHZlcnNpb24sIHZlcnNpb25EYXRlLCAKKwkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCX0gLy8gbG9nX1JlcXVlc3QKKwkJCisJLyogZm9ybWF0RGJOYW1lCisJICogCisJICogLSBnZXRzIG5hbWUgb2YgRGF0YWJhc2UgdXNlZCBieSBEZXJieSBmcm9tIHByb3BzIAorCSAqICAgYW5kIGZvcm1hdCBpdCB0byBIVE1MLgorCSAqICAKKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgU3RyaW5nIGZvcm1hdERiTmFtZShQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlTdHJpbmcKKwkJZGJOYW1lOworCVN0cmluZworCQlkYlBhdGggPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlpbnQKKwkJaiA9IGRiUGF0aC5sYXN0SW5kZXhPZignLycpOworCQorCWlmKCBqID4gMCApCisJCWRiTmFtZSA9IGRiUGF0aC5zdWJzdHJpbmcoaisxKTsKKwllbHNlCisJCWRiTmFtZSA9IGRiUGF0aDsKKwkKKwlyZXR1cm4gZGJOYW1lOyAvLyAiPHA+PGI+RGF0YWJhc2U6ICIgKyBkYk5hbWUgKyAiPC9iPjwvcD5cbiI7CisJfSAvLyBmb3JtYXREYk5hbWUKKworCS8qCisJICogY2xvc2VMb2dTdHJlYW1zOgorCSAqIAorCSAqIC0gY2xvc2UgdGhlIGZvdXQvZmVyciBsb2cgc3RyZWFtcy4KKwkgKiAKKwkgKiAyNi4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBjbG9zZUxvZ1N0cmVhbXMoKQorCQorCXsKKwlpZiggZm91dCAhPSBudWxsKQorCQlmb3V0LmNsb3NlKCk7CisJZm91dCA9IG51bGw7CisJCisJaWYoIGZlcnIgIT0gbnVsbCApCisJCWZlcnIuY2xvc2UoKTsKKwlmZXJyID0gbnVsbDsKKwl9IC8vIGNsb3NlTG9nU3RyZWFtcworCQorCS8qIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisJICogCisJICogLSBsb2FkIEdsZW1tU2VydmljZXMucHJvcGVydGllcywgc2V0cyBHbGVtbVNlcnZpY2VzIGNvbnN0YW50cworCSAqICAgYW5kIGxvZ3MgdGhlIHJlcXVlc3QuCisJICogLSBsb2FkIHByb3BlcnRpZXMgYW5kIHNldCBjb25zdGFudHMgYmVmb3JlIGxvZ2dpbmcgYW55dGhpbmcsIGJlY2F1c2UKKwkgKiAgIGxvZ2dpbmcgd2lsbCBiZSBkb25lIGludG8gdGhlIGxhc3Qgc3Rkb3V0L3N0ZGVyciBvcGVuZWQgaW4gZ2xhc3NmaXNoJ3MgSlZNLAorCSAqICAgZS5nLiBpbiB0aGUgbG9nIG9mIGFub3RoZXIgU2VydmljZS4KKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgUHJvcGVydGllcyBpbml0X2FuZF9sb2dfUmVxdWVzdChTdHJpbmcgZnVuYywgU3RyaW5nIHJlcXVlc3RQYXRoKQorCQorCXsKKwlTdHJpbmcKKwkJcmVhbFBhdGggPSBzZXJ2bGV0Q29udGV4dC5nZXRSZWFsUGF0aChmbmFtZVByb3BzKTsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKGlmIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlQcm9wZXJ0aWVzCisJCXByb3BzID0gVXRpbHMubG9hZFByb3BlcnRpZXMoc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSwgZm5hbWVQcm9wcywgcmVhbFBhdGgsIGZhbHNlKTsKKwkKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gZm91dCBhbmQgZmVyciBhcyByZXBsYWNlbWVudCBmb3Igc3Rkb3V0L3N0ZGVyciBmb3IgdXNlIGluIEdsZW1tU2VydmljZXMuCisJLy8gZG8gbm90IHVzZSBvciByZWRpcmVjdCBTeXN0ZW0ub3V0IGFuZCBTeXN0ZW0uZXJyLCBhcyB0aGV5IHdpbGwgYmUgcmVkaXJlY3RlZAorCS8vIGJ5IG90aGVyIFNlcnZpY2VzIGluIHRoZSBzYW1lIGdsYXNzZmlzaCBKVk0sIGUuZy4gYnkgdGhlIFdmb3JtU2VydmljZXMuCisJZm91dCA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZU91dCk7CisJZmVyciA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZUVycik7CisJCisJLy9VdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQorCWxvZ19SZXF1ZXN0KHJlcXVlc3RQYXRoLCBmdW5jKTsKKwkKKwlyZXR1cm4gcHJvcHM7CisJfSAvLyBpbml0X2FuZF9sb2dfUmVxdWVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCVN0cmluZworCQlzdGF0dXM7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvc3RhdHVzLyIpOworCQorCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCQorCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5wcm9wZXJ0aWVzPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+ZGF0YWJhc2U8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSwKKwkJCQkJCQlzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpID09IG51bGwgPyAibm90IGZvdW5kIiA6CisJCQkJCQkJCXByb3BzLmlzRW1wdHkoKSA/ICJlbXB0eSIgOiAibG9hZGVkIiwKKwkJCQkJCQlmb3JtYXREYk5hbWUocHJvcHMpCisJCQkJCQkJKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIAorCSAqIGRvUE9TVF9pbXBvcnRMZW1tYURhdGE6CisJICogCisJICogUE9TVDogL2luZGV4L2FkZC86IHRleHQvcGxhaW4KKwkgKiBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZS4KKwkgKiBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZAorCSAqIGludG8gdGhlIGRhdGFiYXNlLgorCSAqIElucHV0OiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKi8KKwkKKwlAUGF0aCgiYWRkL3tkYXRhYmFzZW5hbWV9IikgCisJQFBPU1QgCisJQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvUE9TVF9pbXBvcnRMZW1tYURhdGEKKwkJCQkJCQkoCisJCQkJCQkJU3RyaW5nIAkJCQkJCWxpc3QsCisJCQkJCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJZmluYWwgU3RyaW5nIGRibmFtZQorCQkJCQkJCSkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb1BPU1RfaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSBhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCQorCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9hZGQvIik7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogc3VibWl0dGVkIGRhdGFiYXNlbmFtZT0nJXMnLlxuIiwgZnVuYywgZGJuYW1lKTsKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBwb3N0ZWQgbGlzdCA9ICclcycuXG4iLCBmdW5jLCBsaXN0KTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBmb3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKGZlcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMsIGZvdXQsIGZlcnIpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNmw7xocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSwgcHJvcHMpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCQorCX0gLy8gZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCisJLyogZG9HRVRfdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVycyA9ICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vIik7CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlmaW5hbCBTdHJpbmcKKwkJZGJOYW1lID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+ZGF0YWJhc2U8L2I+OiAlczwvcD4iLCBmb3JtYXREYk5hbWUocHJvcHMpKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgZGJOYW1lICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyBkb0dFVF92aWV3REJJbmZvCisKKworCS8qIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0PnZlcnNpb24gIiArIHZlcnNpb24gKyAiIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIHJlcXVlc3QgPSAnIiArIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikgKyAiJzwvaT48L2g0PlxuIiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDE6PC9iPiAoQzIgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9PC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+e2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYyk8L2NvZGU+PC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbDwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPsOWbD9vcHRzPWZsZXgrY29tcCtvdGhlcitzcGVjPC9jb2RlPjwvcD4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMjo8L2I+IChpbnRlcm5hbCBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX0/cHJvcDE9WzAxMl0mYW1wO3Byb3AyPVswMTJdJmFtcDtzcGVjPVswMTJdPC9jb2RlPiAod2hlcmUgZWFjaCBwcm9wMSwgcHJvcDIsIHNwZWMgaXMgb3B0aW9uYWwpLjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw/cHJvcDE9MCZhbXA7cHJvcDI9MSZhbXA7c3BlYz0yPC9jb2RlPjwvcD4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfSIpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSclZCcgcHJvcDI9JyVkJyBzcGVjPSclZCcuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwkvKiAKKwlmb3IoaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJCX0JCisJICovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoIGxlbW1hSW5mby5vcHRzU2V0dGluZyA9PSBMZW1tYUluZm8uT1BUU19TRVRUSU5HX0MyICkgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMSxwcm9wMixzcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaW50CisJCW5XZnMgPSBsZW1tYUluZm8ubldmczsKKwkKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwkvLyBsb2cgb3V0Y29tZToKKwlpZiggbldmcyA8IDAgKQorCQlmb3V0LnByaW50ZigiRXJyb3I6ICVzOiByZXR1cm5pbmcgMCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMpOworCWVsc2UKKwkJZm91dC5wcmludGYoIkRlYnVnLiAlczogcmV0dXJuaW5nICVkIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYywgbldmcyk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIG5vdGU6CisJICogLSBpZiBCcm93c2VyIHJlcXVlc3Q6IEhUVFBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAndGV4dC9odG1sLC4uLnhtbC4uLicKKwkgKiAtIGlmIFdmb3JtU2VydmljZXMgcmVxdWVzdDogSHR0cFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICdhcHBsaWNhdGlvbi9qc29uJy4KKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqIAorCSAqIC0gc3VibWl0dGVkIFVSTCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hLCBpcyBpbnRlcnByZXRlZCBieSBnbGFzc2Zpc2ggYXMKKwkgKiAgIGJlaW5nIElTTy04ODU5LTEgZW5jb2RlZC4gV2hlbiB0aGUgcmVxdWVzdCBpcyBVVEYtOCBlbmNvZGVkLCBVbWxhdXRzIGFuZAorCSAqICAgJ8OfJyBhcmUgbWlzLWludGVycHJlZGVkLCBsZWFkaW5nIHRvIGFuIGVycm9uZXJvdXMgcmVxdWVzdCB0byB0aGUgRGVyYnkKKwkgKiAgIGRhdGFiYXNlLgorCSAqIC0gUmVxdWVzdGVkIGxlbW1hICdsZW1tYScgaGFzIHRvIGJlIHRyYW5zZm9ybWVkIHRvIFVURi04IGZpcnN0LgorCSAqIC0gbm90ZTogZXZlbiB3aGVuIHN1Ym1pdHRpbmcgdGhlIEdFVCByZXF1ZXN0IGJ5IHNwZWNpZnlpbmcgJ2NoYXJlbmNvZGU9VVRGLTgnLAorCSAqICAgZ2xhc3NmaXNoIGRvZXMgbm90IGNvbnZlcnQgaXQgYXV0b21hdGljYWxseSBhcyBleHBlY3RlZC4KKwkgKiAgIAorCSAqICAyMi4xMC4yMS9GQgorCSAqIAorCSAqIC0gaWYgYWNjZXB0PWFwcGxpY2F0aW9uL2pzb24gcmV0dXJuIFVURi04IChXZm9ybVNlcnZpY2VzKS4KKwkgKiAtIGVsc2UgaWYgYWNjZXB0PXRleHQvaHRtbCBkbyBub3QgdHJhbnNmb3JtIGNoYXJhY3RlciBlbmNvZGluZyAoQnJvd3NlcikuCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBDb25zdW1lcygiYXBwbGljYXRpb24vanNvbiwgdGV4dC9odG1sIikKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCQorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCWZpbmFsIGJvb2xlYW4KKwkJYkVuY29kZUxlbW1hID0gZmFsc2U7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CisJCisJLyogdGVzdDoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJaWYoIGJFbmNvZGVMZW1tYSApCisJCXsKKwkJLy8gd2hlbiBhY2NlcHRpbmcgSlNPTiwgdXJsIGhhcyB0byBiZSBjb252ZXJ0ZWQgdG8gVVRGLTgsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYToKKwkJdHJ5IHsKKwkJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obmV3IFN0cmluZyhsZW1tYS5nZXRCeXRlcygiSVNPLTg4NTktMSIpLCAidXRmLTgiKSk7CisJCQl9IAorCQljYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlMSkgeworCQkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCQlMZW1tYVJlc3BvbnNlCisJCQkJbGVtcmVzcCA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbXJlc3ApLmJ1aWxkKCk7CisJCQl9CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW1VURi04XSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCWVsc2UKKwkJeworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbdW5jaGFuZ2VkXSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCisJLyogZG9lcyBub3QgaGVscDoKKwkgU3RyaW5nCisJIAlyZXF1ZXN0Q2hhckVuY29kaW5nID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldENoYXJhY3RlckVuY29kaW5nKCk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiByZXF1ZXN0IGNoYXJhY3RlciBlbmNvZGluZyA9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RDaGFyRW5jb2RpbmcpOworCSovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXsKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQkvL3JldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJfQorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsJCisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCS8qCisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC90ZXN0L2luZm8vIik7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL2ZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJZm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzU1L2YwNjFhYmVjMDM4ZjAwMWExY2I4YTFlYTA4MzQzOGFlIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS81NS9mMDYxYWJlYzAzOGYwMDFhMWNiOGExZWEwODM0MzhhZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTRmMmIwCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS81NS9mMDYxYWJlYzAzOGYwMDFhMWNiOGExZWEwODM0MzhhZQpAQCAtMCwwICsxLDcyIEBACis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiAKKwl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKwl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICA8Z3JvdXBJZD5kZS5rb3JhcC5zZXJ2aWNlczwvZ3JvdXBJZD4KKyAgPGFydGlmYWN0SWQ+dGVzdHM8L2FydGlmYWN0SWQ+CisgIDx2ZXJzaW9uPjAuMTwvdmVyc2lvbj4KKyAgPCEtLSAgPnBhY2thZ2luZz53YXI8L3BhY2thZ2luZy0tPgorICA8bmFtZT5Kc29uIFRlc3QgTWV0aG9kczwvbmFtZT4KKyAgCisgIDxkZXNjcmlwdGlvbj5UZXN0cyBmb3IgSnNvbiBQYXJzaW5nPC9kZXNjcmlwdGlvbj4KKyAgCisgIDxkZXBlbmRlbmNpZXM+CisgICAgPGRlcGVuZGVuY3k+CisgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KKyAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgorICAgICAgPHZlcnNpb24+My44LjE8L3ZlcnNpb24+CisgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgPC9kZXBlbmRlbmN5PgorICAgPGRlcGVuZGVuY3k+CisgICAgPGdyb3VwSWQ+Y29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmU8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+amFja3Nvbi1jb3JlPC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjIuOS42PC92ZXJzaW9uPgorICAgIDxzY29wZT5jb21waWxlPC9zY29wZT4KKyAgIDwvZGVwZW5kZW5jeT4KKwk8ZGVwZW5kZW5jeT4KKwkgIDxncm91cElkPmNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlPC9ncm91cElkPgorCSAgPGFydGlmYWN0SWQ+amFja3Nvbi1hbm5vdGF0aW9uczwvYXJ0aWZhY3RJZD4KKwkgIDx2ZXJzaW9uPjIuOS42PC92ZXJzaW9uPgorCTwvZGVwZW5kZW5jeT4KKwk8ZGVwZW5kZW5jeT4KKwkgIDxncm91cElkPmNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlPC9ncm91cElkPgorCSAgPGFydGlmYWN0SWQ+amFja3Nvbi1kYXRhYmluZDwvYXJ0aWZhY3RJZD4KKwkgIDx2ZXJzaW9uPjIuOS42PC92ZXJzaW9uPgorCSAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KKwk8L2RlcGVuZGVuY3k+CisJPGRlcGVuZGVuY3k+CisJCTxncm91cElkPmRlLmtvcmFwLmpzb248L2dyb3VwSWQ+CisJCTxhcnRpZmFjdElkPkpzb25UcmF2ZXJzZTwvYXJ0aWZhY3RJZD4KKwkJPHZlcnNpb24+MC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorCTwvZGVwZW5kZW5jeT4KKwk8ZGVwZW5kZW5jeT4KKwkJPGdyb3VwSWQ+ZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50PC9ncm91cElkPgorCQk8YXJ0aWZhY3RJZD5HbGVtbUNsaWVudDwvYXJ0aWZhY3RJZD4KKwkJPHZlcnNpb24+MC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorCTwvZGVwZW5kZW5jeT4KKyAgPC9kZXBlbmRlbmNpZXM+CisgIAorICA8YnVpbGQ+CisgICAgPHNvdXJjZURpcmVjdG9yeT5zcmM8L3NvdXJjZURpcmVjdG9yeT4KKyAgICA8cGx1Z2lucz4KKyAgICAgIDxwbHVnaW4+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWNvbXBpbGVyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+My43LjA8L3ZlcnNpb24+CisgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgIDxzb3VyY2U+MS44PC9zb3VyY2U+CisgICAgICAgICAgPHRhcmdldD4xLjg8L3RhcmdldD4KKyAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgPC9wbHVnaW4+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi13YXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4zLjIuMTwvdmVyc2lvbj4KKyAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgPGZhaWxPbk1pc3NpbmdXZWJYbWw+ZmFsc2U8L2ZhaWxPbk1pc3NpbmdXZWJYbWw+CisgICAgICAgICAgPHdhclNvdXJjZURpcmVjdG9yeT5XZWJDb250ZW50PC93YXJTb3VyY2VEaXJlY3Rvcnk+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvcGx1Z2luPgorICAgIDwvcGx1Z2lucz4KKyAgICA8ZmluYWxOYW1lPlRlc3RHbGVtbVNlcnZpY2VzPC9maW5hbE5hbWU+CisgIDwvYnVpbGQ+CisgIAorPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNTkvYjBjN2NmZWY4MTJiMDAxYzFjNDFjZTU1OWVhNWUxNmIgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzU5L2IwYzdjZmVmODEyYjAwMWMxYzQxY2U1NTllYTVlMTZiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ODdjOTQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzU5L2IwYzdjZmVmODEyYjAwMWMxYzQxY2U1NTllYTVlMTZiCkBAIC0wLDAgKzEsNjkxIEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA2LjEwLjIxIjsgLy8iMTcuMDYuMjAiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMSI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwkJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwkJU3RyaW5nCisJCQlzdGF0dXM7CisJCVV0aWxzCisJCQl1ID0gbmV3IFV0aWxzKCk7CisJCVByb3BlcnRpZXMKKwkJCXByb3BzOworCQkKKwkJLy8gcmVhZCB0ZXN0CisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJLy9IdHRwU2VydmxldENvbnRleHQKKwkJCisJCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCQlJbnB1dFN0cmVhbQorCQkJaW5Qcm9wID0gR2xlbW1TZXJ2aWNlcy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpLmdldFJlc291cmNlQXNTdHJlYW0oIkdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOworCQkKKwkJLy8gZW5kIG9mIHJlYWQgdGVzdAorCQkKKwkJLy8gdGVzdAorCQkvKgorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCQorCQkgKiBwcm9wcy5zZXRQcm9wZXJ0eSgicCIsICJ0ZXN0Iik7CisJCSAqCisJCUZpbGVPdXRwdXRTdHJlYW0gb3V0OworCQl0cnkgeworCQkJb3V0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oImdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOworCQkJcHJvcHMuc3RvcmUob3V0LCAgInRlc3QgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIik7CisJCQl9IAorCQljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfTsKKwkJKi8KKwkJCisJCS8vIGVuZCBvdGVzdAorCQkKKwkJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiQVBJOiAlczogL2luZGV4L3N0YXR1cy8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCisJCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCQlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIFBPU1Q6IC9pbmRleC9hZGQvOiB0ZXh0L3BsYWluCisJICogYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UuCisJICogVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQKKwkgKiBpbnRvIHRoZSBkYXRhYmFzZS4KKwkgKiBJbnB1dDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICovCisJQFBhdGgoImFkZCIpIEBQT1NUIEBDb25zdW1lcygidGV4dC9wbGFpbiIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBpbXBvcnRMZW1tYURhdGEoU3RyaW5nIGxpc3QpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSBhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCQorCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvYWRkLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZu+/vWhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCX0KKworCS8qIHZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIHZpZXdEQkluZm8KKworCisJLyogdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgLSBTdGF0dXM6IDxpPldvcmsgaW4gcHJvZ3Jlc3MuLi4hPC9pPik8L2g0PlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggIW9wdGlvbnMuZXF1YWxzKCJ1bmRlZiIpKQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMS9wcm9wMi9zcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogR2xlbW1TZXJ2aWNlcyAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uRGF0ZSwgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCS8vU3lzdGVtLm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzViLzYwM2JhMWZmOTQxYTAwMWExOWIyODc1ZGUwMjcyYzZjIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS81Yi82MDNiYTFmZjk0MWEwMDFhMTliMjg3NWRlMDI3MmM2YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGI2MWIxCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS81Yi82MDNiYTFmZjk0MWEwMDFhMTliMjg3NWRlMDI3MmM2YwpAQCAtMCwwICsxLDU1IEBACis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiAKKwl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKwl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICA8Z3JvdXBJZD5kZS5rb3JhcC5zZXJ2aWNlczwvZ3JvdXBJZD4KKyAgPGFydGlmYWN0SWQ+R2xlbW1TZXJ2aWNlczI8L2FydGlmYWN0SWQ+CisgIDx2ZXJzaW9uPjAuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgorICA8bmFtZT5HbGVtbVNlcnZpY2VzPC9uYW1lPgorICAKKyAgPGRlc2NyaXB0aW9uPlJFU1RmdWxsIEdsZW1tU2VydmljZXMgZsO8ciBLb3JBUDwvZGVzY3JpcHRpb24+CisgIAorICA8ZGVwZW5kZW5jaWVzPgorICAgIDxkZXBlbmRlbmN5PgorICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+CisgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KKyAgICAgIDx2ZXJzaW9uPjMuOC4xPC92ZXJzaW9uPgorICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgIDwvZGVwZW5kZW5jeT4KKyAgIDxkZXBlbmRlbmN5PgorICAgIDxncm91cElkPmphdmF4LnNlcnZsZXQ8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+c2VydmxldC1hcGk8L2FydGlmYWN0SWQ+CisgICAgPHZlcnNpb24+Mi41PC92ZXJzaW9uPgorICAgPC9kZXBlbmRlbmN5PgorICAgPCEtLSBodHRwczovL212bnJlcG9zaXRvcnkuY29tL2FydGlmYWN0L2phdmF4LndzLnJzL2phdmF4LndzLnJzLWFwaSAtLT4KKyAgIDxkZXBlbmRlbmN5PgorICAgIDxncm91cElkPmphdmF4LndzLnJzPC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPmphdmF4LndzLnJzLWFwaTwvYXJ0aWZhY3RJZD4KKyAgICA8dmVyc2lvbj4yLjA8L3ZlcnNpb24+CisgICA8L2RlcGVuZGVuY3k+CisgIDwvZGVwZW5kZW5jaWVzPgorICAKKyAgPGJ1aWxkPgorICAgIDxzb3VyY2VEaXJlY3Rvcnk+c3JjPC9zb3VyY2VEaXJlY3Rvcnk+CisgICAgPHBsdWdpbnM+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1jb21waWxlci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjMuNy4wPC92ZXJzaW9uPgorICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8c291cmNlPjEuODwvc291cmNlPgorICAgICAgICAgIDx0YXJnZXQ+MS44PC90YXJnZXQ+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvcGx1Z2luPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4td2FyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+My4yLjE8L3ZlcnNpb24+CisgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgIDxmYWlsT25NaXNzaW5nV2ViWG1sPmZhbHNlPC9mYWlsT25NaXNzaW5nV2ViWG1sPgorICAgICAgICAgIDx3YXJTb3VyY2VEaXJlY3Rvcnk+V2ViQ29udGVudDwvd2FyU291cmNlRGlyZWN0b3J5PgorICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICA8L3BsdWdpbj4KKyAgICA8ZmluYWxOYW1lPkdsZW1tU2VydmljZXM8L2ZpbmFsTmFtZT4KKyAgPC9idWlsZD4KKyAgCis8L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS81Yi9lMGRmYjc4MzBmM2UwMDFjMTM2M2JlYjkzMmFlNjNhMSBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNWIvZTBkZmI3ODMwZjNlMDAxYzEzNjNiZWI5MzJhZTYzYTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYzY2M3YgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNWIvZTBkZmI3ODMwZjNlMDAxYzEzNjNiZWI5MzJhZTYzYTEKQEAgLTAsMCArMSw3NDYgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5zcWwuQ29ubmVjdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5Ecml2ZXJNYW5hZ2VyOworaW1wb3J0IGphdmEuc3FsLlByZXBhcmVkU3RhdGVtZW50OworaW1wb3J0IGphdmEuc3FsLlJlc3VsdFNldDsKK2ltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CitpbXBvcnQgamF2YS5zcWwuU3RhdGVtZW50OworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworcHVibGljIGNsYXNzIEdsZW1tREIKKworeworCXN0YXRpYyBwdWJsaWMgU3RyaW5nIGRiVGFibGUgCT0gIkdsZW1tTGVtbWF0YSI7CisJc3RhdGljIFN0cmluZyBkYkxlbW1hIAkJIAk9ICJsZW1tYSI7CisJc3RhdGljIFN0cmluZyBkYldmCSAJCQk9ICJ3ZiI7CisJc3RhdGljIFN0cmluZyBkYlByb3AxIAkJCT0gInByb3AxIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDIgCQkJPSAicHJvcDIiOworCisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChvdmVyd3JpdHRlbiBieSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCXByaXZhdGUgc3RhdGljIFN0cmluZyBmbmFtZURCID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNlcnZlckhvc3QgPSAiLy9sb2NhbGhvc3Q6MTUyNy8iOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAoZmluYWwgYXNzaWdubWVudHMpOgorCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckVtYiA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuRW1iZWRkZWREcml2ZXIiOworCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckNsaWVudCA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50RHJpdmVyIjsKKworCWZpbmFsIHN0YXRpYyBib29sZWFuCisJCXVzZVByZXBhcmVkU3RtdCA9IHRydWU7IC8vIDE9dXNlIFByZXBhcmVkU3RhdGVtZW50IGFuZCBub3QgU3RhdGVtZW50LgorCQorCS8vIHZhbHVlcyB0byBiZSBpbnNlcnRlZDogbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMuCisJc3RhdGljIFN0cmluZyBpbnNlcnRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICgnJXMnLCAnJXMnLCAnJXMnLCAnJXMnLCAnJXMnKSI7CisJc3RhdGljIFN0cmluZyBpbnNlcnRQcmVwYXJlZFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKD8sID8sID8sID8sID8pIjsKKwkKKwkvKiB2YXJpYWJsZXMgKi8KKwlzdGF0aWMgaW50IG5FeGNlcHRTdG10CQk9IDA7CS8vIGNvdW50IG5vLiBvZiBleGNlcHRpb25zIGZvciBwcmVwYXJlZFN0bXQuCisJc3RhdGljIGludCBuRXhjZXB0SW5zZXJ0CT0gMDsJLy8gY291bnQgbm8uIG9mIGV4Y2VwdGlvbnMgZm9yIEluc2VydHMuCisJCisJLyoKKwkgKiBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkgKiAKKwkgKiBBcmd1bWVudHM6CisJICogcHJvcHMJOiBQcm9wZXJ0aWVzIGxvYWRlZCBieSB0aGUgR2xlbW1TZXJ2aWNlcy4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgZnVuY3Rpb24gbG9hZHMgb25seSB0aG9zZSBDb25zdGFudHMgbmVlZGVkIGluIHRoaXMgY2xhc3MuCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzCXByb3BzKQorCQorCXsKKwlmbmFtZURCCQkgCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAJIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCXNlcnZlckhvc3QJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgInNlcnZlckhvc3QiLAkiLy9sb2NhbGhvc3Q6MTUyNy8iKTsKKwlkZXJieURCVVJMIAkJPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJCQkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIHdoZW4gaW5kZXhpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSwgc2VsZWN0IHRoZSBzdWJtaXR0ZWQgZGJwYXRoLAorCS8vIChub3QgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZGJwYXRoOworCQorCS8vIG9wZW4gcmVhZGVyIG9uIEdsZW1tIExlbW1hdGE6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJCisJCW5FcnJvcnMgPSB3cml0ZURCTGVtbWF0YShpbik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIGZyb20gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwkvLyBjbG9zZSBSZWFkZXI6CisJdHJ5IHsKKwkJaW4uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQluRXJyb3JzID0gLTE7CisJCX0KKwkKKyAJaWYoIG5FcnJvcnMgPT0gMCApCisgCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydCBkb25lIHN1Y2Nlc3NmdWxseS5cbiIsIGZ1bmMpOworIAllbHNlCisgCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydDogJWQgRXJyb3JzIVxuIiwgZnVuYywgbkVycm9ycyk7CisgCQorCXJldHVybiBuRXJyb3JzOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhCisJCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAorCSAqICAgICAgICAgICAgICAgICAgICAgICB3cml0ZURCTGVtbWF0YSgpCisJICogICAgICAgICAgICAgICAgICAgICAgIAorCSAqIHN0b3JlcyBsaXN0IG9mIGxlbW1hdGEgKyBpbmZvcyBpbnRvIERlcmJ5IGRiLgorCSAqIEZpbGUgZm9ybWF0OiAiTGVtbWEgRGVjb21wb3NpdGlvbiBXZiIsCisJICogICAgICAgICAgICAgIGUuZy46ICJIw6R1c2VyICstIEhhdXMiLgorCSAqIFJldHVybnM6IDAgPSBPSyBvciAtMTogZ2VuZXJhbCBlcnJvciBvciA+IDA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogMDkuMDEuMjAvRkIKKwkgKiAwNC4xMS4yMS9GQiB0dXJuIGF1dG9jb21taXQgb2ZmIHRvIGFjY2VsZXJhdGUgaHVnZSBhbW91bnQgb2YgaW5zZXJ0aW9ucy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hdGEoQnVmZmVyZWRSZWFkZXIgaW4pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWF0YSI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlQcmVwYXJlZFN0YXRlbWVudAorCQlzdG10UHJlcCA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgCSA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CQorCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCW5JbnNlcnRlZCA9IDAsCS8vIG5vLiBvZiBsZW1tYS93ZiBwYWlycyBpbXBvcnRlZC4KKwkJcmV0ID0gMDsgLy8gT0suCisJYm9vbGVhbgorCQljb250YWluc1NwZWM7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlLAorCS8vIHNldCBBdXRvY29tbWl0ID0gZmFsc2UgdG8gYWNjZWxlcmF0ZSBpbnNlcnRpb25zOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQljb24uc2V0QXV0b0NvbW1pdChmYWxzZSk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkIChhdXRvQ29tbWl0PW9mZikuXG4iLCBmdW5jKTsKKworCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCXN0bXRQcmVwID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0UHJlcGFyZWRRdWVyeSk7CisJCWVsc2UKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisKKwkJd2hpbGUoIChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoICE9IDMgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6ICclcycgaGFzICVkIGNvbXBvbmVudHMhIEV4cGVjdGVkID0gMyEgQ2Fubm90IGJlIHN0b3JlZCFcbiIsIGZ1bmMsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJCW5FcnJvcnMrKzsKKwkJCQljb250aW51ZTsKKwkJCQl9CisJCQkKKwkJCS8vIEdldCBJbmZvLCBpZiB3b3JkZm9ybSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgJy0nLCBpbnRlcnB1bmN0aW9uIGV0Yy46CisJCQkvLyBsZW1tYUluZm9bMl0gPSB3b3JkZm9ybS4KKwkJCWNvbnRhaW5zU3BlYyA9IExlbW1hSW5mby5pc1dmU3BlY2lhbENhc2UobGVtbWFJbmZvWzJdKTsKKwkJCS8vIHN0b3JlIGludG8gREI6CisJCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZChzdG10UHJlcCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvcyhzdG10LCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJCisJCQlpZiggcmV0ICE9IDAgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBzdG9yZSBsZW1tYSAnJXMnIGludG8gREIhIChyZXQ9JWQpXG4iLCBmdW5jLCBsaW5lLCByZXQpOworCQkJCW5FcnJvcnMrKzsgCisJCQkJfQorCQkJZWxzZQorCQkJCW5JbnNlcnRlZCsrOworCQkJfSAvLyB3aGlsZQorCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBHbGVtbSBsZW1tYXRhK2luZm9zIGZyb20gZmlsZSEgRXhpdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7IAorCQl9CQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IAorCQl7IAorCQl0cnkgeworCQkJLy8gaW1wb3J0YW50OiBub3cgY29tbWl0LCBhcyBhdXRvQ29tbWl0IGlzIGRlYWN0aXZhdGVkLAorCQkJLy8gdGhpcyBhbHNvIHJlbW92ZXMgZGF0YWJhc2UgbG9ja3M6CisJCQljb24uY29tbWl0KCk7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbW1pdCBzdWNjZXNzZnVsbC5cbiIsIGZ1bmMpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbW1pdCBhdCB0aGUgZW5kIG9mIHRoZSB3ZnMgbGlzdCBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJCisJCXRyeSB7IC8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIAorCQkJCXN0bXQuY2xvc2UoKTsKKwkJCWlmKCBzdG10UHJlcCAhPSBudWxsICkgCisJCQkJc3RtdFByZXAuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiSW5mbyA6ICVzOiBuby4gb2YgbGVtbWF0YS93ZiBwYWlycyBpbnNlcnRlZCA9ICVkLlxuIiwgZnVuYywgbkluc2VydGVkKTsKKwkKKwlyZXR1cm4gbkVycm9yczsgLy8gMD1PSywgPjAgPSBuby4gb2YgZXJyb3JzLgorCX0gLy8gd3JpdGVEQkxlbW1hdGEKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQ6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gcnVsZXMgaW50byBEZXJieSBEQi4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgaXMgdGhlIHZlcnNpb24gd2l0aCBhIFByZXBhcmVkUXVlcnkuCisJICogUGFyYW1ldGVyczoKKwkgKiBzcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTcuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoCisJCQlQcmVwYXJlZFN0YXRlbWVudCBzdG10LCAKKwkJCVN0cmluZyBsZW1tYSwgCisJCQlTdHJpbmcgd2YsIAorCQkJU3RyaW5nIGRlY29tcG9zaXRpb24sIAorCQkJYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQiOworCWZpbmFsIGJvb2xlYW4KKwkJYkxvZyA9IGZhbHNlOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCWJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICAKKwkvLyBmb3IgbG9naW5nIG9ubHk6CisJc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCWlmKCBiTG9nICkKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisgICAgLy8gbm93IGluc2VydCBuZXcgdmFsdWVzIGludG8gUHJlcGFyZWRTdGF0ZW1lbnQ6CisgICAgdHJ5IHsKKyAgICAJc3RtdC5zZXRTdHJpbmcoIDEsIGxlbW1hKTsKKyAgICAgICAgc3RtdC5zZXRTdHJpbmcoIDIsIHdmKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDMsIHByb3AxKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDQsIHByb3AyKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDUsIHNwZWMpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByZXBhcmVkIHN0bXQgPSAnJXMnLlxuIiwgIGZ1bmMsIHN0bXQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUxKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoCSJFcnJvcjogJXM6IHdoaWxlIGZpbGxpbmcgcHJlcGFyZWQgc3RhdGVtZW50IHdpdGggbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSclYicgcHJvcDI9JyViJyBzcGVjPSclYichXG4iLCAgCisJCQkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQlpZiggKytuRXhjZXB0U3RtdCA8PSAxICkKKwkJCWUxLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorICAgIAorICAgIHRyeSB7CisJCS8vIGV4ZWN1dGUgdGhlIGZpbGxlZCBwcmVwYXJlZCBzdGF0ZW1lbnQ6CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiEgKG49JWQpXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLCBuKTsKKyAJCQlyZXR1cm4gMjsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWlmKCArK25FeGNlcHRJbnNlcnQgPD0gMSApCisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMzsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvczoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBpbnRvIERlcmJ5IERCLgorCSAqIFBhcmFtZXRlcnM6CisJICogY29udGFpbnNTcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTAuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3MoU3RhdGVtZW50IHN0bXQsIFN0cmluZyBsZW1tYSwgU3RyaW5nIHdmLCBTdHJpbmcgZGVjb21wb3NpdGlvbiwgYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3MiOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCUJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICBzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgICAgCisgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisJdHJ5IHsKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZShzcWxJbnNlcnQpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDE7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hRGF0YQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGZyb20gdGhlIEdsZW1tREIuCisJICogSW5wdXQ6IGxlbW1hICsgR0xFTU1fT1BUU194eHggKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYURhdGEoTGVtbWFJbmZvIGxlbW1hSW5mbywgUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hRGF0YSI7CisKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlsZW1tYUluZm8uY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlsZW1tYUluZm8uc3RtdCA9IGxlbW1hSW5mby5jb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWludCByID0gcmVhZERCTGVtbWEobGVtbWFJbmZvLnN0bXQsIGxlbW1hSW5mbyk7CisJCQkKKwkJaWYoIHIgIT0gMCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBnZXQgZGF0YSBmb3IgbGVtbWE9JyVzJyBvcHRpb25zPSclcychXG4iLCAKKwkJCQkJZnVuYywgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCQkJcmV0dXJuIDE7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBsZW1tYUluZm8uY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWFEYXRhCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgYnkgYWNjZXNzaW5nIHRoZSBHbGVtbURCLgorCSAqIElucHV0IDogbGVtbWEgKyBwcm9wMSsyIChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiBPdXRwdXQ6IAorCSAqICAtIGNvbnRhaW5zIGEgUmVzdWx0U2V0IGZvciBmZXRjaGluZyB0aGUgd29yZGZvcm1zLgorCSAqIAkgIFRoaXMgUmVzdWx0U2V0IHdpbGwgaGF2ZSBiZSBiZSBjbG9zZWQgd2l0aCBMZW1tYUluZm8uY2xvc2UoKS4KKwkgKiAJICBUaGUgbm8uIG9mIGZvdW5kIHdvcmRmb3JtcyBpcyBub3Qga25vd24gdGlsbCB3ZQorCSAqIAkgIGZldGNoIGFsbCBvZiB0aGVtIGZyb20gUmVzdWx0U2V0ISAKKwkgKiAJLSBkdWUgdG8gU0VMRUNUIERJU1RJTkNUIG9ubHkgdW5pcSB3ZiBhcmUgcmV0dXJuZWQuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hKFN0YXRlbWVudCBzdG10LCBMZW1tYUluZm8gbGVtbWFJbmZvKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWEiOworCVN0cmluZworCQlzcWw7CisJCQorCXNxbCA9IFN0cmluZy5mb3JtYXQoIlNFTEVDVCBESVNUSU5DVCB3ZiBmcm9tICVzIFdIRVJFIGxlbW1hPSclcycgJXMgJXMgJXMiLCAKKwkJCWRiVGFibGUsCisJCQlsZW1tYUluZm8ubGVtbWEsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICJBTkQgcHJvcDE9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AxID09IDEgPyAiQU5EIHByb3AxPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICJBTkQgcHJvcDI9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AyID09IDEgPyAiQU5EIHByb3AyPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICJBTkQgc3BlYz0ndHJ1ZSciICAgOiAKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIkFORCBzcGVjPSdmYWxzZSciICA6ICIiKTsKKwkKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCBmdW5jLCBsZW1tYUluZm8ucHJvcDEsIGxlbW1hSW5mby5wcm9wMiwgbGVtbWFJbmZvLnNwZWMpOworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsID0gJyVzJy5cbiIsIGZ1bmMsIHNxbCk7CisKKwl0cnkgeworCQlsZW1tYUluZm8ucmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsJCisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hlbiBleGVjdXRpbmcgc3FsPSclcychXG4iLCBmdW5jLCBzcWwpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBhbGwgc3FsIHN0dWZmIGFyZSBjbG9zZWQgb3V0c2lkZSB0aGlzIGZ1bmN0aW9uLCBzbyBkb24ndCBjbG9zZSB0aGVtIGhlcmUhCisJCX0JCisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvcworCSAqIFJldHVybnMgR2VuZXJhbCBJbmZvcyBhYm91dCB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgcmVhZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkluZm9zKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlkYkluZm8gPSByZWFkRGJMZW1tYXRhSW5mb3Moc3RtdCk7CisJCQkKKwkJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHJlYWQgR2VuZXJhbCBJbmZvcyBmcm9tIEdsZW1tIERhdGFiYXNlIVxuIiwgZnVuYyk7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiBudWxsOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIGNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIHN0bXQuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gbWF5IGJlIG51bGwuCisJCQorCX0gLy8gcmVhZERiSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJMZW1tYXRhSW5mb3M6CisJICogcmVhZHMgYW5kIHJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY29udGVudCAKKwkgKiBvZiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogUmV0dXJucyAwPU9LIG9yIGVycm9yIGNvZGUgPiAwLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiTGVtbWF0YUluZm9zKFN0YXRlbWVudCBzdG10KQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJyZWFkRGJMZW1tYUluZm9zIjsKKwlTdHJpbmdbXQorCQlzcWwgPSB7CSJTRUxFQ1QgQ09VTlQoZGlzdGluY3QgbGVtbWEpIGZyb20gIiArIGRiVGFibGUgLAkvLyBjb3VudHMgbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlLAkJCQkJLy8gY291bnRzIHRvdGFsIG5vLiBvZiBzdG9yZWQgd29yZGZvcm1zLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9dHJ1ZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9dHJ1ZSJ9OworCVJlc3VsdFNldAorCQlyZXMgPSBudWxsOyAKKwlpbnRbXQorCQluQ291bnRzID0gbmV3IGludFtzcWwubGVuZ3RoXTsKKwlpbnQJCQorCQlpID0gMCwgCisJCW5EaXN0TGVtbWF0YSA9IC0xLAkvLyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YSBpbiBEQi4KKwkJbldmcwkJID0gLTE7CS8vIG5vLiBvZiB3b3JkZm9ybXMgaW4gREIuCisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGV4dHJhY3RpbmcgYWdyZWdhdGVkIGluZm9zIGFib3V0IERhdGFiYXNlIGNvbnRlbnRzLi4uXG4iLCBmdW5jKTsKKwkKKwlkYkluZm8gPSBuZXcgR2xlbW1EQkluZm8oKTsKKworCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCXRyeSB7CisJCWZvcihpPTA7IGk8c3FsLmxlbmd0aDsgaSsrKQorCQkJeworCQkJcmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsW2ldKTsKKwkJCWlmKCByZXMubmV4dCgpICkKKwkJCQlkYkluZm8uY291bnRzW2ldID0gcmVzLmdldEludCgxKTsgLy8gY291bnQgaXMgaW4gY29sdW1uIDEuCisJCQllbHNlCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGV4dHJhY3QgY291bnQgZnJvbSAnJXMnIVxuIiwgZnVuYywgc3FsW2ldKTsKKwkJCQlkYkluZm8uY291bnRzW2ldID0gLTE7CisJCQkJfQorCQkJfQorICAgICAgIAorICAgICAgICB9CisgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgCXsKKyAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBzcWw9JyVzJyBmYWlsZWQhXG4iLCBmdW5jLCBzcWxbaV0pOworICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgIHJldHVybiBudWxsOworICAgIAl9CisJZmluYWxseSB7CisJCXRyeSB7CisJCQlyZXMuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0KKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIE9LCisJfSAvLyByZWFkRGJMZW1tYXRhSW5mb3MKKwkKKwkvKioqKioqKioqKioqKioqKioqKiogVGVzdCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3NfdGVzdAorCSAqIFRoaXMgaXMgZGVidWcgY29kZSB3cml0dGVuIHRvIHRlc3QgaWYgd2UgY2FuIGFjY2VzcyB0aGUgRGVyYnkKKwkgKiBEYXRhYmFzZSBmcm9tIGFuIGV4dGVybmFsIEphdmEgUHJvZ3JhbW0uCisJICogMDguMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IHJlYWREYkluZm9zX3Rlc3QoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCVN0cmluZworCQlpbnNlcnRTdG10ID0gIiI7CisJCisJLy8gQ29ubmVjdCB0byBEZXJieSBkYXRhYmFzZToKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkJCisJCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCQl0cnkKKwkJCXsKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBTdHJpbmcgCisgICAgICAgICAgICAJc3FsID0gIlNFTEVDVCAqIEZST00gIiArIGRiVGFibGU7CisgICAgICAgICAgICBSZXN1bHRTZXQgCisgICAgICAgICAgICAJcmVzdWx0ID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsKKyAKKyAgICAgICAgICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogdGFibGUgJyVzJzpcbiIsICBmdW5jLCBkYlRhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKHJlc3VsdC5uZXh0KCkpIHsKKyAgICAgICAgICAgIAlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCInJXMnIDogJyVzJyA6ICclcycgOiAnJXMnIC5cbiIsIHJlc3VsdC5nZXRTdHJpbmcoMSksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDIpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygzKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoNCkpOworICAgICAgICAJCWluc2VydFN0bXQgPSBpbnNlcnRTdG10ICsgIjxwPiIgKyByZXN1bHQuZ2V0U3RyaW5nKDEpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDIpICsgIiA6ICIgKworICAgICAgICAgICAgICAgIAkJICAgICByZXN1bHQuZ2V0U3RyaW5nKDMpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDQpICsgIjwvcD4iOworICAgICAgICAgICAgCX0KKwkJCX0KKwkgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgICAgIAl7CisJICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGluc2VydFN0bXQ9JyVzJyBmYWlsZWQhLlxuIiwgZnVuYywgc3RtdCk7CisgICAgICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgICAgICBjb24uY2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3RpbmcgJyVzIGZhaWxlZCFcbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwl0cnkgeworCQljb24uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQkKKwl9IC8vIHJlYWREYkluZm9zX3Rlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiBpbXBvcnRHbGVtbUxlbWF0YV90ZXN0CisJICogVGVzdCBWZXJzaW9uLgorCSAqIDEyLjEyLjE5L0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdChTdHJpbmcgZm4pCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YV90ZXN0IjsKKwlJbnB1dFN0cmVhbSAKKwkJaW47CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4yID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCXI7CisJCisJLyoKKwkgKiBSZWFkIExlbW1hdGEgKyBJbmZvIGZyb20gZmlsZTogCisJICovCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJCisJdHJ5IHsKKwkJLy9pbiA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKCBuZXcgRmlsZUlucHV0U3RyZWFtKGZuKSApOworCQlpbjIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCXdoaWxlKCAobGluZSA9IGluMi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggPT0gMyApCisJCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IEltcG9ydDogbGVtPSclcycgRGVjb21wPSclcycgV2Y9JyVzJy5cbiIsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzFdLCBsZW1tYUluZm9bMl0pOworCQkJZWxzZQorCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiBpbXBvcnRHbGVtbUxhbWF0YTogJyVzJyBoYXMgJWQgY29tcG9uZW50cyFcbiIsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJfQorCQl9IAorCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgb3BlbiAnJXMnIVxuIiwgZnVuYywgZm4pOworCQlyZXR1cm4gMTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCisJdHJ5IHsKKwkJaW4yLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQl9CisJCisJLyogQ2hlY2sgY29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwkgKi8gCisJciA9IHJlYWREYkluZm9zX3Rlc3QoKTsKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIHI7CisJCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNWUvZjAwNjg3MDRhYzNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzVlL2YwMDY4NzA0YWMzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzM2QwMjYKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzVlL2YwMDY4NzA0YWMzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsNzM5IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKK2ltcG9ydCBqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7CitpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAob3ZlcndyaXR0ZW4gYnkgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKGZpbmFsIGFzc2lnbm1lbnRzKToKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJFbWIgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIjsKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLyoKKwkgKiBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkgKiAKKwkgKiBBcmd1bWVudHM6CisJICogcHJvcHMJOiBQcm9wZXJ0aWVzIGxvYWRlZCBieSB0aGUgR2xlbW1TZXJ2aWNlcy4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgZnVuY3Rpb24gbG9hZHMgb25seSB0aG9zZSBDb25zdGFudHMgbmVlZGVkIGluIHRoaXMgY2xhc3MuCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzCXByb3BzKQorCQorCXsKKwlmbmFtZURCCQkgCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAJIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCXNlcnZlckhvc3QJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgInNlcnZlckhvc3QiLAkiLy9sb2NhbGhvc3Q6MTUyNy8iKTsKKwlkZXJieURCVVJMIAkJPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJCQkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIHdoZW4gaW5kZXhpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSwgc2VsZWN0IHRoZSBzdWJtaXR0ZWQgZGJwYXRoLAorCS8vIChub3QgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZGJwYXRoOworCQorCS8vIG9wZW4gcmVhZGVyIG9uIEdsZW1tIExlbW1hdGE6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJCisJCW5FcnJvcnMgPSB3cml0ZURCTGVtbWF0YShpbik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIGZyb20gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwkvLyBjbG9zZSBSZWFkZXI6CisJdHJ5IHsKKwkJaW4uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQluRXJyb3JzID0gLTE7CisJCX0KKwkKKyAJaWYoIG5FcnJvcnMgPT0gMCApCisgCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydCBkb25lIHN1Y2Nlc3NmdWxseS5cbiIsIGZ1bmMpOworIAllbHNlCisgCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydDogJWQgRXJyb3JzIVxuIiwgZnVuYywgbkVycm9ycyk7CisgCQorCXJldHVybiBuRXJyb3JzOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhCisJCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAorCSAqICAgICAgICAgICAgICAgICAgICAgICB3cml0ZURCTGVtbWF0YSgpCisJICogICAgICAgICAgICAgICAgICAgICAgIAorCSAqIHN0b3JlcyBsaXN0IG9mIGxlbW1hdGEgKyBpbmZvcyBpbnRvIERlcmJ5IGRiLgorCSAqIEZpbGUgZm9ybWF0OiAiTGVtbWEgRGVjb21wb3NpdGlvbiBXZiIsCisJICogICAgICAgICAgICAgIGUuZy46ICJIw6R1c2VyICstIEhhdXMiLgorCSAqIFJldHVybnM6IDAgPSBPSyBvciAtMTogZ2VuZXJhbCBlcnJvciBvciA+IDA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogMDkuMDEuMjAvRkIKKwkgKiAwNC4xMS4yMS9GQiB0dXJuIGF1dG9jb21taXQgb2ZmIHRvIGFjY2VsZXJhdGUgaHVnZSBhbW91bnQgb2YgaW5zZXJ0aW9ucy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hdGEoQnVmZmVyZWRSZWFkZXIgaW4pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWF0YSI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlQcmVwYXJlZFN0YXRlbWVudAorCQlzdG10UHJlcCA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgCSA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CQorCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCW5JbnNlcnRlZCA9IDAsCS8vIG5vLiBvZiBsZW1tYS93ZiBwYWlycyBpbXBvcnRlZC4KKwkJcmV0ID0gMDsgLy8gT0suCisJYm9vbGVhbgorCQljb250YWluc1NwZWM7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlLAorCS8vIHNldCBBdXRvY29tbWl0ID0gZmFsc2UgdG8gYWNjZWxlcmF0ZSBpbnNlcnRpb25zOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQljb24uc2V0QXV0b0NvbW1pdChmYWxzZSk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkIChhdXRvQ29tbWl0PW9mZikuXG4iLCBmdW5jKTsKKworCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCXN0bXRQcmVwID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0UHJlcGFyZWRRdWVyeSk7CisJCWVsc2UKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisKKwkJd2hpbGUoIChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoICE9IDMgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6ICclcycgaGFzICVkIGNvbXBvbmVudHMhIEV4cGVjdGVkID0gMyEgQ2Fubm90IGJlIHN0b3JlZCFcbiIsIGZ1bmMsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJCW5FcnJvcnMrKzsKKwkJCQljb250aW51ZTsKKwkJCQl9CisJCQkKKwkJCS8vIEdldCBJbmZvLCBpZiB3b3JkZm9ybSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgJy0nLCBpbnRlcnB1bmN0aW9uIGV0Yy46CisJCQkvLyBsZW1tYUluZm9bMl0gPSB3b3JkZm9ybS4KKwkJCWNvbnRhaW5zU3BlYyA9IExlbW1hSW5mby5pc1dmU3BlY2lhbENhc2UobGVtbWFJbmZvWzJdKTsKKwkJCS8vIHN0b3JlIGludG8gREI6CisJCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZChzdG10UHJlcCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvcyhzdG10LCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJCisJCQlpZiggcmV0ICE9IDAgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBzdG9yZSBsZW1tYSAnJXMnIGludG8gREIhIChyZXQ9JWQpXG4iLCBmdW5jLCBsaW5lLCByZXQpOworCQkJCW5FcnJvcnMrKzsgCisJCQkJfQorCQkJZWxzZQorCQkJCW5JbnNlcnRlZCsrOworCQkJfSAvLyB3aGlsZQorCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBHbGVtbSBsZW1tYXRhK2luZm9zIGZyb20gZmlsZSEgRXhpdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7IAorCQl9CQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IAorCQl7IAorCQl0cnkgeworCQkJLy8gaW1wb3J0YW50OiBub3cgY29tbWl0LCBhcyBhdXRvQ29tbWl0IGlzIGRlYWN0aXZhdGVkLAorCQkJLy8gdGhpcyBhbHNvIHJlbW92ZXMgZGF0YWJhc2UgbG9ja3M6CisJCQljb24uY29tbWl0KCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbW1pdCBhdCB0aGUgZW5kIG9mIHRoZSB3ZnMgbGlzdCBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJCX0JCQorCQkKKwkJdHJ5IHsgLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQkJaWYoIGNvbiAhPSBudWxsICkgCisJCQkJY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgCisJCQkJc3RtdC5jbG9zZSgpOworCQkJaWYoIHN0bXRQcmVwICE9IG51bGwgKSAKKwkJCQlzdG10UHJlcC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJJbmZvIDogJXM6IG5vLiBvZiBsZW1tYXRhL3dmIHBhaXJzIGluc2VydGVkID0gJWQuXG4iLCBmdW5jLCBuSW5zZXJ0ZWQpOworCQorCXJldHVybiBuRXJyb3JzOyAvLyAwPU9LLCA+MCA9IG5vLiBvZiBlcnJvcnMuCisJfSAvLyB3cml0ZURCTGVtbWF0YQorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZDoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBydWxlcyBpbnRvIERlcmJ5IERCLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBpcyB0aGUgdmVyc2lvbiB3aXRoIGEgUHJlcGFyZWRRdWVyeS4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIHNwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxNy4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCgKKwkJCVByZXBhcmVkU3RhdGVtZW50IHN0bXQsIAorCQkJU3RyaW5nIGxlbW1hLCAKKwkJCVN0cmluZyB3ZiwgCisJCQlTdHJpbmcgZGVjb21wb3NpdGlvbiwgCisJCQlib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCI7CisJZmluYWwgYm9vbGVhbgorCQliTG9nID0gZmFsc2U7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJYm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIAorCS8vIGZvciBsb2dpbmcgb25seToKKwlzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJaWYoIGJMb2cgKQorCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKyAgICAvLyBub3cgaW5zZXJ0IG5ldyB2YWx1ZXMgaW50byBQcmVwYXJlZFN0YXRlbWVudDoKKyAgICB0cnkgeworICAgIAlzdG10LnNldFN0cmluZyggMSwgbGVtbWEpOworICAgICAgICBzdG10LnNldFN0cmluZyggMiwgd2YpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oMywgcHJvcDEpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNCwgcHJvcDIpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNSwgc3BlYyk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJlcGFyZWQgc3RtdCA9ICclcycuXG4iLCAgZnVuYywgc3RtdC50b1N0cmluZygpKTsKKyAgICAgICAgfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZTEpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigJIkVycm9yOiAlczogd2hpbGUgZmlsbGluZyBwcmVwYXJlZCBzdGF0ZW1lbnQgd2l0aCBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JyViJyBwcm9wMj0nJWInIHNwZWM9JyViJyFcbiIsICAKKwkJCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUxLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorICAgIAorICAgIHRyeSB7CisJCS8vIGV4ZWN1dGUgdGhlIGZpbGxlZCBwcmVwYXJlZCBzdGF0ZW1lbnQ6CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiEgKG49JWQpXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLCBuKTsKKyAJCQlyZXR1cm4gMjsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAzOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIGludG8gRGVyYnkgREIuCisJICogUGFyYW1ldGVyczoKKwkgKiBjb250YWluc1NwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxMC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvcyhTdGF0ZW1lbnQgc3RtdCwgU3RyaW5nIGxlbW1hLCBTdHJpbmcgd2YsIFN0cmluZyBkZWNvbXBvc2l0aW9uLCBib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvcyI7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJQm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIHNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAgICAKKyAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKwl0cnkgeworCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKHNxbEluc2VydCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWFEYXRhCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgZnJvbSB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dDogbGVtbWEgKyBHTEVNTV9PUFRTX3h4eCAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hRGF0YShMZW1tYUluZm8gbGVtbWFJbmZvLCBQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWFEYXRhIjsKKworCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWxlbW1hSW5mby5jb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCWxlbW1hSW5mby5zdG10ID0gbGVtbWFJbmZvLmNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJaW50IHIgPSByZWFkREJMZW1tYShsZW1tYUluZm8uc3RtdCwgbGVtbWFJbmZvKTsKKwkJCQorCQlpZiggciAhPSAwICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGdldCBkYXRhIGZvciBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyFcbiIsIAorCQkJCQlmdW5jLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGxlbW1hSW5mby5jb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYURhdGEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBieSBhY2Nlc3NpbmcgdGhlIEdsZW1tREIuCisJICogSW5wdXQgOiBsZW1tYSArIHByb3AxKzIgKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqIE91dHB1dDogCisJICogIC0gY29udGFpbnMgYSBSZXN1bHRTZXQgZm9yIGZldGNoaW5nIHRoZSB3b3JkZm9ybXMuCisJICogCSAgVGhpcyBSZXN1bHRTZXQgd2lsbCBoYXZlIGJlIGJlIGNsb3NlZCB3aXRoIExlbW1hSW5mby5jbG9zZSgpLgorCSAqIAkgIFRoZSBuby4gb2YgZm91bmQgd29yZGZvcm1zIGlzIG5vdCBrbm93biB0aWxsIHdlCisJICogCSAgZmV0Y2ggYWxsIG9mIHRoZW0gZnJvbSBSZXN1bHRTZXQhIAorCSAqIAktIGR1ZSB0byBTRUxFQ1QgRElTVElOQ1Qgb25seSB1bmlxIHdmIGFyZSByZXR1cm5lZC4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWEoU3RhdGVtZW50IHN0bXQsIExlbW1hSW5mbyBsZW1tYUluZm8pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYSI7CisJU3RyaW5nCisJCXNxbDsKKwkJCisJc3FsID0gU3RyaW5nLmZvcm1hdCgiU0VMRUNUIERJU1RJTkNUIHdmIGZyb20gJXMgV0hFUkUgbGVtbWE9JyVzJyAlcyAlcyAlcyIsIAorCQkJZGJUYWJsZSwKKwkJCWxlbW1hSW5mby5sZW1tYSwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIkFORCBwcm9wMT0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICJBTkQgcHJvcDE9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIkFORCBwcm9wMj0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICJBTkQgcHJvcDI9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAxID8gIkFORCBzcGVjPSd0cnVlJyIgICA6IAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiQU5EIHNwZWM9J2ZhbHNlJyIgIDogIiIpOworCQorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIGZ1bmMsIGxlbW1hSW5mby5wcm9wMSwgbGVtbWFJbmZvLnByb3AyLCBsZW1tYUluZm8uc3BlYyk7CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWwgPSAnJXMnLlxuIiwgZnVuYywgc3FsKTsKKworCXRyeSB7CisJCWxlbW1hSW5mby5yZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOwkKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGVuIGV4ZWN1dGluZyBzcWw9JyVzJyFcbiIsIGZ1bmMsIHNxbCk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisJZmluYWxseSB7CisJCS8vIGFsbCBzcWwgc3R1ZmYgYXJlIGNsb3NlZCBvdXRzaWRlIHRoaXMgZnVuY3Rpb24sIHNvIGRvbid0IGNsb3NlIHRoZW0gaGVyZSEKKwkJfQkKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zCisJICogUmV0dXJucyBHZW5lcmFsIEluZm9zIGFib3V0IHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiByZWFkIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiSW5mb3MoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWRiSW5mbyA9IHJlYWREYkxlbW1hdGFJbmZvcyhzdG10KTsKKwkJCQorCQlpZiggZGJJbmZvID09IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgcmVhZCBHZW5lcmFsIEluZm9zIGZyb20gR2xlbW0gRGF0YWJhc2UhXG4iLCBmdW5jKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIG51bGw7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgc3RtdC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBtYXkgYmUgbnVsbC4KKwkJCisJfSAvLyByZWFkRGJJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkxlbW1hdGFJbmZvczoKKwkgKiByZWFkcyBhbmQgcmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjb250ZW50IAorCSAqIG9mIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiBSZXR1cm5zIDA9T0sgb3IgZXJyb3IgY29kZSA+IDAuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJMZW1tYXRhSW5mb3MoU3RhdGVtZW50IHN0bXQpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInJlYWREYkxlbW1hSW5mb3MiOworCVN0cmluZ1tdCisJCXNxbCA9IHsJIlNFTEVDVCBDT1VOVChkaXN0aW5jdCBsZW1tYSkgZnJvbSAiICsgZGJUYWJsZSAsCS8vIGNvdW50cyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YS4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUsCQkJCQkvLyBjb3VudHMgdG90YWwgbm8uIG9mIHN0b3JlZCB3b3JkZm9ybXMuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj10cnVlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj10cnVlIn07CisJUmVzdWx0U2V0CisJCXJlcyA9IG51bGw7IAorCWludFtdCisJCW5Db3VudHMgPSBuZXcgaW50W3NxbC5sZW5ndGhdOworCWludAkJCisJCWkgPSAwLCAKKwkJbkRpc3RMZW1tYXRhID0gLTEsCS8vIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhIGluIERCLgorCQluV2ZzCQkgPSAtMTsJLy8gbm8uIG9mIHdvcmRmb3JtcyBpbiBEQi4KKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogZXh0cmFjdGluZyBhZ3JlZ2F0ZWQgaW5mb3MgYWJvdXQgRGF0YWJhc2UgY29udGVudHMuLi5cbiIsIGZ1bmMpOworCQorCWRiSW5mbyA9IG5ldyBHbGVtbURCSW5mbygpOworCisJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJdHJ5IHsKKwkJZm9yKGk9MDsgaTxzcWwubGVuZ3RoOyBpKyspCisJCQl7CisJCQlyZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWxbaV0pOworCQkJaWYoIHJlcy5uZXh0KCkgKQorCQkJCWRiSW5mby5jb3VudHNbaV0gPSByZXMuZ2V0SW50KDEpOyAvLyBjb3VudCBpcyBpbiBjb2x1bW4gMS4KKwkJCWVsc2UKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZXh0cmFjdCBjb3VudCBmcm9tICclcychXG4iLCBmdW5jLCBzcWxbaV0pOworCQkJCWRiSW5mby5jb3VudHNbaV0gPSAtMTsKKwkJCQl9CisJCQl9CisgICAgICAgCisgICAgICAgIH0KKyAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAJeworICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHNxbD0nJXMnIGZhaWxlZCFcbiIsIGZ1bmMsIHNxbFtpXSk7CisgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgCX0KKwlmaW5hbGx5IHsKKwkJdHJ5IHsKKwkJCXJlcy5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gT0sKKwl9IC8vIHJlYWREYkxlbW1hdGFJbmZvcworCQorCS8qKioqKioqKioqKioqKioqKioqKiBUZXN0IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQorCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvc190ZXN0CisJICogVGhpcyBpcyBkZWJ1ZyBjb2RlIHdyaXR0ZW4gdG8gdGVzdCBpZiB3ZSBjYW4gYWNjZXNzIHRoZSBEZXJieQorCSAqIERhdGFiYXNlIGZyb20gYW4gZXh0ZXJuYWwgSmF2YSBQcm9ncmFtbS4KKwkgKiAwOC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgcmVhZERiSW5mb3NfdGVzdCgpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJU3RyaW5nCisJCWluc2VydFN0bXQgPSAiIjsKKwkKKwkvLyBDb25uZWN0IHRvIERlcmJ5IGRhdGFiYXNlOgorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQkKKwkJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJCXRyeQorCQkJeworCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIFN0cmluZyAKKyAgICAgICAgICAgIAlzcWwgPSAiU0VMRUNUICogRlJPTSAiICsgZGJUYWJsZTsKKyAgICAgICAgICAgIFJlc3VsdFNldCAKKyAgICAgICAgICAgIAlyZXN1bHQgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOworIAorICAgICAgICAgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiB0YWJsZSAnJXMnOlxuIiwgIGZ1bmMsIGRiVGFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAocmVzdWx0Lm5leHQoKSkgeworICAgICAgICAgICAgCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIiclcycgOiAnJXMnIDogJyVzJyA6ICclcycgLlxuIiwgcmVzdWx0LmdldFN0cmluZygxKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMiksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDMpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZyg0KSk7CisgICAgICAgIAkJaW5zZXJ0U3RtdCA9IGluc2VydFN0bXQgKyAiPHA+IiArIHJlc3VsdC5nZXRTdHJpbmcoMSkgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoMikgKyAiIDogIiArCisgICAgICAgICAgICAgICAgCQkgICAgIHJlc3VsdC5nZXRTdHJpbmcoMykgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoNCkgKyAiPC9wPiI7CisgICAgICAgICAgICAJfQorCQkJfQorCSAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAgICAgCXsKKwkgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogaW5zZXJ0U3RtdD0nJXMnIGZhaWxlZCEuXG4iLCBmdW5jLCBzdG10KTsKKyAgICAgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIAl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGluZyAnJXMgZmFpbGVkIVxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCXJldHVybiAxOworCQl9CisJCisJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCXRyeSB7CisJCWNvbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCQorCX0gLy8gcmVhZERiSW5mb3NfdGVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIGltcG9ydEdsZW1tTGVtYXRhX3Rlc3QKKwkgKiBUZXN0IFZlcnNpb24uCisJICogMTIuMTIuMTkvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0KFN0cmluZyBmbikKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QiOworCUlucHV0U3RyZWFtIAorCQlpbjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbjIgPSBudWxsOworCVN0cmluZworCQlsaW5lOworCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJcjsKKwkKKwkvKgorCSAqIFJlYWQgTGVtbWF0YSArIEluZm8gZnJvbSBmaWxlOiAKKwkgKi8KKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQkKKwl0cnkgeworCQkvL2luID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oIG5ldyBGaWxlSW5wdXRTdHJlYW0oZm4pICk7CisJCWluMiA9IG5ldyBCdWZmZXJlZFJlYWRlciggbmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJd2hpbGUoIChsaW5lID0gaW4yLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCA9PSAzICkKKwkJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogSW1wb3J0OiBsZW09JyVzJyBEZWNvbXA9JyVzJyBXZj0nJXMnLlxuIiwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMV0sIGxlbW1hSW5mb1syXSk7CisJCQllbHNlCisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6IGltcG9ydEdsZW1tTGFtYXRhOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzIVxuIiwgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQl9CisJCX0gCisJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBvcGVuICclcychXG4iLCBmdW5jLCBmbik7CisJCXJldHVybiAxOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisKKwl0cnkgeworCQlpbjIuY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwkvKiBDaGVjayBjb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCSAqLyAKKwlyID0gcmVhZERiSW5mb3NfdGVzdCgpOworCWlmKCByICE9IDAgKQorCQlyZXR1cm4gcjsKKwkJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdAorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS82MS9jMDE3M2MxMmJlOGUwMDFhMWNiOGExZWEwODM0MzhhZSBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNjEvYzAxNzNjMTJiZThlMDAxYTFjYjhhMWVhMDgzNDM4YWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU2ZWI3ZQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNjEvYzAxNzNjMTJiZThlMDAxYTFjYjhhMWVhMDgzNDM4YWUKQEAgLTAsMCArMSw2NyBAQAorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgCisJeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisJeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgPGdyb3VwSWQ+ZGUua29yYXAuc2VydmljZXM8L2dyb3VwSWQ+CisgIDxhcnRpZmFjdElkPnRlc3RzPC9hcnRpZmFjdElkPgorICA8dmVyc2lvbj4wLjE8L3ZlcnNpb24+CisgIDwhLS0gID5wYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmctLT4KKyAgPG5hbWU+SnNvbiBUZXN0IE1ldGhvZHM8L25hbWU+CisgIAorICA8ZGVzY3JpcHRpb24+VGVzdHMgZm9yIEpzb24gUGFyc2luZzwvZGVzY3JpcHRpb24+CisgIAorICA8ZGVwZW5kZW5jaWVzPgorICAgIDxkZXBlbmRlbmN5PgorICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+CisgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KKyAgICAgIDx2ZXJzaW9uPjMuOC4xPC92ZXJzaW9uPgorICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgIDwvZGVwZW5kZW5jeT4KKyAgIDxkZXBlbmRlbmN5PgorICAgIDxncm91cElkPmNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlPC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPmphY2tzb24tY29yZTwvYXJ0aWZhY3RJZD4KKyAgICA8dmVyc2lvbj4yLjkuNjwvdmVyc2lvbj4KKyAgICA8c2NvcGU+Y29tcGlsZTwvc2NvcGU+CisgICA8L2RlcGVuZGVuY3k+CisJPGRlcGVuZGVuY3k+CisJICA8Z3JvdXBJZD5jb20uZmFzdGVyeG1sLmphY2tzb24uY29yZTwvZ3JvdXBJZD4KKwkgIDxhcnRpZmFjdElkPmphY2tzb24tYW5ub3RhdGlvbnM8L2FydGlmYWN0SWQ+CisJICA8dmVyc2lvbj4yLjkuNjwvdmVyc2lvbj4KKwk8L2RlcGVuZGVuY3k+CisJPGRlcGVuZGVuY3k+CisJICA8Z3JvdXBJZD5jb20uZmFzdGVyeG1sLmphY2tzb24uY29yZTwvZ3JvdXBJZD4KKwkgIDxhcnRpZmFjdElkPmphY2tzb24tZGF0YWJpbmQ8L2FydGlmYWN0SWQ+CisJICA8dmVyc2lvbj4yLjkuNjwvdmVyc2lvbj4KKwkgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+CisJPC9kZXBlbmRlbmN5PgorCTxkZXBlbmRlbmN5PgorCQk8Z3JvdXBJZD5kZS5rb3JhcDwvZ3JvdXBJZD4KKwkJPGFydGlmYWN0SWQ+anNvbjwvYXJ0aWZhY3RJZD4KKwkJPHZlcnNpb24+MC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorCTwvZGVwZW5kZW5jeT4KKyAgPC9kZXBlbmRlbmNpZXM+CisgIAorICA8YnVpbGQ+CisgICAgPHNvdXJjZURpcmVjdG9yeT5zcmM8L3NvdXJjZURpcmVjdG9yeT4KKyAgICA8cGx1Z2lucz4KKyAgICAgIDxwbHVnaW4+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWNvbXBpbGVyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+My43LjA8L3ZlcnNpb24+CisgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgIDxzb3VyY2U+MS44PC9zb3VyY2U+CisgICAgICAgICAgPHRhcmdldD4xLjg8L3RhcmdldD4KKyAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgPC9wbHVnaW4+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi13YXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4zLjIuMTwvdmVyc2lvbj4KKyAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgPGZhaWxPbk1pc3NpbmdXZWJYbWw+ZmFsc2U8L2ZhaWxPbk1pc3NpbmdXZWJYbWw+CisgICAgICAgICAgPHdhclNvdXJjZURpcmVjdG9yeT5XZWJDb250ZW50PC93YXJTb3VyY2VEaXJlY3Rvcnk+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvcGx1Z2luPgorICAgIDwvcGx1Z2lucz4KKyAgICA8ZmluYWxOYW1lPlRlc3RHbGVtbVNlcnZpY2VzPC9maW5hbE5hbWU+CisgIDwvYnVpbGQ+CisgIAorPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNjIvYTA5ODAyMzAxMzNlMDAxYzEzNjNiZWI5MzJhZTYzYTEgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzYyL2EwOTgwMjMwMTMzZTAwMWMxMzYzYmViOTMyYWU2M2ExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmN2Q5YjgKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzYyL2EwOTgwMjMwMTMzZTAwMWMxMzYzYmViOTMyYWU2M2ExCkBAIC0wLDAgKzEsNzcwIEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CitpbXBvcnQgamF2YS5zcWwuRGF0YWJhc2VNZXRhRGF0YTsKK2ltcG9ydCBqYXZhLnNxbC5Ecml2ZXJNYW5hZ2VyOworaW1wb3J0IGphdmEuc3FsLlByZXBhcmVkU3RhdGVtZW50OworaW1wb3J0IGphdmEuc3FsLlJlc3VsdFNldDsKK2ltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CitpbXBvcnQgamF2YS5zcWwuU3RhdGVtZW50OworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworcHVibGljIGNsYXNzIEdsZW1tREIKKworeworCXN0YXRpYyBwdWJsaWMgU3RyaW5nIGRiVGFibGUgCT0gIkdsZW1tTGVtbWF0YSI7CisJc3RhdGljIFN0cmluZyBkYkxlbW1hIAkJIAk9ICJsZW1tYSI7CisJc3RhdGljIFN0cmluZyBkYldmCSAJCQk9ICJ3ZiI7CisJc3RhdGljIFN0cmluZyBkYlByb3AxIAkJCT0gInByb3AxIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDIgCQkJPSAicHJvcDIiOworCisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChvdmVyd3JpdHRlbiBieSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCXByaXZhdGUgc3RhdGljIFN0cmluZyBmbmFtZURCID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNlcnZlckhvc3QgPSAiLy9sb2NhbGhvc3Q6MTUyNy8iOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAoZmluYWwgYXNzaWdubWVudHMpOgorCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckVtYiA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuRW1iZWRkZWREcml2ZXIiOworCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckNsaWVudCA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50RHJpdmVyIjsKKworCWZpbmFsIHN0YXRpYyBib29sZWFuCisJCXVzZVByZXBhcmVkU3RtdCA9IHRydWU7IC8vIDE9dXNlIFByZXBhcmVkU3RhdGVtZW50IGFuZCBub3QgU3RhdGVtZW50LgorCQorCS8vIHZhbHVlcyB0byBiZSBpbnNlcnRlZDogbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMuCisJc3RhdGljIFN0cmluZyBpbnNlcnRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICgnJXMnLCAnJXMnLCAnJXMnLCAnJXMnLCAnJXMnKSI7CisJc3RhdGljIFN0cmluZyBpbnNlcnRQcmVwYXJlZFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKD8sID8sID8sID8sID8pIjsKKwkKKwkvLyBDb25zdGFudHMgb2YgdGFibGUgR2xlbW1MZW1tYXRhOgorCXN0YXRpYyBmaW5hbCBpbnQgbWF4TGVtbWFTaXplCT0gNjQ7IAkvLyBtYXguIG5vLiBvZiBjaGFycywgYXMgZGVjbGFyZWQgaW4gdGFibGUgR2xlbW1MZW1tYXRhLgorCXN0YXRpYyBmaW5hbCBpbnQgbWF4V2ZTaXplCQk9IDY0OwkvLyBtYXguIG5vLiBvZiBjaGFycywgYXMgZGVjbGFyZWQgaW4gdGFibGUgR2xlbW1MZW1tYXRhLgorCQorCS8qIHZhcmlhYmxlcyAqLworCXN0YXRpYyBpbnQgbkV4Y2VwdFN0bXQJCQk9IDA7CS8vIGNvdW50IG5vLiBvZiBleGNlcHRpb25zIGZvciBwcmVwYXJlZFN0bXQuCisJc3RhdGljIGludCBuRXhjZXB0SW5zZXJ0CQk9IDA7CS8vIGNvdW50IG5vLiBvZiBleGNlcHRpb25zIGZvciBJbnNlcnRzLgorCQorCS8qCisJICogc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJICogCisJICogQXJndW1lbnRzOgorCSAqIHByb3BzCTogUHJvcGVydGllcyBsb2FkZWQgYnkgdGhlIEdsZW1tU2VydmljZXMuCisJICogTm90ZXM6CisJICogLSB0aGlzIGZ1bmN0aW9uIGxvYWRzIG9ubHkgdGhvc2UgQ29uc3RhbnRzIG5lZWRlZCBpbiB0aGlzIGNsYXNzLgorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcwlwcm9wcykKKwkKKwl7CisJZm5hbWVEQgkJIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgCSIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlzZXJ2ZXJIb3N0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJzZXJ2ZXJIb3N0IiwJIi8vbG9jYWxob3N0OjE1MjcvIik7CisJZGVyYnlEQlVSTCAJCT0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCQkJCisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCQkJCQlpbXBvcnRHbGVtbUxlbWF0YQorCSAqIFBhcmFtZXRlcnM6CisJICogZm4JCSA6IGFic29sdXRlIGZpbGUgbmFtZSBvZiBHTEVNTSBvdXRwdXQgW0lTTzg4NTktMV0gZXhwZWN0ZWQsIG5vdCBVVEYtOCEKKwkgKiBwcm9wcwkgOiBQcm9wZXJ0aWVzIHZvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgdG8gc2V0IGNvbnN0YW50cyBuZWVkZWQKKwkgKiAJCQkgICBpbiB0aGlzIGNsYXNzLgorCSAqIGRicGF0aAkgOiBsb2NhdGlvbiArIG5hbWUgb2YgZGF0YWJhc2Ugd2hlcmUgdG8gc3RvcmUgbGVtbWF0YSt3ZnMuCisJICogUmV0dXJucwkgOiAwPU9LLCAtMTogZ2VuZXJhbCBlcnJvcjsgPiAwIDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAKKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIGR5bmFtaWNhbGx5IGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqIDA0LjExLjIxL0ZCIGRicGF0aC4KKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YShTdHJpbmcgZm4sIFByb3BlcnRpZXMgcHJvcHMsIGZpbmFsIFN0cmluZyBkYnBhdGgpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YSI7CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4gPSBudWxsOworCWludAorCQluRXJyb3JzOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyB3aGVuIGluZGV4aW5nIGRhdGEgaW50byB0aGUgZGF0YWJhc2UsIHNlbGVjdCB0aGUgc3VibWl0dGVkIGRicGF0aCwKKwkvLyAobm90IHRoZSBvbmUgc3RvcmVkIGluIHRoZSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCWRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGRicGF0aDsKKwkKKwkvLyBvcGVuIHJlYWRlciBvbiBHbGVtbSBMZW1tYXRhOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCWluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCQorCQluRXJyb3JzID0gd3JpdGVEQkxlbW1hdGEoaW4pOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBmcm9tICclcychXG4iLCBmdW5jLCBmbik7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCisJLy8gY2xvc2UgUmVhZGVyOgorCXRyeSB7CisJCWluLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJbkVycm9ycyA9IC0xOworCQl9CisJCisgCWlmKCBuRXJyb3JzID09IDAgKQorIAkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQgZG9uZSBzdWNjZXNzZnVsbHkuXG4iLCBmdW5jKTsKKyAJZWxzZQorIAkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQ6ICVkIEVycm9ycyFcbiIsIGZ1bmMsIG5FcnJvcnMpOworIAkKKwlyZXR1cm4gbkVycm9yczsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YQorCQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVEQkxlbW1hdGEoKQorCSAqICAgICAgICAgICAgICAgICAgICAgICAKKwkgKiBzdG9yZXMgbGlzdCBvZiBsZW1tYXRhICsgaW5mb3MgaW50byBEZXJieSBkYi4KKwkgKiBGaWxlIGZvcm1hdDogIkxlbW1hIERlY29tcG9zaXRpb24gV2YiLAorCSAqICAgICAgICAgICAgICBlLmcuOiAiSMOkdXNlciArLSBIYXVzIi4KKwkgKiBSZXR1cm5zOiAwID0gT0sgb3IgLTE6IGdlbmVyYWwgZXJyb3Igb3IgPiAwOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIDA5LjAxLjIwL0ZCCisJICogMDQuMTEuMjEvRkIgdHVybiBhdXRvY29tbWl0IG9mZiB0byBhY2NlbGVyYXRlIGh1Z2UgYW1vdW50IG9mIGluc2VydGlvbnMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYXRhKEJ1ZmZlcmVkUmVhZGVyIGluKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hdGEiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJUHJlcGFyZWRTdGF0ZW1lbnQKKwkJc3RtdFByZXAgPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10IAkgPSBudWxsOworCVN0cmluZworCQlsaW5lOwkKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQluSW5zZXJ0ZWQgPSAwLAkvLyBuby4gb2YgbGVtbWEvd2YgcGFpcnMgaW1wb3J0ZWQuCisJCXJldCA9IDA7IC8vIE9LLgorCWJvb2xlYW4KKwkJY29udGFpbnNTcGVjOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZSwKKwkvLyBzZXQgQXV0b2NvbW1pdCA9IGZhbHNlIHRvIGFjY2VsZXJhdGUgaW5zZXJ0aW9uczoKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJY29uLnNldEF1dG9Db21taXQoZmFsc2UpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZCAoYXV0b0NvbW1pdD1vZmYpLlxuIiwgZnVuYyk7CisKKwkJRGF0YWJhc2VNZXRhRGF0YQorCQkJZGJtZXRhZGF0YSA9IGNvbi5nZXRNZXRhRGF0YSgpOworCQlkYm1ldGFkYXRhLgorCQkKKwkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQlzdG10UHJlcCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KGluc2VydFByZXBhcmVkUXVlcnkpOworCQllbHNlCisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCisJCXdoaWxlKCAobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCAhPSAzICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzISBFeHBlY3RlZCA9IDMhIENhbm5vdCBiZSBzdG9yZWQhXG4iLCBmdW5jLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCQluRXJyb3JzKys7CisJCQkJY29udGludWU7CisJCQkJfQorCQkJCisJCQkvLyBHZXQgSW5mbywgaWYgd29yZGZvcm0gY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlICctJywgaW50ZXJwdW5jdGlvbiBldGMuOgorCQkJLy8gbGVtbWFJbmZvWzJdID0gd29yZGZvcm0uCisJCQljb250YWluc1NwZWMgPSBMZW1tYUluZm8uaXNXZlNwZWNpYWxDYXNlKGxlbW1hSW5mb1syXSk7CisJCQkvLyBzdG9yZSBpbnRvIERCOgorCQkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoc3RtdFByZXAsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQllbHNlCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3Moc3RtdCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCQorCQkJaWYoIHJldCAhPSAwICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgc3RvcmUgbGVtbWEgJyVzJyBpbnRvIERCISAocmV0PSVkKVxuIiwgZnVuYywgbGluZSwgcmV0KTsKKwkJCQluRXJyb3JzKys7IAorCQkJCX0KKwkJCWVsc2UKKwkJCQluSW5zZXJ0ZWQrKzsKKwkJCX0gLy8gd2hpbGUKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgR2xlbW0gbGVtbWF0YStpbmZvcyBmcm9tIGZpbGUhIEV4aXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOyAKKwkJfQkKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisJZmluYWxseSAKKwkJeyAKKwkJdHJ5IHsKKwkJCS8vIGltcG9ydGFudDogbm93IGNvbW1pdCwgYXMgYXV0b0NvbW1pdCBpcyBkZWFjdGl2YXRlZCwKKwkJCS8vIHRoaXMgYWxzbyByZW1vdmVzIGRhdGFiYXNlIGxvY2tzOgorCQkJY29uLmNvbW1pdCgpOworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb21taXQgc3VjY2Vzc2Z1bGwuXG4iLCBmdW5jKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb21taXQgYXQgdGhlIGVuZCBvZiB0aGUgd2ZzIGxpc3QgZmFpbGVkIVxuIiwgZnVuYyk7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCQorCQl0cnkgeyAvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSAKKwkJCQlzdG10LmNsb3NlKCk7CisJCQlpZiggc3RtdFByZXAgIT0gbnVsbCApIAorCQkJCXN0bXRQcmVwLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkluZm8gOiAlczogbm8uIG9mIGxlbW1hdGEvd2YgcGFpcnMgaW5zZXJ0ZWQgPSAlZC5cbiIsIGZ1bmMsIG5JbnNlcnRlZCk7CisJCisJcmV0dXJuIG5FcnJvcnM7IC8vIDA9T0ssID4wID0gbm8uIG9mIGVycm9ycy4KKwl9IC8vIHdyaXRlREJMZW1tYXRhCisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIHJ1bGVzIGludG8gRGVyYnkgREIuCisJICogTm90ZXM6CisJICogLSB0aGlzIGlzIHRoZSB2ZXJzaW9uIHdpdGggYSBQcmVwYXJlZFF1ZXJ5LgorCSAqIFBhcmFtZXRlcnM6CisJICogc3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDE3LjAxLjIwL0ZCCisJICogMDUuMS4yMS9GQiByZWplY3QgbGVtbWEvd2YgPiA2NCBjaGFycy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoCisJCQlQcmVwYXJlZFN0YXRlbWVudCBzdG10LCAKKwkJCVN0cmluZyBsZW1tYSwgCisJCQlTdHJpbmcgd2YsIAorCQkJU3RyaW5nIGRlY29tcG9zaXRpb24sIAorCQkJYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQiOworCWZpbmFsIGJvb2xlYW4KKwkJYkxvZyA9IGZhbHNlOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCWJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCS8vIGNoZWNrIHNpemUgb2Ygd2YgYW5kIGxlbW1hIGFnYWluc3QgZmllbGQgc2l6ZSBpbiB0YWJsZSBHbGVtbUxlbW1hdGE6CisJaWYoIGxlbW1hLmxlbmd0aCgpID49IEdsZW1tREIubWF4TGVtbWFTaXplICkgCisJCXsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBsZW1tYSByZWplY3RlZCAoPiAlZCk6ICclcychXG4iLAorCQkJCWZ1bmMsIG1heExlbW1hU2l6ZSwgbGVtbWEpOworCQlyZXR1cm4gNDsKKwkJfQorCWlmKCB3Zi5sZW5ndGgoKSA+PSBHbGVtbURCLm1heFdmU2l6ZSApIAorCQl7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2YgcmVqZWN0ZWQgKD4gJWQpOiAnJXMnIVxuIiwKKwkJCQlmdW5jLCBtYXhXZlNpemUsIHdmKTsKKwkJcmV0dXJuIDU7CisJCX0KKwkgCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIAorCS8vIGZvciBsb2dpbmcgb25seToKKwlzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJaWYoIGJMb2cgKQorCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKyAgICAvLyBub3cgaW5zZXJ0IG5ldyB2YWx1ZXMgaW50byBQcmVwYXJlZFN0YXRlbWVudDoKKyAgICB0cnkgeworICAgIAlzdG10LnNldFN0cmluZyggMSwgbGVtbWEpOworICAgICAgICBzdG10LnNldFN0cmluZyggMiwgd2YpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oMywgcHJvcDEpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNCwgcHJvcDIpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNSwgc3BlYyk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJlcGFyZWQgc3RtdCA9ICclcycuXG4iLCAgZnVuYywgc3RtdC50b1N0cmluZygpKTsKKyAgICAgICAgfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZTEpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigJIkVycm9yOiAlczogd2hpbGUgZmlsbGluZyBwcmVwYXJlZCBzdGF0ZW1lbnQgd2l0aCBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JyViJyBwcm9wMj0nJWInIHNwZWM9JyViJyFcbiIsICAKKwkJCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWlmKCArK25FeGNlcHRTdG10IDw9IDEgKQorCQkJZTEucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisgICAgCisgICAgdHJ5IHsKKwkJLy8gZXhlY3V0ZSB0aGUgZmlsbGVkIHByZXBhcmVkIHN0YXRlbWVudDoKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZSgpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViISAobj0lZClcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMsIG4pOworIAkJCXJldHVybiAyOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJaWYoICsrbkV4Y2VwdEluc2VydCA8PSAxICkKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAzOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIGludG8gRGVyYnkgREIuCisJICogUGFyYW1ldGVyczoKKwkgKiBjb250YWluc1NwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxMC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvcyhTdGF0ZW1lbnQgc3RtdCwgU3RyaW5nIGxlbW1hLCBTdHJpbmcgd2YsIFN0cmluZyBkZWNvbXBvc2l0aW9uLCBib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvcyI7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJQm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIHNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAgICAKKyAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKwl0cnkgeworCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKHNxbEluc2VydCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWFEYXRhCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgZnJvbSB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dDogbGVtbWEgKyBHTEVNTV9PUFRTX3h4eCAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hRGF0YShMZW1tYUluZm8gbGVtbWFJbmZvLCBQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWFEYXRhIjsKKworCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWxlbW1hSW5mby5jb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCWxlbW1hSW5mby5zdG10ID0gbGVtbWFJbmZvLmNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJaW50IHIgPSByZWFkREJMZW1tYShsZW1tYUluZm8uc3RtdCwgbGVtbWFJbmZvKTsKKwkJCQorCQlpZiggciAhPSAwICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGdldCBkYXRhIGZvciBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyFcbiIsIAorCQkJCQlmdW5jLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGxlbW1hSW5mby5jb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYURhdGEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBieSBhY2Nlc3NpbmcgdGhlIEdsZW1tREIuCisJICogSW5wdXQgOiBsZW1tYSArIHByb3AxKzIgKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqIE91dHB1dDogCisJICogIC0gY29udGFpbnMgYSBSZXN1bHRTZXQgZm9yIGZldGNoaW5nIHRoZSB3b3JkZm9ybXMuCisJICogCSAgVGhpcyBSZXN1bHRTZXQgd2lsbCBoYXZlIGJlIGJlIGNsb3NlZCB3aXRoIExlbW1hSW5mby5jbG9zZSgpLgorCSAqIAkgIFRoZSBuby4gb2YgZm91bmQgd29yZGZvcm1zIGlzIG5vdCBrbm93biB0aWxsIHdlCisJICogCSAgZmV0Y2ggYWxsIG9mIHRoZW0gZnJvbSBSZXN1bHRTZXQhIAorCSAqIAktIGR1ZSB0byBTRUxFQ1QgRElTVElOQ1Qgb25seSB1bmlxIHdmIGFyZSByZXR1cm5lZC4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWEoU3RhdGVtZW50IHN0bXQsIExlbW1hSW5mbyBsZW1tYUluZm8pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYSI7CisJU3RyaW5nCisJCXNxbDsKKwkJCisJc3FsID0gU3RyaW5nLmZvcm1hdCgiU0VMRUNUIERJU1RJTkNUIHdmIGZyb20gJXMgV0hFUkUgbGVtbWE9JyVzJyAlcyAlcyAlcyIsIAorCQkJZGJUYWJsZSwKKwkJCWxlbW1hSW5mby5sZW1tYSwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIkFORCBwcm9wMT0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICJBTkQgcHJvcDE9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIkFORCBwcm9wMj0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICJBTkQgcHJvcDI9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAxID8gIkFORCBzcGVjPSd0cnVlJyIgICA6IAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiQU5EIHNwZWM9J2ZhbHNlJyIgIDogIiIpOworCQorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIGZ1bmMsIGxlbW1hSW5mby5wcm9wMSwgbGVtbWFJbmZvLnByb3AyLCBsZW1tYUluZm8uc3BlYyk7CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWwgPSAnJXMnLlxuIiwgZnVuYywgc3FsKTsKKworCXRyeSB7CisJCWxlbW1hSW5mby5yZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOwkKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGVuIGV4ZWN1dGluZyBzcWw9JyVzJyFcbiIsIGZ1bmMsIHNxbCk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisJZmluYWxseSB7CisJCS8vIGFsbCBzcWwgc3R1ZmYgYXJlIGNsb3NlZCBvdXRzaWRlIHRoaXMgZnVuY3Rpb24sIHNvIGRvbid0IGNsb3NlIHRoZW0gaGVyZSEKKwkJfQkKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zCisJICogUmV0dXJucyBHZW5lcmFsIEluZm9zIGFib3V0IHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiByZWFkIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiSW5mb3MoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWRiSW5mbyA9IHJlYWREYkxlbW1hdGFJbmZvcyhzdG10KTsKKwkJCQorCQlpZiggZGJJbmZvID09IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgcmVhZCBHZW5lcmFsIEluZm9zIGZyb20gR2xlbW0gRGF0YWJhc2UhXG4iLCBmdW5jKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIG51bGw7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgc3RtdC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBtYXkgYmUgbnVsbC4KKwkJCisJfSAvLyByZWFkRGJJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkxlbW1hdGFJbmZvczoKKwkgKiByZWFkcyBhbmQgcmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjb250ZW50IAorCSAqIG9mIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiBSZXR1cm5zIDA9T0sgb3IgZXJyb3IgY29kZSA+IDAuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJMZW1tYXRhSW5mb3MoU3RhdGVtZW50IHN0bXQpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInJlYWREYkxlbW1hSW5mb3MiOworCVN0cmluZ1tdCisJCXNxbCA9IHsJIlNFTEVDVCBDT1VOVChkaXN0aW5jdCBsZW1tYSkgZnJvbSAiICsgZGJUYWJsZSAsCS8vIGNvdW50cyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YS4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUsCQkJCQkvLyBjb3VudHMgdG90YWwgbm8uIG9mIHN0b3JlZCB3b3JkZm9ybXMuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj10cnVlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj10cnVlIn07CisJUmVzdWx0U2V0CisJCXJlcyA9IG51bGw7IAorCWludFtdCisJCW5Db3VudHMgPSBuZXcgaW50W3NxbC5sZW5ndGhdOworCWludAkJCisJCWkgPSAwLCAKKwkJbkRpc3RMZW1tYXRhID0gLTEsCS8vIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhIGluIERCLgorCQluV2ZzCQkgPSAtMTsJLy8gbm8uIG9mIHdvcmRmb3JtcyBpbiBEQi4KKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogZXh0cmFjdGluZyBhZ3JlZ2F0ZWQgaW5mb3MgYWJvdXQgRGF0YWJhc2UgY29udGVudHMuLi5cbiIsIGZ1bmMpOworCQorCWRiSW5mbyA9IG5ldyBHbGVtbURCSW5mbygpOworCisJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJdHJ5IHsKKwkJZm9yKGk9MDsgaTxzcWwubGVuZ3RoOyBpKyspCisJCQl7CisJCQlyZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWxbaV0pOworCQkJaWYoIHJlcy5uZXh0KCkgKQorCQkJCWRiSW5mby5jb3VudHNbaV0gPSByZXMuZ2V0SW50KDEpOyAvLyBjb3VudCBpcyBpbiBjb2x1bW4gMS4KKwkJCWVsc2UKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZXh0cmFjdCBjb3VudCBmcm9tICclcychXG4iLCBmdW5jLCBzcWxbaV0pOworCQkJCWRiSW5mby5jb3VudHNbaV0gPSAtMTsKKwkJCQl9CisJCQl9CisgICAgICAgCisgICAgICAgIH0KKyAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAJeworICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHNxbD0nJXMnIGZhaWxlZCFcbiIsIGZ1bmMsIHNxbFtpXSk7CisgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgCX0KKwlmaW5hbGx5IHsKKwkJdHJ5IHsKKwkJCXJlcy5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gT0sKKwl9IC8vIHJlYWREYkxlbW1hdGFJbmZvcworCQorCS8qKioqKioqKioqKioqKioqKioqKiBUZXN0IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQorCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvc190ZXN0CisJICogVGhpcyBpcyBkZWJ1ZyBjb2RlIHdyaXR0ZW4gdG8gdGVzdCBpZiB3ZSBjYW4gYWNjZXNzIHRoZSBEZXJieQorCSAqIERhdGFiYXNlIGZyb20gYW4gZXh0ZXJuYWwgSmF2YSBQcm9ncmFtbS4KKwkgKiAwOC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgcmVhZERiSW5mb3NfdGVzdCgpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJU3RyaW5nCisJCWluc2VydFN0bXQgPSAiIjsKKwkKKwkvLyBDb25uZWN0IHRvIERlcmJ5IGRhdGFiYXNlOgorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQkKKwkJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJCXRyeQorCQkJeworCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIFN0cmluZyAKKyAgICAgICAgICAgIAlzcWwgPSAiU0VMRUNUICogRlJPTSAiICsgZGJUYWJsZTsKKyAgICAgICAgICAgIFJlc3VsdFNldCAKKyAgICAgICAgICAgIAlyZXN1bHQgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOworIAorICAgICAgICAgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiB0YWJsZSAnJXMnOlxuIiwgIGZ1bmMsIGRiVGFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAocmVzdWx0Lm5leHQoKSkgeworICAgICAgICAgICAgCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIiclcycgOiAnJXMnIDogJyVzJyA6ICclcycgLlxuIiwgcmVzdWx0LmdldFN0cmluZygxKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMiksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDMpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZyg0KSk7CisgICAgICAgIAkJaW5zZXJ0U3RtdCA9IGluc2VydFN0bXQgKyAiPHA+IiArIHJlc3VsdC5nZXRTdHJpbmcoMSkgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoMikgKyAiIDogIiArCisgICAgICAgICAgICAgICAgCQkgICAgIHJlc3VsdC5nZXRTdHJpbmcoMykgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoNCkgKyAiPC9wPiI7CisgICAgICAgICAgICAJfQorCQkJfQorCSAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAgICAgCXsKKwkgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogaW5zZXJ0U3RtdD0nJXMnIGZhaWxlZCEuXG4iLCBmdW5jLCBzdG10KTsKKyAgICAgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIAl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGluZyAnJXMgZmFpbGVkIVxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCXJldHVybiAxOworCQl9CisJCisJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCXRyeSB7CisJCWNvbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCQorCX0gLy8gcmVhZERiSW5mb3NfdGVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIGltcG9ydEdsZW1tTGVtYXRhX3Rlc3QKKwkgKiBUZXN0IFZlcnNpb24uCisJICogMTIuMTIuMTkvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0KFN0cmluZyBmbikKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QiOworCUlucHV0U3RyZWFtIAorCQlpbjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbjIgPSBudWxsOworCVN0cmluZworCQlsaW5lOworCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJcjsKKwkKKwkvKgorCSAqIFJlYWQgTGVtbWF0YSArIEluZm8gZnJvbSBmaWxlOiAKKwkgKi8KKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQkKKwl0cnkgeworCQkvL2luID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oIG5ldyBGaWxlSW5wdXRTdHJlYW0oZm4pICk7CisJCWluMiA9IG5ldyBCdWZmZXJlZFJlYWRlciggbmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJd2hpbGUoIChsaW5lID0gaW4yLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCA9PSAzICkKKwkJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogSW1wb3J0OiBsZW09JyVzJyBEZWNvbXA9JyVzJyBXZj0nJXMnLlxuIiwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMV0sIGxlbW1hSW5mb1syXSk7CisJCQllbHNlCisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6IGltcG9ydEdsZW1tTGFtYXRhOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzIVxuIiwgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQl9CisJCX0gCisJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBvcGVuICclcychXG4iLCBmdW5jLCBmbik7CisJCXJldHVybiAxOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisKKwl0cnkgeworCQlpbjIuY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwkvKiBDaGVjayBjb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCSAqLyAKKwlyID0gcmVhZERiSW5mb3NfdGVzdCgpOworCWlmKCByICE9IDAgKQorCQlyZXR1cm4gcjsKKwkJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdAorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS82NS81MGJiOGE2YWE1MmEwMDFjMWM0MWNlNTU5ZWE1ZTE2YiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNjUvNTBiYjhhNmFhNTJhMDAxYzFjNDFjZTU1OWVhNWUxNmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMzMDY3ZAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNjUvNTBiYjhhNmFhNTJhMDAxYzFjNDFjZTU1OWVhNWUxNmIKQEAgLTAsMCArMSw2NzUgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNi4xMC4yMSI7IC8vIjE3LjA2LjIwIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjEiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJCVN0cmluZworCQkJc3RhdHVzOworCQlVdGlscworCQkJdSA9IG5ldyBVdGlscygpOworCQlQcm9wZXJ0aWVzCisJCQlwcm9wczsKKwkJCisJCS8vIHRlc3QKKwkJcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworCQlwcm9wcy5zZXRQcm9wZXJ0eSgicCIsICJ0ZXN0Iik7CisJCUZpbGVPdXRwdXRTdHJlYW0gb3V0OworCQl0cnkgeworCQkJb3V0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oImdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOworCQkJfSAKKwkJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQl0cnkgeworCQkJcHJvcHMuc3RvcmUob3V0LCAgInRlc3QgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIik7CisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX07CisJCQorCQkvLyBlbmQgb3Rlc3QKKwkJCisJCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCQlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIkFQSTogJXM6IC9pbmRleC9zdGF0dXMvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKworCQlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkpOworCisJCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwkJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiBQT1NUOiAvaW5kZXgvYWRkLzogdGV4dC9wbGFpbgorCSAqIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlLgorCSAqIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkCisJICogaW50byB0aGUgZGF0YWJhc2UuCisJICogSW5wdXQ6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqLworCUBQYXRoKCJhZGQiKSBAUE9TVCBAQ29uc3VtZXMoInRleHQvcGxhaW4iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgaW1wb3J0TGVtbWFEYXRhKFN0cmluZyBsaXN0KSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gYXJMaXN0ID0gbGlzdC5zcGxpdCgiXG4iKTsKKwkKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IGZzLmdldFBhdGgoZm5hbWVXZnMpOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2FkZC8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQorCS8vIFdyaXRlIHN1Ym1pdHRlZCBsaXN0IG9mIHdvcmRmb3JtcyB0byBmaWxlOgorCXRyeQorCQl7CisJCW9zID0gRmlsZXMubmV3T3V0cHV0U3RyZWFtKHApOworCQlvcy53cml0ZShsaXN0LmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSkpOworCSAgICBvcy5jbG9zZSgpOworCSAgICBiRG9uZSA9IHRydWU7CisJICAgIFN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGZpbGUgJyVzJyBiZXNjaHJpZWJlbi5cbiIsIGZ1bmMsIGZuYW1lV2ZzKTsKKwkgICAgfQorCWNhdGNoKElPRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisJCX0KKyAgICAKKwlpZiggYkRvbmUgKQorCQltc2cgPSAiPHA+TGlzdCB3cml0dGVuIHRvIGZpbGU6ICIgKyBwLnRvU3RyaW5nKCkgKyAiPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+PGI+RmlsZSBFcnJvcjogPC9iPiBjYW5ub3Qgd3JpdGUgdG8gIiArIHAudG9TdHJpbmcoKSArICIhPC9wPiI7CisJCisJLyoKKwkgKiAgZXhlY3V0ZSBHbGVtbSBzaGVsbCBzY3JpcHQ6CisJICovCisJU3RyaW5nCisJCW1zZ0dsZW1tU2NyaXB0LCBtc2dJbXBvcnQ7CisJaW50IAorCQlyID0gVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0KGZuYW1lU2NyaXB0LCBmbmFtZVdmcyk7CisJCisJaWYoIHIgPT0gMCApCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEF1c2bvv71ocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBpbXBvcnRHbGVtbUxlbW1hdGEgcmV0dXJucyByPSVkLlxuIiwgZnVuYywgcik7CisJaWYoIG5FcnJvcnMgPT0gMCApCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiAiICsgbkVycm9ycyArICIgZXJyb3JzITwvcD4iOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGVuZGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJLy8gUmV0dXJuIEluZm9zOgorCXJldHVybiAKKwkJCSAgICI8aHRtbD4iICsKKwkJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwl9CisKKwkvKiB2aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyB2aWV3REJJbmZvCisKKworCS8qIHZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIC0gU3RhdHVzOiA8aT5Xb3JrIGluIHByb2dyZXNzLi4uITwvaT4pPC9oND5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoICFvcHRpb25zLmVxdWFscygidW5kZWYiKSkKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEvcHJvcDIvc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEdsZW1tU2VydmljZXMgJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbkRhdGUsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS82OS8yMGE4YTRjYjU5M2UwMDFjMTAzNWMxZWFmMzhhZjU5MCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNjkvMjBhOGE0Y2I1OTNlMDAxYzEwMzVjMWVhZjM4YWY1OTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQwNjBhMAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNjkvMjBhOGE0Y2I1OTNlMDAxYzEwMzVjMWVhZjM4YWY1OTAKQEAgLTAsMCArMSw4MDkgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5zcWwuQ29ubmVjdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5Ecml2ZXJNYW5hZ2VyOworaW1wb3J0IGphdmEuc3FsLlByZXBhcmVkU3RhdGVtZW50OworaW1wb3J0IGphdmEuc3FsLlJlc3VsdFNldDsKK2ltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CitpbXBvcnQgamF2YS5zcWwuU3RhdGVtZW50OworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAob3ZlcndyaXR0ZW4gYnkgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKGZpbmFsIGFzc2lnbm1lbnRzKToKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJFbWIgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIjsKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLy8gQ29uc3RhbnRzIG9mIHRhYmxlIEdsZW1tTGVtbWF0YToKKwlzdGF0aWMgZmluYWwgaW50IG1heExlbW1hU2l6ZQk9IDY0OyAJLy8gbWF4LiBuby4gb2YgY2hhcnMsIGFzIGRlY2xhcmVkIGluIHRhYmxlIEdsZW1tTGVtbWF0YS4KKwlzdGF0aWMgZmluYWwgaW50IG1heFdmU2l6ZQkJPSA2NDsJLy8gbWF4LiBuby4gb2YgY2hhcnMsIGFzIGRlY2xhcmVkIGluIHRhYmxlIEdsZW1tTGVtbWF0YS4KKwkKKwkvKiB2YXJpYWJsZXMgKi8KKwlzdGF0aWMgaW50IG5FeGNlcHRTdG10CQkJPSAwOwkvLyBjb3VudCBuby4gb2YgZXhjZXB0aW9ucyBmb3IgcHJlcGFyZWRTdG10LgorCXN0YXRpYyBpbnQgbkV4Y2VwdEluc2VydAkJPSAwOwkvLyBjb3VudCBuby4gb2YgZXhjZXB0aW9ucyBmb3IgSW5zZXJ0cy4KKwkKKwkvKgorCSAqIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCSAqIAorCSAqIEFyZ3VtZW50czoKKwkgKiBwcm9wcwk6IFByb3BlcnRpZXMgbG9hZGVkIGJ5IHRoZSBHbGVtbVNlcnZpY2VzLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBmdW5jdGlvbiBsb2FkcyBvbmx5IHRob3NlIENvbnN0YW50cyBuZWVkZWQgaW4gdGhpcyBjbGFzcy4KKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMJcHJvcHMpCisJCisJeworCWZuYW1lREIJCSAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsIAkiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJc2VydmVySG9zdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAic2VydmVySG9zdCIsCSIvL2xvY2FsaG9zdDoxNTI3LyIpOworCWRlcmJ5REJVUkwgCQk9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkJCQorCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyogICAgY2hlY2tEZXJieUNvbm5lY3Rpb246CisJICogCisJICogY2hlY2sgaWYgRGVyYnkgTmV0d29yayBTZXJ2ZXIgaXMgYXZhaWxhYmxlLgorCSAqIFJldHVybnM6IDAgKD1PSykgb3IgLTEgKG9uIGVycm9yKS4KKwkgKiAwNS4xMS4yMS9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIGludCBjaGVja0RlcmJ5Q29ubmVjdGlvbigpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJjaGVja0RlcmJ5Q29ubmVjdGlvbiI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCW5JbnNlcnRlZCA9IDAsCS8vIG5vLiBvZiBsZW1tYS93ZiBwYWlycyBpbXBvcnRlZC4KKwkJcmV0ID0gMDsgLy8gT0suCisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlLAorCS8vIHNldCBBdXRvY29tbWl0ID0gZmFsc2UgdG8gYWNjZWxlcmF0ZSBpbnNlcnRpb25zOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IAorCQl7IAorCQl0cnkgeyAvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyBjaGVja19EZXJieUNvbm5lY3Rpb24KKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCQkJCQlpbXBvcnRHbGVtbUxlbWF0YQorCSAqIFBhcmFtZXRlcnM6CisJICogZm4JCSA6IGFic29sdXRlIGZpbGUgbmFtZSBvZiBHTEVNTSBvdXRwdXQgW0lTTzg4NTktMV0gZXhwZWN0ZWQsIG5vdCBVVEYtOCEKKwkgKiBwcm9wcwkgOiBQcm9wZXJ0aWVzIHZvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgdG8gc2V0IGNvbnN0YW50cyBuZWVkZWQKKwkgKiAJCQkgICBpbiB0aGlzIGNsYXNzLgorCSAqIGRicGF0aAkgOiBsb2NhdGlvbiArIG5hbWUgb2YgZGF0YWJhc2Ugd2hlcmUgdG8gc3RvcmUgbGVtbWF0YSt3ZnMuCisJICogUmV0dXJucwkgOiAwPU9LLCAtMTogZ2VuZXJhbCBlcnJvcjsgPiAwIDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAKKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIGR5bmFtaWNhbGx5IGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqIDA0LjExLjIxL0ZCIGRicGF0aC4KKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YShTdHJpbmcgZm4sIFByb3BlcnRpZXMgcHJvcHMsIGZpbmFsIFN0cmluZyBkYnBhdGgpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YSI7CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4gPSBudWxsOworCWludAorCQluRXJyb3JzOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyB3aGVuIGluZGV4aW5nIGRhdGEgaW50byB0aGUgZGF0YWJhc2UsIHNlbGVjdCB0aGUgc3VibWl0dGVkIGRicGF0aCwKKwkvLyAobm90IHRoZSBvbmUgc3RvcmVkIGluIHRoZSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCWRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGRicGF0aDsKKwkKKwkvLyBvcGVuIHJlYWRlciBvbiBHbGVtbSBMZW1tYXRhOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCWluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCQorCQluRXJyb3JzID0gd3JpdGVEQkxlbW1hdGEoaW4pOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBmcm9tICclcychXG4iLCBmdW5jLCBmbik7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCisJLy8gY2xvc2UgUmVhZGVyOgorCXRyeSB7CisJCWluLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJbkVycm9ycyA9IC0xOworCQl9CisJCisgCWlmKCBuRXJyb3JzID09IDAgKQorIAkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQgZG9uZSBzdWNjZXNzZnVsbHkuXG4iLCBmdW5jKTsKKyAJZWxzZQorIAkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQ6ICVkIEVycm9ycyFcbiIsIGZ1bmMsIG5FcnJvcnMpOworIAkKKwlyZXR1cm4gbkVycm9yczsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YQorCQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVEQkxlbW1hdGEoKQorCSAqICAgICAgICAgICAgICAgICAgICAgICAKKwkgKiBzdG9yZXMgbGlzdCBvZiBsZW1tYXRhICsgaW5mb3MgaW50byBEZXJieSBkYi4KKwkgKiBGaWxlIGZvcm1hdDogIkxlbW1hIERlY29tcG9zaXRpb24gV2YiLAorCSAqICAgICAgICAgICAgICBlLmcuOiAiSMOkdXNlciArLSBIYXVzIi4KKwkgKiBSZXR1cm5zOiAwID0gT0sgb3IgLTE6IGdlbmVyYWwgZXJyb3Igb3IgPiAwOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIDA5LjAxLjIwL0ZCCisJICogMDQuMTEuMjEvRkIgdHVybiBhdXRvY29tbWl0IG9mZiB0byBhY2NlbGVyYXRlIGh1Z2UgYW1vdW50IG9mIGluc2VydGlvbnMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYXRhKEJ1ZmZlcmVkUmVhZGVyIGluKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hdGEiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJUHJlcGFyZWRTdGF0ZW1lbnQKKwkJc3RtdFByZXAgPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10IAkgPSBudWxsOworCVN0cmluZworCQlsaW5lOwkKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQluSW5zZXJ0ZWQgPSAwLAkvLyBuby4gb2YgbGVtbWEvd2YgcGFpcnMgaW1wb3J0ZWQuCisJCXJldCA9IDA7IC8vIE9LLgorCWJvb2xlYW4KKwkJY29udGFpbnNTcGVjOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZSwKKwkvLyBzZXQgQXV0b2NvbW1pdCA9IGZhbHNlIHRvIGFjY2VsZXJhdGUgaW5zZXJ0aW9uczoKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJY29uLnNldEF1dG9Db21taXQoZmFsc2UpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZCAoYXV0b0NvbW1pdD1vZmYpLlxuIiwgZnVuYyk7CisJCQorCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCXN0bXRQcmVwID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0UHJlcGFyZWRRdWVyeSk7CisJCWVsc2UKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisKKwkJd2hpbGUoIChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoICE9IDMgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6ICclcycgaGFzICVkIGNvbXBvbmVudHMhIEV4cGVjdGVkID0gMyEgQ2Fubm90IGJlIHN0b3JlZCFcbiIsIGZ1bmMsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJCW5FcnJvcnMrKzsKKwkJCQljb250aW51ZTsKKwkJCQl9CisJCQkKKwkJCS8vIEdldCBJbmZvLCBpZiB3b3JkZm9ybSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgJy0nLCBpbnRlcnB1bmN0aW9uIGV0Yy46CisJCQkvLyBsZW1tYUluZm9bMl0gPSB3b3JkZm9ybS4KKwkJCWNvbnRhaW5zU3BlYyA9IExlbW1hSW5mby5pc1dmU3BlY2lhbENhc2UobGVtbWFJbmZvWzJdKTsKKwkJCS8vIHN0b3JlIGludG8gREI6CisJCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZChzdG10UHJlcCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvcyhzdG10LCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJCisJCQlpZiggcmV0ICE9IDAgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBzdG9yZSBsZW1tYSAnJXMnIGludG8gREIhIChyZXQ9JWQpXG4iLCBmdW5jLCBsaW5lLCByZXQpOworCQkJCW5FcnJvcnMrKzsgCisJCQkJfQorCQkJZWxzZQorCQkJCW5JbnNlcnRlZCsrOworCQkJfSAvLyB3aGlsZQorCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBHbGVtbSBsZW1tYXRhK2luZm9zIGZyb20gZmlsZSEgRXhpdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7IAorCQl9CQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IAorCQl7IAorCQl0cnkgeworCQkJLy8gaW1wb3J0YW50OiBub3cgY29tbWl0LCBhcyBhdXRvQ29tbWl0IGlzIGRlYWN0aXZhdGVkLAorCQkJLy8gdGhpcyBhbHNvIHJlbW92ZXMgZGF0YWJhc2UgbG9ja3M6CisJCQljb24uY29tbWl0KCk7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbW1pdCBzdWNjZXNzZnVsbC5cbiIsIGZ1bmMpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbW1pdCBhdCB0aGUgZW5kIG9mIHRoZSB3ZnMgbGlzdCBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJCisJCXRyeSB7IC8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIAorCQkJCXN0bXQuY2xvc2UoKTsKKwkJCWlmKCBzdG10UHJlcCAhPSBudWxsICkgCisJCQkJc3RtdFByZXAuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiSW5mbyA6ICVzOiBuby4gb2YgbGVtbWF0YS93ZiBwYWlycyBpbnNlcnRlZCA9ICVkLlxuIiwgZnVuYywgbkluc2VydGVkKTsKKwkKKwlyZXR1cm4gbkVycm9yczsgLy8gMD1PSywgPjAgPSBuby4gb2YgZXJyb3JzLgorCX0gLy8gd3JpdGVEQkxlbW1hdGEKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQ6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gcnVsZXMgaW50byBEZXJieSBEQi4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgaXMgdGhlIHZlcnNpb24gd2l0aCBhIFByZXBhcmVkUXVlcnkuCisJICogUGFyYW1ldGVyczoKKwkgKiBzcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTcuMDEuMjAvRkIKKwkgKiAwNS4xLjIxL0ZCIHJlamVjdCBsZW1tYS93ZiA+IDY0IGNoYXJzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCgKKwkJCVByZXBhcmVkU3RhdGVtZW50IHN0bXQsIAorCQkJU3RyaW5nIGxlbW1hLCAKKwkJCVN0cmluZyB3ZiwgCisJCQlTdHJpbmcgZGVjb21wb3NpdGlvbiwgCisJCQlib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCI7CisJZmluYWwgYm9vbGVhbgorCQliTG9nID0gZmFsc2U7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJYm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJLy8gY2hlY2sgc2l6ZSBvZiB3ZiBhbmQgbGVtbWEgYWdhaW5zdCBmaWVsZCBzaXplIGluIHRhYmxlIEdsZW1tTGVtbWF0YToKKwlpZiggbGVtbWEubGVuZ3RoKCkgPj0gR2xlbW1EQi5tYXhMZW1tYVNpemUgKSAKKwkJeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGxlbW1hIHJlamVjdGVkICg+ICVkKTogJyVzJyFcbiIsCisJCQkJZnVuYywgbWF4TGVtbWFTaXplLCBsZW1tYSk7CisJCXJldHVybiA0OworCQl9CisJaWYoIHdmLmxlbmd0aCgpID49IEdsZW1tREIubWF4V2ZTaXplICkgCisJCXsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3ZiByZWplY3RlZCAoPiAlZCk6ICclcychXG4iLAorCQkJCWZ1bmMsIG1heFdmU2l6ZSwgd2YpOworCQlyZXR1cm4gNTsKKwkJfQorCSAKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgCisJLy8gZm9yIGxvZ2luZyBvbmx5OgorCXNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwlpZiggYkxvZyApCisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorICAgIC8vIG5vdyBpbnNlcnQgbmV3IHZhbHVlcyBpbnRvIFByZXBhcmVkU3RhdGVtZW50OgorICAgIHRyeSB7CisgICAgCXN0bXQuc2V0U3RyaW5nKCAxLCBsZW1tYSk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKCAyLCB3Zik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbigzLCBwcm9wMSk7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig0LCBwcm9wMik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig1LCBzcGVjKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcmVwYXJlZCBzdG10ID0gJyVzJy5cbiIsICBmdW5jLCBzdG10LnRvU3RyaW5nKCkpOworICAgICAgICB9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlMSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKAkiRXJyb3I6ICVzOiB3aGlsZSBmaWxsaW5nIHByZXBhcmVkIHN0YXRlbWVudCB3aXRoIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0nJWInIHByb3AyPSclYicgc3BlYz0nJWInIVxuIiwgIAorCQkJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJaWYoICsrbkV4Y2VwdFN0bXQgPD0gMSApCisJCQllMS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKyAgICAKKyAgICB0cnkgeworCQkvLyBleGVjdXRlIHRoZSBmaWxsZWQgcHJlcGFyZWQgc3RhdGVtZW50OgorCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhIChuPSVkKVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYywgbik7CisgCQkJcmV0dXJuIDI7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQlpZiggKytuRXhjZXB0SW5zZXJ0IDw9IDEgKQorCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDM7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZAorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3M6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gaW50byBEZXJieSBEQi4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGNvbnRhaW5zU3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDEwLjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zKFN0YXRlbWVudCBzdG10LCBTdHJpbmcgbGVtbWEsIFN0cmluZyB3ZiwgU3RyaW5nIGRlY29tcG9zaXRpb24sIGJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zIjsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlCb29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworICAgIAorICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorCXRyeSB7CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoc3FsSW5zZXJ0KTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYURhdGEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBmcm9tIHRoZSBHbGVtbURCLgorCSAqIElucHV0OiBsZW1tYSArIEdMRU1NX09QVFNfeHh4IChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWFEYXRhKExlbW1hSW5mbyBsZW1tYUluZm8sIFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYURhdGEiOworCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJbGVtbWFJbmZvLmNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJbGVtbWFJbmZvLnN0bXQgPSBsZW1tYUluZm8uY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlpbnQgciA9IHJlYWREQkxlbW1hKGxlbW1hSW5mby5zdG10LCBsZW1tYUluZm8pOworCQkJCisJCWlmKCByICE9IDAgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZ2V0IGRhdGEgZm9yIGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIVxuIiwgCisJCQkJCWZ1bmMsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwkJCXJldHVybiAxOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggbGVtbWFJbmZvLmNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hRGF0YQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGJ5IGFjY2Vzc2luZyB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dCA6IGxlbW1hICsgcHJvcDErMiAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogT3V0cHV0OiAKKwkgKiAgLSBjb250YWlucyBhIFJlc3VsdFNldCBmb3IgZmV0Y2hpbmcgdGhlIHdvcmRmb3Jtcy4KKwkgKiAJICBUaGlzIFJlc3VsdFNldCB3aWxsIGhhdmUgYmUgYmUgY2xvc2VkIHdpdGggTGVtbWFJbmZvLmNsb3NlKCkuCisJICogCSAgVGhlIG5vLiBvZiBmb3VuZCB3b3JkZm9ybXMgaXMgbm90IGtub3duIHRpbGwgd2UKKwkgKiAJICBmZXRjaCBhbGwgb2YgdGhlbSBmcm9tIFJlc3VsdFNldCEgCisJICogCS0gZHVlIHRvIFNFTEVDVCBESVNUSU5DVCBvbmx5IHVuaXEgd2YgYXJlIHJldHVybmVkLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYShTdGF0ZW1lbnQgc3RtdCwgTGVtbWFJbmZvIGxlbW1hSW5mbykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hIjsKKwlTdHJpbmcKKwkJc3FsOworCQkKKwlzcWwgPSBTdHJpbmcuZm9ybWF0KCJTRUxFQ1QgRElTVElOQ1Qgd2YgZnJvbSAlcyBXSEVSRSBsZW1tYT0nJXMnICVzICVzICVzIiwgCisJCQlkYlRhYmxlLAorCQkJbGVtbWFJbmZvLmxlbW1hLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiQU5EIHByb3AxPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAxID8gIkFORCBwcm9wMT0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiQU5EIHByb3AyPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAxID8gIkFORCBwcm9wMj0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiQU5EIHNwZWM9J3RydWUnIiAgIDogCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICJBTkQgc3BlYz0nZmFsc2UnIiAgOiAiIik7CisJCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgZnVuYywgbGVtbWFJbmZvLnByb3AxLCBsZW1tYUluZm8ucHJvcDIsIGxlbW1hSW5mby5zcGVjKTsKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbCA9ICclcycuXG4iLCBmdW5jLCBzcWwpOworCisJdHJ5IHsKKwkJbGVtbWFJbmZvLnJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoZW4gZXhlY3V0aW5nIHNxbD0nJXMnIVxuIiwgZnVuYywgc3FsKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gYWxsIHNxbCBzdHVmZiBhcmUgY2xvc2VkIG91dHNpZGUgdGhpcyBmdW5jdGlvbiwgc28gZG9uJ3QgY2xvc2UgdGhlbSBoZXJlIQorCQl9CQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3MKKwkgKiBSZXR1cm5zIEdlbmVyYWwgSW5mb3MgYWJvdXQgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIHJlYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJJbmZvcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJZGJJbmZvID0gcmVhZERiTGVtbWF0YUluZm9zKHN0bXQpOworCQkJCisJCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCByZWFkIEdlbmVyYWwgSW5mb3MgZnJvbSBHbGVtbSBEYXRhYmFzZSFcbiIsIGZ1bmMpOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSBjb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSBzdG10LmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIG1heSBiZSBudWxsLgorCQkKKwl9IC8vIHJlYWREYkluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiTGVtbWF0YUluZm9zOgorCSAqIHJlYWRzIGFuZCByZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGNvbnRlbnQgCisJICogb2YgdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIFJldHVybnMgMD1PSyBvciBlcnJvciBjb2RlID4gMC4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkxlbW1hdGFJbmZvcyhTdGF0ZW1lbnQgc3RtdCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAicmVhZERiTGVtbWFJbmZvcyI7CisJU3RyaW5nW10KKwkJc3FsID0gewkiU0VMRUNUIENPVU5UKGRpc3RpbmN0IGxlbW1hKSBmcm9tICIgKyBkYlRhYmxlICwJLy8gY291bnRzIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSwJCQkJCS8vIGNvdW50cyB0b3RhbCBuby4gb2Ygc3RvcmVkIHdvcmRmb3Jtcy4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPXRydWUiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPXRydWUifTsKKwlSZXN1bHRTZXQKKwkJcmVzID0gbnVsbDsgCisJaW50W10KKwkJbkNvdW50cyA9IG5ldyBpbnRbc3FsLmxlbmd0aF07CisJaW50CQkKKwkJaSA9IDAsIAorCQluRGlzdExlbW1hdGEgPSAtMSwJLy8gbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEgaW4gREIuCisJCW5XZnMJCSA9IC0xOwkvLyBuby4gb2Ygd29yZGZvcm1zIGluIERCLgorCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBleHRyYWN0aW5nIGFncmVnYXRlZCBpbmZvcyBhYm91dCBEYXRhYmFzZSBjb250ZW50cy4uLlxuIiwgZnVuYyk7CisJCisJZGJJbmZvID0gbmV3IEdsZW1tREJJbmZvKCk7CisKKwkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwl0cnkgeworCQlmb3IoaT0wOyBpPHNxbC5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCXJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbFtpXSk7CisJCQlpZiggcmVzLm5leHQoKSApCisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IHJlcy5nZXRJbnQoMSk7IC8vIGNvdW50IGlzIGluIGNvbHVtbiAxLgorCQkJZWxzZQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBleHRyYWN0IGNvdW50IGZyb20gJyVzJyFcbiIsIGZ1bmMsIHNxbFtpXSk7CisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IC0xOworCQkJCX0KKwkJCX0KKyAgICAgICAKKyAgICAgICAgfQorICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgIAl7CisgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogc3FsPSclcycgZmFpbGVkIVxuIiwgZnVuYywgc3FsW2ldKTsKKyAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAJfQorCWZpbmFsbHkgeworCQl0cnkgeworCQkJcmVzLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBPSworCX0gLy8gcmVhZERiTGVtbWF0YUluZm9zCisJCisJLyoqKioqKioqKioqKioqKioqKioqIFRlc3QgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zX3Rlc3QKKwkgKiBUaGlzIGlzIGRlYnVnIGNvZGUgd3JpdHRlbiB0byB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIERlcmJ5CisJICogRGF0YWJhc2UgZnJvbSBhbiBleHRlcm5hbCBKYXZhIFByb2dyYW1tLgorCSAqIDA4LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCByZWFkRGJJbmZvc190ZXN0KCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlTdHJpbmcKKwkJaW5zZXJ0U3RtdCA9ICIiOworCQorCS8vIENvbm5lY3QgdG8gRGVyYnkgZGF0YWJhc2U6CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCQorCQkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwkJdHJ5CisJCQl7CisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIAorICAgICAgICAgICAgCXNxbCA9ICJTRUxFQ1QgKiBGUk9NICIgKyBkYlRhYmxlOworICAgICAgICAgICAgUmVzdWx0U2V0IAorICAgICAgICAgICAgCXJlc3VsdCA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CisgCisgICAgICAgICAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHRhYmxlICclcyc6XG4iLCAgZnVuYywgZGJUYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQubmV4dCgpKSB7CisgICAgICAgICAgICAJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiJyVzJyA6ICclcycgOiAnJXMnIDogJyVzJyAuXG4iLCByZXN1bHQuZ2V0U3RyaW5nKDEpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygyKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMyksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDQpKTsKKyAgICAgICAgCQlpbnNlcnRTdG10ID0gaW5zZXJ0U3RtdCArICI8cD4iICsgcmVzdWx0LmdldFN0cmluZygxKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZygyKSArICIgOiAiICsKKyAgICAgICAgICAgICAgICAJCSAgICAgcmVzdWx0LmdldFN0cmluZygzKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZyg0KSArICI8L3A+IjsKKyAgICAgICAgICAgIAl9CisJCQl9CisJICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgICAgICAJeworCSAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBpbnNlcnRTdG10PSclcycgZmFpbGVkIS5cbiIsIGZ1bmMsIHN0bXQpOworICAgICAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICAgICAgY29uLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nICclcyBmYWlsZWQhXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJdHJ5IHsKKwkJY29uLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkJCisJfSAvLyByZWFkRGJJbmZvc190ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogaW1wb3J0R2xlbW1MZW1hdGFfdGVzdAorCSAqIFRlc3QgVmVyc2lvbi4KKwkgKiAxMi4xMi4xOS9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QoU3RyaW5nIGZuKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdCI7CisJSW5wdXRTdHJlYW0gCisJCWluOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluMiA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQlyOworCQorCS8qCisJICogUmVhZCBMZW1tYXRhICsgSW5mbyBmcm9tIGZpbGU6IAorCSAqLworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCQorCXRyeSB7CisJCS8vaW4gPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSggbmV3IEZpbGVJbnB1dFN0cmVhbShmbikgKTsKKwkJaW4yID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlcihmbikpOworCQl3aGlsZSggKGxpbmUgPSBpbjIucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoID09IDMgKQorCQkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBJbXBvcnQ6IGxlbT0nJXMnIERlY29tcD0nJXMnIFdmPSclcycuXG4iLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1sxXSwgbGVtbWFJbmZvWzJdKTsKKwkJCWVsc2UKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogaW1wb3J0R2xlbW1MYW1hdGE6ICclcycgaGFzICVkIGNvbXBvbmVudHMhXG4iLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IG9wZW4gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJcmV0dXJuIDE7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKworCXRyeSB7CisJCWluMi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCS8qIENoZWNrIGNvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJICovIAorCXIgPSByZWFkRGJJbmZvc190ZXN0KCk7CisJaWYoIHIgIT0gMCApCisJCXJldHVybiByOworCQkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzZhL2IwMjMzM2MyNDIzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS82YS9iMDIzMzNjMjQyM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTc1ZWM0Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS82YS9iMDIzMzNjMjQyM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpAQCAtMCwwICsxLDg2IEBACis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiAKKwl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKwl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICA8Z3JvdXBJZD5kZS5rb3JhcC5zZXJ2aWNlczwvZ3JvdXBJZD4KKyAgPGFydGlmYWN0SWQ+R2xlbW1TZXJ2aWNlczwvYXJ0aWZhY3RJZD4KKyAgPCEtLXZlcnNpb24+MC4yLVRlc3Q8L3ZlcnNpb24gLS0+CisgIDx2ZXJzaW9uPjAuMi1saXZlPC92ZXJzaW9uPgorICAKKyAgPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KKyAgPG5hbWU+R2xlbW1TZXJ2aWNlcyAoTGl2ZS1Lb25maWd1cmF0aW9uKTwvbmFtZT4KKyAgCisgIDxkZXNjcmlwdGlvbj5SRVNUZnVsbCBHbGVtbVNlcnZpY2VzIGbDvHIgS29yQVAgKExpdmUtS29uZmlndXJhdGlvbik8L2Rlc2NyaXB0aW9uPgorICAKKyAgPGRlcGVuZGVuY2llcz4KKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+CisgICAgICA8dmVyc2lvbj4zLjguMTwvdmVyc2lvbj4KKyAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICA8L2RlcGVuZGVuY3k+CisgICA8ZGVwZW5kZW5jeT4KKyAgICA8Z3JvdXBJZD5qYXZheC5zZXJ2bGV0PC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPnNlcnZsZXQtYXBpPC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjIuNTwvdmVyc2lvbj4KKyAgIDwvZGVwZW5kZW5jeT4KKyAgIDwhLS0gaHR0cHM6Ly9tdm5yZXBvc2l0b3J5LmNvbS9hcnRpZmFjdC9qYXZheC53cy5ycy9qYXZheC53cy5ycy1hcGkgLS0+CisgICA8ZGVwZW5kZW5jeT4KKyAgICA8Z3JvdXBJZD5qYXZheC53cy5yczwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5qYXZheC53cy5ycy1hcGk8L2FydGlmYWN0SWQ+CisgICAgPHZlcnNpb24+Mi4wPC92ZXJzaW9uPgorICAgPC9kZXBlbmRlbmN5PgorICAgPGRlcGVuZGVuY3k+CisgICAgPGdyb3VwSWQ+Y29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmU8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+amFja3Nvbi1jb3JlPC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjIuOS42PC92ZXJzaW9uPgorICAgIDxzY29wZT5jb21waWxlPC9zY29wZT4KKyAgIDwvZGVwZW5kZW5jeT4KKwk8ZGVwZW5kZW5jeT4KKwkgIDxncm91cElkPmNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlPC9ncm91cElkPgorCSAgPGFydGlmYWN0SWQ+amFja3Nvbi1hbm5vdGF0aW9uczwvYXJ0aWZhY3RJZD4KKwkgIDx2ZXJzaW9uPjIuOS42PC92ZXJzaW9uPgorCTwvZGVwZW5kZW5jeT4KKwk8ZGVwZW5kZW5jeT4KKwkgIDxncm91cElkPmNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlPC9ncm91cElkPgorCSAgPGFydGlmYWN0SWQ+amFja3Nvbi1kYXRhYmluZDwvYXJ0aWZhY3RJZD4KKwkgIDx2ZXJzaW9uPjIuOS42PC92ZXJzaW9uPgorCSAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KKwk8L2RlcGVuZGVuY3k+CisKKwk8ZGVwZW5kZW5jeT4KKwkJPGdyb3VwSWQ+ZGUua29yYXAuc2VydmljZXM8L2dyb3VwSWQ+CisJCTxhcnRpZmFjdElkPnV0aWxzPC9hcnRpZmFjdElkPgorCQk8dmVyc2lvbj4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisJPC9kZXBlbmRlbmN5PgorCTxkZXBlbmRlbmN5PgorCQk8Z3JvdXBJZD5kZS5rb3JhcC5qc29uPC9ncm91cElkPgorCQk8YXJ0aWZhY3RJZD5Kc29uVHJhdmVyc2U8L2FydGlmYWN0SWQ+CisJCTx2ZXJzaW9uPjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKwk8L2RlcGVuZGVuY3k+CisgIDwvZGVwZW5kZW5jaWVzPgorICAKKyAgPGJ1aWxkPgorICAgIDxzb3VyY2VEaXJlY3Rvcnk+c3JjPC9zb3VyY2VEaXJlY3Rvcnk+CisgICAgPHBsdWdpbnM+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1jb21waWxlci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjMuNy4wPC92ZXJzaW9uPgorICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8c291cmNlPjEuODwvc291cmNlPgorICAgICAgICAgIDx0YXJnZXQ+MS44PC90YXJnZXQ+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvcGx1Z2luPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4td2FyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+My4yLjE8L3ZlcnNpb24+CisgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgIDxmYWlsT25NaXNzaW5nV2ViWG1sPmZhbHNlPC9mYWlsT25NaXNzaW5nV2ViWG1sPgorICAgICAgICAgIDx3YXJTb3VyY2VEaXJlY3Rvcnk+V2ViQ29udGVudDwvd2FyU291cmNlRGlyZWN0b3J5PgorICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICA8L3BsdWdpbj4KKyAgICA8L3BsdWdpbnM+CisgICAgPGZpbmFsTmFtZT5HbGVtbVNlcnZpY2VzPC9maW5hbE5hbWU+CisgIDwvYnVpbGQ+CisgIAorPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNmEvYzBhYjUxYmM4MDJiMDAxYzFjNDFjZTU1OWVhNWUxNmIgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzZhL2MwYWI1MWJjODAyYjAwMWMxYzQxY2U1NTllYTVlMTZiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNjJmNGYKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzZhL2MwYWI1MWJjODAyYjAwMWMxYzQxY2U1NTllYTVlMTZiCkBAIC0wLDAgKzEsNjg4IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNi4xMC4yMSI7IC8vIjE3LjA2LjIwIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjEiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJCVN0cmluZworCQkJc3RhdHVzOworCQlVdGlscworCQkJdSA9IG5ldyBVdGlscygpOworCQlQcm9wZXJ0aWVzCisJCQlwcm9wczsKKwkJCisJCS8vIHJlYWQgdGVzdAorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCQkJCisJCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCQlGaWxlSW5wdXRTdHJlYW0KKwkJCWluUHJvcCA9IGdldFNlcnZsZXRDb250ZXh0KCkuIFNlcnZsZXRDb250ZXh0LiAgLmdldFJlc291cmNlQXNTdHJlYW0oIkdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOyAvL25ldyBGaWxlSW5wdXQKKwkJLy8gZW5kIG9mIHJlYWQgdGVzdAorCQkKKwkJLy8gdGVzdAorCQkvKgorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCQorCQkgKiBwcm9wcy5zZXRQcm9wZXJ0eSgicCIsICJ0ZXN0Iik7CisJCSAqCisJCUZpbGVPdXRwdXRTdHJlYW0gb3V0OworCQl0cnkgeworCQkJb3V0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oImdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOworCQkJcHJvcHMuc3RvcmUob3V0LCAgInRlc3QgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIik7CisJCQl9IAorCQljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfTsKKwkJKi8KKwkJCisJCS8vIGVuZCBvdGVzdAorCQkKKwkJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiQVBJOiAlczogL2luZGV4L3N0YXR1cy8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCisJCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCQlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIFBPU1Q6IC9pbmRleC9hZGQvOiB0ZXh0L3BsYWluCisJICogYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UuCisJICogVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQKKwkgKiBpbnRvIHRoZSBkYXRhYmFzZS4KKwkgKiBJbnB1dDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICovCisJQFBhdGgoImFkZCIpIEBQT1NUIEBDb25zdW1lcygidGV4dC9wbGFpbiIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBpbXBvcnRMZW1tYURhdGEoU3RyaW5nIGxpc3QpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSBhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCQorCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvYWRkLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZu+/vWhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCX0KKworCS8qIHZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIHZpZXdEQkluZm8KKworCisJLyogdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgLSBTdGF0dXM6IDxpPldvcmsgaW4gcHJvZ3Jlc3MuLi4hPC9pPik8L2g0PlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggIW9wdGlvbnMuZXF1YWxzKCJ1bmRlZiIpKQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMS9wcm9wMi9zcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogR2xlbW1TZXJ2aWNlcyAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uRGF0ZSwgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCS8vU3lzdGVtLm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzZjLzIwNTNlNjcwNTUzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS82Yy8yMDUzZTY3MDU1M2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGQ3ZDg0Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS82Yy8yMDUzZTY3MDU1M2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpAQCAtMCwwICsxLDcyNCBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnNxbC5Db25uZWN0aW9uOworaW1wb3J0IGphdmEuc3FsLkRyaXZlck1hbmFnZXI7CitpbXBvcnQgamF2YS5zcWwuUHJlcGFyZWRTdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS5zcWwuUmVzdWx0U2V0OworaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5TdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitwdWJsaWMgY2xhc3MgR2xlbW1EQgorCit7CisJc3RhdGljIHB1YmxpYyBTdHJpbmcgZGJUYWJsZSAJPSAiR2xlbW1MZW1tYXRhIjsKKwlzdGF0aWMgU3RyaW5nIGRiTGVtbWEgCQkgCT0gImxlbW1hIjsKKwlzdGF0aWMgU3RyaW5nIGRiV2YJIAkJCT0gIndmIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDEgCQkJPSAicHJvcDEiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMiAJCQk9ICJwcm9wMiI7CisKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKG92ZXJ3cml0dGVuIGJ5IEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZuYW1lREIgPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgc2VydmVySG9zdCA9ICIvL2xvY2FsaG9zdDoxNTI3LyI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChmaW5hbCBhc3NpZ25tZW50cyk6CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyRW1iID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZERyaXZlciI7CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyQ2xpZW50ID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREcml2ZXIiOworCisJZmluYWwgc3RhdGljIGJvb2xlYW4KKwkJdXNlUHJlcGFyZWRTdG10ID0gdHJ1ZTsgLy8gMT11c2UgUHJlcGFyZWRTdGF0ZW1lbnQgYW5kIG5vdCBTdGF0ZW1lbnQuCisJCisJLy8gdmFsdWVzIHRvIGJlIGluc2VydGVkOiBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYy4KKwlzdGF0aWMgU3RyaW5nIGluc2VydFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKCclcycsICclcycsICclcycsICclcycsICclcycpIjsKKwlzdGF0aWMgU3RyaW5nIGluc2VydFByZXBhcmVkUXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoPywgPywgPywgPywgPykiOworCQorCS8qCisJICogc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJICogCisJICogQXJndW1lbnRzOgorCSAqIHByb3BzCTogUHJvcGVydGllcyBsb2FkZWQgYnkgdGhlIEdsZW1tU2VydmljZXMuCisJICogTm90ZXM6CisJICogLSB0aGlzIGZ1bmN0aW9uIGxvYWRzIG9ubHkgdGhvc2UgQ29uc3RhbnRzIG5lZWRlZCBpbiB0aGlzIGNsYXNzLgorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcwlwcm9wcykKKwkKKwl7CisJZm5hbWVEQgkJIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgCSIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlzZXJ2ZXJIb3N0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJzZXJ2ZXJIb3N0IiwJIi8vbG9jYWxob3N0OjE1MjcvIik7CisJZGVyYnlEQlVSTCAJCT0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCQkJCisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCQkJCQlpbXBvcnRHbGVtbUxlbWF0YQorCSAqIFBhcmFtZXRlcnM6CisJICogZm4JCSA6IGFic29sdXRlIGZpbGUgbmFtZSBvZiBHTEVNTSBvdXRwdXQgW0lTTzg4NTktMV0gZXhwZWN0ZWQsIG5vdCBVVEYtOCEKKwkgKiBwcm9wcwkgOiBQcm9wZXJ0aWVzIHZvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgdG8gc2V0IGNvbnN0YW50cyBuZWVkZWQKKwkgKiAJCQkgICBpbiB0aGlzIGNsYXNzLgorCSAqIGRicGF0aAkgOiBsb2NhdGlvbiArIG5hbWUgb2YgZGF0YWJhc2Ugd2hlcmUgdG8gc3RvcmUgbGVtbWF0YSt3ZnMuCisJICogUmV0dXJucwkgOiAwPU9LLCAtMTogZ2VuZXJhbCBlcnJvcjsgPiAwIDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAKKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIGR5bmFtaWNhbGx5IGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqIDA0LjExLjIxL0ZCIGRicGF0aC4KKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YShTdHJpbmcgZm4sIFByb3BlcnRpZXMgcHJvcHMsIGZpbmFsIFN0cmluZyBkYnBhdGgpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YSI7CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4gPSBudWxsOworCWludAorCQluRXJyb3JzOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyB3aGVuIGluZGV4aW5nIGRhdGEgaW50byB0aGUgZGF0YWJhc2UsIHNlbGVjdCB0aGUgc3VibWl0dGVkIGRicGF0aCwKKwkvLyAobm90IHRoZSBvbmUgc3RvcmVkIGluIHRoZSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCWRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGRicGF0aDsKKwkKKwkvLyBvcGVuIHJlYWRlciBvbiBHbGVtbSBMZW1tYXRhOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCWluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCQorCQluRXJyb3JzID0gd3JpdGVEQkxlbW1hdGEoaW4pOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBmcm9tICclcychXG4iLCBmdW5jLCBmbik7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAtMTsKKwkJfQorCisJLy8gY2xvc2UgUmVhZGVyOgorCXRyeSB7CisJCWluLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJbkVycm9ycyA9IC0xOworCQl9CisJCisgCWlmKCBuRXJyb3JzID09IDAgKQorIAkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQgZG9uZSBzdWNjZXNzZnVsbHkuXG4iLCBmdW5jKTsKKyAJZWxzZQorIAkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQ6ICVkIEVycm9ycyFcbiIsIGZ1bmMsIG5FcnJvcnMpOworIAkKKwlyZXR1cm4gbkVycm9yczsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YQorCQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiB3cml0ZURCTGVtbWF0YSgpCisJICogc3RvcmVzIGxpc3Qgb2YgbGVtbWF0YSArIGluZm9zIGludG8gRGVyYnkgZGIuCisJICogRmlsZSBmb3JtYXQ6ICJMZW1tYSBEZWNvbXBvc2l0aW9uIFdmIiwKKwkgKiAgICAgICAgICAgICAgZS5nLjogIkjvv711c2VyICstIEhhdXMiLgorCSAqIFJldHVybnM6IDAgPSBPSyBvciAtMTogZ2VuZXJhbCBlcnJvciBvciA+IDA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogMDkuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYXRhKEJ1ZmZlcmVkUmVhZGVyIGluKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hdGEiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJUHJlcGFyZWRTdGF0ZW1lbnQKKwkJc3RtdFByZXAgPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10IAkgPSBudWxsOworCVN0cmluZworCQlsaW5lOwkKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQluSW5zZXJ0ZWQgPSAwLAkvLyBuby4gb2YgbGVtbWEvd2YgcGFpcnMgaW1wb3J0ZWQuCisJCXJldCA9IDA7IC8vIE9LLgorCWJvb2xlYW4KKwkJY29udGFpbnNTcGVjOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKworCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCXN0bXRQcmVwID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0UHJlcGFyZWRRdWVyeSk7CisJCWVsc2UKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisKKwkJd2hpbGUoIChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoICE9IDMgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6ICclcycgaGFzICVkIGNvbXBvbmVudHMhIEV4cGVjdGVkID0gMyEgQ2Fubm90IGJlIHN0b3JlZCFcbiIsIGZ1bmMsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJCW5FcnJvcnMrKzsKKwkJCQljb250aW51ZTsKKwkJCQl9CisJCQkKKwkJCS8vIEdldCBJbmZvLCBpZiB3b3JkZm9ybSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgJy0nLCBpbnRlcnB1bmN0aW9uIGV0Yy46CisJCQkvLyBsZW1tYUluZm9bMl0gPSB3b3JkZm9ybS4KKwkJCWNvbnRhaW5zU3BlYyA9IExlbW1hSW5mby5pc1dmU3BlY2lhbENhc2UobGVtbWFJbmZvWzJdKTsKKwkJCS8vIHN0b3JlIGludG8gREI6CisJCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZChzdG10UHJlcCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvcyhzdG10LCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJCisJCQlpZiggcmV0ICE9IDAgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBzdG9yZSBsZW1tYSAnJXMnIGludG8gREIhXG4iLCBmdW5jLCBsaW5lKTsKKwkJCQluRXJyb3JzKys7IAorCQkJCX0KKwkJCWVsc2UKKwkJCQluSW5zZXJ0ZWQrKzsKKwkJCX0gLy8gd2hpbGUKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgR2xlbW0gbGVtbWF0YStpbmZvcyBmcm9tIGZpbGUhIEV4aXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIC0xOyAKKwkJfQkKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIC0xOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIAorCQkJCXN0bXQuY2xvc2UoKTsKKwkJCWlmKCBzdG10UHJlcCAhPSBudWxsICkgCisJCQkJc3RtdFByZXAuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIG5FcnJvcnM7IC8vIDA9T0ssID4wID0gbm8uIG9mIGVycm9ycy4KKwl9IC8vIHdyaXRlREJMZW1tYXRhCisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIHJ1bGVzIGludG8gRGVyYnkgREIuCisJICogTm90ZXM6CisJICogLSB0aGlzIGlzIHRoZSB2ZXJzaW9uIHdpdGggYSBQcmVwYXJlZFF1ZXJ5LgorCSAqIFBhcmFtZXRlcnM6CisJICogc3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDE3LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKAorCQkJUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCwgCisJCQlTdHJpbmcgbGVtbWEsIAorCQkJU3RyaW5nIHdmLCAKKwkJCVN0cmluZyBkZWNvbXBvc2l0aW9uLCAKKwkJCWJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkIjsKKwlmaW5hbCBib29sZWFuCisJCWJMb2cgPSBmYWxzZTsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlib29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgCisJLy8gZm9yIGxvZ2luZyBvbmx5OgorCXNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwlpZiggYkxvZyApCisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorICAgIC8vIG5vdyBpbnNlcnQgbmV3IHZhbHVlcyBpbnRvIFByZXBhcmVkU3RhdGVtZW50OgorICAgIHRyeSB7CisgICAgCXN0bXQuc2V0U3RyaW5nKCAxLCBsZW1tYSk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKCAyLCB3Zik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbigzLCBwcm9wMSk7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig0LCBwcm9wMik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig1LCBzcGVjKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcmVwYXJlZCBzdG10ID0gJyVzJy5cbiIsICBmdW5jLCBzdG10LnRvU3RyaW5nKCkpOworICAgICAgICB9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlMSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKAkiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSclYicgcHJvcDI9JyViJyBzcGVjPSclYichXG4iLCAgCisJCQkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKyAgICAKKyAgICB0cnkgeworCQkvLyBleGVjdXRlIHRoZSBmaWxsZWQgcHJlcGFyZWQgc3RhdGVtZW50OgorCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9OworCQorICAgIAorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIGludG8gRGVyYnkgREIuCisJICogUGFyYW1ldGVyczoKKwkgKiBjb250YWluc1NwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxMC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvcyhTdGF0ZW1lbnQgc3RtdCwgU3RyaW5nIGxlbW1hLCBTdHJpbmcgd2YsIFN0cmluZyBkZWNvbXBvc2l0aW9uLCBib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvcyI7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJQm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIHNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAgICAKKyAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKwl0cnkgeworCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKHNxbEluc2VydCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWFEYXRhCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgZnJvbSB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dDogbGVtbWEgKyBHTEVNTV9PUFRTX3h4eCAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hRGF0YShMZW1tYUluZm8gbGVtbWFJbmZvLCBQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWFEYXRhIjsKKworCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWxlbW1hSW5mby5jb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCWxlbW1hSW5mby5zdG10ID0gbGVtbWFJbmZvLmNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJaW50IHIgPSByZWFkREJMZW1tYShsZW1tYUluZm8uc3RtdCwgbGVtbWFJbmZvKTsKKwkJCQorCQlpZiggciAhPSAwICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGdldCBkYXRhIGZvciBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyFcbiIsIAorCQkJCQlmdW5jLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGxlbW1hSW5mby5jb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYURhdGEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBieSBhY2Nlc3NpbmcgdGhlIEdsZW1tREIuCisJICogSW5wdXQgOiBsZW1tYSArIHByb3AxKzIgKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqIE91dHB1dDogCisJICogIC0gY29udGFpbnMgYSBSZXN1bHRTZXQgZm9yIGZldGNoaW5nIHRoZSB3b3JkZm9ybXMuCisJICogCSAgVGhpcyBSZXN1bHRTZXQgd2lsbCBoYXZlIGJlIGJlIGNsb3NlZCB3aXRoIExlbW1hSW5mby5jbG9zZSgpLgorCSAqIAkgIFRoZSBuby4gb2YgZm91bmQgd29yZGZvcm1zIGlzIG5vdCBrbm93biB0aWxsIHdlCisJICogCSAgZmV0Y2ggYWxsIG9mIHRoZW0gZnJvbSBSZXN1bHRTZXQhIAorCSAqIAktIGR1ZSB0byBTRUxFQ1QgRElTVElOQ1Qgb25seSB1bmlxIHdmIGFyZSByZXR1cm5lZC4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWEoU3RhdGVtZW50IHN0bXQsIExlbW1hSW5mbyBsZW1tYUluZm8pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYSI7CisJU3RyaW5nCisJCXNxbDsKKwkJCisJc3FsID0gU3RyaW5nLmZvcm1hdCgiU0VMRUNUIERJU1RJTkNUIHdmIGZyb20gJXMgV0hFUkUgbGVtbWE9JyVzJyAlcyAlcyAlcyIsIAorCQkJZGJUYWJsZSwKKwkJCWxlbW1hSW5mby5sZW1tYSwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIkFORCBwcm9wMT0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICJBTkQgcHJvcDE9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIkFORCBwcm9wMj0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICJBTkQgcHJvcDI9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAxID8gIkFORCBzcGVjPSd0cnVlJyIgICA6IAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiQU5EIHNwZWM9J2ZhbHNlJyIgIDogIiIpOworCQorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIGZ1bmMsIGxlbW1hSW5mby5wcm9wMSwgbGVtbWFJbmZvLnByb3AyLCBsZW1tYUluZm8uc3BlYyk7CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWwgPSAnJXMnLlxuIiwgZnVuYywgc3FsKTsKKworCXRyeSB7CisJCWxlbW1hSW5mby5yZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOwkKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGVuIGV4ZWN1dGluZyBzcWw9JyVzJyFcbiIsIGZ1bmMsIHNxbCk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisJZmluYWxseSB7CisJCS8vIGFsbCBzcWwgc3R1ZmYgYXJlIGNsb3NlZCBvdXRzaWRlIHRoaXMgZnVuY3Rpb24sIHNvIGRvbid0IGNsb3NlIHRoZW0gaGVyZSEKKwkJfQkKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zCisJICogUmV0dXJucyBHZW5lcmFsIEluZm9zIGFib3V0IHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiByZWFkIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiSW5mb3MoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWRiSW5mbyA9IHJlYWREYkxlbW1hdGFJbmZvcyhzdG10KTsKKwkJCQorCQlpZiggZGJJbmZvID09IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgcmVhZCBHZW5lcmFsIEluZm9zIGZyb20gR2xlbW0gRGF0YWJhc2UhXG4iLCBmdW5jKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIG51bGw7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgc3RtdC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBtYXkgYmUgbnVsbC4KKwkJCisJfSAvLyByZWFkRGJJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkxlbW1hdGFJbmZvczoKKwkgKiByZWFkcyBhbmQgcmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjb250ZW50IAorCSAqIG9mIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiBSZXR1cm5zIDA9T0sgb3IgZXJyb3IgY29kZSA+IDAuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJMZW1tYXRhSW5mb3MoU3RhdGVtZW50IHN0bXQpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInJlYWREYkxlbW1hSW5mb3MiOworCVN0cmluZ1tdCisJCXNxbCA9IHsJIlNFTEVDVCBDT1VOVChkaXN0aW5jdCBsZW1tYSkgZnJvbSAiICsgZGJUYWJsZSAsCS8vIGNvdW50cyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YS4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUsCQkJCQkvLyBjb3VudHMgdG90YWwgbm8uIG9mIHN0b3JlZCB3b3JkZm9ybXMuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj10cnVlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj10cnVlIn07CisJUmVzdWx0U2V0CisJCXJlcyA9IG51bGw7IAorCWludFtdCisJCW5Db3VudHMgPSBuZXcgaW50W3NxbC5sZW5ndGhdOworCWludAkJCisJCWkgPSAwLCAKKwkJbkRpc3RMZW1tYXRhID0gLTEsCS8vIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhIGluIERCLgorCQluV2ZzCQkgPSAtMTsJLy8gbm8uIG9mIHdvcmRmb3JtcyBpbiBEQi4KKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogZXh0cmFjdGluZyBhZ3JlZ2F0ZWQgaW5mb3MgYWJvdXQgRGF0YWJhc2UgY29udGVudHMuLi5cbiIsIGZ1bmMpOworCQorCWRiSW5mbyA9IG5ldyBHbGVtbURCSW5mbygpOworCisJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJdHJ5IHsKKwkJZm9yKGk9MDsgaTxzcWwubGVuZ3RoOyBpKyspCisJCQl7CisJCQlyZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWxbaV0pOworCQkJaWYoIHJlcy5uZXh0KCkgKQorCQkJCWRiSW5mby5jb3VudHNbaV0gPSByZXMuZ2V0SW50KDEpOyAvLyBjb3VudCBpcyBpbiBjb2x1bW4gMS4KKwkJCWVsc2UKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZXh0cmFjdCBjb3VudCBmcm9tICclcychXG4iLCBmdW5jLCBzcWxbaV0pOworCQkJCWRiSW5mby5jb3VudHNbaV0gPSAtMTsKKwkJCQl9CisJCQl9CisgICAgICAgCisgICAgICAgIH0KKyAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAJeworICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHNxbD0nJXMnIGZhaWxlZCFcbiIsIGZ1bmMsIHNxbFtpXSk7CisgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgCX0KKwlmaW5hbGx5IHsKKwkJdHJ5IHsKKwkJCXJlcy5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gT0sKKwl9IC8vIHJlYWREYkxlbW1hdGFJbmZvcworCQorCS8qKioqKioqKioqKioqKioqKioqKiBUZXN0IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQorCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvc190ZXN0CisJICogVGhpcyBpcyBkZWJ1ZyBjb2RlIHdyaXR0ZW4gdG8gdGVzdCBpZiB3ZSBjYW4gYWNjZXNzIHRoZSBEZXJieQorCSAqIERhdGFiYXNlIGZyb20gYW4gZXh0ZXJuYWwgSmF2YSBQcm9ncmFtbS4KKwkgKiAwOC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgcmVhZERiSW5mb3NfdGVzdCgpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJU3RyaW5nCisJCWluc2VydFN0bXQgPSAiIjsKKwkKKwkvLyBDb25uZWN0IHRvIERlcmJ5IGRhdGFiYXNlOgorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQkKKwkJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJCXRyeQorCQkJeworCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIFN0cmluZyAKKyAgICAgICAgICAgIAlzcWwgPSAiU0VMRUNUICogRlJPTSAiICsgZGJUYWJsZTsKKyAgICAgICAgICAgIFJlc3VsdFNldCAKKyAgICAgICAgICAgIAlyZXN1bHQgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOworIAorICAgICAgICAgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiB0YWJsZSAnJXMnOlxuIiwgIGZ1bmMsIGRiVGFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAocmVzdWx0Lm5leHQoKSkgeworICAgICAgICAgICAgCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIiclcycgOiAnJXMnIDogJyVzJyA6ICclcycgLlxuIiwgcmVzdWx0LmdldFN0cmluZygxKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMiksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDMpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZyg0KSk7CisgICAgICAgIAkJaW5zZXJ0U3RtdCA9IGluc2VydFN0bXQgKyAiPHA+IiArIHJlc3VsdC5nZXRTdHJpbmcoMSkgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoMikgKyAiIDogIiArCisgICAgICAgICAgICAgICAgCQkgICAgIHJlc3VsdC5nZXRTdHJpbmcoMykgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoNCkgKyAiPC9wPiI7CisgICAgICAgICAgICAJfQorCQkJfQorCSAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAgICAgCXsKKwkgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogaW5zZXJ0U3RtdD0nJXMnIGZhaWxlZCEuXG4iLCBmdW5jLCBzdG10KTsKKyAgICAgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIAl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGluZyAnJXMgZmFpbGVkIVxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCXJldHVybiAxOworCQl9CisJCisJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCXRyeSB7CisJCWNvbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCQorCX0gLy8gcmVhZERiSW5mb3NfdGVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIGltcG9ydEdsZW1tTGVtYXRhX3Rlc3QKKwkgKiBUZXN0IFZlcnNpb24uCisJICogMTIuMTIuMTkvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0KFN0cmluZyBmbikKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QiOworCUlucHV0U3RyZWFtIAorCQlpbjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbjIgPSBudWxsOworCVN0cmluZworCQlsaW5lOworCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJcjsKKwkKKwkvKgorCSAqIFJlYWQgTGVtbWF0YSArIEluZm8gZnJvbSBmaWxlOiAKKwkgKi8KKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQkKKwl0cnkgeworCQkvL2luID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oIG5ldyBGaWxlSW5wdXRTdHJlYW0oZm4pICk7CisJCWluMiA9IG5ldyBCdWZmZXJlZFJlYWRlciggbmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJd2hpbGUoIChsaW5lID0gaW4yLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCA9PSAzICkKKwkJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogSW1wb3J0OiBsZW09JyVzJyBEZWNvbXA9JyVzJyBXZj0nJXMnLlxuIiwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMV0sIGxlbW1hSW5mb1syXSk7CisJCQllbHNlCisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6IGltcG9ydEdsZW1tTGFtYXRhOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzIVxuIiwgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQl9CisJCX0gCisJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBvcGVuICclcychXG4iLCBmdW5jLCBmbik7CisJCXJldHVybiAxOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisKKwl0cnkgeworCQlpbjIuY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkKKwkvKiBDaGVjayBjb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCSAqLyAKKwlyID0gcmVhZERiSW5mb3NfdGVzdCgpOworCWlmKCByICE9IDAgKQorCQlyZXR1cm4gcjsKKwkJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdAorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS82ZC8zMDE0ZjdlYTExM2UwMDFjMTM2M2JlYjkzMmFlNjNhMSBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNmQvMzAxNGY3ZWExMTNlMDAxYzEzNjNiZWI5MzJhZTYzYTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGExOWU2NQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNmQvMzAxNGY3ZWExMTNlMDAxYzEzNjNiZWI5MzJhZTYzYTEKQEAgLTAsMCArMSw3NTUgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5zcWwuQ29ubmVjdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5EYXRhYmFzZU1ldGFEYXRhOworaW1wb3J0IGphdmEuc3FsLkRyaXZlck1hbmFnZXI7CitpbXBvcnQgamF2YS5zcWwuUHJlcGFyZWRTdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS5zcWwuUmVzdWx0U2V0OworaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5TdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitwdWJsaWMgY2xhc3MgR2xlbW1EQgorCit7CisJc3RhdGljIHB1YmxpYyBTdHJpbmcgZGJUYWJsZSAJPSAiR2xlbW1MZW1tYXRhIjsKKwlzdGF0aWMgU3RyaW5nIGRiTGVtbWEgCQkgCT0gImxlbW1hIjsKKwlzdGF0aWMgU3RyaW5nIGRiV2YJIAkJCT0gIndmIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDEgCQkJPSAicHJvcDEiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMiAJCQk9ICJwcm9wMiI7CisKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKG92ZXJ3cml0dGVuIGJ5IEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZuYW1lREIgPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgc2VydmVySG9zdCA9ICIvL2xvY2FsaG9zdDoxNTI3LyI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChmaW5hbCBhc3NpZ25tZW50cyk6CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyRW1iID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZERyaXZlciI7CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyQ2xpZW50ID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREcml2ZXIiOworCisJZmluYWwgc3RhdGljIGJvb2xlYW4KKwkJdXNlUHJlcGFyZWRTdG10ID0gdHJ1ZTsgLy8gMT11c2UgUHJlcGFyZWRTdGF0ZW1lbnQgYW5kIG5vdCBTdGF0ZW1lbnQuCisJCisJLy8gdmFsdWVzIHRvIGJlIGluc2VydGVkOiBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYy4KKwlzdGF0aWMgU3RyaW5nIGluc2VydFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKCclcycsICclcycsICclcycsICclcycsICclcycpIjsKKwlzdGF0aWMgU3RyaW5nIGluc2VydFByZXBhcmVkUXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoPywgPywgPywgPywgPykiOworCQorCS8vIENvbnN0YW50cyBvZiB0YWJsZSBHbGVtbUxlbW1hdGE6CisJZmluYWwgaW50IG1heExlbW1hU2l6ZQkJPSA2NDsgCS8vIG1heC4gbm8uIG9mIGNoYXJzLCBhcyBkZWNsYXJlZCBpbiB0YWJsZSBHbGVtbUxlbW1hdGEuCisJZmluYWwgaW50IG1heFdmU2l6ZQkJCT0gNjQ7CS8vIG1heC4gbm8uIG9mIGNoYXJzLCBhcyBkZWNsYXJlZCBpbiB0YWJsZSBHbGVtbUxlbW1hdGEuCisJCisJLyogdmFyaWFibGVzICovCisJc3RhdGljIGludCBuRXhjZXB0U3RtdAkJPSAwOwkvLyBjb3VudCBuby4gb2YgZXhjZXB0aW9ucyBmb3IgcHJlcGFyZWRTdG10LgorCXN0YXRpYyBpbnQgbkV4Y2VwdEluc2VydAk9IDA7CS8vIGNvdW50IG5vLiBvZiBleGNlcHRpb25zIGZvciBJbnNlcnRzLgorCQorCS8qCisJICogc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJICogCisJICogQXJndW1lbnRzOgorCSAqIHByb3BzCTogUHJvcGVydGllcyBsb2FkZWQgYnkgdGhlIEdsZW1tU2VydmljZXMuCisJICogTm90ZXM6CisJICogLSB0aGlzIGZ1bmN0aW9uIGxvYWRzIG9ubHkgdGhvc2UgQ29uc3RhbnRzIG5lZWRlZCBpbiB0aGlzIGNsYXNzLgorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcwlwcm9wcykKKwkKKwl7CisJZm5hbWVEQgkJIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgCSIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlzZXJ2ZXJIb3N0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJzZXJ2ZXJIb3N0IiwJIi8vbG9jYWxob3N0OjE1MjcvIik7CisJZGVyYnlEQlVSTCAJCT0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCQkJCisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCQkJCQlpbXBvcnRHbGVtbUxlbWF0YQorCSAqIFBhcmFtZXRlcnM6CisJICogZm4JCSA6IGFic29sdXRlIGZpbGUgbmFtZSBvZiBHTEVNTSBvdXRwdXQgW0lTTzg4NTktMV0gZXhwZWN0ZWQsIG5vdCBVVEYtOCEKKwkgKiBwcm9wcwkgOiBQcm9wZXJ0aWVzIHZvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgdG8gc2V0IGNvbnN0YW50cyBuZWVkZWQKKwkgKiAJCQkgICBpbiB0aGlzIGNsYXNzLgorCSAqIGRicGF0aAkgOiBsb2NhdGlvbiArIG5hbWUgb2YgZGF0YWJhc2Ugd2hlcmUgdG8gc3RvcmUgbGVtbWF0YSt3ZnMuCisJICogUmV0dXJucwkgOiAwPU9LLCAtMTogZ2VuZXJhbCBlcnJvcjsgPiAwIDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAKKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIGR5bmFtaWNhbGx5IGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqIDA0LjExLjIxL0ZCIGRicGF0aC4KKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YShTdHJpbmcgZm4sIFByb3BlcnRpZXMgcHJvcHMsIGZpbmFsIFN0cmluZyBkYnBhdGgpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YSI7CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4gPSBudWxsOworCWludAorCQluRXJyb3JzOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyB3aGVuIGluZGV4aW5nIGRhdGEgaW50byB0aGUgZGF0YWJhc2UsIHNlbGVjdCB0aGUgc3VibWl0dGVkIGRicGF0aCwKKwkvLyAobm90IHRoZSBvbmUgc3RvcmVkIGluIHRoZSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCWRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGRicGF0aDsKKwkKKwkvLyBvcGVuIHJlYWRlciBvbiBHbGVtbSBMZW1tYXRhOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCWluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCQorCQluRXJyb3JzID0gd3JpdGVEQkxlbW1hdGEoaW4pOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBmcm9tICclcychXG4iLCBmdW5jLCBmbik7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCisJLy8gY2xvc2UgUmVhZGVyOgorCXRyeSB7CisJCWluLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJbkVycm9ycyA9IC0xOworCQl9CisJCisgCWlmKCBuRXJyb3JzID09IDAgKQorIAkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQgZG9uZSBzdWNjZXNzZnVsbHkuXG4iLCBmdW5jKTsKKyAJZWxzZQorIAkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQ6ICVkIEVycm9ycyFcbiIsIGZ1bmMsIG5FcnJvcnMpOworIAkKKwlyZXR1cm4gbkVycm9yczsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YQorCQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVEQkxlbW1hdGEoKQorCSAqICAgICAgICAgICAgICAgICAgICAgICAKKwkgKiBzdG9yZXMgbGlzdCBvZiBsZW1tYXRhICsgaW5mb3MgaW50byBEZXJieSBkYi4KKwkgKiBGaWxlIGZvcm1hdDogIkxlbW1hIERlY29tcG9zaXRpb24gV2YiLAorCSAqICAgICAgICAgICAgICBlLmcuOiAiSMOkdXNlciArLSBIYXVzIi4KKwkgKiBSZXR1cm5zOiAwID0gT0sgb3IgLTE6IGdlbmVyYWwgZXJyb3Igb3IgPiAwOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIDA5LjAxLjIwL0ZCCisJICogMDQuMTEuMjEvRkIgdHVybiBhdXRvY29tbWl0IG9mZiB0byBhY2NlbGVyYXRlIGh1Z2UgYW1vdW50IG9mIGluc2VydGlvbnMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYXRhKEJ1ZmZlcmVkUmVhZGVyIGluKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hdGEiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJUHJlcGFyZWRTdGF0ZW1lbnQKKwkJc3RtdFByZXAgPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10IAkgPSBudWxsOworCVN0cmluZworCQlsaW5lOwkKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQluSW5zZXJ0ZWQgPSAwLAkvLyBuby4gb2YgbGVtbWEvd2YgcGFpcnMgaW1wb3J0ZWQuCisJCXJldCA9IDA7IC8vIE9LLgorCWJvb2xlYW4KKwkJY29udGFpbnNTcGVjOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZSwKKwkvLyBzZXQgQXV0b2NvbW1pdCA9IGZhbHNlIHRvIGFjY2VsZXJhdGUgaW5zZXJ0aW9uczoKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJY29uLnNldEF1dG9Db21taXQoZmFsc2UpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZCAoYXV0b0NvbW1pdD1vZmYpLlxuIiwgZnVuYyk7CisKKwkJRGF0YWJhc2VNZXRhRGF0YQorCQkJZGJtZXRhZGF0YSA9IGNvbi5nZXRNZXRhRGF0YSgpOworCQlkYm1ldGFkYXRhLgorCQkKKwkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQlzdG10UHJlcCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KGluc2VydFByZXBhcmVkUXVlcnkpOworCQllbHNlCisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCisJCXdoaWxlKCAobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCAhPSAzICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzISBFeHBlY3RlZCA9IDMhIENhbm5vdCBiZSBzdG9yZWQhXG4iLCBmdW5jLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCQluRXJyb3JzKys7CisJCQkJY29udGludWU7CisJCQkJfQorCQkJCisJCQkvLyBHZXQgSW5mbywgaWYgd29yZGZvcm0gY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlICctJywgaW50ZXJwdW5jdGlvbiBldGMuOgorCQkJLy8gbGVtbWFJbmZvWzJdID0gd29yZGZvcm0uCisJCQljb250YWluc1NwZWMgPSBMZW1tYUluZm8uaXNXZlNwZWNpYWxDYXNlKGxlbW1hSW5mb1syXSk7CisJCQkvLyBzdG9yZSBpbnRvIERCOgorCQkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoc3RtdFByZXAsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQllbHNlCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3Moc3RtdCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCQorCQkJaWYoIHJldCAhPSAwICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgc3RvcmUgbGVtbWEgJyVzJyBpbnRvIERCISAocmV0PSVkKVxuIiwgZnVuYywgbGluZSwgcmV0KTsKKwkJCQluRXJyb3JzKys7IAorCQkJCX0KKwkJCWVsc2UKKwkJCQluSW5zZXJ0ZWQrKzsKKwkJCX0gLy8gd2hpbGUKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgR2xlbW0gbGVtbWF0YStpbmZvcyBmcm9tIGZpbGUhIEV4aXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOyAKKwkJfQkKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisJZmluYWxseSAKKwkJeyAKKwkJdHJ5IHsKKwkJCS8vIGltcG9ydGFudDogbm93IGNvbW1pdCwgYXMgYXV0b0NvbW1pdCBpcyBkZWFjdGl2YXRlZCwKKwkJCS8vIHRoaXMgYWxzbyByZW1vdmVzIGRhdGFiYXNlIGxvY2tzOgorCQkJY29uLmNvbW1pdCgpOworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb21taXQgc3VjY2Vzc2Z1bGwuXG4iLCBmdW5jKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb21taXQgYXQgdGhlIGVuZCBvZiB0aGUgd2ZzIGxpc3QgZmFpbGVkIVxuIiwgZnVuYyk7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCQorCQl0cnkgeyAvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSAKKwkJCQlzdG10LmNsb3NlKCk7CisJCQlpZiggc3RtdFByZXAgIT0gbnVsbCApIAorCQkJCXN0bXRQcmVwLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkluZm8gOiAlczogbm8uIG9mIGxlbW1hdGEvd2YgcGFpcnMgaW5zZXJ0ZWQgPSAlZC5cbiIsIGZ1bmMsIG5JbnNlcnRlZCk7CisJCisJcmV0dXJuIG5FcnJvcnM7IC8vIDA9T0ssID4wID0gbm8uIG9mIGVycm9ycy4KKwl9IC8vIHdyaXRlREJMZW1tYXRhCisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIHJ1bGVzIGludG8gRGVyYnkgREIuCisJICogTm90ZXM6CisJICogLSB0aGlzIGlzIHRoZSB2ZXJzaW9uIHdpdGggYSBQcmVwYXJlZFF1ZXJ5LgorCSAqIFBhcmFtZXRlcnM6CisJICogc3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDE3LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKAorCQkJUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCwgCisJCQlTdHJpbmcgbGVtbWEsIAorCQkJU3RyaW5nIHdmLCAKKwkJCVN0cmluZyBkZWNvbXBvc2l0aW9uLCAKKwkJCWJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkIjsKKwlmaW5hbCBib29sZWFuCisJCWJMb2cgPSBmYWxzZTsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlib29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgCisJLy8gZm9yIGxvZ2luZyBvbmx5OgorCXNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwlpZiggYkxvZyApCisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorICAgIC8vIG5vdyBpbnNlcnQgbmV3IHZhbHVlcyBpbnRvIFByZXBhcmVkU3RhdGVtZW50OgorICAgIHRyeSB7CisgICAgCXN0bXQuc2V0U3RyaW5nKCAxLCBsZW1tYSk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKCAyLCB3Zik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbigzLCBwcm9wMSk7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig0LCBwcm9wMik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig1LCBzcGVjKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcmVwYXJlZCBzdG10ID0gJyVzJy5cbiIsICBmdW5jLCBzdG10LnRvU3RyaW5nKCkpOworICAgICAgICB9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlMSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKAkiRXJyb3I6ICVzOiB3aGlsZSBmaWxsaW5nIHByZXBhcmVkIHN0YXRlbWVudCB3aXRoIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0nJWInIHByb3AyPSclYicgc3BlYz0nJWInIVxuIiwgIAorCQkJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJaWYoICsrbkV4Y2VwdFN0bXQgPD0gMSApCisJCQllMS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKyAgICAKKyAgICB0cnkgeworCQkvLyBleGVjdXRlIHRoZSBmaWxsZWQgcHJlcGFyZWQgc3RhdGVtZW50OgorCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhIChuPSVkKVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYywgbik7CisgCQkJcmV0dXJuIDI7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQlpZiggKytuRXhjZXB0SW5zZXJ0IDw9IDEgKQorCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDM7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZAorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3M6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gaW50byBEZXJieSBEQi4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGNvbnRhaW5zU3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDEwLjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zKFN0YXRlbWVudCBzdG10LCBTdHJpbmcgbGVtbWEsIFN0cmluZyB3ZiwgU3RyaW5nIGRlY29tcG9zaXRpb24sIGJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zIjsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlCb29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworICAgIAorICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorCXRyeSB7CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoc3FsSW5zZXJ0KTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYURhdGEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBmcm9tIHRoZSBHbGVtbURCLgorCSAqIElucHV0OiBsZW1tYSArIEdMRU1NX09QVFNfeHh4IChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWFEYXRhKExlbW1hSW5mbyBsZW1tYUluZm8sIFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYURhdGEiOworCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJbGVtbWFJbmZvLmNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJbGVtbWFJbmZvLnN0bXQgPSBsZW1tYUluZm8uY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlpbnQgciA9IHJlYWREQkxlbW1hKGxlbW1hSW5mby5zdG10LCBsZW1tYUluZm8pOworCQkJCisJCWlmKCByICE9IDAgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZ2V0IGRhdGEgZm9yIGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIVxuIiwgCisJCQkJCWZ1bmMsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwkJCXJldHVybiAxOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggbGVtbWFJbmZvLmNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hRGF0YQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGJ5IGFjY2Vzc2luZyB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dCA6IGxlbW1hICsgcHJvcDErMiAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogT3V0cHV0OiAKKwkgKiAgLSBjb250YWlucyBhIFJlc3VsdFNldCBmb3IgZmV0Y2hpbmcgdGhlIHdvcmRmb3Jtcy4KKwkgKiAJICBUaGlzIFJlc3VsdFNldCB3aWxsIGhhdmUgYmUgYmUgY2xvc2VkIHdpdGggTGVtbWFJbmZvLmNsb3NlKCkuCisJICogCSAgVGhlIG5vLiBvZiBmb3VuZCB3b3JkZm9ybXMgaXMgbm90IGtub3duIHRpbGwgd2UKKwkgKiAJICBmZXRjaCBhbGwgb2YgdGhlbSBmcm9tIFJlc3VsdFNldCEgCisJICogCS0gZHVlIHRvIFNFTEVDVCBESVNUSU5DVCBvbmx5IHVuaXEgd2YgYXJlIHJldHVybmVkLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYShTdGF0ZW1lbnQgc3RtdCwgTGVtbWFJbmZvIGxlbW1hSW5mbykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hIjsKKwlTdHJpbmcKKwkJc3FsOworCQkKKwlzcWwgPSBTdHJpbmcuZm9ybWF0KCJTRUxFQ1QgRElTVElOQ1Qgd2YgZnJvbSAlcyBXSEVSRSBsZW1tYT0nJXMnICVzICVzICVzIiwgCisJCQlkYlRhYmxlLAorCQkJbGVtbWFJbmZvLmxlbW1hLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiQU5EIHByb3AxPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAxID8gIkFORCBwcm9wMT0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiQU5EIHByb3AyPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAxID8gIkFORCBwcm9wMj0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiQU5EIHNwZWM9J3RydWUnIiAgIDogCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICJBTkQgc3BlYz0nZmFsc2UnIiAgOiAiIik7CisJCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgZnVuYywgbGVtbWFJbmZvLnByb3AxLCBsZW1tYUluZm8ucHJvcDIsIGxlbW1hSW5mby5zcGVjKTsKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbCA9ICclcycuXG4iLCBmdW5jLCBzcWwpOworCisJdHJ5IHsKKwkJbGVtbWFJbmZvLnJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoZW4gZXhlY3V0aW5nIHNxbD0nJXMnIVxuIiwgZnVuYywgc3FsKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gYWxsIHNxbCBzdHVmZiBhcmUgY2xvc2VkIG91dHNpZGUgdGhpcyBmdW5jdGlvbiwgc28gZG9uJ3QgY2xvc2UgdGhlbSBoZXJlIQorCQl9CQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3MKKwkgKiBSZXR1cm5zIEdlbmVyYWwgSW5mb3MgYWJvdXQgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIHJlYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJJbmZvcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJZGJJbmZvID0gcmVhZERiTGVtbWF0YUluZm9zKHN0bXQpOworCQkJCisJCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCByZWFkIEdlbmVyYWwgSW5mb3MgZnJvbSBHbGVtbSBEYXRhYmFzZSFcbiIsIGZ1bmMpOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSBjb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSBzdG10LmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIG1heSBiZSBudWxsLgorCQkKKwl9IC8vIHJlYWREYkluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiTGVtbWF0YUluZm9zOgorCSAqIHJlYWRzIGFuZCByZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGNvbnRlbnQgCisJICogb2YgdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIFJldHVybnMgMD1PSyBvciBlcnJvciBjb2RlID4gMC4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkxlbW1hdGFJbmZvcyhTdGF0ZW1lbnQgc3RtdCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAicmVhZERiTGVtbWFJbmZvcyI7CisJU3RyaW5nW10KKwkJc3FsID0gewkiU0VMRUNUIENPVU5UKGRpc3RpbmN0IGxlbW1hKSBmcm9tICIgKyBkYlRhYmxlICwJLy8gY291bnRzIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSwJCQkJCS8vIGNvdW50cyB0b3RhbCBuby4gb2Ygc3RvcmVkIHdvcmRmb3Jtcy4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPXRydWUiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPXRydWUifTsKKwlSZXN1bHRTZXQKKwkJcmVzID0gbnVsbDsgCisJaW50W10KKwkJbkNvdW50cyA9IG5ldyBpbnRbc3FsLmxlbmd0aF07CisJaW50CQkKKwkJaSA9IDAsIAorCQluRGlzdExlbW1hdGEgPSAtMSwJLy8gbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEgaW4gREIuCisJCW5XZnMJCSA9IC0xOwkvLyBuby4gb2Ygd29yZGZvcm1zIGluIERCLgorCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBleHRyYWN0aW5nIGFncmVnYXRlZCBpbmZvcyBhYm91dCBEYXRhYmFzZSBjb250ZW50cy4uLlxuIiwgZnVuYyk7CisJCisJZGJJbmZvID0gbmV3IEdsZW1tREJJbmZvKCk7CisKKwkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwl0cnkgeworCQlmb3IoaT0wOyBpPHNxbC5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCXJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbFtpXSk7CisJCQlpZiggcmVzLm5leHQoKSApCisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IHJlcy5nZXRJbnQoMSk7IC8vIGNvdW50IGlzIGluIGNvbHVtbiAxLgorCQkJZWxzZQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBleHRyYWN0IGNvdW50IGZyb20gJyVzJyFcbiIsIGZ1bmMsIHNxbFtpXSk7CisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IC0xOworCQkJCX0KKwkJCX0KKyAgICAgICAKKyAgICAgICAgfQorICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgIAl7CisgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogc3FsPSclcycgZmFpbGVkIVxuIiwgZnVuYywgc3FsW2ldKTsKKyAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAJfQorCWZpbmFsbHkgeworCQl0cnkgeworCQkJcmVzLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBPSworCX0gLy8gcmVhZERiTGVtbWF0YUluZm9zCisJCisJLyoqKioqKioqKioqKioqKioqKioqIFRlc3QgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zX3Rlc3QKKwkgKiBUaGlzIGlzIGRlYnVnIGNvZGUgd3JpdHRlbiB0byB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIERlcmJ5CisJICogRGF0YWJhc2UgZnJvbSBhbiBleHRlcm5hbCBKYXZhIFByb2dyYW1tLgorCSAqIDA4LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCByZWFkRGJJbmZvc190ZXN0KCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlTdHJpbmcKKwkJaW5zZXJ0U3RtdCA9ICIiOworCQorCS8vIENvbm5lY3QgdG8gRGVyYnkgZGF0YWJhc2U6CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCQorCQkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwkJdHJ5CisJCQl7CisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIAorICAgICAgICAgICAgCXNxbCA9ICJTRUxFQ1QgKiBGUk9NICIgKyBkYlRhYmxlOworICAgICAgICAgICAgUmVzdWx0U2V0IAorICAgICAgICAgICAgCXJlc3VsdCA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CisgCisgICAgICAgICAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHRhYmxlICclcyc6XG4iLCAgZnVuYywgZGJUYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQubmV4dCgpKSB7CisgICAgICAgICAgICAJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiJyVzJyA6ICclcycgOiAnJXMnIDogJyVzJyAuXG4iLCByZXN1bHQuZ2V0U3RyaW5nKDEpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygyKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMyksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDQpKTsKKyAgICAgICAgCQlpbnNlcnRTdG10ID0gaW5zZXJ0U3RtdCArICI8cD4iICsgcmVzdWx0LmdldFN0cmluZygxKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZygyKSArICIgOiAiICsKKyAgICAgICAgICAgICAgICAJCSAgICAgcmVzdWx0LmdldFN0cmluZygzKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZyg0KSArICI8L3A+IjsKKyAgICAgICAgICAgIAl9CisJCQl9CisJICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgICAgICAJeworCSAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBpbnNlcnRTdG10PSclcycgZmFpbGVkIS5cbiIsIGZ1bmMsIHN0bXQpOworICAgICAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICAgICAgY29uLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nICclcyBmYWlsZWQhXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJdHJ5IHsKKwkJY29uLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkJCisJfSAvLyByZWFkRGJJbmZvc190ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogaW1wb3J0R2xlbW1MZW1hdGFfdGVzdAorCSAqIFRlc3QgVmVyc2lvbi4KKwkgKiAxMi4xMi4xOS9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QoU3RyaW5nIGZuKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdCI7CisJSW5wdXRTdHJlYW0gCisJCWluOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluMiA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQlyOworCQorCS8qCisJICogUmVhZCBMZW1tYXRhICsgSW5mbyBmcm9tIGZpbGU6IAorCSAqLworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCQorCXRyeSB7CisJCS8vaW4gPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSggbmV3IEZpbGVJbnB1dFN0cmVhbShmbikgKTsKKwkJaW4yID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlcihmbikpOworCQl3aGlsZSggKGxpbmUgPSBpbjIucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoID09IDMgKQorCQkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBJbXBvcnQ6IGxlbT0nJXMnIERlY29tcD0nJXMnIFdmPSclcycuXG4iLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1sxXSwgbGVtbWFJbmZvWzJdKTsKKwkJCWVsc2UKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogaW1wb3J0R2xlbW1MYW1hdGE6ICclcycgaGFzICVkIGNvbXBvbmVudHMhXG4iLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IG9wZW4gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJcmV0dXJuIDE7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKworCXRyeSB7CisJCWluMi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCS8qIENoZWNrIGNvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJICovIAorCXIgPSByZWFkRGJJbmZvc190ZXN0KCk7CisJaWYoIHIgIT0gMCApCisJCXJldHVybiByOworCQkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzZlLzIwYWJjMmUzZDEzYzAwMWMxNWU0YzdhNzc4OTE3NzNmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS82ZS8yMGFiYzJlM2QxM2MwMDFjMTVlNGM3YTc3ODkxNzczZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDU1NTIxCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS82ZS8yMGFiYzJlM2QxM2MwMDFjMTVlNGM3YTc3ODkxNzczZgpAQCAtMCwwICsxLDMxIEBACisjIEdsZW1tU2VydmljZXMgcHJvcGVydGllczoKKyMgZXhwZWN0ZWQgaW4gL1dFQi1JTkYvLgorCisjIyBHZW5lcmFsIHByb3BlcnRpZXM6CitHU19Xb3JraW5nUGF0aCA9IC9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL3dvcmstbGl2ZQorCisjIEdsZW1tREIgcHJvcGVydGllczoKK2ZuYW1lREIgCQk9IC9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQgorI2ZuYW1lREIgCQk9IC9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQjIKK3NlcnZlckhvc3QJPSAvL2xvY2FsaG9zdDoxNTI3LworCisjIyBHbGVtbTogcHJvcGVydGllcyBmb3IgbGVtbWF0aXppbmc6CisKKyMgZm5hbWVTY3JpcHQgPSBHU19Xb3JraW5nUGF0aCArIGRvR2xlbW0KK2ZuYW1lU2NyaXB0ID0gZG9HbGVtbQorIyBmbmFtZVdmcyA9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKK2ZuYW1lV2ZzID0gZ2xfd2ZzX2luLnR4dAorIyBmbmFtZVNjcmlwdAk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKK2ZuYW1lU2NyaXB0CT0gZG9HbGVtbQorIyBmbmFtZUxlbWF0YQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKyMgbGVtMyBleHBlY3RlZCB0byBiZSBJU084ODU5LTEgZW5jb2RlZC4KK2ZuYW1lTGVtYXRhCT0gdG1wL2xlbTMKKworIyMgTG9naW5nOgorCisjIGZuYW1lT3V0ID0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKyNmbmFtZU91dCA9IEdsZW1tU2VydmljZXMtdC5sb2cKK2ZuYW1lT3V0ID0gR2xlbW1TZXJ2aWNlcy5sb2cKKyMgZm5hbWVFcnIgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisjZm5hbWVFcnIgPSBHbGVtbVNlcnZpY2VzLXQuZXJyCitmbmFtZUVyciA9IEdsZW1tU2VydmljZXMuZXJyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzZmL2UwZDQ0YTlhYmQ4ZTAwMWExY2I4YTFlYTA4MzQzOGFlIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS82Zi9lMGQ0NGE5YWJkOGUwMDFhMWNiOGExZWEwODM0MzhhZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjEzOWM5Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS82Zi9lMGQ0NGE5YWJkOGUwMDFhMWNiOGExZWEwODM0MzhhZQpAQCAtMCwwICsxLDYyIEBACis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiAKKwl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKwl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICA8Z3JvdXBJZD5kZS5rb3JhcC5zZXJ2aWNlczwvZ3JvdXBJZD4KKyAgPGFydGlmYWN0SWQ+dGVzdHM8L2FydGlmYWN0SWQ+CisgIDx2ZXJzaW9uPjAuMTwvdmVyc2lvbj4KKyAgPCEtLSAgPnBhY2thZ2luZz53YXI8L3BhY2thZ2luZy0tPgorICA8bmFtZT5Kc29uIFRlc3QgTWV0aG9kczwvbmFtZT4KKyAgCisgIDxkZXNjcmlwdGlvbj5UZXN0cyBmb3IgSnNvbiBQYXJzaW5nPC9kZXNjcmlwdGlvbj4KKyAgCisgIDxkZXBlbmRlbmNpZXM+CisgICAgPGRlcGVuZGVuY3k+CisgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KKyAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgorICAgICAgPHZlcnNpb24+My44LjE8L3ZlcnNpb24+CisgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgPC9kZXBlbmRlbmN5PgorICAgPGRlcGVuZGVuY3k+CisgICAgPGdyb3VwSWQ+Y29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmU8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+amFja3Nvbi1jb3JlPC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjIuOS42PC92ZXJzaW9uPgorICAgIDxzY29wZT5jb21waWxlPC9zY29wZT4KKyAgIDwvZGVwZW5kZW5jeT4KKwk8ZGVwZW5kZW5jeT4KKwkgIDxncm91cElkPmNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlPC9ncm91cElkPgorCSAgPGFydGlmYWN0SWQ+amFja3Nvbi1hbm5vdGF0aW9uczwvYXJ0aWZhY3RJZD4KKwkgIDx2ZXJzaW9uPjIuOS42PC92ZXJzaW9uPgorCTwvZGVwZW5kZW5jeT4KKwk8ZGVwZW5kZW5jeT4KKwkgIDxncm91cElkPmNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlPC9ncm91cElkPgorCSAgPGFydGlmYWN0SWQ+amFja3Nvbi1kYXRhYmluZDwvYXJ0aWZhY3RJZD4KKwkgIDx2ZXJzaW9uPjIuOS42PC92ZXJzaW9uPgorCSAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KKwk8L2RlcGVuZGVuY3k+CisgIDwvZGVwZW5kZW5jaWVzPgorICAKKyAgPGJ1aWxkPgorICAgIDxzb3VyY2VEaXJlY3Rvcnk+c3JjPC9zb3VyY2VEaXJlY3Rvcnk+CisgICAgPHBsdWdpbnM+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1jb21waWxlci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjMuNy4wPC92ZXJzaW9uPgorICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8c291cmNlPjEuODwvc291cmNlPgorICAgICAgICAgIDx0YXJnZXQ+MS44PC90YXJnZXQ+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvcGx1Z2luPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4td2FyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+My4yLjE8L3ZlcnNpb24+CisgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgIDxmYWlsT25NaXNzaW5nV2ViWG1sPmZhbHNlPC9mYWlsT25NaXNzaW5nV2ViWG1sPgorICAgICAgICAgIDx3YXJTb3VyY2VEaXJlY3Rvcnk+V2ViQ29udGVudDwvd2FyU291cmNlRGlyZWN0b3J5PgorICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICA8L3BsdWdpbj4KKyAgICA8L3BsdWdpbnM+CisgICAgPGZpbmFsTmFtZT5UZXN0R2xlbW1TZXJ2aWNlczwvZmluYWxOYW1lPgorICA8L2J1aWxkPgorICAKKzwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzcvZDBiY2U1MzZhYzJhMDAxYzFjNDFjZTU1OWVhNWUxNmIgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzcvZDBiY2U1MzZhYzJhMDAxYzFjNDFjZTU1OWVhNWUxNmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkyMmE1OQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNy9kMGJjZTUzNmFjMmEwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpAQCAtMCwwICsxLDY3NyBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA2LjEwLjIxIjsgLy8iMTcuMDYuMjAiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMSI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwkJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwkJU3RyaW5nCisJCQlzdGF0dXM7CisJCVV0aWxzCisJCQl1ID0gbmV3IFV0aWxzKCk7CisJCVByb3BlcnRpZXMKKwkJCXByb3BzOworCQkKKwkJLy8gdGVzdAorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCS8qCisJCSAqIHByb3BzLnNldFByb3BlcnR5KCJwIiwgInRlc3QiKTsKKwkJICoKKwkJRmlsZU91dHB1dFN0cmVhbSBvdXQ7CisJCXRyeSB7CisJCQlvdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbSgiZ2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIik7CisJCQlwcm9wcy5zdG9yZShvdXQsICAidGVzdCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMiKTsKKwkJCX0gCisJCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9OworCQkqLworCQkKKwkJLy8gZW5kIG90ZXN0CisJCQorCQkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwkJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisJCVN5c3RlbS5vdXQucHJpbnRmKCJBUEk6ICVzOiAvaW5kZXgvc3RhdHVzLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisKKwkJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogUE9TVDogL2luZGV4L2FkZC86IHRleHQvcGxhaW4KKwkgKiBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZS4KKwkgKiBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZAorCSAqIGludG8gdGhlIGRhdGFiYXNlLgorCSAqIElucHV0OiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKi8KKwlAUGF0aCgiYWRkIikgQFBPU1QgQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGltcG9ydExlbW1hRGF0YShTdHJpbmcgbGlzdCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIGFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJCisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9hZGQvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNm77+9aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJfQorCisJLyogdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gdmlld0RCSW5mbworCisKKwkvKiB2aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIiAtIFN0YXR1czogPGk+V29yayBpbiBwcm9ncmVzcy4uLiE8L2k+KTwvaDQ+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCAhb3B0aW9ucy5lcXVhbHMoInVuZGVmIikpCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxL3Byb3AyL3NwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBHbGVtbVNlcnZpY2VzICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb25EYXRlLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJLy9TeXN0ZW0ub3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNzAvOTBmZmI5NmI4MTJiMDAxYzFjNDFjZTU1OWVhNWUxNmIgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzcwLzkwZmZiOTZiODEyYjAwMWMxYzQxY2U1NTllYTVlMTZiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMzA5YmIKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzcwLzkwZmZiOTZiODEyYjAwMWMxYzQxY2U1NTllYTVlMTZiCkBAIC0wLDAgKzEsNjkyIEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNi4xMC4yMSI7IC8vIjE3LjA2LjIwIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjEiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJCVN0cmluZworCQkJc3RhdHVzOworCQlVdGlscworCQkJdSA9IG5ldyBVdGlscygpOworCQlQcm9wZXJ0aWVzCisJCQlwcm9wczsKKwkJCisJCS8vIHJlYWQgdGVzdAorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCS8vSHR0cFNlcnZsZXRDb250ZXh0CisJCQorCQkvLyBodHRwU2VydmxldFJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW52KTsKKwkJRmlsZUlucHV0U3RyZWFtCisJCQlpblByb3AgPSBHbGVtbVNlcnZpY2VzLmNsYXNzLmdldENsYXNzTG9hZGVyKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbSgiR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIik7CisJCQorCQlGaWxlSW5wdXRTdHJlYW0KKwkJCWluUHJvcCA9IGdldFNlcnZsZXRDb250ZXh0KCkuIFNlcnZsZXRDb250ZXh0LiAgLmdldFJlc291cmNlQXNTdHJlYW0oIkdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOyAvL25ldyBGaWxlSW5wdXQKKwkJLy8gZW5kIG9mIHJlYWQgdGVzdAorCQkKKwkJLy8gdGVzdAorCQkvKgorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCQorCQkgKiBwcm9wcy5zZXRQcm9wZXJ0eSgicCIsICJ0ZXN0Iik7CisJCSAqCisJCUZpbGVPdXRwdXRTdHJlYW0gb3V0OworCQl0cnkgeworCQkJb3V0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oImdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOworCQkJcHJvcHMuc3RvcmUob3V0LCAgInRlc3QgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIik7CisJCQl9IAorCQljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfTsKKwkJKi8KKwkJCisJCS8vIGVuZCBvdGVzdAorCQkKKwkJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiQVBJOiAlczogL2luZGV4L3N0YXR1cy8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCisJCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCQlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIFBPU1Q6IC9pbmRleC9hZGQvOiB0ZXh0L3BsYWluCisJICogYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UuCisJICogVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQKKwkgKiBpbnRvIHRoZSBkYXRhYmFzZS4KKwkgKiBJbnB1dDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICovCisJQFBhdGgoImFkZCIpIEBQT1NUIEBDb25zdW1lcygidGV4dC9wbGFpbiIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBpbXBvcnRMZW1tYURhdGEoU3RyaW5nIGxpc3QpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSBhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCQorCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvYWRkLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZu+/vWhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCX0KKworCS8qIHZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIHZpZXdEQkluZm8KKworCisJLyogdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgLSBTdGF0dXM6IDxpPldvcmsgaW4gcHJvZ3Jlc3MuLi4hPC9pPik8L2g0PlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggIW9wdGlvbnMuZXF1YWxzKCJ1bmRlZiIpKQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMS9wcm9wMi9zcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogR2xlbW1TZXJ2aWNlcyAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uRGF0ZSwgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCS8vU3lzdGVtLm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzcxLzUwM2E1NTIxN2UzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS83MS81MDNhNTUyMTdlM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2ZkZGNjCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS83MS81MDNhNTUyMTdlM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpAQCAtMCwwICsxLDcyOSBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnNxbC5Db25uZWN0aW9uOworaW1wb3J0IGphdmEuc3FsLkRyaXZlck1hbmFnZXI7CitpbXBvcnQgamF2YS5zcWwuUHJlcGFyZWRTdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS5zcWwuUmVzdWx0U2V0OworaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5TdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitwdWJsaWMgY2xhc3MgR2xlbW1EQgorCit7CisJc3RhdGljIHB1YmxpYyBTdHJpbmcgZGJUYWJsZSAJPSAiR2xlbW1MZW1tYXRhIjsKKwlzdGF0aWMgU3RyaW5nIGRiTGVtbWEgCQkgCT0gImxlbW1hIjsKKwlzdGF0aWMgU3RyaW5nIGRiV2YJIAkJCT0gIndmIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDEgCQkJPSAicHJvcDEiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMiAJCQk9ICJwcm9wMiI7CisKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKG92ZXJ3cml0dGVuIGJ5IEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZuYW1lREIgPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgc2VydmVySG9zdCA9ICIvL2xvY2FsaG9zdDoxNTI3LyI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChmaW5hbCBhc3NpZ25tZW50cyk6CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyRW1iID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZERyaXZlciI7CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyQ2xpZW50ID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREcml2ZXIiOworCisJZmluYWwgc3RhdGljIGJvb2xlYW4KKwkJdXNlUHJlcGFyZWRTdG10ID0gdHJ1ZTsgLy8gMT11c2UgUHJlcGFyZWRTdGF0ZW1lbnQgYW5kIG5vdCBTdGF0ZW1lbnQuCisJCisJLy8gdmFsdWVzIHRvIGJlIGluc2VydGVkOiBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYy4KKwlzdGF0aWMgU3RyaW5nIGluc2VydFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKCclcycsICclcycsICclcycsICclcycsICclcycpIjsKKwlzdGF0aWMgU3RyaW5nIGluc2VydFByZXBhcmVkUXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoPywgPywgPywgPywgPykiOworCQorCS8qCisJICogc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJICogCisJICogQXJndW1lbnRzOgorCSAqIHByb3BzCTogUHJvcGVydGllcyBsb2FkZWQgYnkgdGhlIEdsZW1tU2VydmljZXMuCisJICogTm90ZXM6CisJICogLSB0aGlzIGZ1bmN0aW9uIGxvYWRzIG9ubHkgdGhvc2UgQ29uc3RhbnRzIG5lZWRlZCBpbiB0aGlzIGNsYXNzLgorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcwlwcm9wcykKKwkKKwl7CisJZm5hbWVEQgkJIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgCSIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlzZXJ2ZXJIb3N0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJzZXJ2ZXJIb3N0IiwJIi8vbG9jYWxob3N0OjE1MjcvIik7CisJZGVyYnlEQlVSTCAJCT0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCQkJCisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCQkJCQlpbXBvcnRHbGVtbUxlbWF0YQorCSAqIFBhcmFtZXRlcnM6CisJICogZm4JCSA6IGFic29sdXRlIGZpbGUgbmFtZSBvZiBHTEVNTSBvdXRwdXQgW0lTTzg4NTktMV0gZXhwZWN0ZWQsIG5vdCBVVEYtOCEKKwkgKiBwcm9wcwkgOiBQcm9wZXJ0aWVzIHZvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgdG8gc2V0IGNvbnN0YW50cyBuZWVkZWQKKwkgKiAJCQkgICBpbiB0aGlzIGNsYXNzLgorCSAqIGRicGF0aAkgOiBsb2NhdGlvbiArIG5hbWUgb2YgZGF0YWJhc2Ugd2hlcmUgdG8gc3RvcmUgbGVtbWF0YSt3ZnMuCisJICogUmV0dXJucwkgOiAwPU9LLCAtMTogZ2VuZXJhbCBlcnJvcjsgPiAwIDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAKKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIGR5bmFtaWNhbGx5IGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqIDA0LjExLjIxL0ZCIGRicGF0aC4KKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YShTdHJpbmcgZm4sIFByb3BlcnRpZXMgcHJvcHMsIGZpbmFsIFN0cmluZyBkYnBhdGgpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YSI7CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4gPSBudWxsOworCWludAorCQluRXJyb3JzOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyB3aGVuIGluZGV4aW5nIGRhdGEgaW50byB0aGUgZGF0YWJhc2UsIHNlbGVjdCB0aGUgc3VibWl0dGVkIGRicGF0aCwKKwkvLyAobm90IHRoZSBvbmUgc3RvcmVkIGluIHRoZSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCWRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGRicGF0aDsKKwkKKwkvLyBvcGVuIHJlYWRlciBvbiBHbGVtbSBMZW1tYXRhOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCWluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCQorCQluRXJyb3JzID0gd3JpdGVEQkxlbW1hdGEoaW4pOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBmcm9tICclcychXG4iLCBmdW5jLCBmbik7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAtMTsKKwkJfQorCisJLy8gY2xvc2UgUmVhZGVyOgorCXRyeSB7CisJCWluLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJbkVycm9ycyA9IC0xOworCQl9CisJCisgCWlmKCBuRXJyb3JzID09IDAgKQorIAkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQgZG9uZSBzdWNjZXNzZnVsbHkuXG4iLCBmdW5jKTsKKyAJZWxzZQorIAkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQ6ICVkIEVycm9ycyFcbiIsIGZ1bmMsIG5FcnJvcnMpOworIAkKKwlyZXR1cm4gbkVycm9yczsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YQorCQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiB3cml0ZURCTGVtbWF0YSgpCisJICogc3RvcmVzIGxpc3Qgb2YgbGVtbWF0YSArIGluZm9zIGludG8gRGVyYnkgZGIuCisJICogRmlsZSBmb3JtYXQ6ICJMZW1tYSBEZWNvbXBvc2l0aW9uIFdmIiwKKwkgKiAgICAgICAgICAgICAgZS5nLjogIkjDpHVzZXIgKy0gSGF1cyIuCisJICogUmV0dXJuczogMCA9IE9LIG9yIC0xOiBnZW5lcmFsIGVycm9yIG9yID4gMDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAwOS4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hdGEoQnVmZmVyZWRSZWFkZXIgaW4pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWF0YSI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlQcmVwYXJlZFN0YXRlbWVudAorCQlzdG10UHJlcCA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgCSA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CQorCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCW5JbnNlcnRlZCA9IDAsCS8vIG5vLiBvZiBsZW1tYS93ZiBwYWlycyBpbXBvcnRlZC4KKwkJcmV0ID0gMDsgLy8gT0suCisJYm9vbGVhbgorCQljb250YWluc1NwZWM7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlLAorCS8vIHNldCBBdXRvY29tbWl0ID0gZmFsc2UgdG8gYWNjZWxlcmF0ZSBpbnNlcnRpb25zOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCisJCWNvbi5zZXRBdXRvQ29tbWl0KGZhbHNlKTsKKwkJCisJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJc3RtdFByZXAgPSBjb24ucHJlcGFyZVN0YXRlbWVudChpbnNlcnRQcmVwYXJlZFF1ZXJ5KTsKKwkJZWxzZQorCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKworCQl3aGlsZSggKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggIT0gMyApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogJyVzJyBoYXMgJWQgY29tcG9uZW50cyEgRXhwZWN0ZWQgPSAzISBDYW5ub3QgYmUgc3RvcmVkIVxuIiwgZnVuYywgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQkJbkVycm9ycysrOworCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQorCQkJLy8gR2V0IEluZm8sIGlmIHdvcmRmb3JtIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSAnLScsIGludGVycHVuY3Rpb24gZXRjLjoKKwkJCS8vIGxlbW1hSW5mb1syXSA9IHdvcmRmb3JtLgorCQkJY29udGFpbnNTcGVjID0gTGVtbWFJbmZvLmlzV2ZTcGVjaWFsQ2FzZShsZW1tYUluZm9bMl0pOworCQkJLy8gc3RvcmUgaW50byBEQjoKKwkJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKHN0bXRQcmVwLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJZWxzZQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zKHN0bXQsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQkKKwkJCWlmKCByZXQgIT0gMCApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHN0b3JlIGxlbW1hICclcycgaW50byBEQiFcbiIsIGZ1bmMsIGxpbmUpOworCQkJCW5FcnJvcnMrKzsgCisJCQkJfQorCQkJZWxzZQorCQkJCW5JbnNlcnRlZCsrOworCQkJfSAvLyB3aGlsZQorCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBHbGVtbSBsZW1tYXRhK2luZm9zIGZyb20gZmlsZSEgRXhpdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gLTE7IAorCQl9CQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgCisJCQkJY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgCisJCQkJc3RtdC5jbG9zZSgpOworCQkJaWYoIHN0bXRQcmVwICE9IG51bGwgKSAKKwkJCQlzdG10UHJlcC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQkJCisJCX0KKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJJbmZvIDogJXM6IG5vLiBvZiBsZW1tYXRhL3dmIHBhaXJzIGluc2VydGVkID0gJWQuXG4iLCBmdW5jLCBuSW5zZXJ0ZWQpOworCQorCXJldHVybiBuRXJyb3JzOyAvLyAwPU9LLCA+MCA9IG5vLiBvZiBlcnJvcnMuCisJfSAvLyB3cml0ZURCTGVtbWF0YQorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZDoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBydWxlcyBpbnRvIERlcmJ5IERCLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBpcyB0aGUgdmVyc2lvbiB3aXRoIGEgUHJlcGFyZWRRdWVyeS4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIHNwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxNy4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCgKKwkJCVByZXBhcmVkU3RhdGVtZW50IHN0bXQsIAorCQkJU3RyaW5nIGxlbW1hLCAKKwkJCVN0cmluZyB3ZiwgCisJCQlTdHJpbmcgZGVjb21wb3NpdGlvbiwgCisJCQlib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCI7CisJZmluYWwgYm9vbGVhbgorCQliTG9nID0gZmFsc2U7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJYm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIAorCS8vIGZvciBsb2dpbmcgb25seToKKwlzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJaWYoIGJMb2cgKQorCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKyAgICAvLyBub3cgaW5zZXJ0IG5ldyB2YWx1ZXMgaW50byBQcmVwYXJlZFN0YXRlbWVudDoKKyAgICB0cnkgeworICAgIAlzdG10LnNldFN0cmluZyggMSwgbGVtbWEpOworICAgICAgICBzdG10LnNldFN0cmluZyggMiwgd2YpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oMywgcHJvcDEpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNCwgcHJvcDIpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNSwgc3BlYyk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJlcGFyZWQgc3RtdCA9ICclcycuXG4iLCAgZnVuYywgc3RtdC50b1N0cmluZygpKTsKKyAgICAgICAgfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZTEpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigJIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0nJWInIHByb3AyPSclYicgc3BlYz0nJWInIVxuIiwgIAorCQkJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisgICAgCisgICAgdHJ5IHsKKwkJLy8gZXhlY3V0ZSB0aGUgZmlsbGVkIHByZXBhcmVkIHN0YXRlbWVudDoKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZSgpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDE7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfTsKKwkKKyAgICAKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvczoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBpbnRvIERlcmJ5IERCLgorCSAqIFBhcmFtZXRlcnM6CisJICogY29udGFpbnNTcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTAuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3MoU3RhdGVtZW50IHN0bXQsIFN0cmluZyBsZW1tYSwgU3RyaW5nIHdmLCBTdHJpbmcgZGVjb21wb3NpdGlvbiwgYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3MiOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCUJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICBzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgICAgCisgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisJdHJ5IHsKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZShzcWxJbnNlcnQpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDE7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hRGF0YQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGZyb20gdGhlIEdsZW1tREIuCisJICogSW5wdXQ6IGxlbW1hICsgR0xFTU1fT1BUU194eHggKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYURhdGEoTGVtbWFJbmZvIGxlbW1hSW5mbywgUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hRGF0YSI7CisKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlsZW1tYUluZm8uY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlsZW1tYUluZm8uc3RtdCA9IGxlbW1hSW5mby5jb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWludCByID0gcmVhZERCTGVtbWEobGVtbWFJbmZvLnN0bXQsIGxlbW1hSW5mbyk7CisJCQkKKwkJaWYoIHIgIT0gMCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBnZXQgZGF0YSBmb3IgbGVtbWE9JyVzJyBvcHRpb25zPSclcychXG4iLCAKKwkJCQkJZnVuYywgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCQkJcmV0dXJuIDE7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBsZW1tYUluZm8uY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWFEYXRhCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgYnkgYWNjZXNzaW5nIHRoZSBHbGVtbURCLgorCSAqIElucHV0IDogbGVtbWEgKyBwcm9wMSsyIChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiBPdXRwdXQ6IAorCSAqICAtIGNvbnRhaW5zIGEgUmVzdWx0U2V0IGZvciBmZXRjaGluZyB0aGUgd29yZGZvcm1zLgorCSAqIAkgIFRoaXMgUmVzdWx0U2V0IHdpbGwgaGF2ZSBiZSBiZSBjbG9zZWQgd2l0aCBMZW1tYUluZm8uY2xvc2UoKS4KKwkgKiAJICBUaGUgbm8uIG9mIGZvdW5kIHdvcmRmb3JtcyBpcyBub3Qga25vd24gdGlsbCB3ZQorCSAqIAkgIGZldGNoIGFsbCBvZiB0aGVtIGZyb20gUmVzdWx0U2V0ISAKKwkgKiAJLSBkdWUgdG8gU0VMRUNUIERJU1RJTkNUIG9ubHkgdW5pcSB3ZiBhcmUgcmV0dXJuZWQuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hKFN0YXRlbWVudCBzdG10LCBMZW1tYUluZm8gbGVtbWFJbmZvKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWEiOworCVN0cmluZworCQlzcWw7CisJCQorCXNxbCA9IFN0cmluZy5mb3JtYXQoIlNFTEVDVCBESVNUSU5DVCB3ZiBmcm9tICVzIFdIRVJFIGxlbW1hPSclcycgJXMgJXMgJXMiLCAKKwkJCWRiVGFibGUsCisJCQlsZW1tYUluZm8ubGVtbWEsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICJBTkQgcHJvcDE9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AxID09IDEgPyAiQU5EIHByb3AxPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICJBTkQgcHJvcDI9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AyID09IDEgPyAiQU5EIHByb3AyPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICJBTkQgc3BlYz0ndHJ1ZSciICAgOiAKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIkFORCBzcGVjPSdmYWxzZSciICA6ICIiKTsKKwkKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCBmdW5jLCBsZW1tYUluZm8ucHJvcDEsIGxlbW1hSW5mby5wcm9wMiwgbGVtbWFJbmZvLnNwZWMpOworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsID0gJyVzJy5cbiIsIGZ1bmMsIHNxbCk7CisKKwl0cnkgeworCQlsZW1tYUluZm8ucmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsJCisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hlbiBleGVjdXRpbmcgc3FsPSclcychXG4iLCBmdW5jLCBzcWwpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBhbGwgc3FsIHN0dWZmIGFyZSBjbG9zZWQgb3V0c2lkZSB0aGlzIGZ1bmN0aW9uLCBzbyBkb24ndCBjbG9zZSB0aGVtIGhlcmUhCisJCX0JCisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvcworCSAqIFJldHVybnMgR2VuZXJhbCBJbmZvcyBhYm91dCB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgcmVhZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkluZm9zKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlkYkluZm8gPSByZWFkRGJMZW1tYXRhSW5mb3Moc3RtdCk7CisJCQkKKwkJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHJlYWQgR2VuZXJhbCBJbmZvcyBmcm9tIEdsZW1tIERhdGFiYXNlIVxuIiwgZnVuYyk7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiBudWxsOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIGNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIHN0bXQuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gbWF5IGJlIG51bGwuCisJCQorCX0gLy8gcmVhZERiSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJMZW1tYXRhSW5mb3M6CisJICogcmVhZHMgYW5kIHJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY29udGVudCAKKwkgKiBvZiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogUmV0dXJucyAwPU9LIG9yIGVycm9yIGNvZGUgPiAwLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiTGVtbWF0YUluZm9zKFN0YXRlbWVudCBzdG10KQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJyZWFkRGJMZW1tYUluZm9zIjsKKwlTdHJpbmdbXQorCQlzcWwgPSB7CSJTRUxFQ1QgQ09VTlQoZGlzdGluY3QgbGVtbWEpIGZyb20gIiArIGRiVGFibGUgLAkvLyBjb3VudHMgbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlLAkJCQkJLy8gY291bnRzIHRvdGFsIG5vLiBvZiBzdG9yZWQgd29yZGZvcm1zLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9dHJ1ZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9dHJ1ZSJ9OworCVJlc3VsdFNldAorCQlyZXMgPSBudWxsOyAKKwlpbnRbXQorCQluQ291bnRzID0gbmV3IGludFtzcWwubGVuZ3RoXTsKKwlpbnQJCQorCQlpID0gMCwgCisJCW5EaXN0TGVtbWF0YSA9IC0xLAkvLyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YSBpbiBEQi4KKwkJbldmcwkJID0gLTE7CS8vIG5vLiBvZiB3b3JkZm9ybXMgaW4gREIuCisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGV4dHJhY3RpbmcgYWdyZWdhdGVkIGluZm9zIGFib3V0IERhdGFiYXNlIGNvbnRlbnRzLi4uXG4iLCBmdW5jKTsKKwkKKwlkYkluZm8gPSBuZXcgR2xlbW1EQkluZm8oKTsKKworCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCXRyeSB7CisJCWZvcihpPTA7IGk8c3FsLmxlbmd0aDsgaSsrKQorCQkJeworCQkJcmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsW2ldKTsKKwkJCWlmKCByZXMubmV4dCgpICkKKwkJCQlkYkluZm8uY291bnRzW2ldID0gcmVzLmdldEludCgxKTsgLy8gY291bnQgaXMgaW4gY29sdW1uIDEuCisJCQllbHNlCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGV4dHJhY3QgY291bnQgZnJvbSAnJXMnIVxuIiwgZnVuYywgc3FsW2ldKTsKKwkJCQlkYkluZm8uY291bnRzW2ldID0gLTE7CisJCQkJfQorCQkJfQorICAgICAgIAorICAgICAgICB9CisgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgCXsKKyAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBzcWw9JyVzJyBmYWlsZWQhXG4iLCBmdW5jLCBzcWxbaV0pOworICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBudWxsOworICAgIAl9CisJZmluYWxseSB7CisJCXRyeSB7CisJCQlyZXMuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIE9LCisJfSAvLyByZWFkRGJMZW1tYXRhSW5mb3MKKwkKKwkvKioqKioqKioqKioqKioqKioqKiogVGVzdCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3NfdGVzdAorCSAqIFRoaXMgaXMgZGVidWcgY29kZSB3cml0dGVuIHRvIHRlc3QgaWYgd2UgY2FuIGFjY2VzcyB0aGUgRGVyYnkKKwkgKiBEYXRhYmFzZSBmcm9tIGFuIGV4dGVybmFsIEphdmEgUHJvZ3JhbW0uCisJICogMDguMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IHJlYWREYkluZm9zX3Rlc3QoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCVN0cmluZworCQlpbnNlcnRTdG10ID0gIiI7CisJCisJLy8gQ29ubmVjdCB0byBEZXJieSBkYXRhYmFzZToKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkJCisJCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCQl0cnkKKwkJCXsKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBTdHJpbmcgCisgICAgICAgICAgICAJc3FsID0gIlNFTEVDVCAqIEZST00gIiArIGRiVGFibGU7CisgICAgICAgICAgICBSZXN1bHRTZXQgCisgICAgICAgICAgICAJcmVzdWx0ID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsKKyAKKyAgICAgICAgICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogdGFibGUgJyVzJzpcbiIsICBmdW5jLCBkYlRhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKHJlc3VsdC5uZXh0KCkpIHsKKyAgICAgICAgICAgIAlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCInJXMnIDogJyVzJyA6ICclcycgOiAnJXMnIC5cbiIsIHJlc3VsdC5nZXRTdHJpbmcoMSksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDIpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygzKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoNCkpOworICAgICAgICAJCWluc2VydFN0bXQgPSBpbnNlcnRTdG10ICsgIjxwPiIgKyByZXN1bHQuZ2V0U3RyaW5nKDEpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDIpICsgIiA6ICIgKworICAgICAgICAgICAgICAgIAkJICAgICByZXN1bHQuZ2V0U3RyaW5nKDMpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDQpICsgIjwvcD4iOworICAgICAgICAgICAgCX0KKwkJCX0KKwkgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgICAgIAl7CisJICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGluc2VydFN0bXQ9JyVzJyBmYWlsZWQhLlxuIiwgZnVuYywgc3RtdCk7CisgICAgICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICBjb24uY2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3RpbmcgJyVzIGZhaWxlZCFcbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwl0cnkgeworCQljb24uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQkKKwl9IC8vIHJlYWREYkluZm9zX3Rlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiBpbXBvcnRHbGVtbUxlbWF0YV90ZXN0CisJICogVGVzdCBWZXJzaW9uLgorCSAqIDEyLjEyLjE5L0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdChTdHJpbmcgZm4pCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YV90ZXN0IjsKKwlJbnB1dFN0cmVhbSAKKwkJaW47CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4yID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCXI7CisJCisJLyoKKwkgKiBSZWFkIExlbW1hdGEgKyBJbmZvIGZyb20gZmlsZTogCisJICovCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJCisJdHJ5IHsKKwkJLy9pbiA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKCBuZXcgRmlsZUlucHV0U3RyZWFtKGZuKSApOworCQlpbjIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCXdoaWxlKCAobGluZSA9IGluMi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggPT0gMyApCisJCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IEltcG9ydDogbGVtPSclcycgRGVjb21wPSclcycgV2Y9JyVzJy5cbiIsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzFdLCBsZW1tYUluZm9bMl0pOworCQkJZWxzZQorCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiBpbXBvcnRHbGVtbUxhbWF0YTogJyVzJyBoYXMgJWQgY29tcG9uZW50cyFcbiIsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJfQorCQl9IAorCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgb3BlbiAnJXMnIVxuIiwgZnVuYywgZm4pOworCQlyZXR1cm4gMTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfQorCisJdHJ5IHsKKwkJaW4yLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCisJLyogQ2hlY2sgY29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwkgKi8gCisJciA9IHJlYWREYkluZm9zX3Rlc3QoKTsKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIHI7CisJCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNzEvOTBhOTJiMzY0ZDNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzcxLzkwYTkyYjM2NGQzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3Yzk1ZWUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzcxLzkwYTkyYjM2NGQzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsOTc1IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKKy8qIDAuMSA6IDE3LjA2LjIwL0ZCIAorICogMC4yIDogMjUuMTAuMjEvRkIKKyAqICAgICAgIGxvZ2luZyBvZiB0aGUgQVBJIFJlcXVlc3RzLgorICogICAgICAgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisgKiAgICAgICBjb3JyZWN0aW5nIGNhbGxpbmcgb2YgbGVtbWEgKyBwcm9wMS9wcm9wMi9zcGVjLgorICogICAgICAgaGFuZGxpbmcgb2YgbGVtbWF0YSB3aXRoICfDnycuCisgKiAKKyAqIEdlbmVyYWwgY29tbWVudHMgdG8gdGhlIGVuY29kaW5nIG9mIGRlcml2YXRpb25zIGZyb20gbGVtbWEgdG8gd2ZzIGFuZCBob3cgdGhleSBhcmUgZW5jb2RlZAorICogaW4gdGhlIERlcmJ5IGRhdGFiYXNlOgorICogCisgKiBHTEVNTSBlbmNvZGluZzogIAorICogICBfIF8gOiArRmxleCAgICAgICDDlmxlIC0+IMOWbCAgICAgIAorICogICArIF8gOiArQ29tcCAgICAgICDDlmxsYW1wZSAtPiDDlmwgb3IgTGFtcGUgKGNvbXBvdW5kKS4KKyAqICAgXyArIDogK290aGVyICAgICAgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm5zY2h1aCAobm8gY29tcG91bmQgZm9yICdUdXJuc2NodWgnLCBvbmx5IHByZWZpeCkuCisgKiAgICsgKyA6ICtDb21wK290aGVyIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuICsgU2NodWggKGNvbXBvdW5kIGZvciAnU2NodWgnICsgUHJlZml4KS4KKyAqIEMyIGxlbW1hdGl6YXRpb24gb3B0aW9uczoKKyAqICAgRmxleCAgKGlkZW50aWNhbCB0byBHbGVtbSkKKyAqICAgQ29tcCAgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKQorICogICBPdGhlciAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpLgorICogICBTcGVjICAob25seSBDMjogaW5jbHVkZXMgYWxsIHdmcyB3aXRoIGhpcGhlbiBhbmQvb3Igc29tZSBub24tYWxwaGFiZXRpYyBJU084ODU5LTEgY2hhcnMpCisgKiAgICAgICAgIEUuZy4gw5ZsLUV4cG9ydGUsICJNYXJrZW4iLcOWbGUuCisgKiBEZXJieSBFbmNvZGluZzoKKyAqICBwcm9wMSAJcHJvcDIJc3BlYyAgIAltZWFuaW5nIGluIEMyOgorICogIDAJCTAJCS0JCUZsZXgKKyAqICAxCQkwCQktCQlDb21wCisgKiAgMAkJMQkJLQkJT3RoZXIgKHByZWZpeCkKKyAqICAxCQkxCQktCQlDb21wICsgT3RoZXIKKyAqICAtCQktCQkwCQktU3BlYworICogIC0JCS0JCTEJCStTcGVjCisgKiAKKyAqIEV4YW1wbGVzOgorICogJlNjaHVoCQkJOiBTY2h1aCwgU2NodWhlLCAuLi4gb25seSBmbGV4aW9ucworICogJlNjaHVoK2NvbXAJCTogU2NodWhlLCBUdXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMuCisgKiAmU2NodWgrb3RoZXIJCTogU2NodWhlLCBBbnRpc2NodWhlLi4uIGZsZXhpb25zIGFuZCBwcmVmaXhlZCB3ZnMgKG5vIGNvbXBvdW5kcykuCisgKiAmU2NodWgrY29tcCtvdGhlcjogU2NodWhlLCBBbnRpc2NodWhlLCBUdXJuc2NodWhlLCBBbnRpdHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzIGFuZCAKKyAqIAkJCQkJICBwcmVmaXhlZCBzaW5nbGUgd2ZzIChBbnRpc2NodWhlKSBhbmQgcHJlZml4ZWQgY29tcG91bmRzLgorICogJlNjaHVoK3NwZWMJCTogIkFudGkiLVNjaHVoZSwgNjhnZXItU2NodWhlLi4uIG1heSBiZSBjb21iaW5lZCB3aXRoIGV2ZXJ5IG9wdGlvbnM6IGFkZHMKKyAqICAgICAgICAgICAgICAgICAgICB3ZnMgd2l0aCBoeXBoZW4gYW5kL29yIG5vbi1hbHBoYWJldGljIGNoYXJzLgorICogCisgKiBDb252ZXJzaW9uIHJ1bGVzOgorICogCisgKiAgJnNjaGxpZcOfZW4gLT4gaW50ZXJuYWwgc2VhcmNoIGZvciAnc2NobGllc3NlbicsCisgKiAgYmVjYXVzZSBHbGVtbSBvdXRwdXRzICdzcycgZm9yICfDnycuCisgKiAgCisgKiBDaGFyYWN0ZXIgRW5jb2Rpbmc6CisgKiAKKyAqIC0gV2hlbiBpbXBvcnRpbmcgd2ZzIHRvIHRoZSBEZXJieSBEYXRhYmFzZSB3aXRoIGRvQ3VybEdsZW1tU2VydmljZXMvaW5kZXhMZW1tYXRhOgorICogCisgKiAgIElOUFVUOiB3b3JkZm9ybSBsaXN0IGluIFtVVEYtOF0gOiBVVEYtOCBpcyB0aGVuIGNvbnZlcnRlZCB0byBMYXQxIGZvciBHbGVtbSwKKyAqICAgICAgICAgIHRoZSBvdXRwdXQgb2YgR2xlbW0gW0xhdDFdIGlzIHJldHVybmVkIHRvIHRoZSBHbGVtbVNlcnZpY2VzIHdpdGhvdXQgcmVjb252ZXJzaW9uCisgKiAgICAgICAgICB0byBVVEY4IGFuZCBpbXBvcnRlZCBpbnRvIERlcmJ5IERhdGFiYXNlIHVuY2hhbmdlZC4KKyAqCQkKKyAqLworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA0LjExLjIxIjsgCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4yIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVByb3BzCQk9ICIvV0VCLUlORi9HbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiOworCQorCS8vIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSByZWFkIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzICh0aGVzZSBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzKToKKwlwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCAJCT0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCXByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCQkJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwlAQ29udGV4dAorCXByaXZhdGUgU2VydmxldENvbnRleHQgc2VydmxldENvbnRleHQ7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmb3V0CT0gbnVsbDsKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZlcnIJPSBudWxsOwkJCisJCQorCS8qIAorIAkgKiAKKwkgKiAtIGFmdGVyIGxvYWRQcm9wZXJ0aWVzLCBzZXRzIHRoZSBjbGFzcyB2YXJpYWJsZSB3aXRoIGxvYWRlZCBwcm9wZXJ0eSB2YWx1ZXMuCisJICogCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCUdTX1dvcmtpbmdQYXRoIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJHU19Xb3JraW5nUGF0aCIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyIpOworCWZuYW1lV2ZzCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVdmcyIsIAkgICAiZ2xfd2ZzX2luLnR4dCIpOworCWZuYW1lV2ZzCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVXZnM7CisJZm5hbWVPdXQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lT3V0IiwgCSAgICJHbGVtbVNlcnZpY2VzLmxvZyIpOworCWZuYW1lT3V0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVPdXQ7CisJZm5hbWVFcnIJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lRXJyIiwgCSAgICJHbGVtbVNlcnZpY2VzLmVyciIpOworCWZuYW1lRXJyCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVFcnI7CisJZm5hbWVTY3JpcHQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lU2NyaXB0IiwJICAgImRvR2xlbW0iKTsKKwlmbmFtZVNjcmlwdAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lU2NyaXB0OworCWZuYW1lTGVtYXRhCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUxlbWF0YSIsICAgICJ0bXAvbGVtMyIpOworCWZuYW1lTGVtYXRhCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVMZW1hdGE7CisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKgorCSAqICBsb2dfUmVxdWVzdDoKKwkgKiAgCisJICogIC0gd3JpdGUgaW5mbyBhYm91dCBBUEkgUmVxdWVzdC4KKwkgKiAgUGFyYW1ldGVyczoKKwkgKiAgcmVxdWVzdFBhdGgJOiBwYXRoIG9mIHdlYmFwcCBhZGRyZXNzZWQgYnkgdGhlIHJlcXVlc3QuCisJICogIGZ1bmMJCTogbmFtZSBvZiB0aGUgZnVuY3Rpb24gd2hpY2ggaW1wbGVtZW50cyB0aGUgcmVxdWVzdC4KKwkgKiAgCisJICogIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGxvZ19SZXF1ZXN0KFN0cmluZyByZXF1ZXN0UGF0aCwgU3RyaW5nIGZ1bmMpCisJCisJeworCS8vIHRyYW5zZm9ybSAiZGF0ZVR0aW1lIiAtPiAiZGF0ZSB0aW1lIjoKKwkKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwlmb3V0LnByaW50ZigiIyMjICVzOiAlcyA6IHZlcnM9JyVzJywgdmRhdGU9JyVzJyByZXF1ZXN0PSclcycuXG4iLCBmdW5jLCByZXF1ZXN0UGF0aCwgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIAorCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisJZm91dC5wcmludGYoIiMjI1xuIik7CisJfSAvLyBsb2dfUmVxdWVzdAorCQkKKwkvKiBmb3JtYXREYk5hbWUKKwkgKiAKKwkgKiAtIGdldHMgbmFtZSBvZiBEYXRhYmFzZSB1c2VkIGJ5IERlcmJ5IGZyb20gcHJvcHMgCisJICogICBhbmQgZm9ybWF0IGl0IHRvIEhUTUwuCisJICogIAorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBTdHJpbmcgZm9ybWF0RGJOYW1lKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCVN0cmluZworCQlkYk5hbWU7CisJU3RyaW5nCisJCWRiUGF0aCA9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCWludAorCQlqID0gZGJQYXRoLmxhc3RJbmRleE9mKCcvJyk7CisJCisJaWYoIGogPiAwICkKKwkJZGJOYW1lID0gZGJQYXRoLnN1YnN0cmluZyhqKzEpOworCWVsc2UKKwkJZGJOYW1lID0gZGJQYXRoOworCQorCXJldHVybiBkYk5hbWU7IC8vICI8cD48Yj5EYXRhYmFzZTogIiArIGRiTmFtZSArICI8L2I+PC9wPlxuIjsKKwl9IC8vIGZvcm1hdERiTmFtZQorCisJLyoKKwkgKiBjbG9zZUxvZ1N0cmVhbXM6CisJICogCisJICogLSBjbG9zZSB0aGUgZm91dC9mZXJyIGxvZyBzdHJlYW1zLgorCSAqIAorCSAqIDI2LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGNsb3NlTG9nU3RyZWFtcygpCisJCisJeworCWlmKCBmb3V0ICE9IG51bGwpCisJCWZvdXQuY2xvc2UoKTsKKwlmb3V0ID0gbnVsbDsKKwkKKwlpZiggZmVyciAhPSBudWxsICkKKwkJZmVyci5jbG9zZSgpOworCWZlcnIgPSBudWxsOworCX0gLy8gY2xvc2VMb2dTdHJlYW1zCisJCisJLyogaW5pdF9hbmRfbG9nX1JlcXVlc3QKKwkgKiAKKwkgKiAtIGxvYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLCBzZXRzIEdsZW1tU2VydmljZXMgY29uc3RhbnRzCisJICogICBhbmQgbG9ncyB0aGUgcmVxdWVzdC4KKwkgKiAtIGxvYWQgcHJvcGVydGllcyBhbmQgc2V0IGNvbnN0YW50cyBiZWZvcmUgbG9nZ2luZyBhbnl0aGluZywgYmVjYXVzZQorCSAqICAgbG9nZ2luZyB3aWxsIGJlIGRvbmUgaW50byB0aGUgbGFzdCBzdGRvdXQvc3RkZXJyIG9wZW5lZCBpbiBnbGFzc2Zpc2gncyBKVk0sCisJICogICBlLmcuIGluIHRoZSBsb2cgb2YgYW5vdGhlciBTZXJ2aWNlLgorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBQcm9wZXJ0aWVzIGluaXRfYW5kX2xvZ19SZXF1ZXN0KFN0cmluZyBmdW5jLCBTdHJpbmcgcmVxdWVzdFBhdGgpCisJCisJeworCVN0cmluZworCQlyZWFsUGF0aCA9IHNlcnZsZXRDb250ZXh0LmdldFJlYWxQYXRoKGZuYW1lUHJvcHMpOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAoaWYgbGFzdCBwYXJhbSA9IHRydWUpOgorCVByb3BlcnRpZXMKKwkJcHJvcHMgPSBVdGlscy5sb2FkUHJvcGVydGllcyhzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpLCBmbmFtZVByb3BzLCByZWFsUGF0aCwgZmFsc2UpOworCQorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBmb3V0IGFuZCBmZXJyIGFzIHJlcGxhY2VtZW50IGZvciBzdGRvdXQvc3RkZXJyIGZvciB1c2UgaW4gR2xlbW1TZXJ2aWNlcy4KKwkvLyBkbyBub3QgdXNlIG9yIHJlZGlyZWN0IFN5c3RlbS5vdXQgYW5kIFN5c3RlbS5lcnIsIGFzIHRoZXkgd2lsbCBiZSByZWRpcmVjdGVkCisJLy8gYnkgb3RoZXIgU2VydmljZXMgaW4gdGhlIHNhbWUgZ2xhc3NmaXNoIEpWTSwgZS5nLiBieSB0aGUgV2Zvcm1TZXJ2aWNlcy4KKwlmb3V0ID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lT3V0KTsKKwlmZXJyID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lRXJyKTsKKwkKKwkvL1V0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCisJbG9nX1JlcXVlc3QocmVxdWVzdFBhdGgsIGZ1bmMpOworCQorCXJldHVybiBwcm9wczsKKwl9IC8vIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJU3RyaW5nCisJCXN0YXR1czsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9zdGF0dXMvIik7CisJCisJLy8gaHR0cFNlcnZsZXRSZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKGVudik7CisJCisJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnByb3BlcnRpZXM8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5kYXRhYmFzZTwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpLAorCQkJCQkJCXNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcykgPT0gbnVsbCA/ICJub3QgZm91bmQiIDoKKwkJCQkJCQkJcHJvcHMuaXNFbXB0eSgpID8gImVtcHR5IiA6ICJsb2FkZWQiLAorCQkJCQkJCWZvcm1hdERiTmFtZShwcm9wcykKKwkJCQkJCQkpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCWNsb3NlTG9nU3RyZWFtcygpOworCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogCisJICogZG9QT1NUX2ltcG9ydExlbW1hRGF0YToKKwkgKiAKKwkgKiBQT1NUOiAvaW5kZXgvYWRkL3tkYXRhYmFzZW5hbWV9OiB0ZXh0L3BsYWluCisJICogCisJICogUGFyYW1ldGVyczoKKwkgKiBsaXN0CQkgOiB0aGUgbGlzdCBvZiB3ZnMgc2VudCBpbiB0aGUgYm9keSBvZiB0aGUgUE9TVCByZXF1ZXN0LgorCSAqIGRicGF0aAkgOiB0aGUgbG9jYXRpb24gb2YgdGhlIGRhdGFiYXNlIHdoZXJlIHRoZSBsZW1tYSt3ZnMgYXJlIHRvIGJlIHN0b3JlZC4KKwkgKiBOb3RlcyAgICAgOgorCSAqIC0gYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UgbG9jYXRlZCBhdCAnZGF0YWJhc2VuYW1lJy4KKwkgKiAtIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkIGludG8gYSBEZXJieSBkYXRhYmFzZS4KKwkgKiBJbnB1dAkgOiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKiAwNC4xMS4yMS9GQgorCSAqIC0gc3VibWl0dGVkIGRhdGFiYXNlIHBhdGguCisJICovCisJCisJQFBhdGgoImFkZC97ZGF0YWJhc2VwYXRofSIpIAorCUBQT1NUIAorCUBDb25zdW1lcygidGV4dC9wbGFpbiIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisJCQkJCQkJKAorCQkJCQkJCVN0cmluZyAJCQkJCQkJCWxpc3QsCisJCQkJCQkJQFBhdGhQYXJhbSh2YWx1ZT0iZGF0YWJhc2VwYXRoIikgCWZpbmFsIFN0cmluZyBkYnBhdGgKKwkJCQkJCQkpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9QT1NUX2ltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gCisJCWFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2FkZC97ZGJwYXRofSIpOworCQorCWZvdXQucHJpbnRmKCJJbmZvIDogJXM6IHNlbGVjdGVkIGRhdGFiYXNlIHBhdGggPSAnJXMnLlxuIiwgZnVuYywgZGJwYXRoKTsKKwlmb3V0LnByaW50ZigiSW5mbyA6ICVzOiB3b3JraW5nIGRpcmVjdG9yeSA9ICclcycuXG4iLCBmdW5jLCBHU19Xb3JraW5nUGF0aCk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgZm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShmZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzLCBmb3V0LCBmZXJyKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZsO8aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEsIHByb3BzLCBkYnBhdGgpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCQorCX0gLy8gZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCisJLyogZG9HRVRfdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVycyA9ICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vIik7CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlmaW5hbCBTdHJpbmcKKwkJZGJOYW1lID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+ZGF0YWJhc2U8L2I+OiAlczwvcD4iLCBmb3JtYXREYk5hbWUocHJvcHMpKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgZGJOYW1lICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyBkb0dFVF92aWV3REJJbmZvCisKKworCS8qIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0PnZlcnNpb24gIiArIHZlcnNpb24gKyAiIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIHJlcXVlc3QgPSAnIiArIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikgKyAiJzwvaT48L2g0PlxuIiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDE6PC9iPiAoQzIgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9PC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+e2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYyk8L2NvZGU+PC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbDwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPsOWbD9vcHRzPWZsZXgrY29tcCtvdGhlcitzcGVjPC9jb2RlPjwvcD4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMjo8L2I+IChpbnRlcm5hbCBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX0/cHJvcDE9WzAxMl0mYW1wO3Byb3AyPVswMTJdJmFtcDtzcGVjPVswMTJdPC9jb2RlPiAod2hlcmUgZWFjaCBwcm9wMSwgcHJvcDIsIHNwZWMgaXMgb3B0aW9uYWwpLjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw/cHJvcDE9MCZhbXA7cHJvcDI9MSZhbXA7c3BlYz0yPC9jb2RlPjwvcD4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfSIpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSclZCcgcHJvcDI9JyVkJyBzcGVjPSclZCcuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwkvKiAKKwlmb3IoaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJCX0JCisJICovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoIGxlbW1hSW5mby5vcHRzU2V0dGluZyA9PSBMZW1tYUluZm8uT1BUU19TRVRUSU5HX0MyICkgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMSxwcm9wMixzcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaW50CisJCW5XZnMgPSBsZW1tYUluZm8ubldmczsKKwkKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwkvLyBsb2cgb3V0Y29tZToKKwlpZiggbldmcyA8IDAgKQorCQlmb3V0LnByaW50ZigiRXJyb3I6ICVzOiByZXR1cm5pbmcgMCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMpOworCWVsc2UKKwkJZm91dC5wcmludGYoIkRlYnVnLiAlczogcmV0dXJuaW5nICVkIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYywgbldmcyk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIG5vdGU6CisJICogLSBpZiBCcm93c2VyIHJlcXVlc3Q6IEhUVFBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAndGV4dC9odG1sLC4uLnhtbC4uLicKKwkgKiAtIGlmIFdmb3JtU2VydmljZXMgcmVxdWVzdDogSHR0cFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICdhcHBsaWNhdGlvbi9qc29uJy4KKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqIAorCSAqIC0gc3VibWl0dGVkIFVSTCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hLCBpcyBpbnRlcnByZXRlZCBieSBnbGFzc2Zpc2ggYXMKKwkgKiAgIGJlaW5nIElTTy04ODU5LTEgZW5jb2RlZC4gV2hlbiB0aGUgcmVxdWVzdCBpcyBVVEYtOCBlbmNvZGVkLCBVbWxhdXRzIGFuZAorCSAqICAgJ8OfJyBhcmUgbWlzLWludGVycHJlZGVkLCBsZWFkaW5nIHRvIGFuIGVycm9uZXJvdXMgcmVxdWVzdCB0byB0aGUgRGVyYnkKKwkgKiAgIGRhdGFiYXNlLgorCSAqIC0gUmVxdWVzdGVkIGxlbW1hICdsZW1tYScgaGFzIHRvIGJlIHRyYW5zZm9ybWVkIHRvIFVURi04IGZpcnN0LgorCSAqIC0gbm90ZTogZXZlbiB3aGVuIHN1Ym1pdHRpbmcgdGhlIEdFVCByZXF1ZXN0IGJ5IHNwZWNpZnlpbmcgJ2NoYXJlbmNvZGU9VVRGLTgnLAorCSAqICAgZ2xhc3NmaXNoIGRvZXMgbm90IGNvbnZlcnQgaXQgYXV0b21hdGljYWxseSBhcyBleHBlY3RlZC4KKwkgKiAgIAorCSAqICAyMi4xMC4yMS9GQgorCSAqIAorCSAqIC0gaWYgYWNjZXB0PWFwcGxpY2F0aW9uL2pzb24gcmV0dXJuIFVURi04IChXZm9ybVNlcnZpY2VzKS4KKwkgKiAtIGVsc2UgaWYgYWNjZXB0PXRleHQvaHRtbCBkbyBub3QgdHJhbnNmb3JtIGNoYXJhY3RlciBlbmNvZGluZyAoQnJvd3NlcikuCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBDb25zdW1lcygiYXBwbGljYXRpb24vanNvbiwgdGV4dC9odG1sIikKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCQorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCWZpbmFsIGJvb2xlYW4KKwkJYkVuY29kZUxlbW1hID0gZmFsc2U7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CisJCisJLyogdGVzdDoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJaWYoIGJFbmNvZGVMZW1tYSApCisJCXsKKwkJLy8gd2hlbiBhY2NlcHRpbmcgSlNPTiwgdXJsIGhhcyB0byBiZSBjb252ZXJ0ZWQgdG8gVVRGLTgsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYToKKwkJdHJ5IHsKKwkJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obmV3IFN0cmluZyhsZW1tYS5nZXRCeXRlcygiSVNPLTg4NTktMSIpLCAidXRmLTgiKSk7CisJCQl9IAorCQljYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlMSkgeworCQkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCQlMZW1tYVJlc3BvbnNlCisJCQkJbGVtcmVzcCA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbXJlc3ApLmJ1aWxkKCk7CisJCQl9CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW1VURi04XSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCWVsc2UKKwkJeworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbdW5jaGFuZ2VkXSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCisJLyogZG9lcyBub3QgaGVscDoKKwkgU3RyaW5nCisJIAlyZXF1ZXN0Q2hhckVuY29kaW5nID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldENoYXJhY3RlckVuY29kaW5nKCk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiByZXF1ZXN0IGNoYXJhY3RlciBlbmNvZGluZyA9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RDaGFyRW5jb2RpbmcpOworCSovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXsKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQkvL3JldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJfQorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsJCisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCS8qCisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC90ZXN0L2luZm8vIik7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL2ZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJZm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzcyL2QwMjdhZTBjNTQzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS83Mi9kMDI3YWUwYzU0M2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmY1Y2EzCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS83Mi9kMDI3YWUwYzU0M2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpAQCAtMCwwICsxLDcyMCBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnNxbC5Db25uZWN0aW9uOworaW1wb3J0IGphdmEuc3FsLkRyaXZlck1hbmFnZXI7CitpbXBvcnQgamF2YS5zcWwuUHJlcGFyZWRTdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS5zcWwuUmVzdWx0U2V0OworaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5TdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitwdWJsaWMgY2xhc3MgR2xlbW1EQgorCit7CisJc3RhdGljIHB1YmxpYyBTdHJpbmcgZGJUYWJsZSAJPSAiR2xlbW1MZW1tYXRhIjsKKwlzdGF0aWMgU3RyaW5nIGRiTGVtbWEgCQkgCT0gImxlbW1hIjsKKwlzdGF0aWMgU3RyaW5nIGRiV2YJIAkJCT0gIndmIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDEgCQkJPSAicHJvcDEiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMiAJCQk9ICJwcm9wMiI7CisKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKG92ZXJ3cml0dGVuIGJ5IEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZuYW1lREIgPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgc2VydmVySG9zdCA9ICIvL2xvY2FsaG9zdDoxNTI3LyI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChmaW5hbCBhc3NpZ25tZW50cyk6CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyRW1iID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZERyaXZlciI7CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyQ2xpZW50ID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREcml2ZXIiOworCisJZmluYWwgc3RhdGljIGJvb2xlYW4KKwkJdXNlUHJlcGFyZWRTdG10ID0gdHJ1ZTsgLy8gMT11c2UgUHJlcGFyZWRTdGF0ZW1lbnQgYW5kIG5vdCBTdGF0ZW1lbnQuCisJCisJLy8gdmFsdWVzIHRvIGJlIGluc2VydGVkOiBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYy4KKwlzdGF0aWMgU3RyaW5nIGluc2VydFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKCclcycsICclcycsICclcycsICclcycsICclcycpIjsKKwlzdGF0aWMgU3RyaW5nIGluc2VydFByZXBhcmVkUXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoPywgPywgPywgPywgPykiOworCQorCS8qCisJICogc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJICogCisJICogQXJndW1lbnRzOgorCSAqIHByb3BzCTogUHJvcGVydGllcyBsb2FkZWQgYnkgdGhlIEdsZW1tU2VydmljZXMuCisJICogTm90ZXM6CisJICogLSB0aGlzIGZ1bmN0aW9uIGxvYWRzIG9ubHkgdGhvc2UgQ29uc3RhbnRzIG5lZWRlZCBpbiB0aGlzIGNsYXNzLgorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcwlwcm9wcykKKwkKKwl7CisJZm5hbWVEQgkJIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgCSIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlzZXJ2ZXJIb3N0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJzZXJ2ZXJIb3N0IiwJIi8vbG9jYWxob3N0OjE1MjcvIik7CisJZGVyYnlEQlVSTCAJCT0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCQkJCisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCQkJCQlpbXBvcnRHbGVtbUxlbWF0YQorCSAqIFBhcmFtZXRlcnM6CisJICogZm4JCSA6IGFic29sdXRlIGZpbGUgbmFtZSBvZiBHTEVNTSBvdXRwdXQgW0lTTzg4NTktMV0gZXhwZWN0ZWQsIG5vdCBVVEYtOCEKKwkgKiBwcm9wcwkgOiBQcm9wZXJ0aWVzIHZvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgdG8gc2V0IGNvbnN0YW50cyBuZWVkZWQKKwkgKiAJCQkgICBpbiB0aGlzIGNsYXNzLgorCSAqIGRicGF0aAkgOiBsb2NhdGlvbiArIG5hbWUgb2YgZGF0YWJhc2Ugd2hlcmUgdG8gc3RvcmUgbGVtbWF0YSt3ZnMuCisJICogUmV0dXJucwkgOiAwPU9LLCAtMTogZ2VuZXJhbCBlcnJvcjsgPiAwIDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAKKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIGR5bmFtaWNhbGx5IGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqIDA0LjExLjIxL0ZCIGRicGF0aC4KKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YShTdHJpbmcgZm4sIFByb3BlcnRpZXMgcHJvcHMsIGZpbmFsIFN0cmluZyBkYnBhdGgpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YSI7CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4gPSBudWxsOworCWludAorCQluRXJyb3JzOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyB3aGVuIGluZGV4aW5nIGRhdGEgaW50byB0aGUgZGF0YWJhc2UsIHNlbGVjdCB0aGUgc3VibWl0dGVkIGRicGF0aCwKKwkvLyAobm90IHRoZSBvbmUgc3RvcmVkIGluIHRoZSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCWRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGRicGF0aDsKKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJJbmZvOiAlczogZGVyYnlEQlVSTD0nJXMnLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCisJLy8gb3BlbiByZWFkZXIgb24gR2xlbW0gTGVtbWF0YToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQlpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmbikpOworCQkKKwkJbkVycm9ycyA9IHdyaXRlREJMZW1tYXRhKGluKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgZnJvbSAnJXMnIVxuIiwgZnVuYywgZm4pOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gLTE7CisJCX0KKworCS8vIGNsb3NlIFJlYWRlcjoKKwl0cnkgeworCQlpbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCW5FcnJvcnMgPSAtMTsKKwkJfQorCQorIAlpZiggbkVycm9ycyA9PSAwICkKKyAJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0IGRvbmUgc3VjY2Vzc2Z1bGx5LlxuIiwgZnVuYyk7CisgCWVsc2UKKyAJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0OiAlZCBFcnJvcnMhXG4iLCBmdW5jLCBuRXJyb3JzKTsKKyAJCisJcmV0dXJuIG5FcnJvcnM7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGEKKwkKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogd3JpdGVEQkxlbW1hdGEoKQorCSAqIHN0b3JlcyBsaXN0IG9mIGxlbW1hdGEgKyBpbmZvcyBpbnRvIERlcmJ5IGRiLgorCSAqIEZpbGUgZm9ybWF0OiAiTGVtbWEgRGVjb21wb3NpdGlvbiBXZiIsCisJICogICAgICAgICAgICAgIGUuZy46ICJI77+9dXNlciArLSBIYXVzIi4KKwkgKiBSZXR1cm5zOiAwID0gT0sgb3IgLTE6IGdlbmVyYWwgZXJyb3Igb3IgPiAwOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIDA5LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWF0YShCdWZmZXJlZFJlYWRlciBpbikKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYXRhIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVByZXBhcmVkU3RhdGVtZW50CisJCXN0bXRQcmVwID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCAJID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsJCisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQluRXJyb3JzID0gMCwKKwkJcmV0ID0gMDsgLy8gT0suCisJYm9vbGVhbgorCQljb250YWluc1NwZWM7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCisJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJc3RtdFByZXAgPSBjb24ucHJlcGFyZVN0YXRlbWVudChpbnNlcnRQcmVwYXJlZFF1ZXJ5KTsKKwkJZWxzZQorCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKworCQl3aGlsZSggKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggIT0gMyApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogJyVzJyBoYXMgJWQgY29tcG9uZW50cyEgRXhwZWN0ZWQgPSAzISBDYW5ub3QgYmUgc3RvcmVkIVxuIiwgZnVuYywgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQkJbkVycm9ycysrOworCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQorCQkJLy8gR2V0IEluZm8sIGlmIHdvcmRmb3JtIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSAnLScsIGludGVycHVuY3Rpb24gZXRjLjoKKwkJCS8vIGxlbW1hSW5mb1syXSA9IHdvcmRmb3JtLgorCQkJY29udGFpbnNTcGVjID0gTGVtbWFJbmZvLmlzV2ZTcGVjaWFsQ2FzZShsZW1tYUluZm9bMl0pOworCQkJLy8gc3RvcmUgaW50byBEQjoKKwkJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKHN0bXRQcmVwLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJZWxzZQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zKHN0bXQsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQkKKwkJCWlmKCByZXQgIT0gMCApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHN0b3JlIGxlbW1hICclcycgaW50byBEQiFcbiIsIGZ1bmMsIGxpbmUpOworCQkJCW5FcnJvcnMrKzsgCisJCQkJfQorCQkJfSAvLyB3aGlsZQorCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBHbGVtbSBsZW1tYXRhK2luZm9zIGZyb20gZmlsZSEgRXhpdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gLTE7IAorCQl9CQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgCisJCQkJY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgCisJCQkJc3RtdC5jbG9zZSgpOworCQkJaWYoIHN0bXRQcmVwICE9IG51bGwgKSAKKwkJCQlzdG10UHJlcC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gbkVycm9yczsgLy8gMD1PSywgPjAgPSBuby4gb2YgZXJyb3JzLgorCX0gLy8gd3JpdGVEQkxlbW1hdGEKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQ6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gcnVsZXMgaW50byBEZXJieSBEQi4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgaXMgdGhlIHZlcnNpb24gd2l0aCBhIFByZXBhcmVkUXVlcnkuCisJICogUGFyYW1ldGVyczoKKwkgKiBzcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTcuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoCisJCQlQcmVwYXJlZFN0YXRlbWVudCBzdG10LCAKKwkJCVN0cmluZyBsZW1tYSwgCisJCQlTdHJpbmcgd2YsIAorCQkJU3RyaW5nIGRlY29tcG9zaXRpb24sIAorCQkJYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQiOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCWJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICAKKwkvLyBmb3IgbG9naW5nIG9ubHk6CisJc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorICAgIC8vIG5vdyBpbnNlcnQgbmV3IHZhbHVlcyBpbnRvIFByZXBhcmVkU3RhdGVtZW50OgorICAgIHRyeSB7CisgICAgCXN0bXQuc2V0U3RyaW5nKCAxLCBsZW1tYSk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKCAyLCB3Zik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbigzLCBwcm9wMSk7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig0LCBwcm9wMik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig1LCBzcGVjKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcmVwYXJlZCBzdG10ID0gJyVzJy5cbiIsICBmdW5jLCBzdG10LnRvU3RyaW5nKCkpOworICAgICAgICB9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlMSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKAkiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSclYicgcHJvcDI9JyViJyBzcGVjPSclYichXG4iLCAgCisJCQkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKyAgICAKKyAgICB0cnkgeworCQkvLyBleGVjdXRlIHRoZSBmaWxsZWQgcHJlcGFyZWQgc3RhdGVtZW50OgorCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9OworCQorICAgIAorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIGludG8gRGVyYnkgREIuCisJICogUGFyYW1ldGVyczoKKwkgKiBjb250YWluc1NwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxMC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvcyhTdGF0ZW1lbnQgc3RtdCwgU3RyaW5nIGxlbW1hLCBTdHJpbmcgd2YsIFN0cmluZyBkZWNvbXBvc2l0aW9uLCBib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvcyI7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJQm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIHNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAgICAKKyAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKwl0cnkgeworCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKHNxbEluc2VydCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWFEYXRhCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgZnJvbSB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dDogbGVtbWEgKyBHTEVNTV9PUFRTX3h4eCAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hRGF0YShMZW1tYUluZm8gbGVtbWFJbmZvLCBQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWFEYXRhIjsKKworCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWxlbW1hSW5mby5jb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCWxlbW1hSW5mby5zdG10ID0gbGVtbWFJbmZvLmNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJaW50IHIgPSByZWFkREJMZW1tYShsZW1tYUluZm8uc3RtdCwgbGVtbWFJbmZvKTsKKwkJCQorCQlpZiggciAhPSAwICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGdldCBkYXRhIGZvciBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyFcbiIsIAorCQkJCQlmdW5jLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGxlbW1hSW5mby5jb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYURhdGEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBieSBhY2Nlc3NpbmcgdGhlIEdsZW1tREIuCisJICogSW5wdXQgOiBsZW1tYSArIHByb3AxKzIgKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqIE91dHB1dDogCisJICogIC0gY29udGFpbnMgYSBSZXN1bHRTZXQgZm9yIGZldGNoaW5nIHRoZSB3b3JkZm9ybXMuCisJICogCSAgVGhpcyBSZXN1bHRTZXQgd2lsbCBoYXZlIGJlIGJlIGNsb3NlZCB3aXRoIExlbW1hSW5mby5jbG9zZSgpLgorCSAqIAkgIFRoZSBuby4gb2YgZm91bmQgd29yZGZvcm1zIGlzIG5vdCBrbm93biB0aWxsIHdlCisJICogCSAgZmV0Y2ggYWxsIG9mIHRoZW0gZnJvbSBSZXN1bHRTZXQhIAorCSAqIAktIGR1ZSB0byBTRUxFQ1QgRElTVElOQ1Qgb25seSB1bmlxIHdmIGFyZSByZXR1cm5lZC4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWEoU3RhdGVtZW50IHN0bXQsIExlbW1hSW5mbyBsZW1tYUluZm8pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYSI7CisJU3RyaW5nCisJCXNxbDsKKwkJCisJc3FsID0gU3RyaW5nLmZvcm1hdCgiU0VMRUNUIERJU1RJTkNUIHdmIGZyb20gJXMgV0hFUkUgbGVtbWE9JyVzJyAlcyAlcyAlcyIsIAorCQkJZGJUYWJsZSwKKwkJCWxlbW1hSW5mby5sZW1tYSwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIkFORCBwcm9wMT0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICJBTkQgcHJvcDE9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIkFORCBwcm9wMj0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICJBTkQgcHJvcDI9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAxID8gIkFORCBzcGVjPSd0cnVlJyIgICA6IAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiQU5EIHNwZWM9J2ZhbHNlJyIgIDogIiIpOworCQorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIGZ1bmMsIGxlbW1hSW5mby5wcm9wMSwgbGVtbWFJbmZvLnByb3AyLCBsZW1tYUluZm8uc3BlYyk7CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWwgPSAnJXMnLlxuIiwgZnVuYywgc3FsKTsKKworCXRyeSB7CisJCWxlbW1hSW5mby5yZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOwkKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGVuIGV4ZWN1dGluZyBzcWw9JyVzJyFcbiIsIGZ1bmMsIHNxbCk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisJZmluYWxseSB7CisJCS8vIGFsbCBzcWwgc3R1ZmYgYXJlIGNsb3NlZCBvdXRzaWRlIHRoaXMgZnVuY3Rpb24sIHNvIGRvbid0IGNsb3NlIHRoZW0gaGVyZSEKKwkJfQkKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zCisJICogUmV0dXJucyBHZW5lcmFsIEluZm9zIGFib3V0IHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiByZWFkIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiSW5mb3MoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWRiSW5mbyA9IHJlYWREYkxlbW1hdGFJbmZvcyhzdG10KTsKKwkJCQorCQlpZiggZGJJbmZvID09IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgcmVhZCBHZW5lcmFsIEluZm9zIGZyb20gR2xlbW0gRGF0YWJhc2UhXG4iLCBmdW5jKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIG51bGw7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgc3RtdC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBtYXkgYmUgbnVsbC4KKwkJCisJfSAvLyByZWFkRGJJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkxlbW1hdGFJbmZvczoKKwkgKiByZWFkcyBhbmQgcmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjb250ZW50IAorCSAqIG9mIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiBSZXR1cm5zIDA9T0sgb3IgZXJyb3IgY29kZSA+IDAuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJMZW1tYXRhSW5mb3MoU3RhdGVtZW50IHN0bXQpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInJlYWREYkxlbW1hSW5mb3MiOworCVN0cmluZ1tdCisJCXNxbCA9IHsJIlNFTEVDVCBDT1VOVChkaXN0aW5jdCBsZW1tYSkgZnJvbSAiICsgZGJUYWJsZSAsCS8vIGNvdW50cyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YS4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUsCQkJCQkvLyBjb3VudHMgdG90YWwgbm8uIG9mIHN0b3JlZCB3b3JkZm9ybXMuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj10cnVlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj10cnVlIn07CisJUmVzdWx0U2V0CisJCXJlcyA9IG51bGw7IAorCWludFtdCisJCW5Db3VudHMgPSBuZXcgaW50W3NxbC5sZW5ndGhdOworCWludAkJCisJCWkgPSAwLCAKKwkJbkRpc3RMZW1tYXRhID0gLTEsCS8vIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhIGluIERCLgorCQluV2ZzCQkgPSAtMTsJLy8gbm8uIG9mIHdvcmRmb3JtcyBpbiBEQi4KKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogZXh0cmFjdGluZyBhZ3JlZ2F0ZWQgaW5mb3MgYWJvdXQgRGF0YWJhc2UgY29udGVudHMuLi5cbiIsIGZ1bmMpOworCQorCWRiSW5mbyA9IG5ldyBHbGVtbURCSW5mbygpOworCisJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJdHJ5IHsKKwkJZm9yKGk9MDsgaTxzcWwubGVuZ3RoOyBpKyspCisJCQl7CisJCQlyZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWxbaV0pOworCQkJaWYoIHJlcy5uZXh0KCkgKQorCQkJCWRiSW5mby5jb3VudHNbaV0gPSByZXMuZ2V0SW50KDEpOyAvLyBjb3VudCBpcyBpbiBjb2x1bW4gMS4KKwkJCWVsc2UKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZXh0cmFjdCBjb3VudCBmcm9tICclcychXG4iLCBmdW5jLCBzcWxbaV0pOworCQkJCWRiSW5mby5jb3VudHNbaV0gPSAtMTsKKwkJCQl9CisJCQl9CisgICAgICAgCisgICAgICAgIH0KKyAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAJeworICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHNxbD0nJXMnIGZhaWxlZCFcbiIsIGZ1bmMsIHNxbFtpXSk7CisgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgCX0KKwlmaW5hbGx5IHsKKwkJdHJ5IHsKKwkJCXJlcy5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gT0sKKwl9IC8vIHJlYWREYkxlbW1hdGFJbmZvcworCQorCS8qKioqKioqKioqKioqKioqKioqKiBUZXN0IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQorCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvc190ZXN0CisJICogVGhpcyBpcyBkZWJ1ZyBjb2RlIHdyaXR0ZW4gdG8gdGVzdCBpZiB3ZSBjYW4gYWNjZXNzIHRoZSBEZXJieQorCSAqIERhdGFiYXNlIGZyb20gYW4gZXh0ZXJuYWwgSmF2YSBQcm9ncmFtbS4KKwkgKiAwOC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgcmVhZERiSW5mb3NfdGVzdCgpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJU3RyaW5nCisJCWluc2VydFN0bXQgPSAiIjsKKwkKKwkvLyBDb25uZWN0IHRvIERlcmJ5IGRhdGFiYXNlOgorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQkKKwkJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJCXRyeQorCQkJeworCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIFN0cmluZyAKKyAgICAgICAgICAgIAlzcWwgPSAiU0VMRUNUICogRlJPTSAiICsgZGJUYWJsZTsKKyAgICAgICAgICAgIFJlc3VsdFNldCAKKyAgICAgICAgICAgIAlyZXN1bHQgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOworIAorICAgICAgICAgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiB0YWJsZSAnJXMnOlxuIiwgIGZ1bmMsIGRiVGFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAocmVzdWx0Lm5leHQoKSkgeworICAgICAgICAgICAgCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIiclcycgOiAnJXMnIDogJyVzJyA6ICclcycgLlxuIiwgcmVzdWx0LmdldFN0cmluZygxKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMiksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDMpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZyg0KSk7CisgICAgICAgIAkJaW5zZXJ0U3RtdCA9IGluc2VydFN0bXQgKyAiPHA+IiArIHJlc3VsdC5nZXRTdHJpbmcoMSkgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoMikgKyAiIDogIiArCisgICAgICAgICAgICAgICAgCQkgICAgIHJlc3VsdC5nZXRTdHJpbmcoMykgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoNCkgKyAiPC9wPiI7CisgICAgICAgICAgICAJfQorCQkJfQorCSAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAgICAgCXsKKwkgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogaW5zZXJ0U3RtdD0nJXMnIGZhaWxlZCEuXG4iLCBmdW5jLCBzdG10KTsKKyAgICAgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIAl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGluZyAnJXMgZmFpbGVkIVxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCXJldHVybiAxOworCQl9CisJCisJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCXRyeSB7CisJCWNvbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCQorCX0gLy8gcmVhZERiSW5mb3NfdGVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIGltcG9ydEdsZW1tTGVtYXRhX3Rlc3QKKwkgKiBUZXN0IFZlcnNpb24uCisJICogMTIuMTIuMTkvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0KFN0cmluZyBmbikKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QiOworCUlucHV0U3RyZWFtIAorCQlpbjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbjIgPSBudWxsOworCVN0cmluZworCQlsaW5lOworCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJcjsKKwkKKwkvKgorCSAqIFJlYWQgTGVtbWF0YSArIEluZm8gZnJvbSBmaWxlOiAKKwkgKi8KKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQkKKwl0cnkgeworCQkvL2luID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oIG5ldyBGaWxlSW5wdXRTdHJlYW0oZm4pICk7CisJCWluMiA9IG5ldyBCdWZmZXJlZFJlYWRlciggbmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJd2hpbGUoIChsaW5lID0gaW4yLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCA9PSAzICkKKwkJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogSW1wb3J0OiBsZW09JyVzJyBEZWNvbXA9JyVzJyBXZj0nJXMnLlxuIiwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMV0sIGxlbW1hSW5mb1syXSk7CisJCQllbHNlCisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6IGltcG9ydEdsZW1tTGFtYXRhOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzIVxuIiwgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQl9CisJCX0gCisJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBvcGVuICclcychXG4iLCBmdW5jLCBmbik7CisJCXJldHVybiAxOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisKKwl0cnkgeworCQlpbjIuY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkKKwkvKiBDaGVjayBjb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCSAqLyAKKwlyID0gcmVhZERiSW5mb3NfdGVzdCgpOworCWlmKCByICE9IDAgKQorCQlyZXR1cm4gcjsKKwkJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdAorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS83NC81MDkwYzc3MDgwM2MwMDFjMTVlNGM3YTc3ODkxNzczZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNzQvNTA5MGM3NzA4MDNjMDAxYzE1ZTRjN2E3Nzg5MTc3M2YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM0ZTRhZAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNzQvNTA5MGM3NzA4MDNjMDAxYzE1ZTRjN2E3Nzg5MTc3M2YKQEAgLTAsMCArMSwyMiBAQAorIyBXb3JkZm9ybVNlcnZpY2VzIHByb3BlcnRpZXM6CisjIGV4cGVjdGVkIGluIC9XRUItSU5GLy4KKworIyMgR2VuZXJhbCBwcm9wZXJ0aWVzOgorR1NfV29ya2luZ1BhdGggPSAvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy93b3JrLWxpdmUKKworIyMgTG9naW5nOgorCisjIGZuYW1lT3V0ID0gR1NfV29ya2luZ1BhdGggKyAiL1dmb3JtbVNlcnZpY2VzLmxvZyI7CisjZm5hbWVPdXQgPSBXZm9ybVNlcnZpY2VzLXQubG9nCitmbmFtZU91dCA9IFdmb3JtU2VydmljZXMubG9nCisjIGZuYW1lRXJyID0gR1NfV29ya2luZ1BhdGggKyAiL1dmb3JtU2VydmljZXMuZXJyIjsKKyNmbmFtZUVyciA9IFdmb3JtU2VydmljZXMtdC5lcnIKK2ZuYW1lRXJyID0gV2Zvcm1TZXJ2aWNlcy5lcnIKKworIyMgQ29tbXVuaWNhdGluZyB3aXRoIHRoZSBHbGVtbVNlcnZpY2VzCitVUkxHbGVtbVNlcnZlcgkJPSBodHRwOi8vYzByNGZ0CitHbGVtbVBvcnQJCQk9IDQwOTEzCisjVVJMR2xlbW1TZXJ2aWNlcwk9IEdsZW1tU2VydmljZXMtMC4yLVRlc3QKK1VSTEdsZW1tU2VydmljZXMJPSBHbGVtbVNlcnZpY2VzLTAuMS1TTkFQU0hPVAorTGVtbWFSZXF1ZXN0UGF0aAk9IGluZGV4L2luZm8vbGVtbWEKKwkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5Lzc2LzgwOWI3MjNjOTMxYTAwMWExOWIyODc1ZGUwMjcyYzZjIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS83Ni84MDliNzIzYzkzMWEwMDFhMTliMjg3NWRlMDI3MmM2YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS83Ni84MDliNzIzYzkzMWEwMDFhMTliMjg3NWRlMDI3MmM2YwpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS83Ny9jMDQ2YzQyMjk2M2QwMDFjMTBiMWIxN2RkZDMwOWU2ZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNzcvYzA0NmM0MjI5NjNkMDAxYzEwYjFiMTdkZGQzMDllNmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc5NWEyNwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNzcvYzA0NmM0MjI5NjNkMDAxYzEwYjFiMTdkZGQzMDllNmYKQEAgLTAsMCArMSw3MzEgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5zcWwuQ29ubmVjdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5Ecml2ZXJNYW5hZ2VyOworaW1wb3J0IGphdmEuc3FsLlByZXBhcmVkU3RhdGVtZW50OworaW1wb3J0IGphdmEuc3FsLlJlc3VsdFNldDsKK2ltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CitpbXBvcnQgamF2YS5zcWwuU3RhdGVtZW50OworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworcHVibGljIGNsYXNzIEdsZW1tREIKKworeworCXN0YXRpYyBwdWJsaWMgU3RyaW5nIGRiVGFibGUgCT0gIkdsZW1tTGVtbWF0YSI7CisJc3RhdGljIFN0cmluZyBkYkxlbW1hIAkJIAk9ICJsZW1tYSI7CisJc3RhdGljIFN0cmluZyBkYldmCSAJCQk9ICJ3ZiI7CisJc3RhdGljIFN0cmluZyBkYlByb3AxIAkJCT0gInByb3AxIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDIgCQkJPSAicHJvcDIiOworCisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChvdmVyd3JpdHRlbiBieSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCXByaXZhdGUgc3RhdGljIFN0cmluZyBmbmFtZURCID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNlcnZlckhvc3QgPSAiLy9sb2NhbGhvc3Q6MTUyNy8iOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAoZmluYWwgYXNzaWdubWVudHMpOgorCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckVtYiA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuRW1iZWRkZWREcml2ZXIiOworCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckNsaWVudCA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50RHJpdmVyIjsKKworCWZpbmFsIHN0YXRpYyBib29sZWFuCisJCXVzZVByZXBhcmVkU3RtdCA9IHRydWU7IC8vIDE9dXNlIFByZXBhcmVkU3RhdGVtZW50IGFuZCBub3QgU3RhdGVtZW50LgorCQorCS8vIHZhbHVlcyB0byBiZSBpbnNlcnRlZDogbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMuCisJc3RhdGljIFN0cmluZyBpbnNlcnRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICgnJXMnLCAnJXMnLCAnJXMnLCAnJXMnLCAnJXMnKSI7CisJc3RhdGljIFN0cmluZyBpbnNlcnRQcmVwYXJlZFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKD8sID8sID8sID8sID8pIjsKKwkKKwkvKgorCSAqIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCSAqIAorCSAqIEFyZ3VtZW50czoKKwkgKiBwcm9wcwk6IFByb3BlcnRpZXMgbG9hZGVkIGJ5IHRoZSBHbGVtbVNlcnZpY2VzLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBmdW5jdGlvbiBsb2FkcyBvbmx5IHRob3NlIENvbnN0YW50cyBuZWVkZWQgaW4gdGhpcyBjbGFzcy4KKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMJcHJvcHMpCisJCisJeworCWZuYW1lREIJCSAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsIAkiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJc2VydmVySG9zdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAic2VydmVySG9zdCIsCSIvL2xvY2FsaG9zdDoxNTI3LyIpOworCWRlcmJ5REJVUkwgCQk9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkJCQorCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAkJCQkJaW1wb3J0R2xlbW1MZW1hdGEKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGZuCQkgOiBhYnNvbHV0ZSBmaWxlIG5hbWUgb2YgR0xFTU0gb3V0cHV0IFtJU084ODU5LTFdIGV4cGVjdGVkLCBub3QgVVRGLTghCisJICogcHJvcHMJIDogUHJvcGVydGllcyB2b20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIHRvIHNldCBjb25zdGFudHMgbmVlZGVkCisJICogCQkJICAgaW4gdGhpcyBjbGFzcy4KKwkgKiBkYnBhdGgJIDogbG9jYXRpb24gKyBuYW1lIG9mIGRhdGFiYXNlIHdoZXJlIHRvIHN0b3JlIGxlbW1hdGErd2ZzLgorCSAqIFJldHVybnMJIDogMD1PSywgLTE6IGdlbmVyYWwgZXJyb3I7ID4gMCA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiBkeW5hbWljYWxseSBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAwNC4xMS4yMS9GQiBkYnBhdGguCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGEoU3RyaW5nIGZuLCBQcm9wZXJ0aWVzIHByb3BzLCBmaW5hbCBTdHJpbmcgZGJwYXRoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGEiOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluID0gbnVsbDsKKwlpbnQKKwkJbkVycm9yczsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gd2hlbiBpbmRleGluZyBkYXRhIGludG8gdGhlIGRhdGFiYXNlLCBzZWxlY3QgdGhlIHN1Ym1pdHRlZCBkYnBhdGgsCisJLy8gKG5vdCB0aGUgb25lIHN0b3JlZCBpbiB0aGUgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBkYnBhdGg7CisJCisJLy8gb3BlbiByZWFkZXIgb24gR2xlbW0gTGVtbWF0YToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQlpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmbikpOworCQkKKwkJbkVycm9ycyA9IHdyaXRlREJMZW1tYXRhKGluKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgZnJvbSAnJXMnIVxuIiwgZnVuYywgZm4pOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gLTE7CisJCX0KKworCS8vIGNsb3NlIFJlYWRlcjoKKwl0cnkgeworCQlpbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCW5FcnJvcnMgPSAtMTsKKwkJfQorCQorIAlpZiggbkVycm9ycyA9PSAwICkKKyAJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0IGRvbmUgc3VjY2Vzc2Z1bGx5LlxuIiwgZnVuYyk7CisgCWVsc2UKKyAJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0OiAlZCBFcnJvcnMhXG4iLCBmdW5jLCBuRXJyb3JzKTsKKyAJCisJcmV0dXJuIG5FcnJvcnM7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGEKKwkKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCisJICogICAgICAgICAgICAgICAgICAgICAgIHdyaXRlREJMZW1tYXRhKCkKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgCisJICogc3RvcmVzIGxpc3Qgb2YgbGVtbWF0YSArIGluZm9zIGludG8gRGVyYnkgZGIuCisJICogRmlsZSBmb3JtYXQ6ICJMZW1tYSBEZWNvbXBvc2l0aW9uIFdmIiwKKwkgKiAgICAgICAgICAgICAgZS5nLjogIkjDpHVzZXIgKy0gSGF1cyIuCisJICogUmV0dXJuczogMCA9IE9LIG9yIC0xOiBnZW5lcmFsIGVycm9yIG9yID4gMDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAwOS4wMS4yMC9GQgorCSAqIDA0LjExLjIxL0ZCIHR1cm4gYXV0b2NvbW1pdCBvZmYgdG8gYWNjZWxlcmF0ZSBodWdlIGFtb3VudCBvZiBpbnNlcnRpb25zLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWF0YShCdWZmZXJlZFJlYWRlciBpbikKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYXRhIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVByZXBhcmVkU3RhdGVtZW50CisJCXN0bXRQcmVwID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCAJID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsJCisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQluRXJyb3JzID0gMCwKKwkJbkluc2VydGVkID0gMCwJLy8gbm8uIG9mIGxlbW1hL3dmIHBhaXJzIGltcG9ydGVkLgorCQlyZXQgPSAwOyAvLyBPSy4KKwlib29sZWFuCisJCWNvbnRhaW5zU3BlYzsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2UsCisJLy8gc2V0IEF1dG9jb21taXQgPSBmYWxzZSB0byBhY2NlbGVyYXRlIGluc2VydGlvbnM6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCWNvbi5zZXRBdXRvQ29tbWl0KGZhbHNlKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQgKGF1dG9Db21taXQ9b2ZmKS5cbiIsIGZ1bmMpOworCisJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJc3RtdFByZXAgPSBjb24ucHJlcGFyZVN0YXRlbWVudChpbnNlcnRQcmVwYXJlZFF1ZXJ5KTsKKwkJZWxzZQorCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKworCQl3aGlsZSggKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggIT0gMyApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogJyVzJyBoYXMgJWQgY29tcG9uZW50cyEgRXhwZWN0ZWQgPSAzISBDYW5ub3QgYmUgc3RvcmVkIVxuIiwgZnVuYywgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQkJbkVycm9ycysrOworCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQorCQkJLy8gR2V0IEluZm8sIGlmIHdvcmRmb3JtIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSAnLScsIGludGVycHVuY3Rpb24gZXRjLjoKKwkJCS8vIGxlbW1hSW5mb1syXSA9IHdvcmRmb3JtLgorCQkJY29udGFpbnNTcGVjID0gTGVtbWFJbmZvLmlzV2ZTcGVjaWFsQ2FzZShsZW1tYUluZm9bMl0pOworCQkJLy8gc3RvcmUgaW50byBEQjoKKwkJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKHN0bXRQcmVwLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJZWxzZQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zKHN0bXQsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQkKKwkJCWlmKCByZXQgIT0gMCApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHN0b3JlIGxlbW1hICclcycgaW50byBEQiFcbiIsIGZ1bmMsIGxpbmUpOworCQkJCW5FcnJvcnMrKzsgCisJCQkJfQorCQkJZWxzZQorCQkJCW5JbnNlcnRlZCsrOworCQkJfSAvLyB3aGlsZQorCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBHbGVtbSBsZW1tYXRhK2luZm9zIGZyb20gZmlsZSEgRXhpdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gLTE7IAorCQl9CQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgCisJCQkJY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgCisJCQkJc3RtdC5jbG9zZSgpOworCQkJaWYoIHN0bXRQcmVwICE9IG51bGwgKSAKKwkJCQlzdG10UHJlcC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQkJCisJCX0KKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJJbmZvIDogJXM6IG5vLiBvZiBsZW1tYXRhL3dmIHBhaXJzIGluc2VydGVkID0gJWQuXG4iLCBmdW5jLCBuSW5zZXJ0ZWQpOworCQorCXJldHVybiBuRXJyb3JzOyAvLyAwPU9LLCA+MCA9IG5vLiBvZiBlcnJvcnMuCisJfSAvLyB3cml0ZURCTGVtbWF0YQorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZDoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBydWxlcyBpbnRvIERlcmJ5IERCLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBpcyB0aGUgdmVyc2lvbiB3aXRoIGEgUHJlcGFyZWRRdWVyeS4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIHNwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxNy4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCgKKwkJCVByZXBhcmVkU3RhdGVtZW50IHN0bXQsIAorCQkJU3RyaW5nIGxlbW1hLCAKKwkJCVN0cmluZyB3ZiwgCisJCQlTdHJpbmcgZGVjb21wb3NpdGlvbiwgCisJCQlib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCI7CisJZmluYWwgYm9vbGVhbgorCQliTG9nID0gZmFsc2U7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJYm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIAorCS8vIGZvciBsb2dpbmcgb25seToKKwlzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJaWYoIGJMb2cgKQorCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKyAgICAvLyBub3cgaW5zZXJ0IG5ldyB2YWx1ZXMgaW50byBQcmVwYXJlZFN0YXRlbWVudDoKKyAgICB0cnkgeworICAgIAlzdG10LnNldFN0cmluZyggMSwgbGVtbWEpOworICAgICAgICBzdG10LnNldFN0cmluZyggMiwgd2YpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oMywgcHJvcDEpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNCwgcHJvcDIpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNSwgc3BlYyk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJlcGFyZWQgc3RtdCA9ICclcycuXG4iLCAgZnVuYywgc3RtdC50b1N0cmluZygpKTsKKyAgICAgICAgfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZTEpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigJIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0nJWInIHByb3AyPSclYicgc3BlYz0nJWInIVxuIiwgIAorCQkJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisgICAgCisgICAgdHJ5IHsKKwkJLy8gZXhlY3V0ZSB0aGUgZmlsbGVkIHByZXBhcmVkIHN0YXRlbWVudDoKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZSgpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDE7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfTsKKwkKKyAgICAKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvczoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBpbnRvIERlcmJ5IERCLgorCSAqIFBhcmFtZXRlcnM6CisJICogY29udGFpbnNTcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTAuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3MoU3RhdGVtZW50IHN0bXQsIFN0cmluZyBsZW1tYSwgU3RyaW5nIHdmLCBTdHJpbmcgZGVjb21wb3NpdGlvbiwgYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3MiOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCUJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICBzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgICAgCisgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisJdHJ5IHsKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZShzcWxJbnNlcnQpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDE7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hRGF0YQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGZyb20gdGhlIEdsZW1tREIuCisJICogSW5wdXQ6IGxlbW1hICsgR0xFTU1fT1BUU194eHggKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYURhdGEoTGVtbWFJbmZvIGxlbW1hSW5mbywgUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hRGF0YSI7CisKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlsZW1tYUluZm8uY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlsZW1tYUluZm8uc3RtdCA9IGxlbW1hSW5mby5jb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWludCByID0gcmVhZERCTGVtbWEobGVtbWFJbmZvLnN0bXQsIGxlbW1hSW5mbyk7CisJCQkKKwkJaWYoIHIgIT0gMCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBnZXQgZGF0YSBmb3IgbGVtbWE9JyVzJyBvcHRpb25zPSclcychXG4iLCAKKwkJCQkJZnVuYywgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCQkJcmV0dXJuIDE7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBsZW1tYUluZm8uY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWFEYXRhCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgYnkgYWNjZXNzaW5nIHRoZSBHbGVtbURCLgorCSAqIElucHV0IDogbGVtbWEgKyBwcm9wMSsyIChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiBPdXRwdXQ6IAorCSAqICAtIGNvbnRhaW5zIGEgUmVzdWx0U2V0IGZvciBmZXRjaGluZyB0aGUgd29yZGZvcm1zLgorCSAqIAkgIFRoaXMgUmVzdWx0U2V0IHdpbGwgaGF2ZSBiZSBiZSBjbG9zZWQgd2l0aCBMZW1tYUluZm8uY2xvc2UoKS4KKwkgKiAJICBUaGUgbm8uIG9mIGZvdW5kIHdvcmRmb3JtcyBpcyBub3Qga25vd24gdGlsbCB3ZQorCSAqIAkgIGZldGNoIGFsbCBvZiB0aGVtIGZyb20gUmVzdWx0U2V0ISAKKwkgKiAJLSBkdWUgdG8gU0VMRUNUIERJU1RJTkNUIG9ubHkgdW5pcSB3ZiBhcmUgcmV0dXJuZWQuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hKFN0YXRlbWVudCBzdG10LCBMZW1tYUluZm8gbGVtbWFJbmZvKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWEiOworCVN0cmluZworCQlzcWw7CisJCQorCXNxbCA9IFN0cmluZy5mb3JtYXQoIlNFTEVDVCBESVNUSU5DVCB3ZiBmcm9tICVzIFdIRVJFIGxlbW1hPSclcycgJXMgJXMgJXMiLCAKKwkJCWRiVGFibGUsCisJCQlsZW1tYUluZm8ubGVtbWEsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICJBTkQgcHJvcDE9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AxID09IDEgPyAiQU5EIHByb3AxPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICJBTkQgcHJvcDI9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AyID09IDEgPyAiQU5EIHByb3AyPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICJBTkQgc3BlYz0ndHJ1ZSciICAgOiAKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIkFORCBzcGVjPSdmYWxzZSciICA6ICIiKTsKKwkKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCBmdW5jLCBsZW1tYUluZm8ucHJvcDEsIGxlbW1hSW5mby5wcm9wMiwgbGVtbWFJbmZvLnNwZWMpOworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsID0gJyVzJy5cbiIsIGZ1bmMsIHNxbCk7CisKKwl0cnkgeworCQlsZW1tYUluZm8ucmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsJCisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hlbiBleGVjdXRpbmcgc3FsPSclcychXG4iLCBmdW5jLCBzcWwpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBhbGwgc3FsIHN0dWZmIGFyZSBjbG9zZWQgb3V0c2lkZSB0aGlzIGZ1bmN0aW9uLCBzbyBkb24ndCBjbG9zZSB0aGVtIGhlcmUhCisJCX0JCisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvcworCSAqIFJldHVybnMgR2VuZXJhbCBJbmZvcyBhYm91dCB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgcmVhZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkluZm9zKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlkYkluZm8gPSByZWFkRGJMZW1tYXRhSW5mb3Moc3RtdCk7CisJCQkKKwkJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHJlYWQgR2VuZXJhbCBJbmZvcyBmcm9tIEdsZW1tIERhdGFiYXNlIVxuIiwgZnVuYyk7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiBudWxsOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIGNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIHN0bXQuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gbWF5IGJlIG51bGwuCisJCQorCX0gLy8gcmVhZERiSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJMZW1tYXRhSW5mb3M6CisJICogcmVhZHMgYW5kIHJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY29udGVudCAKKwkgKiBvZiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogUmV0dXJucyAwPU9LIG9yIGVycm9yIGNvZGUgPiAwLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiTGVtbWF0YUluZm9zKFN0YXRlbWVudCBzdG10KQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJyZWFkRGJMZW1tYUluZm9zIjsKKwlTdHJpbmdbXQorCQlzcWwgPSB7CSJTRUxFQ1QgQ09VTlQoZGlzdGluY3QgbGVtbWEpIGZyb20gIiArIGRiVGFibGUgLAkvLyBjb3VudHMgbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlLAkJCQkJLy8gY291bnRzIHRvdGFsIG5vLiBvZiBzdG9yZWQgd29yZGZvcm1zLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9dHJ1ZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9dHJ1ZSJ9OworCVJlc3VsdFNldAorCQlyZXMgPSBudWxsOyAKKwlpbnRbXQorCQluQ291bnRzID0gbmV3IGludFtzcWwubGVuZ3RoXTsKKwlpbnQJCQorCQlpID0gMCwgCisJCW5EaXN0TGVtbWF0YSA9IC0xLAkvLyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YSBpbiBEQi4KKwkJbldmcwkJID0gLTE7CS8vIG5vLiBvZiB3b3JkZm9ybXMgaW4gREIuCisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGV4dHJhY3RpbmcgYWdyZWdhdGVkIGluZm9zIGFib3V0IERhdGFiYXNlIGNvbnRlbnRzLi4uXG4iLCBmdW5jKTsKKwkKKwlkYkluZm8gPSBuZXcgR2xlbW1EQkluZm8oKTsKKworCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCXRyeSB7CisJCWZvcihpPTA7IGk8c3FsLmxlbmd0aDsgaSsrKQorCQkJeworCQkJcmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsW2ldKTsKKwkJCWlmKCByZXMubmV4dCgpICkKKwkJCQlkYkluZm8uY291bnRzW2ldID0gcmVzLmdldEludCgxKTsgLy8gY291bnQgaXMgaW4gY29sdW1uIDEuCisJCQllbHNlCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGV4dHJhY3QgY291bnQgZnJvbSAnJXMnIVxuIiwgZnVuYywgc3FsW2ldKTsKKwkJCQlkYkluZm8uY291bnRzW2ldID0gLTE7CisJCQkJfQorCQkJfQorICAgICAgIAorICAgICAgICB9CisgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgCXsKKyAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBzcWw9JyVzJyBmYWlsZWQhXG4iLCBmdW5jLCBzcWxbaV0pOworICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBudWxsOworICAgIAl9CisJZmluYWxseSB7CisJCXRyeSB7CisJCQlyZXMuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIE9LCisJfSAvLyByZWFkRGJMZW1tYXRhSW5mb3MKKwkKKwkvKioqKioqKioqKioqKioqKioqKiogVGVzdCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3NfdGVzdAorCSAqIFRoaXMgaXMgZGVidWcgY29kZSB3cml0dGVuIHRvIHRlc3QgaWYgd2UgY2FuIGFjY2VzcyB0aGUgRGVyYnkKKwkgKiBEYXRhYmFzZSBmcm9tIGFuIGV4dGVybmFsIEphdmEgUHJvZ3JhbW0uCisJICogMDguMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IHJlYWREYkluZm9zX3Rlc3QoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCVN0cmluZworCQlpbnNlcnRTdG10ID0gIiI7CisJCisJLy8gQ29ubmVjdCB0byBEZXJieSBkYXRhYmFzZToKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkJCisJCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCQl0cnkKKwkJCXsKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBTdHJpbmcgCisgICAgICAgICAgICAJc3FsID0gIlNFTEVDVCAqIEZST00gIiArIGRiVGFibGU7CisgICAgICAgICAgICBSZXN1bHRTZXQgCisgICAgICAgICAgICAJcmVzdWx0ID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsKKyAKKyAgICAgICAgICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogdGFibGUgJyVzJzpcbiIsICBmdW5jLCBkYlRhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKHJlc3VsdC5uZXh0KCkpIHsKKyAgICAgICAgICAgIAlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCInJXMnIDogJyVzJyA6ICclcycgOiAnJXMnIC5cbiIsIHJlc3VsdC5nZXRTdHJpbmcoMSksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDIpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygzKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoNCkpOworICAgICAgICAJCWluc2VydFN0bXQgPSBpbnNlcnRTdG10ICsgIjxwPiIgKyByZXN1bHQuZ2V0U3RyaW5nKDEpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDIpICsgIiA6ICIgKworICAgICAgICAgICAgICAgIAkJICAgICByZXN1bHQuZ2V0U3RyaW5nKDMpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDQpICsgIjwvcD4iOworICAgICAgICAgICAgCX0KKwkJCX0KKwkgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgICAgIAl7CisJICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGluc2VydFN0bXQ9JyVzJyBmYWlsZWQhLlxuIiwgZnVuYywgc3RtdCk7CisgICAgICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICBjb24uY2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3RpbmcgJyVzIGZhaWxlZCFcbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwl0cnkgeworCQljb24uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQkKKwl9IC8vIHJlYWREYkluZm9zX3Rlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiBpbXBvcnRHbGVtbUxlbWF0YV90ZXN0CisJICogVGVzdCBWZXJzaW9uLgorCSAqIDEyLjEyLjE5L0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdChTdHJpbmcgZm4pCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YV90ZXN0IjsKKwlJbnB1dFN0cmVhbSAKKwkJaW47CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4yID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCXI7CisJCisJLyoKKwkgKiBSZWFkIExlbW1hdGEgKyBJbmZvIGZyb20gZmlsZTogCisJICovCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJCisJdHJ5IHsKKwkJLy9pbiA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKCBuZXcgRmlsZUlucHV0U3RyZWFtKGZuKSApOworCQlpbjIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCXdoaWxlKCAobGluZSA9IGluMi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggPT0gMyApCisJCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IEltcG9ydDogbGVtPSclcycgRGVjb21wPSclcycgV2Y9JyVzJy5cbiIsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzFdLCBsZW1tYUluZm9bMl0pOworCQkJZWxzZQorCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiBpbXBvcnRHbGVtbUxhbWF0YTogJyVzJyBoYXMgJWQgY29tcG9uZW50cyFcbiIsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJfQorCQl9IAorCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgb3BlbiAnJXMnIVxuIiwgZnVuYywgZm4pOworCQlyZXR1cm4gMTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfQorCisJdHJ5IHsKKwkJaW4yLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCisJLyogQ2hlY2sgY29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwkgKi8gCisJciA9IHJlYWREYkluZm9zX3Rlc3QoKTsKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIHI7CisJCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvN2EvODA1ZmU0NWYwYTNlMDAxYzEzNjNiZWI5MzJhZTYzYTEgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzdhLzgwNWZlNDVmMGEzZTAwMWMxMzYzYmViOTMyYWU2M2ExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZDU3NTcKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzdhLzgwNWZlNDVmMGEzZTAwMWMxMzYzYmViOTMyYWU2M2ExCkBAIC0wLDAgKzEsOTg0IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKKy8qIDAuMSA6IDE3LjA2LjIwL0ZCIAorICogMC4yIDogMjUuMTAuMjEvRkIKKyAqICAgICAgIGxvZ2luZyBvZiB0aGUgQVBJIFJlcXVlc3RzLgorICogICAgICAgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisgKiAgICAgICBjb3JyZWN0aW5nIGNhbGxpbmcgb2YgbGVtbWEgKyBwcm9wMS9wcm9wMi9zcGVjLgorICogICAgICAgaGFuZGxpbmcgb2YgbGVtbWF0YSB3aXRoICfDnycuCisgKiAKKyAqIEdlbmVyYWwgY29tbWVudHMgdG8gdGhlIGVuY29kaW5nIG9mIGRlcml2YXRpb25zIGZyb20gbGVtbWEgdG8gd2ZzIGFuZCBob3cgdGhleSBhcmUgZW5jb2RlZAorICogaW4gdGhlIERlcmJ5IGRhdGFiYXNlOgorICogCisgKiBHTEVNTSBlbmNvZGluZzogIAorICogICBfIF8gOiArRmxleCAgICAgICDDlmxlIC0+IMOWbCAgICAgIAorICogICArIF8gOiArQ29tcCAgICAgICDDlmxsYW1wZSAtPiDDlmwgb3IgTGFtcGUgKGNvbXBvdW5kKS4KKyAqICAgXyArIDogK290aGVyICAgICAgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm5zY2h1aCAobm8gY29tcG91bmQgZm9yICdUdXJuc2NodWgnLCBvbmx5IHByZWZpeCkuCisgKiAgICsgKyA6ICtDb21wK290aGVyIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuICsgU2NodWggKGNvbXBvdW5kIGZvciAnU2NodWgnICsgUHJlZml4KS4KKyAqIEMyIGxlbW1hdGl6YXRpb24gb3B0aW9uczoKKyAqICAgRmxleCAgKGlkZW50aWNhbCB0byBHbGVtbSkKKyAqICAgQ29tcCAgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKQorICogICBPdGhlciAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpLgorICogICBTcGVjICAob25seSBDMjogaW5jbHVkZXMgYWxsIHdmcyB3aXRoIGhpcGhlbiBhbmQvb3Igc29tZSBub24tYWxwaGFiZXRpYyBJU084ODU5LTEgY2hhcnMpCisgKiAgICAgICAgIEUuZy4gw5ZsLUV4cG9ydGUsICJNYXJrZW4iLcOWbGUuCisgKiBEZXJieSBFbmNvZGluZzoKKyAqICBwcm9wMSAJcHJvcDIJc3BlYyAgIAltZWFuaW5nIGluIEMyOgorICogIDAJCTAJCS0JCUZsZXgKKyAqICAxCQkwCQktCQlDb21wCisgKiAgMAkJMQkJLQkJT3RoZXIgKHByZWZpeCkKKyAqICAxCQkxCQktCQlDb21wICsgT3RoZXIKKyAqICAtCQktCQkwCQktU3BlYworICogIC0JCS0JCTEJCStTcGVjCisgKiAKKyAqIEV4YW1wbGVzOgorICogJlNjaHVoCQkJOiBTY2h1aCwgU2NodWhlLCAuLi4gb25seSBmbGV4aW9ucworICogJlNjaHVoK2NvbXAJCTogU2NodWhlLCBUdXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMuCisgKiAmU2NodWgrb3RoZXIJCTogU2NodWhlLCBBbnRpc2NodWhlLi4uIGZsZXhpb25zIGFuZCBwcmVmaXhlZCB3ZnMgKG5vIGNvbXBvdW5kcykuCisgKiAmU2NodWgrY29tcCtvdGhlcjogU2NodWhlLCBBbnRpc2NodWhlLCBUdXJuc2NodWhlLCBBbnRpdHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzIGFuZCAKKyAqIAkJCQkJICBwcmVmaXhlZCBzaW5nbGUgd2ZzIChBbnRpc2NodWhlKSBhbmQgcHJlZml4ZWQgY29tcG91bmRzLgorICogJlNjaHVoK3NwZWMJCTogIkFudGkiLVNjaHVoZSwgNjhnZXItU2NodWhlLi4uIG1heSBiZSBjb21iaW5lZCB3aXRoIGV2ZXJ5IG9wdGlvbnM6IGFkZHMKKyAqICAgICAgICAgICAgICAgICAgICB3ZnMgd2l0aCBoeXBoZW4gYW5kL29yIG5vbi1hbHBoYWJldGljIGNoYXJzLgorICogCisgKiBDb252ZXJzaW9uIHJ1bGVzOgorICogCisgKiAgJnNjaGxpZcOfZW4gLT4gaW50ZXJuYWwgc2VhcmNoIGZvciAnc2NobGllc3NlbicsCisgKiAgYmVjYXVzZSBHbGVtbSBvdXRwdXRzICdzcycgZm9yICfDnycuCisgKiAgCisgKiBDaGFyYWN0ZXIgRW5jb2Rpbmc6CisgKiAKKyAqIC0gV2hlbiBpbXBvcnRpbmcgd2ZzIHRvIHRoZSBEZXJieSBEYXRhYmFzZSB3aXRoIGRvQ3VybEdsZW1tU2VydmljZXMvaW5kZXhMZW1tYXRhOgorICogCisgKiAgIElOUFVUOiB3b3JkZm9ybSBsaXN0IGluIFtVVEYtOF0gOiBVVEYtOCBpcyB0aGVuIGNvbnZlcnRlZCB0byBMYXQxIGZvciBHbGVtbSwKKyAqICAgICAgICAgIHRoZSBvdXRwdXQgb2YgR2xlbW0gW0xhdDFdIGlzIHJldHVybmVkIHRvIHRoZSBHbGVtbVNlcnZpY2VzIHdpdGhvdXQgcmVjb252ZXJzaW9uCisgKiAgICAgICAgICB0byBVVEY4IGFuZCBpbXBvcnRlZCBpbnRvIERlcmJ5IERhdGFiYXNlIHVuY2hhbmdlZC4KKyAqCQkKKyAqLworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA0LjExLjIxIjsgCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4yIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVByb3BzCQk9ICIvV0VCLUlORi9HbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiOworCQorCS8vIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSByZWFkIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzICh0aGVzZSBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzKToKKwlwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCAJCT0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCXByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCQkJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwlAQ29udGV4dAorCXByaXZhdGUgU2VydmxldENvbnRleHQgc2VydmxldENvbnRleHQ7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmb3V0CT0gbnVsbDsKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZlcnIJPSBudWxsOwkJCisJCQorCS8qIAorIAkgKiAKKwkgKiAtIGFmdGVyIGxvYWRQcm9wZXJ0aWVzLCBzZXRzIHRoZSBjbGFzcyB2YXJpYWJsZSB3aXRoIGxvYWRlZCBwcm9wZXJ0eSB2YWx1ZXMuCisJICogCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCUdTX1dvcmtpbmdQYXRoIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJHU19Xb3JraW5nUGF0aCIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyIpOworCWZuYW1lV2ZzCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVdmcyIsIAkgICAiZ2xfd2ZzX2luLnR4dCIpOworCWZuYW1lV2ZzCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVXZnM7CisJZm5hbWVPdXQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lT3V0IiwgCSAgICJHbGVtbVNlcnZpY2VzLmxvZyIpOworCWZuYW1lT3V0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVPdXQ7CisJZm5hbWVFcnIJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lRXJyIiwgCSAgICJHbGVtbVNlcnZpY2VzLmVyciIpOworCWZuYW1lRXJyCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVFcnI7CisJZm5hbWVTY3JpcHQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lU2NyaXB0IiwJICAgImRvR2xlbW0iKTsKKwlmbmFtZVNjcmlwdAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lU2NyaXB0OworCWZuYW1lTGVtYXRhCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUxlbWF0YSIsICAgICJ0bXAvbGVtMyIpOworCWZuYW1lTGVtYXRhCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVMZW1hdGE7CisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKgorCSAqICBsb2dfUmVxdWVzdDoKKwkgKiAgCisJICogIC0gd3JpdGUgaW5mbyBhYm91dCBBUEkgUmVxdWVzdC4KKwkgKiAgUGFyYW1ldGVyczoKKwkgKiAgcmVxdWVzdFBhdGgJOiBwYXRoIG9mIHdlYmFwcCBhZGRyZXNzZWQgYnkgdGhlIHJlcXVlc3QuCisJICogIGZ1bmMJCTogbmFtZSBvZiB0aGUgZnVuY3Rpb24gd2hpY2ggaW1wbGVtZW50cyB0aGUgcmVxdWVzdC4KKwkgKiAgCisJICogIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGxvZ19SZXF1ZXN0KFN0cmluZyByZXF1ZXN0UGF0aCwgU3RyaW5nIGZ1bmMpCisJCisJeworCS8vIHRyYW5zZm9ybSAiZGF0ZVR0aW1lIiAtPiAiZGF0ZSB0aW1lIjoKKwkKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwlmb3V0LnByaW50ZigiIyMjICVzOiAlcyA6IHZlcnM9JyVzJywgdmRhdGU9JyVzJyByZXF1ZXN0PSclcycuXG4iLCBmdW5jLCByZXF1ZXN0UGF0aCwgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIAorCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisJZm91dC5wcmludGYoIiMjI1xuIik7CisJfSAvLyBsb2dfUmVxdWVzdAorCQkKKwkvKiBmb3JtYXREYk5hbWUKKwkgKiAKKwkgKiAtIGdldHMgbmFtZSBvZiBEYXRhYmFzZSB1c2VkIGJ5IERlcmJ5IGZyb20gcHJvcHMgCisJICogICBhbmQgZm9ybWF0IGl0IHRvIEhUTUwuCisJICogIAorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBTdHJpbmcgZm9ybWF0RGJOYW1lKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCVN0cmluZworCQlkYk5hbWU7CisJU3RyaW5nCisJCWRiUGF0aCA9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCWludAorCQlqID0gZGJQYXRoLmxhc3RJbmRleE9mKCcvJyk7CisJCisJaWYoIGogPiAwICkKKwkJZGJOYW1lID0gZGJQYXRoLnN1YnN0cmluZyhqKzEpOworCWVsc2UKKwkJZGJOYW1lID0gZGJQYXRoOworCQorCXJldHVybiBkYk5hbWU7IC8vICI8cD48Yj5EYXRhYmFzZTogIiArIGRiTmFtZSArICI8L2I+PC9wPlxuIjsKKwl9IC8vIGZvcm1hdERiTmFtZQorCisJLyoKKwkgKiBjbG9zZUxvZ1N0cmVhbXM6CisJICogCisJICogLSBjbG9zZSB0aGUgZm91dC9mZXJyIGxvZyBzdHJlYW1zLgorCSAqIAorCSAqIDI2LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGNsb3NlTG9nU3RyZWFtcygpCisJCisJeworCWlmKCBmb3V0ICE9IG51bGwpCisJCWZvdXQuY2xvc2UoKTsKKwlmb3V0ID0gbnVsbDsKKwkKKwlpZiggZmVyciAhPSBudWxsICkKKwkJZmVyci5jbG9zZSgpOworCWZlcnIgPSBudWxsOworCX0gLy8gY2xvc2VMb2dTdHJlYW1zCisJCisJLyogaW5pdF9hbmRfbG9nX1JlcXVlc3QKKwkgKiAKKwkgKiAtIGxvYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLCBzZXRzIEdsZW1tU2VydmljZXMgY29uc3RhbnRzCisJICogICBhbmQgbG9ncyB0aGUgcmVxdWVzdC4KKwkgKiAtIGxvYWQgcHJvcGVydGllcyBhbmQgc2V0IGNvbnN0YW50cyBiZWZvcmUgbG9nZ2luZyBhbnl0aGluZywgYmVjYXVzZQorCSAqICAgbG9nZ2luZyB3aWxsIGJlIGRvbmUgaW50byB0aGUgbGFzdCBzdGRvdXQvc3RkZXJyIG9wZW5lZCBpbiBnbGFzc2Zpc2gncyBKVk0sCisJICogICBlLmcuIGluIHRoZSBsb2cgb2YgYW5vdGhlciBTZXJ2aWNlLgorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBQcm9wZXJ0aWVzIGluaXRfYW5kX2xvZ19SZXF1ZXN0KFN0cmluZyBmdW5jLCBTdHJpbmcgcmVxdWVzdFBhdGgpCisJCisJeworCVN0cmluZworCQlyZWFsUGF0aCA9IHNlcnZsZXRDb250ZXh0LmdldFJlYWxQYXRoKGZuYW1lUHJvcHMpOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAoaWYgbGFzdCBwYXJhbSA9IHRydWUpOgorCVByb3BlcnRpZXMKKwkJcHJvcHMgPSBVdGlscy5sb2FkUHJvcGVydGllcyhzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpLCBmbmFtZVByb3BzLCByZWFsUGF0aCwgZmFsc2UpOworCQorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBmb3V0IGFuZCBmZXJyIGFzIHJlcGxhY2VtZW50IGZvciBzdGRvdXQvc3RkZXJyIGZvciB1c2UgaW4gR2xlbW1TZXJ2aWNlcy4KKwkvLyBkbyBub3QgdXNlIG9yIHJlZGlyZWN0IFN5c3RlbS5vdXQgYW5kIFN5c3RlbS5lcnIsIGFzIHRoZXkgd2lsbCBiZSByZWRpcmVjdGVkCisJLy8gYnkgb3RoZXIgU2VydmljZXMgaW4gdGhlIHNhbWUgZ2xhc3NmaXNoIEpWTSwgZS5nLiBieSB0aGUgV2Zvcm1TZXJ2aWNlcy4KKwlmb3V0ID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lT3V0KTsKKwlmZXJyID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lRXJyKTsKKwkKKwkvL1V0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCisJbG9nX1JlcXVlc3QocmVxdWVzdFBhdGgsIGZ1bmMpOworCQorCXJldHVybiBwcm9wczsKKwl9IC8vIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJU3RyaW5nCisJCXN0YXR1czsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9zdGF0dXMvIik7CisJCisJLy8gaHR0cFNlcnZsZXRSZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKGVudik7CisJCisJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnByb3BlcnRpZXM8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5kYXRhYmFzZTwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpLAorCQkJCQkJCXNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcykgPT0gbnVsbCA/ICJub3QgZm91bmQiIDoKKwkJCQkJCQkJcHJvcHMuaXNFbXB0eSgpID8gImVtcHR5IiA6ICJsb2FkZWQiLAorCQkJCQkJCWZvcm1hdERiTmFtZShwcm9wcykKKwkJCQkJCQkpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCWNsb3NlTG9nU3RyZWFtcygpOworCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogCisJICogZG9QT1NUX2ltcG9ydExlbW1hRGF0YToKKwkgKiAKKwkgKiBQT1NUOiAvaW5kZXgvYWRkL3tkYXRhYmFzZW5hbWV9OiB0ZXh0L3BsYWluCisJICogCisJICogUGFyYW1ldGVyczoKKwkgKiBsaXN0CQkgCTogdGhlIGxpc3Qgb2Ygd2ZzIHNlbnQgaW4gdGhlIGJvZHkgb2YgdGhlIFBPU1QgcmVxdWVzdC4KKwkgKiBkYnBhdGhFbmNvZGVkOiB0aGUgbG9jYXRpb24gb2YgdGhlIGRhdGFiYXNlIHdoZXJlIHRoZSBsZW1tYSt3ZnMgYXJlIHRvIGJlIHN0b3JlZC4KKwkgKiAgICAgICAgICAgICAJICBlbmNvZGVkIGFzICIuaG9tZS51c2VyLktvckFQLi4uLiIsIG11c3QgYmUgY29udmVydGVkIHRvCisJICogICAgICAgICAgICAJICAiL2hvbWUvdXNlci9Lb3JBUC8uLi4iCisJICogICAgICAgICAJCSAgSU1QT1JUQU5UOiBkbyBub3QgdXNlIGEgJy4nIGZvciBlbmNvZGluZyBhbnl0aGluZyBlbHNlIHRoYW4gYSAnLycuCisJICogTm90ZXMgICAgIDoKKwkgKiAtIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlIGxvY2F0ZWQgYXQgJ2RhdGFiYXNlbmFtZScuCisJICogLSBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZCBpbnRvIGEgRGVyYnkgZGF0YWJhc2UuCisJICogSW5wdXQJIDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICogMDQuMTEuMjEvRkIKKwkgKiAtIHN1Ym1pdHRlZCBkYXRhYmFzZSBwYXRoLgorCSAqLworCQorCUBQYXRoKCJhZGQve2RhdGFiYXNlcGF0aH0iKSAKKwlAUE9TVCAKKwlAQ29uc3VtZXMoInRleHQvcGxhaW4iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCQkJCQkJCSgKKwkJCQkJCQlTdHJpbmcgCQkJCQkJCQkJCSAgbGlzdCwKKwkJCQkJCQlAUGF0aFBhcmFtKHZhbHVlPSJkYXRhYmFzZXBhdGgiKSBmaW5hbCBTdHJpbmcgZGJwYXRoRW5jb2RlZAorCQkJCQkJCSkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb1BPU1RfaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSAKKwkJYXJMaXN0ID0gbGlzdC5zcGxpdCgiXG4iKTsKKwlTdHJpbmcKKwkJZGJwYXRoOworCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gbnVsbDsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2FkZC97ZGJwYXRofSIpOworCQorCWRicGF0aCA9IGRicGF0aEVuY29kZWQucmVwbGFjZSgnLicsICcvJyk7CisJCisJZm91dC5wcmludGYoIkluZm8gOiAlczogc2VsZWN0ZWQgZGF0YWJhc2UgcGF0aCA9ICclcycuXG4iLCBmdW5jLCBkYnBhdGgpOworCWZvdXQucHJpbnRmKCJJbmZvIDogJXM6IHdvcmtpbmcgZGlyZWN0b3J5ID0gJyVzJy5cbiIsIGZ1bmMsIEdTX1dvcmtpbmdQYXRoKTsKKwkKKwkvLyBzZXQgZmlsZSBhbmQgcGF0aHMgYWZ0ZXIgR1NfV29ya2luZ1BhdGggaGFzIGJlZW4gaW5pdGlhbGlzZWQ6CisJcCA9IGZzLmdldFBhdGgoZm5hbWVXZnMpOworCQorCS8vIFdyaXRlIHN1Ym1pdHRlZCBsaXN0IG9mIHdvcmRmb3JtcyB0byBmaWxlOgorCXRyeQorCQl7CisJCW9zID0gRmlsZXMubmV3T3V0cHV0U3RyZWFtKHApOworCQlvcy53cml0ZShsaXN0LmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSkpOworCSAgICBvcy5jbG9zZSgpOworCSAgICBiRG9uZSA9IHRydWU7CisJICAgIGZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGZpbGUgJyVzJyBiZXNjaHJpZWJlbi5cbiIsIGZ1bmMsIGZuYW1lV2ZzKTsKKwkgICAgfQorCWNhdGNoKElPRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoZmVycik7CisJCX0KKyAgICAKKwlpZiggYkRvbmUgKQorCQltc2cgPSAiPHA+TGlzdCB3cml0dGVuIHRvIGZpbGU6ICIgKyBwLnRvU3RyaW5nKCkgKyAiPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+PGI+RmlsZSBFcnJvcjogPC9iPiBjYW5ub3Qgd3JpdGUgdG8gIiArIHAudG9TdHJpbmcoKSArICIhPC9wPiI7CisJCisJLyoKKwkgKiAgZXhlY3V0ZSBHbGVtbSBzaGVsbCBzY3JpcHQ6CisJICovCisJU3RyaW5nCisJCW1zZ0dsZW1tU2NyaXB0LCBtc2dJbXBvcnQ7CisJaW50IAorCQlyID0gVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0KGZuYW1lU2NyaXB0LCBmbmFtZVdmcywgZm91dCwgZmVycik7CisJCisJaWYoIHIgPT0gMCApCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEF1c2bDvGhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhLCBwcm9wcywgZGJwYXRoKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBpbXBvcnRHbGVtbUxlbW1hdGEgcmV0dXJucyByPSVkLlxuIiwgZnVuYywgcik7CisJCisJaWYoIG5FcnJvcnMgPT0gMCApCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiAiICsgbkVycm9ycyArICIgZXJyb3JzITwvcD4iOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGVuZGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJLy8gUmV0dXJuIEluZm9zOgorCXJldHVybiAKKwkJCSAgICI8aHRtbD4iICsKKwkJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCQorCX0gLy8gZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCisJLyogZG9HRVRfdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVycyA9ICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vIik7CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlmaW5hbCBTdHJpbmcKKwkJZGJOYW1lID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+ZGF0YWJhc2U8L2I+OiAlczwvcD4iLCBmb3JtYXREYk5hbWUocHJvcHMpKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgZGJOYW1lICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyBkb0dFVF92aWV3REJJbmZvCisKKworCS8qIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0PnZlcnNpb24gIiArIHZlcnNpb24gKyAiIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIHJlcXVlc3QgPSAnIiArIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikgKyAiJzwvaT48L2g0PlxuIiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDE6PC9iPiAoQzIgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9PC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+e2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYyk8L2NvZGU+PC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbDwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPsOWbD9vcHRzPWZsZXgrY29tcCtvdGhlcitzcGVjPC9jb2RlPjwvcD4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMjo8L2I+IChpbnRlcm5hbCBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX0/cHJvcDE9WzAxMl0mYW1wO3Byb3AyPVswMTJdJmFtcDtzcGVjPVswMTJdPC9jb2RlPiAod2hlcmUgZWFjaCBwcm9wMSwgcHJvcDIsIHNwZWMgaXMgb3B0aW9uYWwpLjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw/cHJvcDE9MCZhbXA7cHJvcDI9MSZhbXA7c3BlYz0yPC9jb2RlPjwvcD4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfSIpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSclZCcgcHJvcDI9JyVkJyBzcGVjPSclZCcuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwkvKiAKKwlmb3IoaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJCX0JCisJICovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoIGxlbW1hSW5mby5vcHRzU2V0dGluZyA9PSBMZW1tYUluZm8uT1BUU19TRVRUSU5HX0MyICkgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMSxwcm9wMixzcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaW50CisJCW5XZnMgPSBsZW1tYUluZm8ubldmczsKKwkKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwkvLyBsb2cgb3V0Y29tZToKKwlpZiggbldmcyA8IDAgKQorCQlmb3V0LnByaW50ZigiRXJyb3I6ICVzOiByZXR1cm5pbmcgMCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMpOworCWVsc2UKKwkJZm91dC5wcmludGYoIkRlYnVnLiAlczogcmV0dXJuaW5nICVkIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYywgbldmcyk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIG5vdGU6CisJICogLSBpZiBCcm93c2VyIHJlcXVlc3Q6IEhUVFBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAndGV4dC9odG1sLC4uLnhtbC4uLicKKwkgKiAtIGlmIFdmb3JtU2VydmljZXMgcmVxdWVzdDogSHR0cFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICdhcHBsaWNhdGlvbi9qc29uJy4KKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqIAorCSAqIC0gc3VibWl0dGVkIFVSTCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hLCBpcyBpbnRlcnByZXRlZCBieSBnbGFzc2Zpc2ggYXMKKwkgKiAgIGJlaW5nIElTTy04ODU5LTEgZW5jb2RlZC4gV2hlbiB0aGUgcmVxdWVzdCBpcyBVVEYtOCBlbmNvZGVkLCBVbWxhdXRzIGFuZAorCSAqICAgJ8OfJyBhcmUgbWlzLWludGVycHJlZGVkLCBsZWFkaW5nIHRvIGFuIGVycm9uZXJvdXMgcmVxdWVzdCB0byB0aGUgRGVyYnkKKwkgKiAgIGRhdGFiYXNlLgorCSAqIC0gUmVxdWVzdGVkIGxlbW1hICdsZW1tYScgaGFzIHRvIGJlIHRyYW5zZm9ybWVkIHRvIFVURi04IGZpcnN0LgorCSAqIC0gbm90ZTogZXZlbiB3aGVuIHN1Ym1pdHRpbmcgdGhlIEdFVCByZXF1ZXN0IGJ5IHNwZWNpZnlpbmcgJ2NoYXJlbmNvZGU9VVRGLTgnLAorCSAqICAgZ2xhc3NmaXNoIGRvZXMgbm90IGNvbnZlcnQgaXQgYXV0b21hdGljYWxseSBhcyBleHBlY3RlZC4KKwkgKiAgIAorCSAqICAyMi4xMC4yMS9GQgorCSAqIAorCSAqIC0gaWYgYWNjZXB0PWFwcGxpY2F0aW9uL2pzb24gcmV0dXJuIFVURi04IChXZm9ybVNlcnZpY2VzKS4KKwkgKiAtIGVsc2UgaWYgYWNjZXB0PXRleHQvaHRtbCBkbyBub3QgdHJhbnNmb3JtIGNoYXJhY3RlciBlbmNvZGluZyAoQnJvd3NlcikuCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBDb25zdW1lcygiYXBwbGljYXRpb24vanNvbiwgdGV4dC9odG1sIikKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCQorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCWZpbmFsIGJvb2xlYW4KKwkJYkVuY29kZUxlbW1hID0gZmFsc2U7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CisJCisJLyogdGVzdDoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJaWYoIGJFbmNvZGVMZW1tYSApCisJCXsKKwkJLy8gd2hlbiBhY2NlcHRpbmcgSlNPTiwgdXJsIGhhcyB0byBiZSBjb252ZXJ0ZWQgdG8gVVRGLTgsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYToKKwkJdHJ5IHsKKwkJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obmV3IFN0cmluZyhsZW1tYS5nZXRCeXRlcygiSVNPLTg4NTktMSIpLCAidXRmLTgiKSk7CisJCQl9IAorCQljYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlMSkgeworCQkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCQlMZW1tYVJlc3BvbnNlCisJCQkJbGVtcmVzcCA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbXJlc3ApLmJ1aWxkKCk7CisJCQl9CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW1VURi04XSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCWVsc2UKKwkJeworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbdW5jaGFuZ2VkXSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCisJLyogZG9lcyBub3QgaGVscDoKKwkgU3RyaW5nCisJIAlyZXF1ZXN0Q2hhckVuY29kaW5nID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldENoYXJhY3RlckVuY29kaW5nKCk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiByZXF1ZXN0IGNoYXJhY3RlciBlbmNvZGluZyA9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RDaGFyRW5jb2RpbmcpOworCSovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXsKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQkvL3JldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJfQorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsJCisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCS8qCisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC90ZXN0L2luZm8vIik7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL2ZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJZm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzdiLzQwNWEzMWY3MzM5MDAwMWExODdkZmFkZDMxZTAyY2RmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS83Yi80MDVhMzFmNzMzOTAwMDFhMTg3ZGZhZGQzMWUwMmNkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzViMTNjCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS83Yi80MDVhMzFmNzMzOTAwMDFhMTg3ZGZhZGQzMWUwMmNkZgpAQCAtMCwwICsxLDIxNCBAQAorLyogCisgKiBTZXQgb2YgbWV0aG9kcyBmb3IgdGVzdGluZyBKc29uIHBhcnNpbmcgbWV0aG9kcy4KKyAqIAorICogMDMuMDQuMjAvRkIKKyAqLworCitwYWNrYWdlIHRlc3Q7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5maWxlLlBhdGg7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5QYXRoczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uZGF0YWJpbmQuSnNvbk5vZGU7CitpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmRhdGFiaW5kLk9iamVjdE1hcHBlcjsKKworaW1wb3J0IGRlLmtvcmFwLmpzb24uSnNvblRyYXZlcnNlOworaW1wb3J0IGRlLmtvcmFwLmpzb24uVHJhdmVyc2VkUGF0aDsKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQuR2xlbW1DbGllbnQ7CitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CitpbXBvcnQgZGUua29yYXAuc2VydmljZXMuV29yZGZvcm1TZXJ2aWNlczsKKworcHVibGljIGNsYXNzIFRlc3RKc29uCisKK3sKKwlzdGF0aWMgU3RyaW5nIGlucHV0RmlsZW5hbWUgPSAicXVlcnkuaW4ucHJldHR5Lmpzb24iOworCXN0YXRpYyBTdHJpbmcgb3V0cHV0RmlsZW5hbWUgPSAicXVlcnkub3V0LnByZXR0eS5qc29uIjsKKworCWZpbmFsIHN0YXRpYyBib29sZWFuIGJTaW11bGF0ZVdvcmRmb3JtU2VydmljZXMgPSB0cnVlOworCQorCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCisJCisJeworCUZpbGUKKwkJaW5GaWxlID0gbmV3IEZpbGUoaW5wdXRGaWxlbmFtZSk7CisJRmlsZQorCQlvdXRGaWxlID0gbmV3IEZpbGUob3V0cHV0RmlsZW5hbWUpOworICAgIE9iamVjdE1hcHBlcgorCQlvYmpNYXBwZXIgPSBudWxsOworCUpzb25Ob2RlCisJCWpzb25Ob2RlID0gbnVsbDsKKwlUcmF2ZXJzZWRQYXRoCisJCXRQYXRoCSA9IG51bGw7CisJaW50CisJCW1vZGUJID0gSnNvblRyYXZlcnNlLlJFV1JJVEU7IAkvLyBKc29uVHJhdmVyc2UuUkVXUklURSBvciBSRVdSSVRFX0VYUAorCQorCWlmKCBiU2ltdWxhdGVXb3JkZm9ybVNlcnZpY2VzICkKKwl7CisJCVN5c3RlbS5vdXQucHJpbnRmKCJUZXN0SnNvbjogc3RhcnRpbmcgc2ltdWxhdGlvbiBvZiBXb3JkZm9ybVNlcnZpY2VzLi4uXG4iKTsKKwkJc2ltdWxhdGVXb3JkZm9ybVNlcnZpY2VzKGlucHV0RmlsZW5hbWUsIG91dHB1dEZpbGVuYW1lKTsKKwkJcmV0dXJuOworCX0KKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiVGVzdEpzb246IHRlc3Qgb24gJyVzJy4uLlxuIiwgaW5wdXRGaWxlbmFtZSk7CisJCisJb2JqTWFwcGVyID0gbmV3IE9iamVjdE1hcHBlcigpOworCQorCS8vIGdldCBmdWxsIHF1ZXJ5IGFzIGEgSnNvbk5vZGUgdHJlZToKKwl0cnkgeworCQkvLyBnZXQgZnVsbCBxdWVyeSBmcm9tIGZpbGUgYXMgYSBKc29uTm9kZSB0cmVlOgorCQlqc29uTm9kZSA9IG9iak1hcHBlci5yZWFkVHJlZShpbkZpbGUpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiVGVzdEpzb246IHJlYWRpbmcgZnJvbSBpbnB1dCBmaWxlOiBvay5cbiIpOworCQkKKwkJLy8gdHJhdmVyc2UgcXVlcnkgYW5kIGNvbGxlY3QgbGVtbWEgc3VicXVlcmllcyBpbiBhIFRyYXZlcnNlZFBhdGggb2JqZWN0OgorCQl0UGF0aCA9IG5ldyBUcmF2ZXJzZWRQYXRoKG9iak1hcHBlcik7CisJCUpzb25UcmF2ZXJzZS50cmF2ZXJzZUpzb25UcmVlKGpzb25Ob2RlLCB0UGF0aCwgSnNvblRyYXZlcnNlLkNPTExFQ1QpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6IFRlc3RKc29uOiBnZWZ1bmRlbmUgTGVtbWF0YTogIzogJWQsIGxpc3Q6ICclcycuXG4iLCB0UGF0aC5nZXRMZW1tYUNvdW50KCksIHRQYXRoLmdldExlbW1hdGEoKSk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCisJLy8gRXhpdCBpZiBubyBsZW1tYSBzdWJxdWVyaWVzIGZvdW5kOgorCWlmKCB0UGF0aCA9PSBudWxsIHx8IHRQYXRoLmdldExlbW1hQ291bnQoKSA9PSAwICkKKwkJeworCQlTeXN0ZW0ub3V0LnByaW50ZigiVGVzdEpzb246IGtlaW5lIGxlbW1hdGEgZ2VmdW5kZW4gPiBSZXdyaXRlIPxiZXJzcHJpbmdlbi5cbiIpOworCQlyZXR1cm47CisJCX0KKworCS8vIENhbGwgR2xlbW1TZXJ2aWNlcyB0byByZXNvbHZlIGxlbW1hLVN1YnF1ZXJpZXMuCisJLy8gVGhpcyByZXR1cm5zIGZvciBlYWNoIGxlbW1hIGEgcmVmZXJlbmNlIHRvIGEgbGlzdCBvZiB3b3JkZm9ybSBpbnN0YW5jaWF0aW9ucworCS8vICg9IGluc3RhbnRpYXRpb24gbGlzdCkuIAorCS8vIFRoaXMgbGlzdCBpcyBzdWJtaXR0ZWQgdG8gdHJhdmVyc0pzb25UcmVlKCkgd2l0aCB0aGUgdXNlIG9mIHRoZSB0UGF0aCBvYmplY3QuCisJCisJLy8gU2ltdWxhdGVzIGJ1aWxkaW5nIG9mIGV4cGFuc2lvbiBsaXN0cywgc3RvcmluZyB0aGVtIGluIHRQYXRoOgorCWlmKCBtb2RlID09IEpzb25UcmF2ZXJzZS5SRVdSSVRFKQorCQl7CisJCXNpbXVsYXRlR2xlbW1TZXJ2aWNlc0Nvbm5lY3QodFBhdGgpOworCQlzaW11bGF0ZUdsZW1tU2VydmljZXModFBhdGgpOworCQl9CisJZWxzZQorCQlzaW11bGF0ZUdsZW1tU2VydmljZXNXZnModFBhdGgpOworCQorCS8vIFJld3JpdGUgS29yYWxRdWVyeTogdXNlIGVpdGhlciBKc29uVHJhdmVyc2UuUkVXUklURSBvciAuUkVXUklURV9FWFA6CisJCisJSnNvblRyYXZlcnNlLnRyYXZlcnNlSnNvblRyZWUoanNvbk5vZGUsIHRQYXRoLCBtb2RlKTsKKwkJCisJLy8gcmV0dXJuIHJld3JpdHRuIEpzb24gVHJlZSB0byBmaWxlOgorCXRyeSB7CisJCW9iak1hcHBlci53cml0ZXJXaXRoRGVmYXVsdFByZXR0eVByaW50ZXIoKS53cml0ZVZhbHVlKG91dEZpbGUsIGpzb25Ob2RlKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQorCX0gLy8gbWFpbgorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiBzaW11bGF0ZVdvcmRmb3JtU2VydmljZXM6CisJICogCisJICogLSBjYWxscyBzYW1lIG1ldGhvZGUgdG8gcGFyc2UgYW5kIHJld3JpdGUgS29yYWxRdWVyeSB0aGF0IHdvcmRmb3JtU2VydmljZXMgZG8uCisJICogCisJICogMjQuMDQuMjAvRkIgCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCXN0YXRpYyB2b2lkIHNpbXVsYXRlV29yZGZvcm1TZXJ2aWNlcyhTdHJpbmcgaW5wdXRGaWxlbmFtZSwgU3RyaW5nIG91dHB1dEZpbGVuYW1lKSAgCisJCisJeworCWZpbmFsIFN0cmluZyBmdW5jID0gInNpbXVsYXRlV29yZGZvcm1TZXJ2aWNlcyI7CisJU3RyaW5nCisJCXF1ZXJ5CQk9IG51bGwsCisJCW5ld1F1ZXJ5CT0gbnVsbDsKKworICAgIHRyeSB7CisJCXF1ZXJ5ID0gVXRpbHMucmVhZEZyb21JbnB1dFN0cmVhbSgiLi8iICsgaW5wdXRGaWxlbmFtZSk7CisJCX0gCisgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUxKSB7CisJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm47CisJCX0KKyAgICAKKyAgICBTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzZW5kaW5nIHF1ZXJ5IHRvIFdvcmRmb3JtU2VydmljZXMuLi5cbiIsICBmdW5jKTsKKyAgICAKKwluZXdRdWVyeSA9IFdvcmRmb3JtU2VydmljZXMuZG9QT1NUX2hhbmRsZVdvcmRmb3JtUXVlcmllcyhxdWVyeSkgOworCQkKKyAgICBTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiByZWNlaXZpbmcgcmV3cml0dGVuIHF1ZXJ5IGZyb20gV29yZGZvcm1TZXJ2aWNlcy4uLlxuIiwgIGZ1bmMpOworICAgIAorICAgIFV0aWxzLndyaXRlVG9PdXRwdXRTdHJlYW0oIi4vIiArIG91dHB1dEZpbGVuYW1lLCBuZXdRdWVyeSk7CisKKwl9IC8vIHNpbXVsYXRlV29yZGZvcm1TZXJ2aWNlcworCQorCQorCS8qIHNpbXVsYXRlR2xlbW1TZXJ2aWNlc0NsaWVudAorCSAqIAorCSAqIDE0LjA0LjIwL0ZCCisJICogCisJICovCisJCisJc3RhdGljIGludCBzaW11bGF0ZUdsZW1tU2VydmljZXNDb25uZWN0KFRyYXZlcnNlZFBhdGggdFBhdGgpCisJCisJeworCWZpbmFsIFN0cmluZyBmdW5jID0gInNpbXVsYXRlR2xlbW1TZXJ2aWNlc0Nvbm5lY3QiOworCUdsZW1tQ2xpZW50CisJCWdsZW1tQ2xpZW50ID0gbmV3IEdsZW1tQ2xpZW50KCk7CisJCisJZ2xlbW1DbGllbnQuR2xlbW1Db25uZWN0KCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsICBmdW5jKTsKKwkKKwlyZXR1cm4gMDsKKwl9IC8vIHNpbXVsYXRlR2xlbW1TZXJ2aWNlc0NsaWVudAorCQorCS8qIHNpbXVsYXRlR2xlbW1TZXJ2aWNlcworCSAqIAorCSAqIGlucHV0OiBsaXN0IG9mIGxlbW1hdGEKKwkgKiBvdXRwdXQ6IGxpc3Qgb2YgbGVtbWF0YSAoc2FtZSBvcmRlcikgd2l0aCByZWZlcmVuY2VzIHRvIGV4cGFuc2lvbiBsaXN0cy4KKwkgKiAwNy4wNC4yMC9GQgorCSAqLworCQorCXN0YXRpYyB2b2lkIHNpbXVsYXRlR2xlbW1TZXJ2aWNlcyhUcmF2ZXJzZWRQYXRoIHRQYXRoKQorCQorCXsKKwkJZm9yKGludCBpPTA7IGk8dFBhdGguZ2V0TGVtbWFDb3VudCgpOyBpKyspCisJCQl7CisJCQl0UGF0aC5zZXRSZWYoInJlZi0iICsgdFBhdGguZ2V0TGVtbWEoaSkgKyAiOiIgKyBpKTsKKwkJCX0KKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigidFBhdGgucmVmczogIz0lZCBsaXN0PSclcycuXG4iLCB0UGF0aC5nZXRSZWZzQ291bnQoKSwgdFBhdGguZ2V0UmVmc2FzU3RyaW5nKCkpOworCQkKKwl9IC8vIHNpbXVsYXRlR2xlbW1TZXJ2aWNlcworCQorCS8qIHNpbXVsYXRlR2xlbW1TZXJ2aWNlc1dmcworCSAqIAorCSAqIGlucHV0OiBsaXN0IG9mIGxlbW1hdGEKKwkgKiBvdXRwdXQ6IGxpc3Qgb2YgZXhwYW5zaW9uIGxpc3RzICg9IHdvcmRmb3JtcyksIHNhbWUgb3JkZXIuCisJICogMDguMDQuMjAvRkIKKwkgKi8KKwkKKwlzdGF0aWMgdm9pZCBzaW11bGF0ZUdsZW1tU2VydmljZXNXZnMoVHJhdmVyc2VkUGF0aCB0UGF0aCkKKwkKKwl7CisJCWZvcihpbnQgaT0wOyBpPHRQYXRoLmdldExlbW1hQ291bnQoKTsgaSsrKQorCQkJeworCQkJTGlzdDxTdHJpbmc+CisJCQkJZXhwTGlzdCA9IG5ldyBBcnJheUxpc3QoaSsxKTsKKwkJCQorCQkJZm9yKGludCBqPTA7IGo8aSsxOyBqKyspCisJCQkJeworCQkJCWV4cExpc3QuYWRkKHRQYXRoLmdldExlbW1hKGkpICsgaik7CisJCQkJfQorCQkJCisJCQl0UGF0aC5hZGRFeHBMaXN0KGV4cExpc3QpOyAKKwkJCX0KKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6IHNpbXVsYXRlZEdsZW1tU2VydmljZXNXZnM6ICVkIGV4cGFuc2lvbiBsaXN0cyBhZGRlZC5cbiIsIHRQYXRoLmdldExlbW1hQ291bnQoKSk7CisJCQorCX0gLy8gc2ltdWxhdGVHbGVtbVNlcnZpY2VzV2ZzCisJCisJCQorfSAvLyBUZXN0SnNvbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvODIvOTA1NmVmN2Y4MTJiMDAxYzFjNDFjZTU1OWVhNWUxNmIgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzgyLzkwNTZlZjdmODEyYjAwMWMxYzQxY2U1NTllYTVlMTZiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MzM1MzYKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzgyLzkwNTZlZjdmODEyYjAwMWMxYzQxY2U1NTllYTVlMTZiCkBAIC0wLDAgKzEsNjkwIEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNi4xMC4yMSI7IC8vIjE3LjA2LjIwIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjEiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJCVN0cmluZworCQkJc3RhdHVzOworCQlVdGlscworCQkJdSA9IG5ldyBVdGlscygpOworCQlQcm9wZXJ0aWVzCisJCQlwcm9wczsKKwkJCisJCS8vIHJlYWQgdGVzdAorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCS8vSHR0cFNlcnZsZXRDb250ZXh0CisJCQorCQkvLyBodHRwU2VydmxldFJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW52KTsKKwkJSW5wdXRTdHJlYW0KKwkJCWluUHJvcCA9IEdsZW1tU2VydmljZXMuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKCJHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiKTsKKwkJCisJCS8vIGVuZCBvZiByZWFkIHRlc3QKKwkJCisJCS8vIHRlc3QKKwkJLyoKKwkJcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworCQkKKwkJICogcHJvcHMuc2V0UHJvcGVydHkoInAiLCAidGVzdCIpOworCQkgKgorCQlGaWxlT3V0cHV0U3RyZWFtIG91dDsKKwkJdHJ5IHsKKwkJCW91dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKCJnbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiKTsKKwkJCXByb3BzLnN0b3JlKG91dCwgICJ0ZXN0IEdsZW1tU2VydmljZXMgcHJvcGVydGllcyIpOworCQkJfSAKKwkJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX07CisJCSovCisJCQorCQkvLyBlbmQgb3Rlc3QKKwkJCisJCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCQlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIkFQSTogJXM6IC9pbmRleC9zdGF0dXMvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKworCQlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkpOworCisJCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwkJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiBQT1NUOiAvaW5kZXgvYWRkLzogdGV4dC9wbGFpbgorCSAqIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlLgorCSAqIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkCisJICogaW50byB0aGUgZGF0YWJhc2UuCisJICogSW5wdXQ6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqLworCUBQYXRoKCJhZGQiKSBAUE9TVCBAQ29uc3VtZXMoInRleHQvcGxhaW4iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgaW1wb3J0TGVtbWFEYXRhKFN0cmluZyBsaXN0KSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gYXJMaXN0ID0gbGlzdC5zcGxpdCgiXG4iKTsKKwkKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IGZzLmdldFBhdGgoZm5hbWVXZnMpOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2FkZC8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQorCS8vIFdyaXRlIHN1Ym1pdHRlZCBsaXN0IG9mIHdvcmRmb3JtcyB0byBmaWxlOgorCXRyeQorCQl7CisJCW9zID0gRmlsZXMubmV3T3V0cHV0U3RyZWFtKHApOworCQlvcy53cml0ZShsaXN0LmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSkpOworCSAgICBvcy5jbG9zZSgpOworCSAgICBiRG9uZSA9IHRydWU7CisJICAgIFN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGZpbGUgJyVzJyBiZXNjaHJpZWJlbi5cbiIsIGZ1bmMsIGZuYW1lV2ZzKTsKKwkgICAgfQorCWNhdGNoKElPRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisJCX0KKyAgICAKKwlpZiggYkRvbmUgKQorCQltc2cgPSAiPHA+TGlzdCB3cml0dGVuIHRvIGZpbGU6ICIgKyBwLnRvU3RyaW5nKCkgKyAiPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+PGI+RmlsZSBFcnJvcjogPC9iPiBjYW5ub3Qgd3JpdGUgdG8gIiArIHAudG9TdHJpbmcoKSArICIhPC9wPiI7CisJCisJLyoKKwkgKiAgZXhlY3V0ZSBHbGVtbSBzaGVsbCBzY3JpcHQ6CisJICovCisJU3RyaW5nCisJCW1zZ0dsZW1tU2NyaXB0LCBtc2dJbXBvcnQ7CisJaW50IAorCQlyID0gVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0KGZuYW1lU2NyaXB0LCBmbmFtZVdmcyk7CisJCisJaWYoIHIgPT0gMCApCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEF1c2bvv71ocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBpbXBvcnRHbGVtbUxlbW1hdGEgcmV0dXJucyByPSVkLlxuIiwgZnVuYywgcik7CisJaWYoIG5FcnJvcnMgPT0gMCApCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiAiICsgbkVycm9ycyArICIgZXJyb3JzITwvcD4iOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGVuZGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJLy8gUmV0dXJuIEluZm9zOgorCXJldHVybiAKKwkJCSAgICI8aHRtbD4iICsKKwkJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwl9CisKKwkvKiB2aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyB2aWV3REJJbmZvCisKKworCS8qIHZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIC0gU3RhdHVzOiA8aT5Xb3JrIGluIHByb2dyZXNzLi4uITwvaT4pPC9oND5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoICFvcHRpb25zLmVxdWFscygidW5kZWYiKSkKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEvcHJvcDIvc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEdsZW1tU2VydmljZXMgJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbkRhdGUsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS84My8yMDdkYTRiYjlhM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvODMvMjA3ZGE0YmI5YTNkMDAxYzEwYjFiMTdkZGQzMDllNmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVjYWMyYgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvODMvMjA3ZGE0YmI5YTNkMDAxYzEwYjFiMTdkZGQzMDllNmYKQEAgLTAsMCArMSw3MzkgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5zcWwuQ29ubmVjdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5Ecml2ZXJNYW5hZ2VyOworaW1wb3J0IGphdmEuc3FsLlByZXBhcmVkU3RhdGVtZW50OworaW1wb3J0IGphdmEuc3FsLlJlc3VsdFNldDsKK2ltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CitpbXBvcnQgamF2YS5zcWwuU3RhdGVtZW50OworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworcHVibGljIGNsYXNzIEdsZW1tREIKKworeworCXN0YXRpYyBwdWJsaWMgU3RyaW5nIGRiVGFibGUgCT0gIkdsZW1tTGVtbWF0YSI7CisJc3RhdGljIFN0cmluZyBkYkxlbW1hIAkJIAk9ICJsZW1tYSI7CisJc3RhdGljIFN0cmluZyBkYldmCSAJCQk9ICJ3ZiI7CisJc3RhdGljIFN0cmluZyBkYlByb3AxIAkJCT0gInByb3AxIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDIgCQkJPSAicHJvcDIiOworCisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChvdmVyd3JpdHRlbiBieSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCXByaXZhdGUgc3RhdGljIFN0cmluZyBmbmFtZURCID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNlcnZlckhvc3QgPSAiLy9sb2NhbGhvc3Q6MTUyNy8iOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAoZmluYWwgYXNzaWdubWVudHMpOgorCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckVtYiA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuRW1iZWRkZWREcml2ZXIiOworCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckNsaWVudCA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50RHJpdmVyIjsKKworCWZpbmFsIHN0YXRpYyBib29sZWFuCisJCXVzZVByZXBhcmVkU3RtdCA9IHRydWU7IC8vIDE9dXNlIFByZXBhcmVkU3RhdGVtZW50IGFuZCBub3QgU3RhdGVtZW50LgorCQorCS8vIHZhbHVlcyB0byBiZSBpbnNlcnRlZDogbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMuCisJc3RhdGljIFN0cmluZyBpbnNlcnRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICgnJXMnLCAnJXMnLCAnJXMnLCAnJXMnLCAnJXMnKSI7CisJc3RhdGljIFN0cmluZyBpbnNlcnRQcmVwYXJlZFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKD8sID8sID8sID8sID8pIjsKKwkKKwkvKgorCSAqIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCSAqIAorCSAqIEFyZ3VtZW50czoKKwkgKiBwcm9wcwk6IFByb3BlcnRpZXMgbG9hZGVkIGJ5IHRoZSBHbGVtbVNlcnZpY2VzLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBmdW5jdGlvbiBsb2FkcyBvbmx5IHRob3NlIENvbnN0YW50cyBuZWVkZWQgaW4gdGhpcyBjbGFzcy4KKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMJcHJvcHMpCisJCisJeworCWZuYW1lREIJCSAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsIAkiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJc2VydmVySG9zdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAic2VydmVySG9zdCIsCSIvL2xvY2FsaG9zdDoxNTI3LyIpOworCWRlcmJ5REJVUkwgCQk9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkJCQorCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAkJCQkJaW1wb3J0R2xlbW1MZW1hdGEKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGZuCQkgOiBhYnNvbHV0ZSBmaWxlIG5hbWUgb2YgR0xFTU0gb3V0cHV0IFtJU084ODU5LTFdIGV4cGVjdGVkLCBub3QgVVRGLTghCisJICogcHJvcHMJIDogUHJvcGVydGllcyB2b20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIHRvIHNldCBjb25zdGFudHMgbmVlZGVkCisJICogCQkJICAgaW4gdGhpcyBjbGFzcy4KKwkgKiBkYnBhdGgJIDogbG9jYXRpb24gKyBuYW1lIG9mIGRhdGFiYXNlIHdoZXJlIHRvIHN0b3JlIGxlbW1hdGErd2ZzLgorCSAqIFJldHVybnMJIDogMD1PSywgLTE6IGdlbmVyYWwgZXJyb3I7ID4gMCA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiBkeW5hbWljYWxseSBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAwNC4xMS4yMS9GQiBkYnBhdGguCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGEoU3RyaW5nIGZuLCBQcm9wZXJ0aWVzIHByb3BzLCBmaW5hbCBTdHJpbmcgZGJwYXRoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGEiOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluID0gbnVsbDsKKwlpbnQKKwkJbkVycm9yczsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gd2hlbiBpbmRleGluZyBkYXRhIGludG8gdGhlIGRhdGFiYXNlLCBzZWxlY3QgdGhlIHN1Ym1pdHRlZCBkYnBhdGgsCisJLy8gKG5vdCB0aGUgb25lIHN0b3JlZCBpbiB0aGUgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBkYnBhdGg7CisJCisJLy8gb3BlbiByZWFkZXIgb24gR2xlbW0gTGVtbWF0YToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQlpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmbikpOworCQkKKwkJbkVycm9ycyA9IHdyaXRlREJMZW1tYXRhKGluKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgZnJvbSAnJXMnIVxuIiwgZnVuYywgZm4pOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKworCS8vIGNsb3NlIFJlYWRlcjoKKwl0cnkgeworCQlpbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCW5FcnJvcnMgPSAtMTsKKwkJfQorCQorIAlpZiggbkVycm9ycyA9PSAwICkKKyAJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0IGRvbmUgc3VjY2Vzc2Z1bGx5LlxuIiwgZnVuYyk7CisgCWVsc2UKKyAJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0OiAlZCBFcnJvcnMhXG4iLCBmdW5jLCBuRXJyb3JzKTsKKyAJCisJcmV0dXJuIG5FcnJvcnM7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGEKKwkKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCisJICogICAgICAgICAgICAgICAgICAgICAgIHdyaXRlREJMZW1tYXRhKCkKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgCisJICogc3RvcmVzIGxpc3Qgb2YgbGVtbWF0YSArIGluZm9zIGludG8gRGVyYnkgZGIuCisJICogRmlsZSBmb3JtYXQ6ICJMZW1tYSBEZWNvbXBvc2l0aW9uIFdmIiwKKwkgKiAgICAgICAgICAgICAgZS5nLjogIkjDpHVzZXIgKy0gSGF1cyIuCisJICogUmV0dXJuczogMCA9IE9LIG9yIC0xOiBnZW5lcmFsIGVycm9yIG9yID4gMDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAwOS4wMS4yMC9GQgorCSAqIDA0LjExLjIxL0ZCIHR1cm4gYXV0b2NvbW1pdCBvZmYgdG8gYWNjZWxlcmF0ZSBodWdlIGFtb3VudCBvZiBpbnNlcnRpb25zLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWF0YShCdWZmZXJlZFJlYWRlciBpbikKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYXRhIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVByZXBhcmVkU3RhdGVtZW50CisJCXN0bXRQcmVwID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCAJID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsJCisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQluRXJyb3JzID0gMCwKKwkJbkluc2VydGVkID0gMCwJLy8gbm8uIG9mIGxlbW1hL3dmIHBhaXJzIGltcG9ydGVkLgorCQlyZXQgPSAwOyAvLyBPSy4KKwlib29sZWFuCisJCWNvbnRhaW5zU3BlYzsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2UsCisJLy8gc2V0IEF1dG9jb21taXQgPSBmYWxzZSB0byBhY2NlbGVyYXRlIGluc2VydGlvbnM6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCWNvbi5zZXRBdXRvQ29tbWl0KGZhbHNlKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQgKGF1dG9Db21taXQ9b2ZmKS5cbiIsIGZ1bmMpOworCisJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJc3RtdFByZXAgPSBjb24ucHJlcGFyZVN0YXRlbWVudChpbnNlcnRQcmVwYXJlZFF1ZXJ5KTsKKwkJZWxzZQorCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKworCQl3aGlsZSggKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggIT0gMyApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogJyVzJyBoYXMgJWQgY29tcG9uZW50cyEgRXhwZWN0ZWQgPSAzISBDYW5ub3QgYmUgc3RvcmVkIVxuIiwgZnVuYywgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQkJbkVycm9ycysrOworCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQorCQkJLy8gR2V0IEluZm8sIGlmIHdvcmRmb3JtIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSAnLScsIGludGVycHVuY3Rpb24gZXRjLjoKKwkJCS8vIGxlbW1hSW5mb1syXSA9IHdvcmRmb3JtLgorCQkJY29udGFpbnNTcGVjID0gTGVtbWFJbmZvLmlzV2ZTcGVjaWFsQ2FzZShsZW1tYUluZm9bMl0pOworCQkJLy8gc3RvcmUgaW50byBEQjoKKwkJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKHN0bXRQcmVwLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJZWxzZQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zKHN0bXQsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQkKKwkJCWlmKCByZXQgIT0gMCApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHN0b3JlIGxlbW1hICclcycgaW50byBEQiEgKHJldD0lZClcbiIsIGZ1bmMsIGxpbmUsIHJldCk7CisJCQkJbkVycm9ycysrOyAKKwkJCQl9CisJCQllbHNlCisJCQkJbkluc2VydGVkKys7CisJCQl9IC8vIHdoaWxlCisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIEdsZW1tIGxlbW1hdGEraW5mb3MgZnJvbSBmaWxlISBFeGl0IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsgCisJCX0JCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCWZpbmFsbHkgCisJCXsgCisKKwkJdHJ5IHsKKwkJCS8vIGltcG9ydGFudDogbm93IGNvbW1pdCwgYXMgYXV0b0NvbW1pdCBpcyBkZWFjdGl2YXRlZDoKKwkJCWNvbi5jb21taXQoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29tbWl0IGF0IHRoZSBlbmQgb2YgdGhlIHdmcyBsaXN0IGZhaWxlZCFcbiIsIGZ1bmMpOworCQkJfQkJCisJCQorCQl0cnkgeyAvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSAKKwkJCQlzdG10LmNsb3NlKCk7CisJCQlpZiggc3RtdFByZXAgIT0gbnVsbCApIAorCQkJCXN0bXRQcmVwLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkluZm8gOiAlczogbm8uIG9mIGxlbW1hdGEvd2YgcGFpcnMgaW5zZXJ0ZWQgPSAlZC5cbiIsIGZ1bmMsIG5JbnNlcnRlZCk7CisJCisJcmV0dXJuIG5FcnJvcnM7IC8vIDA9T0ssID4wID0gbm8uIG9mIGVycm9ycy4KKwl9IC8vIHdyaXRlREJMZW1tYXRhCisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIHJ1bGVzIGludG8gRGVyYnkgREIuCisJICogTm90ZXM6CisJICogLSB0aGlzIGlzIHRoZSB2ZXJzaW9uIHdpdGggYSBQcmVwYXJlZFF1ZXJ5LgorCSAqIFBhcmFtZXRlcnM6CisJICogc3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDE3LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKAorCQkJUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCwgCisJCQlTdHJpbmcgbGVtbWEsIAorCQkJU3RyaW5nIHdmLCAKKwkJCVN0cmluZyBkZWNvbXBvc2l0aW9uLCAKKwkJCWJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkIjsKKwlmaW5hbCBib29sZWFuCisJCWJMb2cgPSBmYWxzZTsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlib29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgCisJLy8gZm9yIGxvZ2luZyBvbmx5OgorCXNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwlpZiggYkxvZyApCisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorICAgIC8vIG5vdyBpbnNlcnQgbmV3IHZhbHVlcyBpbnRvIFByZXBhcmVkU3RhdGVtZW50OgorICAgIHRyeSB7CisgICAgCXN0bXQuc2V0U3RyaW5nKCAxLCBsZW1tYSk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKCAyLCB3Zik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbigzLCBwcm9wMSk7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig0LCBwcm9wMik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig1LCBzcGVjKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcmVwYXJlZCBzdG10ID0gJyVzJy5cbiIsICBmdW5jLCBzdG10LnRvU3RyaW5nKCkpOworICAgICAgICB9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlMSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKAkiRXJyb3I6ICVzOiB3aGlsZSBmaWxsaW5nIHByZXBhcmVkIHN0YXRlbWVudCB3aXRoIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0nJWInIHByb3AyPSclYicgc3BlYz0nJWInIVxuIiwgIAorCQkJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZTEucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisgICAgCisgICAgdHJ5IHsKKwkJLy8gZXhlY3V0ZSB0aGUgZmlsbGVkIHByZXBhcmVkIHN0YXRlbWVudDoKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZSgpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViISAobj0lZClcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMsIG4pOworIAkJCXJldHVybiAyOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDM7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZAorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3M6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gaW50byBEZXJieSBEQi4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGNvbnRhaW5zU3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDEwLjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zKFN0YXRlbWVudCBzdG10LCBTdHJpbmcgbGVtbWEsIFN0cmluZyB3ZiwgU3RyaW5nIGRlY29tcG9zaXRpb24sIGJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zIjsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlCb29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworICAgIAorICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorCXRyeSB7CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoc3FsSW5zZXJ0KTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYURhdGEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBmcm9tIHRoZSBHbGVtbURCLgorCSAqIElucHV0OiBsZW1tYSArIEdMRU1NX09QVFNfeHh4IChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWFEYXRhKExlbW1hSW5mbyBsZW1tYUluZm8sIFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYURhdGEiOworCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJbGVtbWFJbmZvLmNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJbGVtbWFJbmZvLnN0bXQgPSBsZW1tYUluZm8uY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlpbnQgciA9IHJlYWREQkxlbW1hKGxlbW1hSW5mby5zdG10LCBsZW1tYUluZm8pOworCQkJCisJCWlmKCByICE9IDAgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZ2V0IGRhdGEgZm9yIGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIVxuIiwgCisJCQkJCWZ1bmMsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwkJCXJldHVybiAxOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggbGVtbWFJbmZvLmNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hRGF0YQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGJ5IGFjY2Vzc2luZyB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dCA6IGxlbW1hICsgcHJvcDErMiAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogT3V0cHV0OiAKKwkgKiAgLSBjb250YWlucyBhIFJlc3VsdFNldCBmb3IgZmV0Y2hpbmcgdGhlIHdvcmRmb3Jtcy4KKwkgKiAJICBUaGlzIFJlc3VsdFNldCB3aWxsIGhhdmUgYmUgYmUgY2xvc2VkIHdpdGggTGVtbWFJbmZvLmNsb3NlKCkuCisJICogCSAgVGhlIG5vLiBvZiBmb3VuZCB3b3JkZm9ybXMgaXMgbm90IGtub3duIHRpbGwgd2UKKwkgKiAJICBmZXRjaCBhbGwgb2YgdGhlbSBmcm9tIFJlc3VsdFNldCEgCisJICogCS0gZHVlIHRvIFNFTEVDVCBESVNUSU5DVCBvbmx5IHVuaXEgd2YgYXJlIHJldHVybmVkLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYShTdGF0ZW1lbnQgc3RtdCwgTGVtbWFJbmZvIGxlbW1hSW5mbykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hIjsKKwlTdHJpbmcKKwkJc3FsOworCQkKKwlzcWwgPSBTdHJpbmcuZm9ybWF0KCJTRUxFQ1QgRElTVElOQ1Qgd2YgZnJvbSAlcyBXSEVSRSBsZW1tYT0nJXMnICVzICVzICVzIiwgCisJCQlkYlRhYmxlLAorCQkJbGVtbWFJbmZvLmxlbW1hLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiQU5EIHByb3AxPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAxID8gIkFORCBwcm9wMT0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiQU5EIHByb3AyPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAxID8gIkFORCBwcm9wMj0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiQU5EIHNwZWM9J3RydWUnIiAgIDogCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICJBTkQgc3BlYz0nZmFsc2UnIiAgOiAiIik7CisJCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgZnVuYywgbGVtbWFJbmZvLnByb3AxLCBsZW1tYUluZm8ucHJvcDIsIGxlbW1hSW5mby5zcGVjKTsKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbCA9ICclcycuXG4iLCBmdW5jLCBzcWwpOworCisJdHJ5IHsKKwkJbGVtbWFJbmZvLnJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoZW4gZXhlY3V0aW5nIHNxbD0nJXMnIVxuIiwgZnVuYywgc3FsKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gYWxsIHNxbCBzdHVmZiBhcmUgY2xvc2VkIG91dHNpZGUgdGhpcyBmdW5jdGlvbiwgc28gZG9uJ3QgY2xvc2UgdGhlbSBoZXJlIQorCQl9CQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3MKKwkgKiBSZXR1cm5zIEdlbmVyYWwgSW5mb3MgYWJvdXQgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIHJlYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJJbmZvcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJZGJJbmZvID0gcmVhZERiTGVtbWF0YUluZm9zKHN0bXQpOworCQkJCisJCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCByZWFkIEdlbmVyYWwgSW5mb3MgZnJvbSBHbGVtbSBEYXRhYmFzZSFcbiIsIGZ1bmMpOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSBjb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSBzdG10LmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIG1heSBiZSBudWxsLgorCQkKKwl9IC8vIHJlYWREYkluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiTGVtbWF0YUluZm9zOgorCSAqIHJlYWRzIGFuZCByZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGNvbnRlbnQgCisJICogb2YgdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIFJldHVybnMgMD1PSyBvciBlcnJvciBjb2RlID4gMC4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkxlbW1hdGFJbmZvcyhTdGF0ZW1lbnQgc3RtdCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAicmVhZERiTGVtbWFJbmZvcyI7CisJU3RyaW5nW10KKwkJc3FsID0gewkiU0VMRUNUIENPVU5UKGRpc3RpbmN0IGxlbW1hKSBmcm9tICIgKyBkYlRhYmxlICwJLy8gY291bnRzIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSwJCQkJCS8vIGNvdW50cyB0b3RhbCBuby4gb2Ygc3RvcmVkIHdvcmRmb3Jtcy4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPXRydWUiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPXRydWUifTsKKwlSZXN1bHRTZXQKKwkJcmVzID0gbnVsbDsgCisJaW50W10KKwkJbkNvdW50cyA9IG5ldyBpbnRbc3FsLmxlbmd0aF07CisJaW50CQkKKwkJaSA9IDAsIAorCQluRGlzdExlbW1hdGEgPSAtMSwJLy8gbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEgaW4gREIuCisJCW5XZnMJCSA9IC0xOwkvLyBuby4gb2Ygd29yZGZvcm1zIGluIERCLgorCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBleHRyYWN0aW5nIGFncmVnYXRlZCBpbmZvcyBhYm91dCBEYXRhYmFzZSBjb250ZW50cy4uLlxuIiwgZnVuYyk7CisJCisJZGJJbmZvID0gbmV3IEdsZW1tREJJbmZvKCk7CisKKwkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwl0cnkgeworCQlmb3IoaT0wOyBpPHNxbC5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCXJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbFtpXSk7CisJCQlpZiggcmVzLm5leHQoKSApCisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IHJlcy5nZXRJbnQoMSk7IC8vIGNvdW50IGlzIGluIGNvbHVtbiAxLgorCQkJZWxzZQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBleHRyYWN0IGNvdW50IGZyb20gJyVzJyFcbiIsIGZ1bmMsIHNxbFtpXSk7CisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IC0xOworCQkJCX0KKwkJCX0KKyAgICAgICAKKyAgICAgICAgfQorICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgIAl7CisgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogc3FsPSclcycgZmFpbGVkIVxuIiwgZnVuYywgc3FsW2ldKTsKKyAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAJfQorCWZpbmFsbHkgeworCQl0cnkgeworCQkJcmVzLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBPSworCX0gLy8gcmVhZERiTGVtbWF0YUluZm9zCisJCisJLyoqKioqKioqKioqKioqKioqKioqIFRlc3QgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zX3Rlc3QKKwkgKiBUaGlzIGlzIGRlYnVnIGNvZGUgd3JpdHRlbiB0byB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIERlcmJ5CisJICogRGF0YWJhc2UgZnJvbSBhbiBleHRlcm5hbCBKYXZhIFByb2dyYW1tLgorCSAqIDA4LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCByZWFkRGJJbmZvc190ZXN0KCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlTdHJpbmcKKwkJaW5zZXJ0U3RtdCA9ICIiOworCQorCS8vIENvbm5lY3QgdG8gRGVyYnkgZGF0YWJhc2U6CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCQorCQkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwkJdHJ5CisJCQl7CisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIAorICAgICAgICAgICAgCXNxbCA9ICJTRUxFQ1QgKiBGUk9NICIgKyBkYlRhYmxlOworICAgICAgICAgICAgUmVzdWx0U2V0IAorICAgICAgICAgICAgCXJlc3VsdCA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CisgCisgICAgICAgICAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHRhYmxlICclcyc6XG4iLCAgZnVuYywgZGJUYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQubmV4dCgpKSB7CisgICAgICAgICAgICAJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiJyVzJyA6ICclcycgOiAnJXMnIDogJyVzJyAuXG4iLCByZXN1bHQuZ2V0U3RyaW5nKDEpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygyKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMyksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDQpKTsKKyAgICAgICAgCQlpbnNlcnRTdG10ID0gaW5zZXJ0U3RtdCArICI8cD4iICsgcmVzdWx0LmdldFN0cmluZygxKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZygyKSArICIgOiAiICsKKyAgICAgICAgICAgICAgICAJCSAgICAgcmVzdWx0LmdldFN0cmluZygzKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZyg0KSArICI8L3A+IjsKKyAgICAgICAgICAgIAl9CisJCQl9CisJICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgICAgICAJeworCSAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBpbnNlcnRTdG10PSclcycgZmFpbGVkIS5cbiIsIGZ1bmMsIHN0bXQpOworICAgICAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICAgICAgY29uLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nICclcyBmYWlsZWQhXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJdHJ5IHsKKwkJY29uLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkJCisJfSAvLyByZWFkRGJJbmZvc190ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogaW1wb3J0R2xlbW1MZW1hdGFfdGVzdAorCSAqIFRlc3QgVmVyc2lvbi4KKwkgKiAxMi4xMi4xOS9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QoU3RyaW5nIGZuKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdCI7CisJSW5wdXRTdHJlYW0gCisJCWluOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluMiA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQlyOworCQorCS8qCisJICogUmVhZCBMZW1tYXRhICsgSW5mbyBmcm9tIGZpbGU6IAorCSAqLworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCQorCXRyeSB7CisJCS8vaW4gPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSggbmV3IEZpbGVJbnB1dFN0cmVhbShmbikgKTsKKwkJaW4yID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlcihmbikpOworCQl3aGlsZSggKGxpbmUgPSBpbjIucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoID09IDMgKQorCQkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBJbXBvcnQ6IGxlbT0nJXMnIERlY29tcD0nJXMnIFdmPSclcycuXG4iLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1sxXSwgbGVtbWFJbmZvWzJdKTsKKwkJCWVsc2UKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogaW1wb3J0R2xlbW1MYW1hdGE6ICclcycgaGFzICVkIGNvbXBvbmVudHMhXG4iLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IG9wZW4gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJcmV0dXJuIDE7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKworCXRyeSB7CisJCWluMi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCS8qIENoZWNrIGNvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJICovIAorCXIgPSByZWFkRGJJbmZvc190ZXN0KCk7CisJaWYoIHIgIT0gMCApCisJCXJldHVybiByOworCQkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5Lzg1L2EwZTg0ZmFkMTI4ZjAwMWExY2I4YTFlYTA4MzQzOGFlIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS84NS9hMGU4NGZhZDEyOGYwMDFhMWNiOGExZWEwODM0MzhhZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGVlM2RmCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS84NS9hMGU4NGZhZDEyOGYwMDFhMWNiOGExZWEwODM0MzhhZQpAQCAtMCwwICsxLDgyIEBACis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiAKKwl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKwl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICA8Z3JvdXBJZD5kZS5rb3JhcC5zZXJ2aWNlczwvZ3JvdXBJZD4KKyAgPGFydGlmYWN0SWQ+dGVzdHM8L2FydGlmYWN0SWQ+CisgIDx2ZXJzaW9uPjAuMTwvdmVyc2lvbj4KKyAgPCEtLSAgPnBhY2thZ2luZz53YXI8L3BhY2thZ2luZy0tPgorICA8bmFtZT5Kc29uIFRlc3QgTWV0aG9kczwvbmFtZT4KKyAgCisgIDxkZXNjcmlwdGlvbj5UZXN0cyBmb3IgSnNvbiBQYXJzaW5nPC9kZXNjcmlwdGlvbj4KKyAgCisgIDxkZXBlbmRlbmNpZXM+CisgICAgPGRlcGVuZGVuY3k+CisgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KKyAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgorICAgICAgPHZlcnNpb24+My44LjE8L3ZlcnNpb24+CisgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgPC9kZXBlbmRlbmN5PgorICAgPGRlcGVuZGVuY3k+CisgICAgPGdyb3VwSWQ+Y29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmU8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+amFja3Nvbi1jb3JlPC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjIuOS42PC92ZXJzaW9uPgorICAgIDxzY29wZT5jb21waWxlPC9zY29wZT4KKyAgIDwvZGVwZW5kZW5jeT4KKwk8ZGVwZW5kZW5jeT4KKwkgIDxncm91cElkPmNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlPC9ncm91cElkPgorCSAgPGFydGlmYWN0SWQ+amFja3Nvbi1hbm5vdGF0aW9uczwvYXJ0aWZhY3RJZD4KKwkgIDx2ZXJzaW9uPjIuOS42PC92ZXJzaW9uPgorCTwvZGVwZW5kZW5jeT4KKwk8ZGVwZW5kZW5jeT4KKwkgIDxncm91cElkPmNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlPC9ncm91cElkPgorCSAgPGFydGlmYWN0SWQ+amFja3Nvbi1kYXRhYmluZDwvYXJ0aWZhY3RJZD4KKwkgIDx2ZXJzaW9uPjIuOS42PC92ZXJzaW9uPgorCSAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KKwk8L2RlcGVuZGVuY3k+CisJPGRlcGVuZGVuY3k+CisJCTxncm91cElkPmRlLmtvcmFwLmpzb248L2dyb3VwSWQ+CisJCTxhcnRpZmFjdElkPkpzb25UcmF2ZXJzZTwvYXJ0aWZhY3RJZD4KKwkJPHZlcnNpb24+MC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorCTwvZGVwZW5kZW5jeT4KKwk8ZGVwZW5kZW5jeT4KKwkJPGdyb3VwSWQ+ZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50PC9ncm91cElkPgorCQk8YXJ0aWZhY3RJZD5HbGVtbUNsaWVudDwvYXJ0aWZhY3RJZD4KKwkJPHZlcnNpb24+MC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorCTwvZGVwZW5kZW5jeT4KKwk8ZGVwZW5kZW5jeT4KKwkJPGdyb3VwSWQ+ZGUua29yYXAuc2VydmljZXM8L2dyb3VwSWQ+CisJCTxhcnRpZmFjdElkPnV0aWxzPC9hcnRpZmFjdElkPgorCQk8dmVyc2lvbj4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisJPC9kZXBlbmRlbmN5PgorCTxkZXBlbmRlbmN5PgorCQk8Z3JvdXBJZD5kZS5rb3JhcC5zZXJ2aWNlczwvZ3JvdXBJZD4KKwkJPGFydGlmYWN0SWQ+d2Zvcm1TZXJ2aWNlczwvYXJ0aWZhY3RJZD4KKwkJPHZlcnNpb24+MC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorCTwvZGVwZW5kZW5jeT4KKyAgPC9kZXBlbmRlbmNpZXM+CisgIAorICA8YnVpbGQ+CisgICAgPHNvdXJjZURpcmVjdG9yeT5zcmM8L3NvdXJjZURpcmVjdG9yeT4KKyAgICA8cGx1Z2lucz4KKyAgICAgIDxwbHVnaW4+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWNvbXBpbGVyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+My43LjA8L3ZlcnNpb24+CisgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgIDxzb3VyY2U+MS44PC9zb3VyY2U+CisgICAgICAgICAgPHRhcmdldD4xLjg8L3RhcmdldD4KKyAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgPC9wbHVnaW4+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi13YXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4zLjIuMTwvdmVyc2lvbj4KKyAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgPGZhaWxPbk1pc3NpbmdXZWJYbWw+ZmFsc2U8L2ZhaWxPbk1pc3NpbmdXZWJYbWw+CisgICAgICAgICAgPHdhclNvdXJjZURpcmVjdG9yeT5XZWJDb250ZW50PC93YXJTb3VyY2VEaXJlY3Rvcnk+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvcGx1Z2luPgorICAgIDwvcGx1Z2lucz4KKyAgICA8ZmluYWxOYW1lPlRlc3RHbGVtbVNlcnZpY2VzPC9maW5hbE5hbWU+CisgIDwvYnVpbGQ+CisgIAorPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvODUvZjA5NWZkY2E5OTNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5Lzg1L2YwOTVmZGNhOTkzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNDM1ZGMKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5Lzg1L2YwOTVmZGNhOTkzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsNzI5IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKK2ltcG9ydCBqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7CitpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAob3ZlcndyaXR0ZW4gYnkgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKGZpbmFsIGFzc2lnbm1lbnRzKToKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJFbWIgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIjsKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLyoKKwkgKiBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkgKiAKKwkgKiBBcmd1bWVudHM6CisJICogcHJvcHMJOiBQcm9wZXJ0aWVzIGxvYWRlZCBieSB0aGUgR2xlbW1TZXJ2aWNlcy4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgZnVuY3Rpb24gbG9hZHMgb25seSB0aG9zZSBDb25zdGFudHMgbmVlZGVkIGluIHRoaXMgY2xhc3MuCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzCXByb3BzKQorCQorCXsKKwlmbmFtZURCCQkgCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAJIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCXNlcnZlckhvc3QJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgInNlcnZlckhvc3QiLAkiLy9sb2NhbGhvc3Q6MTUyNy8iKTsKKwlkZXJieURCVVJMIAkJPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJCQkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIHdoZW4gaW5kZXhpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSwgc2VsZWN0IHRoZSBzdWJtaXR0ZWQgZGJwYXRoLAorCS8vIChub3QgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZGJwYXRoOworCQorCS8vIG9wZW4gcmVhZGVyIG9uIEdsZW1tIExlbW1hdGE6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJCisJCW5FcnJvcnMgPSB3cml0ZURCTGVtbWF0YShpbik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIGZyb20gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwkvLyBjbG9zZSBSZWFkZXI6CisJdHJ5IHsKKwkJaW4uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQluRXJyb3JzID0gLTE7CisJCX0KKwkKKyAJaWYoIG5FcnJvcnMgPT0gMCApCisgCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydCBkb25lIHN1Y2Nlc3NmdWxseS5cbiIsIGZ1bmMpOworIAllbHNlCisgCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydDogJWQgRXJyb3JzIVxuIiwgZnVuYywgbkVycm9ycyk7CisgCQorCXJldHVybiBuRXJyb3JzOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhCisJCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAorCSAqICAgICAgICAgICAgICAgICAgICAgICB3cml0ZURCTGVtbWF0YSgpCisJICogICAgICAgICAgICAgICAgICAgICAgIAorCSAqIHN0b3JlcyBsaXN0IG9mIGxlbW1hdGEgKyBpbmZvcyBpbnRvIERlcmJ5IGRiLgorCSAqIEZpbGUgZm9ybWF0OiAiTGVtbWEgRGVjb21wb3NpdGlvbiBXZiIsCisJICogICAgICAgICAgICAgIGUuZy46ICJIw6R1c2VyICstIEhhdXMiLgorCSAqIFJldHVybnM6IDAgPSBPSyBvciAtMTogZ2VuZXJhbCBlcnJvciBvciA+IDA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogMDkuMDEuMjAvRkIKKwkgKiAwNC4xMS4yMS9GQiB0dXJuIGF1dG9jb21taXQgb2ZmIHRvIGFjY2VsZXJhdGUgaHVnZSBhbW91bnQgb2YgaW5zZXJ0aW9ucy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hdGEoQnVmZmVyZWRSZWFkZXIgaW4pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWF0YSI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlQcmVwYXJlZFN0YXRlbWVudAorCQlzdG10UHJlcCA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgCSA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CQorCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCW5JbnNlcnRlZCA9IDAsCS8vIG5vLiBvZiBsZW1tYS93ZiBwYWlycyBpbXBvcnRlZC4KKwkJcmV0ID0gMDsgLy8gT0suCisJYm9vbGVhbgorCQljb250YWluc1NwZWM7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlLAorCS8vIHNldCBBdXRvY29tbWl0ID0gZmFsc2UgdG8gYWNjZWxlcmF0ZSBpbnNlcnRpb25zOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQljb24uc2V0QXV0b0NvbW1pdChmYWxzZSk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkIChhdXRvQ29tbWl0PW9mZikuXG4iLCBmdW5jKTsKKworCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCXN0bXRQcmVwID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0UHJlcGFyZWRRdWVyeSk7CisJCWVsc2UKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisKKwkJd2hpbGUoIChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoICE9IDMgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6ICclcycgaGFzICVkIGNvbXBvbmVudHMhIEV4cGVjdGVkID0gMyEgQ2Fubm90IGJlIHN0b3JlZCFcbiIsIGZ1bmMsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJCW5FcnJvcnMrKzsKKwkJCQljb250aW51ZTsKKwkJCQl9CisJCQkKKwkJCS8vIEdldCBJbmZvLCBpZiB3b3JkZm9ybSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgJy0nLCBpbnRlcnB1bmN0aW9uIGV0Yy46CisJCQkvLyBsZW1tYUluZm9bMl0gPSB3b3JkZm9ybS4KKwkJCWNvbnRhaW5zU3BlYyA9IExlbW1hSW5mby5pc1dmU3BlY2lhbENhc2UobGVtbWFJbmZvWzJdKTsKKwkJCS8vIHN0b3JlIGludG8gREI6CisJCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZChzdG10UHJlcCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvcyhzdG10LCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJCisJCQlpZiggcmV0ICE9IDAgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBzdG9yZSBsZW1tYSAnJXMnIGludG8gREIhXG4iLCBmdW5jLCBsaW5lKTsKKwkJCQluRXJyb3JzKys7IAorCQkJCX0KKwkJCWVsc2UKKwkJCQluSW5zZXJ0ZWQrKzsKKwkJCX0gLy8gd2hpbGUKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgR2xlbW0gbGVtbWF0YStpbmZvcyBmcm9tIGZpbGUhIEV4aXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOyAKKwkJfQkKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIAorCQkJCXN0bXQuY2xvc2UoKTsKKwkJCWlmKCBzdG10UHJlcCAhPSBudWxsICkgCisJCQkJc3RtdFByZXAuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiSW5mbyA6ICVzOiBuby4gb2YgbGVtbWF0YS93ZiBwYWlycyBpbnNlcnRlZCA9ICVkLlxuIiwgZnVuYywgbkluc2VydGVkKTsKKwkKKwlyZXR1cm4gbkVycm9yczsgLy8gMD1PSywgPjAgPSBuby4gb2YgZXJyb3JzLgorCX0gLy8gd3JpdGVEQkxlbW1hdGEKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQ6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gcnVsZXMgaW50byBEZXJieSBEQi4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgaXMgdGhlIHZlcnNpb24gd2l0aCBhIFByZXBhcmVkUXVlcnkuCisJICogUGFyYW1ldGVyczoKKwkgKiBzcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTcuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoCisJCQlQcmVwYXJlZFN0YXRlbWVudCBzdG10LCAKKwkJCVN0cmluZyBsZW1tYSwgCisJCQlTdHJpbmcgd2YsIAorCQkJU3RyaW5nIGRlY29tcG9zaXRpb24sIAorCQkJYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQiOworCWZpbmFsIGJvb2xlYW4KKwkJYkxvZyA9IGZhbHNlOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCWJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICAKKwkvLyBmb3IgbG9naW5nIG9ubHk6CisJc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCWlmKCBiTG9nICkKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisgICAgLy8gbm93IGluc2VydCBuZXcgdmFsdWVzIGludG8gUHJlcGFyZWRTdGF0ZW1lbnQ6CisgICAgdHJ5IHsKKyAgICAJc3RtdC5zZXRTdHJpbmcoIDEsIGxlbW1hKTsKKyAgICAgICAgc3RtdC5zZXRTdHJpbmcoIDIsIHdmKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDMsIHByb3AxKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDQsIHByb3AyKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDUsIHNwZWMpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByZXBhcmVkIHN0bXQgPSAnJXMnLlxuIiwgIGZ1bmMsIHN0bXQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUxKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoCSJFcnJvcjogJXM6IHdoaWxlIGZpbGxpbmcgcHJlcGFyZWQgc3RhdGVtZW50IHdpdGggbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSclYicgcHJvcDI9JyViJyBzcGVjPSclYichXG4iLCAgCisJCQkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllMS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKyAgICAKKyAgICB0cnkgeworCQkvLyBleGVjdXRlIHRoZSBmaWxsZWQgcHJlcGFyZWQgc3RhdGVtZW50OgorCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMjsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAzOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIGludG8gRGVyYnkgREIuCisJICogUGFyYW1ldGVyczoKKwkgKiBjb250YWluc1NwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxMC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvcyhTdGF0ZW1lbnQgc3RtdCwgU3RyaW5nIGxlbW1hLCBTdHJpbmcgd2YsIFN0cmluZyBkZWNvbXBvc2l0aW9uLCBib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvcyI7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJQm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIHNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAgICAKKyAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKwl0cnkgeworCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKHNxbEluc2VydCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWFEYXRhCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgZnJvbSB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dDogbGVtbWEgKyBHTEVNTV9PUFRTX3h4eCAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hRGF0YShMZW1tYUluZm8gbGVtbWFJbmZvLCBQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWFEYXRhIjsKKworCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWxlbW1hSW5mby5jb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCWxlbW1hSW5mby5zdG10ID0gbGVtbWFJbmZvLmNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJaW50IHIgPSByZWFkREJMZW1tYShsZW1tYUluZm8uc3RtdCwgbGVtbWFJbmZvKTsKKwkJCQorCQlpZiggciAhPSAwICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGdldCBkYXRhIGZvciBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyFcbiIsIAorCQkJCQlmdW5jLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGxlbW1hSW5mby5jb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYURhdGEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBieSBhY2Nlc3NpbmcgdGhlIEdsZW1tREIuCisJICogSW5wdXQgOiBsZW1tYSArIHByb3AxKzIgKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqIE91dHB1dDogCisJICogIC0gY29udGFpbnMgYSBSZXN1bHRTZXQgZm9yIGZldGNoaW5nIHRoZSB3b3JkZm9ybXMuCisJICogCSAgVGhpcyBSZXN1bHRTZXQgd2lsbCBoYXZlIGJlIGJlIGNsb3NlZCB3aXRoIExlbW1hSW5mby5jbG9zZSgpLgorCSAqIAkgIFRoZSBuby4gb2YgZm91bmQgd29yZGZvcm1zIGlzIG5vdCBrbm93biB0aWxsIHdlCisJICogCSAgZmV0Y2ggYWxsIG9mIHRoZW0gZnJvbSBSZXN1bHRTZXQhIAorCSAqIAktIGR1ZSB0byBTRUxFQ1QgRElTVElOQ1Qgb25seSB1bmlxIHdmIGFyZSByZXR1cm5lZC4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWEoU3RhdGVtZW50IHN0bXQsIExlbW1hSW5mbyBsZW1tYUluZm8pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYSI7CisJU3RyaW5nCisJCXNxbDsKKwkJCisJc3FsID0gU3RyaW5nLmZvcm1hdCgiU0VMRUNUIERJU1RJTkNUIHdmIGZyb20gJXMgV0hFUkUgbGVtbWE9JyVzJyAlcyAlcyAlcyIsIAorCQkJZGJUYWJsZSwKKwkJCWxlbW1hSW5mby5sZW1tYSwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIkFORCBwcm9wMT0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICJBTkQgcHJvcDE9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIkFORCBwcm9wMj0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICJBTkQgcHJvcDI9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAxID8gIkFORCBzcGVjPSd0cnVlJyIgICA6IAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiQU5EIHNwZWM9J2ZhbHNlJyIgIDogIiIpOworCQorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIGZ1bmMsIGxlbW1hSW5mby5wcm9wMSwgbGVtbWFJbmZvLnByb3AyLCBsZW1tYUluZm8uc3BlYyk7CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWwgPSAnJXMnLlxuIiwgZnVuYywgc3FsKTsKKworCXRyeSB7CisJCWxlbW1hSW5mby5yZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOwkKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGVuIGV4ZWN1dGluZyBzcWw9JyVzJyFcbiIsIGZ1bmMsIHNxbCk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisJZmluYWxseSB7CisJCS8vIGFsbCBzcWwgc3R1ZmYgYXJlIGNsb3NlZCBvdXRzaWRlIHRoaXMgZnVuY3Rpb24sIHNvIGRvbid0IGNsb3NlIHRoZW0gaGVyZSEKKwkJfQkKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zCisJICogUmV0dXJucyBHZW5lcmFsIEluZm9zIGFib3V0IHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiByZWFkIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiSW5mb3MoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWRiSW5mbyA9IHJlYWREYkxlbW1hdGFJbmZvcyhzdG10KTsKKwkJCQorCQlpZiggZGJJbmZvID09IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgcmVhZCBHZW5lcmFsIEluZm9zIGZyb20gR2xlbW0gRGF0YWJhc2UhXG4iLCBmdW5jKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIG51bGw7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgc3RtdC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBtYXkgYmUgbnVsbC4KKwkJCisJfSAvLyByZWFkRGJJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkxlbW1hdGFJbmZvczoKKwkgKiByZWFkcyBhbmQgcmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjb250ZW50IAorCSAqIG9mIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiBSZXR1cm5zIDA9T0sgb3IgZXJyb3IgY29kZSA+IDAuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJMZW1tYXRhSW5mb3MoU3RhdGVtZW50IHN0bXQpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInJlYWREYkxlbW1hSW5mb3MiOworCVN0cmluZ1tdCisJCXNxbCA9IHsJIlNFTEVDVCBDT1VOVChkaXN0aW5jdCBsZW1tYSkgZnJvbSAiICsgZGJUYWJsZSAsCS8vIGNvdW50cyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YS4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUsCQkJCQkvLyBjb3VudHMgdG90YWwgbm8uIG9mIHN0b3JlZCB3b3JkZm9ybXMuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj10cnVlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj10cnVlIn07CisJUmVzdWx0U2V0CisJCXJlcyA9IG51bGw7IAorCWludFtdCisJCW5Db3VudHMgPSBuZXcgaW50W3NxbC5sZW5ndGhdOworCWludAkJCisJCWkgPSAwLCAKKwkJbkRpc3RMZW1tYXRhID0gLTEsCS8vIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhIGluIERCLgorCQluV2ZzCQkgPSAtMTsJLy8gbm8uIG9mIHdvcmRmb3JtcyBpbiBEQi4KKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogZXh0cmFjdGluZyBhZ3JlZ2F0ZWQgaW5mb3MgYWJvdXQgRGF0YWJhc2UgY29udGVudHMuLi5cbiIsIGZ1bmMpOworCQorCWRiSW5mbyA9IG5ldyBHbGVtbURCSW5mbygpOworCisJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJdHJ5IHsKKwkJZm9yKGk9MDsgaTxzcWwubGVuZ3RoOyBpKyspCisJCQl7CisJCQlyZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWxbaV0pOworCQkJaWYoIHJlcy5uZXh0KCkgKQorCQkJCWRiSW5mby5jb3VudHNbaV0gPSByZXMuZ2V0SW50KDEpOyAvLyBjb3VudCBpcyBpbiBjb2x1bW4gMS4KKwkJCWVsc2UKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZXh0cmFjdCBjb3VudCBmcm9tICclcychXG4iLCBmdW5jLCBzcWxbaV0pOworCQkJCWRiSW5mby5jb3VudHNbaV0gPSAtMTsKKwkJCQl9CisJCQl9CisgICAgICAgCisgICAgICAgIH0KKyAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAJeworICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHNxbD0nJXMnIGZhaWxlZCFcbiIsIGZ1bmMsIHNxbFtpXSk7CisgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgCX0KKwlmaW5hbGx5IHsKKwkJdHJ5IHsKKwkJCXJlcy5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gT0sKKwl9IC8vIHJlYWREYkxlbW1hdGFJbmZvcworCQorCS8qKioqKioqKioqKioqKioqKioqKiBUZXN0IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQorCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvc190ZXN0CisJICogVGhpcyBpcyBkZWJ1ZyBjb2RlIHdyaXR0ZW4gdG8gdGVzdCBpZiB3ZSBjYW4gYWNjZXNzIHRoZSBEZXJieQorCSAqIERhdGFiYXNlIGZyb20gYW4gZXh0ZXJuYWwgSmF2YSBQcm9ncmFtbS4KKwkgKiAwOC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgcmVhZERiSW5mb3NfdGVzdCgpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJU3RyaW5nCisJCWluc2VydFN0bXQgPSAiIjsKKwkKKwkvLyBDb25uZWN0IHRvIERlcmJ5IGRhdGFiYXNlOgorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQkKKwkJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJCXRyeQorCQkJeworCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIFN0cmluZyAKKyAgICAgICAgICAgIAlzcWwgPSAiU0VMRUNUICogRlJPTSAiICsgZGJUYWJsZTsKKyAgICAgICAgICAgIFJlc3VsdFNldCAKKyAgICAgICAgICAgIAlyZXN1bHQgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOworIAorICAgICAgICAgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiB0YWJsZSAnJXMnOlxuIiwgIGZ1bmMsIGRiVGFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAocmVzdWx0Lm5leHQoKSkgeworICAgICAgICAgICAgCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIiclcycgOiAnJXMnIDogJyVzJyA6ICclcycgLlxuIiwgcmVzdWx0LmdldFN0cmluZygxKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMiksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDMpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZyg0KSk7CisgICAgICAgIAkJaW5zZXJ0U3RtdCA9IGluc2VydFN0bXQgKyAiPHA+IiArIHJlc3VsdC5nZXRTdHJpbmcoMSkgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoMikgKyAiIDogIiArCisgICAgICAgICAgICAgICAgCQkgICAgIHJlc3VsdC5nZXRTdHJpbmcoMykgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoNCkgKyAiPC9wPiI7CisgICAgICAgICAgICAJfQorCQkJfQorCSAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAgICAgCXsKKwkgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogaW5zZXJ0U3RtdD0nJXMnIGZhaWxlZCEuXG4iLCBmdW5jLCBzdG10KTsKKyAgICAgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIAl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGluZyAnJXMgZmFpbGVkIVxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCXJldHVybiAxOworCQl9CisJCisJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCXRyeSB7CisJCWNvbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCQorCX0gLy8gcmVhZERiSW5mb3NfdGVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIGltcG9ydEdsZW1tTGVtYXRhX3Rlc3QKKwkgKiBUZXN0IFZlcnNpb24uCisJICogMTIuMTIuMTkvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0KFN0cmluZyBmbikKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QiOworCUlucHV0U3RyZWFtIAorCQlpbjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbjIgPSBudWxsOworCVN0cmluZworCQlsaW5lOworCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJcjsKKwkKKwkvKgorCSAqIFJlYWQgTGVtbWF0YSArIEluZm8gZnJvbSBmaWxlOiAKKwkgKi8KKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQkKKwl0cnkgeworCQkvL2luID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oIG5ldyBGaWxlSW5wdXRTdHJlYW0oZm4pICk7CisJCWluMiA9IG5ldyBCdWZmZXJlZFJlYWRlciggbmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJd2hpbGUoIChsaW5lID0gaW4yLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCA9PSAzICkKKwkJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogSW1wb3J0OiBsZW09JyVzJyBEZWNvbXA9JyVzJyBXZj0nJXMnLlxuIiwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMV0sIGxlbW1hSW5mb1syXSk7CisJCQllbHNlCisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6IGltcG9ydEdsZW1tTGFtYXRhOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzIVxuIiwgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQl9CisJCX0gCisJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBvcGVuICclcychXG4iLCBmdW5jLCBmbik7CisJCXJldHVybiAxOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisKKwl0cnkgeworCQlpbjIuY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwkvKiBDaGVjayBjb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCSAqLyAKKwlyID0gcmVhZERiSW5mb3NfdGVzdCgpOworCWlmKCByICE9IDAgKQorCQlyZXR1cm4gcjsKKwkJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdAorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS84Ni9iMDJjMGM0OTUyM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvODYvYjAyYzBjNDk1MjNkMDAxYzEwYjFiMTdkZGQzMDllNmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTljOWE5NQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvODYvYjAyYzBjNDk1MjNkMDAxYzEwYjFiMTdkZGQzMDllNmYKQEAgLTAsMCArMSw5ODIgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworLyogMC4xIDogMTcuMDYuMjAvRkIgCisgKiAwLjIgOiAyNS4xMC4yMS9GQgorICogICAgICAgbG9naW5nIG9mIHRoZSBBUEkgUmVxdWVzdHMuCisgKiAgICAgICBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKyAqICAgICAgIGNvcnJlY3RpbmcgY2FsbGluZyBvZiBsZW1tYSArIHByb3AxL3Byb3AyL3NwZWMuCisgKiAgICAgICBoYW5kbGluZyBvZiBsZW1tYXRhIHdpdGggJ8OfJy4KKyAqIAorICogR2VuZXJhbCBjb21tZW50cyB0byB0aGUgZW5jb2Rpbmcgb2YgZGVyaXZhdGlvbnMgZnJvbSBsZW1tYSB0byB3ZnMgYW5kIGhvdyB0aGV5IGFyZSBlbmNvZGVkCisgKiBpbiB0aGUgRGVyYnkgZGF0YWJhc2U6CisgKiAKKyAqIEdMRU1NIGVuY29kaW5nOiAgCisgKiAgIF8gXyA6ICtGbGV4ICAgICAgIMOWbGUgLT4gw5ZsICAgICAgCisgKiAgICsgXyA6ICtDb21wICAgICAgIMOWbGxhbXBlIC0+IMOWbCBvciBMYW1wZSAoY29tcG91bmQpLgorICogICBfICsgOiArb3RoZXIgICAgICBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybnNjaHVoIChubyBjb21wb3VuZCBmb3IgJ1R1cm5zY2h1aCcsIG9ubHkgcHJlZml4KS4KKyAqICAgKyArIDogK0NvbXArb3RoZXIgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm4gKyBTY2h1aCAoY29tcG91bmQgZm9yICdTY2h1aCcgKyBQcmVmaXgpLgorICogQzIgbGVtbWF0aXphdGlvbiBvcHRpb25zOgorICogICBGbGV4ICAoaWRlbnRpY2FsIHRvIEdsZW1tKQorICogICBDb21wICAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpCisgKiAgIE90aGVyIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykuCisgKiAgIFNwZWMgIChvbmx5IEMyOiBpbmNsdWRlcyBhbGwgd2ZzIHdpdGggaGlwaGVuIGFuZC9vciBzb21lIG5vbi1hbHBoYWJldGljIElTTzg4NTktMSBjaGFycykKKyAqICAgICAgICAgRS5nLiDDlmwtRXhwb3J0ZSwgIk1hcmtlbiItw5ZsZS4KKyAqIERlcmJ5IEVuY29kaW5nOgorICogIHByb3AxIAlwcm9wMglzcGVjICAgCW1lYW5pbmcgaW4gQzI6CisgKiAgMAkJMAkJLQkJRmxleAorICogIDEJCTAJCS0JCUNvbXAKKyAqICAwCQkxCQktCQlPdGhlciAocHJlZml4KQorICogIDEJCTEJCS0JCUNvbXAgKyBPdGhlcgorICogIC0JCS0JCTAJCS1TcGVjCisgKiAgLQkJLQkJMQkJK1NwZWMKKyAqIAorICogRXhhbXBsZXM6CisgKiAmU2NodWgJCQk6IFNjaHVoLCBTY2h1aGUsIC4uLiBvbmx5IGZsZXhpb25zCisgKiAmU2NodWgrY29tcAkJOiBTY2h1aGUsIFR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtvdGhlcgkJOiBTY2h1aGUsIEFudGlzY2h1aGUuLi4gZmxleGlvbnMgYW5kIHByZWZpeGVkIHdmcyAobm8gY29tcG91bmRzKS4KKyAqICZTY2h1aCtjb21wK290aGVyOiBTY2h1aGUsIEFudGlzY2h1aGUsIFR1cm5zY2h1aGUsIEFudGl0dXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMgYW5kIAorICogCQkJCQkgIHByZWZpeGVkIHNpbmdsZSB3ZnMgKEFudGlzY2h1aGUpIGFuZCBwcmVmaXhlZCBjb21wb3VuZHMuCisgKiAmU2NodWgrc3BlYwkJOiAiQW50aSItU2NodWhlLCA2OGdlci1TY2h1aGUuLi4gbWF5IGJlIGNvbWJpbmVkIHdpdGggZXZlcnkgb3B0aW9uczogYWRkcworICogICAgICAgICAgICAgICAgICAgIHdmcyB3aXRoIGh5cGhlbiBhbmQvb3Igbm9uLWFscGhhYmV0aWMgY2hhcnMuCisgKiAKKyAqIENvbnZlcnNpb24gcnVsZXM6CisgKiAKKyAqICAmc2NobGllw59lbiAtPiBpbnRlcm5hbCBzZWFyY2ggZm9yICdzY2hsaWVzc2VuJywKKyAqICBiZWNhdXNlIEdsZW1tIG91dHB1dHMgJ3NzJyBmb3IgJ8OfJy4KKyAqICAKKyAqIENoYXJhY3RlciBFbmNvZGluZzoKKyAqIAorICogLSBXaGVuIGltcG9ydGluZyB3ZnMgdG8gdGhlIERlcmJ5IERhdGFiYXNlIHdpdGggZG9DdXJsR2xlbW1TZXJ2aWNlcy9pbmRleExlbW1hdGE6CisgKiAKKyAqICAgSU5QVVQ6IHdvcmRmb3JtIGxpc3QgaW4gW1VURi04XSA6IFVURi04IGlzIHRoZW4gY29udmVydGVkIHRvIExhdDEgZm9yIEdsZW1tLAorICogICAgICAgICAgdGhlIG91dHB1dCBvZiBHbGVtbSBbTGF0MV0gaXMgcmV0dXJuZWQgdG8gdGhlIEdsZW1tU2VydmljZXMgd2l0aG91dCByZWNvbnZlcnNpb24KKyAqICAgICAgICAgIHRvIFVURjggYW5kIGltcG9ydGVkIGludG8gRGVyYnkgRGF0YWJhc2UgdW5jaGFuZ2VkLgorICoJCQorICovCisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDQuMTEuMjEiOyAKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjIiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lUHJvcHMJCT0gIi9XRUItSU5GL0dsZW1tU2VydmljZXMucHJvcGVydGllcyI7CisJCisJLy8gdGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHJlYWQgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgKHRoZXNlIGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMpOgorCXByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoIAkJPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCUBDb250ZXh0CisJcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBzZXJ2bGV0Q29udGV4dDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZvdXQJPSBudWxsOworCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZmVycgk9IG51bGw7CQkKKwkJCisJLyogCisgCSAqIAorCSAqIC0gYWZ0ZXIgbG9hZFByb3BlcnRpZXMsIHNldHMgdGhlIGNsYXNzIHZhcmlhYmxlIHdpdGggbG9hZGVkIHByb3BlcnR5IHZhbHVlcy4KKwkgKiAKKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJR1NfV29ya2luZ1BhdGggCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgIkdTX1dvcmtpbmdQYXRoIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIik7CisJZm5hbWVXZnMJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lV2ZzIiwgCSAgICJnbF93ZnNfaW4udHh0Iik7CisJZm5hbWVXZnMJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVdmczsKKwlmbmFtZU91dAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVPdXQiLCAJICAgIkdsZW1tU2VydmljZXMubG9nIik7CisJZm5hbWVPdXQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZU91dDsKKwlmbmFtZUVycgkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVFcnIiLCAJICAgIkdsZW1tU2VydmljZXMuZXJyIik7CisJZm5hbWVFcnIJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUVycjsKKwlmbmFtZVNjcmlwdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVTY3JpcHQiLAkgICAiZG9HbGVtbSIpOworCWZuYW1lU2NyaXB0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVTY3JpcHQ7CisJZm5hbWVMZW1hdGEJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lTGVtYXRhIiwgICAgInRtcC9sZW0zIik7CisJZm5hbWVMZW1hdGEJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUxlbWF0YTsKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qCisJICogIGxvZ19SZXF1ZXN0OgorCSAqICAKKwkgKiAgLSB3cml0ZSBpbmZvIGFib3V0IEFQSSBSZXF1ZXN0LgorCSAqICBQYXJhbWV0ZXJzOgorCSAqICByZXF1ZXN0UGF0aAk6IHBhdGggb2Ygd2ViYXBwIGFkZHJlc3NlZCBieSB0aGUgcmVxdWVzdC4KKwkgKiAgZnVuYwkJOiBuYW1lIG9mIHRoZSBmdW5jdGlvbiB3aGljaCBpbXBsZW1lbnRzIHRoZSByZXF1ZXN0LgorCSAqICAKKwkgKiAgMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgbG9nX1JlcXVlc3QoU3RyaW5nIHJlcXVlc3RQYXRoLCBTdHJpbmcgZnVuYykKKwkKKwl7CisJLy8gdHJhbnNmb3JtICJkYXRlVHRpbWUiIC0+ICJkYXRlIHRpbWUiOgorCQorCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCWZvdXQucHJpbnRmKCIjIyMgJXM6ICVzIDogdmVycz0nJXMnLCB2ZGF0ZT0nJXMnIHJlcXVlc3Q9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RQYXRoLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgCisJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwl9IC8vIGxvZ19SZXF1ZXN0CisJCQorCS8qIGZvcm1hdERiTmFtZQorCSAqIAorCSAqIC0gZ2V0cyBuYW1lIG9mIERhdGFiYXNlIHVzZWQgYnkgRGVyYnkgZnJvbSBwcm9wcyAKKwkgKiAgIGFuZCBmb3JtYXQgaXQgdG8gSFRNTC4KKwkgKiAgCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFN0cmluZyBmb3JtYXREYk5hbWUoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJU3RyaW5nCisJCWRiTmFtZTsKKwlTdHJpbmcKKwkJZGJQYXRoID0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJaW50CisJCWogPSBkYlBhdGgubGFzdEluZGV4T2YoJy8nKTsKKwkKKwlpZiggaiA+IDAgKQorCQlkYk5hbWUgPSBkYlBhdGguc3Vic3RyaW5nKGorMSk7CisJZWxzZQorCQlkYk5hbWUgPSBkYlBhdGg7CisJCisJcmV0dXJuIGRiTmFtZTsgLy8gIjxwPjxiPkRhdGFiYXNlOiAiICsgZGJOYW1lICsgIjwvYj48L3A+XG4iOworCX0gLy8gZm9ybWF0RGJOYW1lCisKKwkvKgorCSAqIGNsb3NlTG9nU3RyZWFtczoKKwkgKiAKKwkgKiAtIGNsb3NlIHRoZSBmb3V0L2ZlcnIgbG9nIHN0cmVhbXMuCisJICogCisJICogMjYuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgY2xvc2VMb2dTdHJlYW1zKCkKKwkKKwl7CisJaWYoIGZvdXQgIT0gbnVsbCkKKwkJZm91dC5jbG9zZSgpOworCWZvdXQgPSBudWxsOworCQorCWlmKCBmZXJyICE9IG51bGwgKQorCQlmZXJyLmNsb3NlKCk7CisJZmVyciA9IG51bGw7CisJfSAvLyBjbG9zZUxvZ1N0cmVhbXMKKwkKKwkvKiBpbml0X2FuZF9sb2dfUmVxdWVzdAorCSAqIAorCSAqIC0gbG9hZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMsIHNldHMgR2xlbW1TZXJ2aWNlcyBjb25zdGFudHMKKwkgKiAgIGFuZCBsb2dzIHRoZSByZXF1ZXN0LgorCSAqIC0gbG9hZCBwcm9wZXJ0aWVzIGFuZCBzZXQgY29uc3RhbnRzIGJlZm9yZSBsb2dnaW5nIGFueXRoaW5nLCBiZWNhdXNlCisJICogICBsb2dnaW5nIHdpbGwgYmUgZG9uZSBpbnRvIHRoZSBsYXN0IHN0ZG91dC9zdGRlcnIgb3BlbmVkIGluIGdsYXNzZmlzaCdzIEpWTSwKKwkgKiAgIGUuZy4gaW4gdGhlIGxvZyBvZiBhbm90aGVyIFNlcnZpY2UuCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFByb3BlcnRpZXMgaW5pdF9hbmRfbG9nX1JlcXVlc3QoU3RyaW5nIGZ1bmMsIFN0cmluZyByZXF1ZXN0UGF0aCkKKwkKKwl7CisJU3RyaW5nCisJCXJlYWxQYXRoID0gc2VydmxldENvbnRleHQuZ2V0UmVhbFBhdGgoZm5hbWVQcm9wcyk7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtIChpZiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJUHJvcGVydGllcworCQlwcm9wcyA9IFV0aWxzLmxvYWRQcm9wZXJ0aWVzKHNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcyksIGZuYW1lUHJvcHMsIHJlYWxQYXRoLCBmYWxzZSk7CisJCisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIGZvdXQgYW5kIGZlcnIgYXMgcmVwbGFjZW1lbnQgZm9yIHN0ZG91dC9zdGRlcnIgZm9yIHVzZSBpbiBHbGVtbVNlcnZpY2VzLgorCS8vIGRvIG5vdCB1c2Ugb3IgcmVkaXJlY3QgU3lzdGVtLm91dCBhbmQgU3lzdGVtLmVyciwgYXMgdGhleSB3aWxsIGJlIHJlZGlyZWN0ZWQKKwkvLyBieSBvdGhlciBTZXJ2aWNlcyBpbiB0aGUgc2FtZSBnbGFzc2Zpc2ggSlZNLCBlLmcuIGJ5IHRoZSBXZm9ybVNlcnZpY2VzLgorCWZvdXQgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVPdXQpOworCWZlcnIgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVFcnIpOworCQorCS8vVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkKKwlsb2dfUmVxdWVzdChyZXF1ZXN0UGF0aCwgZnVuYyk7CisJCisJcmV0dXJuIHByb3BzOworCX0gLy8gaW5pdF9hbmRfbG9nX1JlcXVlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwlTdHJpbmcKKwkJc3RhdHVzOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3N0YXR1cy8iKTsKKwkKKwkvLyBodHRwU2VydmxldFJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW52KTsKKwkKKwlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+cHJvcGVydGllczwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPmRhdGFiYXNlPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIiksCisJCQkJCQkJc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSA9PSBudWxsID8gIm5vdCBmb3VuZCIgOgorCQkJCQkJCQlwcm9wcy5pc0VtcHR5KCkgPyAiZW1wdHkiIDogImxvYWRlZCIsCisJCQkJCQkJZm9ybWF0RGJOYW1lKHByb3BzKQorCQkJCQkJCSk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJY2xvc2VMb2dTdHJlYW1zKCk7CisJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiAKKwkgKiBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhOgorCSAqIAorCSAqIFBPU1Q6IC9pbmRleC9hZGQve2RhdGFiYXNlbmFtZX06IHRleHQvcGxhaW4KKwkgKiAKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGxpc3QJCSA6IHRoZSBsaXN0IG9mIHdmcyBzZW50IGluIHRoZSBib2R5IG9mIHRoZSBQT1NUIHJlcXVlc3QuCisJICogZGJwYXRoCSA6IHRoZSBsb2NhdGlvbiBvZiB0aGUgZGF0YWJhc2Ugd2hlcmUgdGhlIGxlbW1hK3dmcyBhcmUgdG8gYmUgc3RvcmVkLgorCSAqICAgICAgICAgICAgIGVuY29kZWQgYXMgIi5ob21lLnVzZXIuS29yQVAuLi4uIiwgbXVzdCBiZSBjb252ZXJ0ZWQgdG8KKwkgKiAgICAgICAgICAgICAiL2hvbWUvdXNlci9Lb3JBUC8uLi4iCisJICogTm90ZXMgICAgIDoKKwkgKiAtIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlIGxvY2F0ZWQgYXQgJ2RhdGFiYXNlbmFtZScuCisJICogLSBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZCBpbnRvIGEgRGVyYnkgZGF0YWJhc2UuCisJICogSW5wdXQJIDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICogMDQuMTEuMjEvRkIKKwkgKiAtIHN1Ym1pdHRlZCBkYXRhYmFzZSBwYXRoLgorCSAqLworCQorCUBQYXRoKCJhZGQve2RhdGFiYXNlcGF0aH0iKSAKKwlAUE9TVCAKKwlAQ29uc3VtZXMoInRleHQvcGxhaW4iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCQkJCQkJCSgKKwkJCQkJCQlTdHJpbmcgCQkJCQkJCQlsaXN0LAorCQkJCQkJCUBQYXRoUGFyYW0odmFsdWU9ImRhdGFiYXNlcGF0aCIpIAlmaW5hbCBTdHJpbmcgZGJwYXRoCisJCQkJCQkJKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvUE9TVF9pbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIAorCQlhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gbnVsbDsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2FkZC97ZGJwYXRofSIpOworCQorCWRicGF0aC5yZXBsYWNlKCcuJywgJy8nKTsKKwkKKwlmb3V0LnByaW50ZigiSW5mbyA6ICVzOiBzZWxlY3RlZCBkYXRhYmFzZSBwYXRoID0gJyVzJy5cbiIsIGZ1bmMsIGRicGF0aCk7CisJZm91dC5wcmludGYoIkluZm8gOiAlczogd29ya2luZyBkaXJlY3RvcnkgPSAnJXMnLlxuIiwgZnVuYywgR1NfV29ya2luZ1BhdGgpOworCQorCS8vIHNldCBmaWxlIGFuZCBwYXRocyBhZnRlciBHU19Xb3JraW5nUGF0aCBoYXMgYmVlbiBpbml0aWFsaXNlZDoKKwlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgZm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShmZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzLCBmb3V0LCBmZXJyKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZsO8aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEsIHByb3BzLCBkYnBhdGgpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCQorCX0gLy8gZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCisJLyogZG9HRVRfdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVycyA9ICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vIik7CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlmaW5hbCBTdHJpbmcKKwkJZGJOYW1lID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+ZGF0YWJhc2U8L2I+OiAlczwvcD4iLCBmb3JtYXREYk5hbWUocHJvcHMpKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgZGJOYW1lICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyBkb0dFVF92aWV3REJJbmZvCisKKworCS8qIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0PnZlcnNpb24gIiArIHZlcnNpb24gKyAiIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIHJlcXVlc3QgPSAnIiArIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikgKyAiJzwvaT48L2g0PlxuIiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDE6PC9iPiAoQzIgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9PC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+e2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYyk8L2NvZGU+PC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbDwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPsOWbD9vcHRzPWZsZXgrY29tcCtvdGhlcitzcGVjPC9jb2RlPjwvcD4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMjo8L2I+IChpbnRlcm5hbCBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX0/cHJvcDE9WzAxMl0mYW1wO3Byb3AyPVswMTJdJmFtcDtzcGVjPVswMTJdPC9jb2RlPiAod2hlcmUgZWFjaCBwcm9wMSwgcHJvcDIsIHNwZWMgaXMgb3B0aW9uYWwpLjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw/cHJvcDE9MCZhbXA7cHJvcDI9MSZhbXA7c3BlYz0yPC9jb2RlPjwvcD4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfSIpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSclZCcgcHJvcDI9JyVkJyBzcGVjPSclZCcuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwkvKiAKKwlmb3IoaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJCX0JCisJICovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoIGxlbW1hSW5mby5vcHRzU2V0dGluZyA9PSBMZW1tYUluZm8uT1BUU19TRVRUSU5HX0MyICkgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMSxwcm9wMixzcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaW50CisJCW5XZnMgPSBsZW1tYUluZm8ubldmczsKKwkKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwkvLyBsb2cgb3V0Y29tZToKKwlpZiggbldmcyA8IDAgKQorCQlmb3V0LnByaW50ZigiRXJyb3I6ICVzOiByZXR1cm5pbmcgMCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMpOworCWVsc2UKKwkJZm91dC5wcmludGYoIkRlYnVnLiAlczogcmV0dXJuaW5nICVkIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYywgbldmcyk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIG5vdGU6CisJICogLSBpZiBCcm93c2VyIHJlcXVlc3Q6IEhUVFBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAndGV4dC9odG1sLC4uLnhtbC4uLicKKwkgKiAtIGlmIFdmb3JtU2VydmljZXMgcmVxdWVzdDogSHR0cFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICdhcHBsaWNhdGlvbi9qc29uJy4KKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqIAorCSAqIC0gc3VibWl0dGVkIFVSTCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hLCBpcyBpbnRlcnByZXRlZCBieSBnbGFzc2Zpc2ggYXMKKwkgKiAgIGJlaW5nIElTTy04ODU5LTEgZW5jb2RlZC4gV2hlbiB0aGUgcmVxdWVzdCBpcyBVVEYtOCBlbmNvZGVkLCBVbWxhdXRzIGFuZAorCSAqICAgJ8OfJyBhcmUgbWlzLWludGVycHJlZGVkLCBsZWFkaW5nIHRvIGFuIGVycm9uZXJvdXMgcmVxdWVzdCB0byB0aGUgRGVyYnkKKwkgKiAgIGRhdGFiYXNlLgorCSAqIC0gUmVxdWVzdGVkIGxlbW1hICdsZW1tYScgaGFzIHRvIGJlIHRyYW5zZm9ybWVkIHRvIFVURi04IGZpcnN0LgorCSAqIC0gbm90ZTogZXZlbiB3aGVuIHN1Ym1pdHRpbmcgdGhlIEdFVCByZXF1ZXN0IGJ5IHNwZWNpZnlpbmcgJ2NoYXJlbmNvZGU9VVRGLTgnLAorCSAqICAgZ2xhc3NmaXNoIGRvZXMgbm90IGNvbnZlcnQgaXQgYXV0b21hdGljYWxseSBhcyBleHBlY3RlZC4KKwkgKiAgIAorCSAqICAyMi4xMC4yMS9GQgorCSAqIAorCSAqIC0gaWYgYWNjZXB0PWFwcGxpY2F0aW9uL2pzb24gcmV0dXJuIFVURi04IChXZm9ybVNlcnZpY2VzKS4KKwkgKiAtIGVsc2UgaWYgYWNjZXB0PXRleHQvaHRtbCBkbyBub3QgdHJhbnNmb3JtIGNoYXJhY3RlciBlbmNvZGluZyAoQnJvd3NlcikuCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBDb25zdW1lcygiYXBwbGljYXRpb24vanNvbiwgdGV4dC9odG1sIikKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCQorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCWZpbmFsIGJvb2xlYW4KKwkJYkVuY29kZUxlbW1hID0gZmFsc2U7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CisJCisJLyogdGVzdDoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJaWYoIGJFbmNvZGVMZW1tYSApCisJCXsKKwkJLy8gd2hlbiBhY2NlcHRpbmcgSlNPTiwgdXJsIGhhcyB0byBiZSBjb252ZXJ0ZWQgdG8gVVRGLTgsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYToKKwkJdHJ5IHsKKwkJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obmV3IFN0cmluZyhsZW1tYS5nZXRCeXRlcygiSVNPLTg4NTktMSIpLCAidXRmLTgiKSk7CisJCQl9IAorCQljYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlMSkgeworCQkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCQlMZW1tYVJlc3BvbnNlCisJCQkJbGVtcmVzcCA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbXJlc3ApLmJ1aWxkKCk7CisJCQl9CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW1VURi04XSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCWVsc2UKKwkJeworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbdW5jaGFuZ2VkXSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCisJLyogZG9lcyBub3QgaGVscDoKKwkgU3RyaW5nCisJIAlyZXF1ZXN0Q2hhckVuY29kaW5nID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldENoYXJhY3RlckVuY29kaW5nKCk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiByZXF1ZXN0IGNoYXJhY3RlciBlbmNvZGluZyA9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RDaGFyRW5jb2RpbmcpOworCSovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXsKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQkvL3JldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJfQorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsJCisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCS8qCisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC90ZXN0L2luZm8vIik7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL2ZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJZm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5Lzg3LzIwNGI4MGZmODcyYjAwMWMxYzQxY2U1NTllYTVlMTZiIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS84Ny8yMDRiODBmZjg3MmIwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGExYjIyCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS84Ny8yMDRiODBmZjg3MmIwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpAQCAtMCwwICsxLDcxNSBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDYuMTAuMjEiOyAvLyIxNy4wNi4yMCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4xIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCQlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCQlTdHJpbmcKKwkJCXN0YXR1czsKKwkJVXRpbHMKKwkJCXUgPSBuZXcgVXRpbHMoKTsKKwkJUHJvcGVydGllcworCQkJcHJvcHM7CisJCVN0cmluZworCQkJcHJvcE5hbWUgPSAiR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIjsKKwkJLy8gcmVhZCB0ZXN0CisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJLy9IdHRwU2VydmxldENvbnRleHQKKwkJCisJCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCQlJbnB1dFN0cmVhbQorCQkJaW5Qcm9wID0gR2xlbW1TZXJ2aWNlcy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpLmdldFJlc291cmNlQXNTdHJlYW0ocHJvcE5hbWUpOworCQkKKwkJaWYoIGluUHJvcCA9PSBudWxsICkKKwkJCXsKKwkJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBsb2FkICclcychXG4iLCBmdW5jLCBwcm9wTmFtZSk7CisJCQl9CisJCQorCQl0cnkgeworCQkJcHJvcHMubG9hZChpblByb3ApOworCQkJU2V0PEVudHJ5PE9iamVjdCxPYmplY3Q+PgorCQkJCXByb3BzU2V0ID0gcHJvcHMuZW50cnlTZXQoKTsKKwkJCQorCQkJZm9yKEVudHJ5PE9iamVjdCwgT2JqZWN0PiBwcm9wRW50cnkgOiBwcm9wc1NldCkKKwkJCQl7CisJCQkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcCAlcyA9ICclcycuXG4iLCBmdW5jLCBwcm9wRW50cnkuZ2V0S2V5KCksIHByb3BFbnRyeS5nZXRWYWx1ZSgpKTsKKwkJCQl9CisJCQl9IAorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGxvYWQgcHJvcHMgJ0dsZW1tU2VydmljZXMucHJvcGVydGllcychIiwgIGZ1bmMpOworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQkKKwkJLy8gZW5kIG9mIHJlYWQgdGVzdAorCQkKKwkJLy8gdGVzdAorCQkvKgorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCQorCQkgKiBwcm9wcy5zZXRQcm9wZXJ0eSgicCIsICJ0ZXN0Iik7CisJCSAqCisJCUZpbGVPdXRwdXRTdHJlYW0gb3V0OworCQl0cnkgeworCQkJb3V0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oImdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOworCQkJcHJvcHMuc3RvcmUob3V0LCAgInRlc3QgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIik7CisJCQl9IAorCQljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfTsKKwkJKi8KKwkJCisJCS8vIGVuZCBvdGVzdAorCQkKKwkJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiQVBJOiAlczogL2luZGV4L3N0YXR1cy8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCisJCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCQlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIFBPU1Q6IC9pbmRleC9hZGQvOiB0ZXh0L3BsYWluCisJICogYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UuCisJICogVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQKKwkgKiBpbnRvIHRoZSBkYXRhYmFzZS4KKwkgKiBJbnB1dDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICovCisJQFBhdGgoImFkZCIpIEBQT1NUIEBDb25zdW1lcygidGV4dC9wbGFpbiIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBpbXBvcnRMZW1tYURhdGEoU3RyaW5nIGxpc3QpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSBhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCQorCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvYWRkLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZu+/vWhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCX0KKworCS8qIHZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIHZpZXdEQkluZm8KKworCisJLyogdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgLSBTdGF0dXM6IDxpPldvcmsgaW4gcHJvZ3Jlc3MuLi4hPC9pPik8L2g0PlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggIW9wdGlvbnMuZXF1YWxzKCJ1bmRlZiIpKQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMS9wcm9wMi9zcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogR2xlbW1TZXJ2aWNlcyAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uRGF0ZSwgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCS8vU3lzdGVtLm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5Lzg5LzUwNjE1MGNhYmQ4ZTAwMWExY2I4YTFlYTA4MzQzOGFlIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS84OS81MDYxNTBjYWJkOGUwMDFhMWNiOGExZWEwODM0MzhhZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDdmYjY0Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS84OS81MDYxNTBjYWJkOGUwMDFhMWNiOGExZWEwODM0MzhhZQpAQCAtMCwwICsxLDY2IEBACis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiAKKwl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKwl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICA8Z3JvdXBJZD5kZS5rb3JhcC5zZXJ2aWNlczwvZ3JvdXBJZD4KKyAgPGFydGlmYWN0SWQ+dGVzdHM8L2FydGlmYWN0SWQ+CisgIDx2ZXJzaW9uPjAuMTwvdmVyc2lvbj4KKyAgPCEtLSAgPnBhY2thZ2luZz53YXI8L3BhY2thZ2luZy0tPgorICA8bmFtZT5Kc29uIFRlc3QgTWV0aG9kczwvbmFtZT4KKyAgCisgIDxkZXNjcmlwdGlvbj5UZXN0cyBmb3IgSnNvbiBQYXJzaW5nPC9kZXNjcmlwdGlvbj4KKyAgCisgIDxkZXBlbmRlbmNpZXM+CisgICAgPGRlcGVuZGVuY3k+CisgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KKyAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgorICAgICAgPHZlcnNpb24+My44LjE8L3ZlcnNpb24+CisgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgPC9kZXBlbmRlbmN5PgorICAgPGRlcGVuZGVuY3k+CisgICAgPGdyb3VwSWQ+Y29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmU8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+amFja3Nvbi1jb3JlPC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjIuOS42PC92ZXJzaW9uPgorICAgIDxzY29wZT5jb21waWxlPC9zY29wZT4KKyAgIDwvZGVwZW5kZW5jeT4KKwk8ZGVwZW5kZW5jeT4KKwkgIDxncm91cElkPmNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlPC9ncm91cElkPgorCSAgPGFydGlmYWN0SWQ+amFja3Nvbi1hbm5vdGF0aW9uczwvYXJ0aWZhY3RJZD4KKwkgIDx2ZXJzaW9uPjIuOS42PC92ZXJzaW9uPgorCTwvZGVwZW5kZW5jeT4KKwk8ZGVwZW5kZW5jeT4KKwkgIDxncm91cElkPmNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlPC9ncm91cElkPgorCSAgPGFydGlmYWN0SWQ+amFja3Nvbi1kYXRhYmluZDwvYXJ0aWZhY3RJZD4KKwkgIDx2ZXJzaW9uPjIuOS42PC92ZXJzaW9uPgorCSAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KKwk8L2RlcGVuZGVuY3k+CisJPGRlcGVuZGVuY3k+CisJCTxncm91cElkPmRlLmtvcmFwPC9ncm91cElkPgorCQk8YXJ0aWZhY3RJZD5qc29uPC9hcnRpZmFjdElkPgorCTwvZGVwZW5kZW5jeT4KKyAgPC9kZXBlbmRlbmNpZXM+CisgIAorICA8YnVpbGQ+CisgICAgPHNvdXJjZURpcmVjdG9yeT5zcmM8L3NvdXJjZURpcmVjdG9yeT4KKyAgICA8cGx1Z2lucz4KKyAgICAgIDxwbHVnaW4+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWNvbXBpbGVyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+My43LjA8L3ZlcnNpb24+CisgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgIDxzb3VyY2U+MS44PC9zb3VyY2U+CisgICAgICAgICAgPHRhcmdldD4xLjg8L3RhcmdldD4KKyAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgPC9wbHVnaW4+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi13YXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4zLjIuMTwvdmVyc2lvbj4KKyAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgPGZhaWxPbk1pc3NpbmdXZWJYbWw+ZmFsc2U8L2ZhaWxPbk1pc3NpbmdXZWJYbWw+CisgICAgICAgICAgPHdhclNvdXJjZURpcmVjdG9yeT5XZWJDb250ZW50PC93YXJTb3VyY2VEaXJlY3Rvcnk+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvcGx1Z2luPgorICAgIDwvcGx1Z2lucz4KKyAgICA8ZmluYWxOYW1lPlRlc3RHbGVtbVNlcnZpY2VzPC9maW5hbE5hbWU+CisgIDwvYnVpbGQ+CisgIAorPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvOGMvNjA0Mzg4ZmQ1OTNlMDAxYzEwMzVjMWVhZjM4YWY1OTAgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzhjLzYwNDM4OGZkNTkzZTAwMWMxMDM1YzFlYWYzOGFmNTkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ODJkZTEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzhjLzYwNDM4OGZkNTkzZTAwMWMxMDM1YzFlYWYzOGFmNTkwCkBAIC0wLDAgKzEsODA1IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKK2ltcG9ydCBqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7CitpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitwdWJsaWMgY2xhc3MgR2xlbW1EQgorCit7CisJc3RhdGljIHB1YmxpYyBTdHJpbmcgZGJUYWJsZSAJPSAiR2xlbW1MZW1tYXRhIjsKKwlzdGF0aWMgU3RyaW5nIGRiTGVtbWEgCQkgCT0gImxlbW1hIjsKKwlzdGF0aWMgU3RyaW5nIGRiV2YJIAkJCT0gIndmIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDEgCQkJPSAicHJvcDEiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMiAJCQk9ICJwcm9wMiI7CisKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKG92ZXJ3cml0dGVuIGJ5IEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZuYW1lREIgPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgc2VydmVySG9zdCA9ICIvL2xvY2FsaG9zdDoxNTI3LyI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChmaW5hbCBhc3NpZ25tZW50cyk6CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyRW1iID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZERyaXZlciI7CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyQ2xpZW50ID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREcml2ZXIiOworCisJZmluYWwgc3RhdGljIGJvb2xlYW4KKwkJdXNlUHJlcGFyZWRTdG10ID0gdHJ1ZTsgLy8gMT11c2UgUHJlcGFyZWRTdGF0ZW1lbnQgYW5kIG5vdCBTdGF0ZW1lbnQuCisJCisJLy8gdmFsdWVzIHRvIGJlIGluc2VydGVkOiBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYy4KKwlzdGF0aWMgU3RyaW5nIGluc2VydFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKCclcycsICclcycsICclcycsICclcycsICclcycpIjsKKwlzdGF0aWMgU3RyaW5nIGluc2VydFByZXBhcmVkUXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoPywgPywgPywgPywgPykiOworCQorCS8vIENvbnN0YW50cyBvZiB0YWJsZSBHbGVtbUxlbW1hdGE6CisJc3RhdGljIGZpbmFsIGludCBtYXhMZW1tYVNpemUJPSA2NDsgCS8vIG1heC4gbm8uIG9mIGNoYXJzLCBhcyBkZWNsYXJlZCBpbiB0YWJsZSBHbGVtbUxlbW1hdGEuCisJc3RhdGljIGZpbmFsIGludCBtYXhXZlNpemUJCT0gNjQ7CS8vIG1heC4gbm8uIG9mIGNoYXJzLCBhcyBkZWNsYXJlZCBpbiB0YWJsZSBHbGVtbUxlbW1hdGEuCisJCisJLyogdmFyaWFibGVzICovCisJc3RhdGljIGludCBuRXhjZXB0U3RtdAkJCT0gMDsJLy8gY291bnQgbm8uIG9mIGV4Y2VwdGlvbnMgZm9yIHByZXBhcmVkU3RtdC4KKwlzdGF0aWMgaW50IG5FeGNlcHRJbnNlcnQJCT0gMDsJLy8gY291bnQgbm8uIG9mIGV4Y2VwdGlvbnMgZm9yIEluc2VydHMuCisJCisJLyoKKwkgKiBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkgKiAKKwkgKiBBcmd1bWVudHM6CisJICogcHJvcHMJOiBQcm9wZXJ0aWVzIGxvYWRlZCBieSB0aGUgR2xlbW1TZXJ2aWNlcy4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgZnVuY3Rpb24gbG9hZHMgb25seSB0aG9zZSBDb25zdGFudHMgbmVlZGVkIGluIHRoaXMgY2xhc3MuCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzCXByb3BzKQorCQorCXsKKwlmbmFtZURCCQkgCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAJIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCXNlcnZlckhvc3QJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgInNlcnZlckhvc3QiLAkiLy9sb2NhbGhvc3Q6MTUyNy8iKTsKKwlkZXJieURCVVJMIAkJPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJCQkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qICAgIGNoZWNrRGVyYnlDb25uZWN0aW9uOgorCSAqIAorCSAqIGNoZWNrIGlmIERlcmJ5IE5ldHdvcmsgU2VydmVyIGlzIGF2YWlsYWJsZS4KKwkgKiBSZXR1cm5zOiAwICg9T0spIG9yIC0xIChvbiBlcnJvcikuCisJICogMDUuMTEuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgY2hlY2tEZXJieUNvbm5lY3Rpb24oKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAiY2hlY2tEZXJieUNvbm5lY3Rpb24iOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlLAorCS8vIHNldCBBdXRvY29tbWl0ID0gZmFsc2UgdG8gYWNjZWxlcmF0ZSBpbnNlcnRpb25zOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyB0byAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IAorCQl7IAorCQl0cnkgeyAvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyBjaGVja19EZXJieUNvbm5lY3Rpb24KKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCQkJCQlpbXBvcnRHbGVtbUxlbWF0YQorCSAqIFBhcmFtZXRlcnM6CisJICogZm4JCSA6IGFic29sdXRlIGZpbGUgbmFtZSBvZiBHTEVNTSBvdXRwdXQgW0lTTzg4NTktMV0gZXhwZWN0ZWQsIG5vdCBVVEYtOCEKKwkgKiBwcm9wcwkgOiBQcm9wZXJ0aWVzIHZvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgdG8gc2V0IGNvbnN0YW50cyBuZWVkZWQKKwkgKiAJCQkgICBpbiB0aGlzIGNsYXNzLgorCSAqIGRicGF0aAkgOiBsb2NhdGlvbiArIG5hbWUgb2YgZGF0YWJhc2Ugd2hlcmUgdG8gc3RvcmUgbGVtbWF0YSt3ZnMuCisJICogUmV0dXJucwkgOiAwPU9LLCAtMTogZ2VuZXJhbCBlcnJvcjsgPiAwIDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAKKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIGR5bmFtaWNhbGx5IGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqIDA0LjExLjIxL0ZCIGRicGF0aC4KKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YShTdHJpbmcgZm4sIFByb3BlcnRpZXMgcHJvcHMsIGZpbmFsIFN0cmluZyBkYnBhdGgpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YSI7CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4gPSBudWxsOworCWludAorCQluRXJyb3JzOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyB3aGVuIGluZGV4aW5nIGRhdGEgaW50byB0aGUgZGF0YWJhc2UsIHNlbGVjdCB0aGUgc3VibWl0dGVkIGRicGF0aCwKKwkvLyAobm90IHRoZSBvbmUgc3RvcmVkIGluIHRoZSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCWRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGRicGF0aDsKKwkKKwkvLyBvcGVuIHJlYWRlciBvbiBHbGVtbSBMZW1tYXRhOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCWluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCQorCQluRXJyb3JzID0gd3JpdGVEQkxlbW1hdGEoaW4pOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBmcm9tICclcychXG4iLCBmdW5jLCBmbik7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCisJLy8gY2xvc2UgUmVhZGVyOgorCXRyeSB7CisJCWluLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJbkVycm9ycyA9IC0xOworCQl9CisJCisgCWlmKCBuRXJyb3JzID09IDAgKQorIAkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQgZG9uZSBzdWNjZXNzZnVsbHkuXG4iLCBmdW5jKTsKKyAJZWxzZQorIAkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQ6ICVkIEVycm9ycyFcbiIsIGZ1bmMsIG5FcnJvcnMpOworIAkKKwlyZXR1cm4gbkVycm9yczsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YQorCQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVEQkxlbW1hdGEoKQorCSAqICAgICAgICAgICAgICAgICAgICAgICAKKwkgKiBzdG9yZXMgbGlzdCBvZiBsZW1tYXRhICsgaW5mb3MgaW50byBEZXJieSBkYi4KKwkgKiBGaWxlIGZvcm1hdDogIkxlbW1hIERlY29tcG9zaXRpb24gV2YiLAorCSAqICAgICAgICAgICAgICBlLmcuOiAiSMOkdXNlciArLSBIYXVzIi4KKwkgKiBSZXR1cm5zOiAwID0gT0sgb3IgLTE6IGdlbmVyYWwgZXJyb3Igb3IgPiAwOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIDA5LjAxLjIwL0ZCCisJICogMDQuMTEuMjEvRkIgdHVybiBhdXRvY29tbWl0IG9mZiB0byBhY2NlbGVyYXRlIGh1Z2UgYW1vdW50IG9mIGluc2VydGlvbnMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYXRhKEJ1ZmZlcmVkUmVhZGVyIGluKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hdGEiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJUHJlcGFyZWRTdGF0ZW1lbnQKKwkJc3RtdFByZXAgPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10IAkgPSBudWxsOworCVN0cmluZworCQlsaW5lOwkKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQluSW5zZXJ0ZWQgPSAwLAkvLyBuby4gb2YgbGVtbWEvd2YgcGFpcnMgaW1wb3J0ZWQuCisJCXJldCA9IDA7IC8vIE9LLgorCWJvb2xlYW4KKwkJY29udGFpbnNTcGVjOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZSwKKwkvLyBzZXQgQXV0b2NvbW1pdCA9IGZhbHNlIHRvIGFjY2VsZXJhdGUgaW5zZXJ0aW9uczoKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJY29uLnNldEF1dG9Db21taXQoZmFsc2UpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZCAoYXV0b0NvbW1pdD1vZmYpLlxuIiwgZnVuYyk7CisJCQorCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCXN0bXRQcmVwID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0UHJlcGFyZWRRdWVyeSk7CisJCWVsc2UKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisKKwkJd2hpbGUoIChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoICE9IDMgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6ICclcycgaGFzICVkIGNvbXBvbmVudHMhIEV4cGVjdGVkID0gMyEgQ2Fubm90IGJlIHN0b3JlZCFcbiIsIGZ1bmMsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJCW5FcnJvcnMrKzsKKwkJCQljb250aW51ZTsKKwkJCQl9CisJCQkKKwkJCS8vIEdldCBJbmZvLCBpZiB3b3JkZm9ybSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgJy0nLCBpbnRlcnB1bmN0aW9uIGV0Yy46CisJCQkvLyBsZW1tYUluZm9bMl0gPSB3b3JkZm9ybS4KKwkJCWNvbnRhaW5zU3BlYyA9IExlbW1hSW5mby5pc1dmU3BlY2lhbENhc2UobGVtbWFJbmZvWzJdKTsKKwkJCS8vIHN0b3JlIGludG8gREI6CisJCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZChzdG10UHJlcCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvcyhzdG10LCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJCisJCQlpZiggcmV0ICE9IDAgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBzdG9yZSBsZW1tYSAnJXMnIGludG8gREIhIChyZXQ9JWQpXG4iLCBmdW5jLCBsaW5lLCByZXQpOworCQkJCW5FcnJvcnMrKzsgCisJCQkJfQorCQkJZWxzZQorCQkJCW5JbnNlcnRlZCsrOworCQkJfSAvLyB3aGlsZQorCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBHbGVtbSBsZW1tYXRhK2luZm9zIGZyb20gZmlsZSEgRXhpdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7IAorCQl9CQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IAorCQl7IAorCQl0cnkgeworCQkJLy8gaW1wb3J0YW50OiBub3cgY29tbWl0LCBhcyBhdXRvQ29tbWl0IGlzIGRlYWN0aXZhdGVkLAorCQkJLy8gdGhpcyBhbHNvIHJlbW92ZXMgZGF0YWJhc2UgbG9ja3M6CisJCQljb24uY29tbWl0KCk7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbW1pdCBzdWNjZXNzZnVsbC5cbiIsIGZ1bmMpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbW1pdCBhdCB0aGUgZW5kIG9mIHRoZSB3ZnMgbGlzdCBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJCisJCXRyeSB7IC8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIAorCQkJCXN0bXQuY2xvc2UoKTsKKwkJCWlmKCBzdG10UHJlcCAhPSBudWxsICkgCisJCQkJc3RtdFByZXAuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiSW5mbyA6ICVzOiBuby4gb2YgbGVtbWF0YS93ZiBwYWlycyBpbnNlcnRlZCA9ICVkLlxuIiwgZnVuYywgbkluc2VydGVkKTsKKwkKKwlyZXR1cm4gbkVycm9yczsgLy8gMD1PSywgPjAgPSBuby4gb2YgZXJyb3JzLgorCX0gLy8gd3JpdGVEQkxlbW1hdGEKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQ6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gcnVsZXMgaW50byBEZXJieSBEQi4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgaXMgdGhlIHZlcnNpb24gd2l0aCBhIFByZXBhcmVkUXVlcnkuCisJICogUGFyYW1ldGVyczoKKwkgKiBzcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTcuMDEuMjAvRkIKKwkgKiAwNS4xLjIxL0ZCIHJlamVjdCBsZW1tYS93ZiA+IDY0IGNoYXJzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCgKKwkJCVByZXBhcmVkU3RhdGVtZW50IHN0bXQsIAorCQkJU3RyaW5nIGxlbW1hLCAKKwkJCVN0cmluZyB3ZiwgCisJCQlTdHJpbmcgZGVjb21wb3NpdGlvbiwgCisJCQlib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCI7CisJZmluYWwgYm9vbGVhbgorCQliTG9nID0gZmFsc2U7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJYm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJLy8gY2hlY2sgc2l6ZSBvZiB3ZiBhbmQgbGVtbWEgYWdhaW5zdCBmaWVsZCBzaXplIGluIHRhYmxlIEdsZW1tTGVtbWF0YToKKwlpZiggbGVtbWEubGVuZ3RoKCkgPj0gR2xlbW1EQi5tYXhMZW1tYVNpemUgKSAKKwkJeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGxlbW1hIHJlamVjdGVkICg+ICVkKTogJyVzJyFcbiIsCisJCQkJZnVuYywgbWF4TGVtbWFTaXplLCBsZW1tYSk7CisJCXJldHVybiA0OworCQl9CisJaWYoIHdmLmxlbmd0aCgpID49IEdsZW1tREIubWF4V2ZTaXplICkgCisJCXsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3ZiByZWplY3RlZCAoPiAlZCk6ICclcychXG4iLAorCQkJCWZ1bmMsIG1heFdmU2l6ZSwgd2YpOworCQlyZXR1cm4gNTsKKwkJfQorCSAKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgCisJLy8gZm9yIGxvZ2luZyBvbmx5OgorCXNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwlpZiggYkxvZyApCisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorICAgIC8vIG5vdyBpbnNlcnQgbmV3IHZhbHVlcyBpbnRvIFByZXBhcmVkU3RhdGVtZW50OgorICAgIHRyeSB7CisgICAgCXN0bXQuc2V0U3RyaW5nKCAxLCBsZW1tYSk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKCAyLCB3Zik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbigzLCBwcm9wMSk7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig0LCBwcm9wMik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig1LCBzcGVjKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcmVwYXJlZCBzdG10ID0gJyVzJy5cbiIsICBmdW5jLCBzdG10LnRvU3RyaW5nKCkpOworICAgICAgICB9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlMSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKAkiRXJyb3I6ICVzOiB3aGlsZSBmaWxsaW5nIHByZXBhcmVkIHN0YXRlbWVudCB3aXRoIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0nJWInIHByb3AyPSclYicgc3BlYz0nJWInIVxuIiwgIAorCQkJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJaWYoICsrbkV4Y2VwdFN0bXQgPD0gMSApCisJCQllMS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKyAgICAKKyAgICB0cnkgeworCQkvLyBleGVjdXRlIHRoZSBmaWxsZWQgcHJlcGFyZWQgc3RhdGVtZW50OgorCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhIChuPSVkKVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYywgbik7CisgCQkJcmV0dXJuIDI7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQlpZiggKytuRXhjZXB0SW5zZXJ0IDw9IDEgKQorCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDM7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZAorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3M6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gaW50byBEZXJieSBEQi4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGNvbnRhaW5zU3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDEwLjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zKFN0YXRlbWVudCBzdG10LCBTdHJpbmcgbGVtbWEsIFN0cmluZyB3ZiwgU3RyaW5nIGRlY29tcG9zaXRpb24sIGJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zIjsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlCb29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworICAgIAorICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorCXRyeSB7CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoc3FsSW5zZXJ0KTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYURhdGEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBmcm9tIHRoZSBHbGVtbURCLgorCSAqIElucHV0OiBsZW1tYSArIEdMRU1NX09QVFNfeHh4IChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWFEYXRhKExlbW1hSW5mbyBsZW1tYUluZm8sIFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYURhdGEiOworCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJbGVtbWFJbmZvLmNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJbGVtbWFJbmZvLnN0bXQgPSBsZW1tYUluZm8uY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlpbnQgciA9IHJlYWREQkxlbW1hKGxlbW1hSW5mby5zdG10LCBsZW1tYUluZm8pOworCQkJCisJCWlmKCByICE9IDAgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZ2V0IGRhdGEgZm9yIGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIVxuIiwgCisJCQkJCWZ1bmMsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwkJCXJldHVybiAxOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggbGVtbWFJbmZvLmNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hRGF0YQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGJ5IGFjY2Vzc2luZyB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dCA6IGxlbW1hICsgcHJvcDErMiAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogT3V0cHV0OiAKKwkgKiAgLSBjb250YWlucyBhIFJlc3VsdFNldCBmb3IgZmV0Y2hpbmcgdGhlIHdvcmRmb3Jtcy4KKwkgKiAJICBUaGlzIFJlc3VsdFNldCB3aWxsIGhhdmUgYmUgYmUgY2xvc2VkIHdpdGggTGVtbWFJbmZvLmNsb3NlKCkuCisJICogCSAgVGhlIG5vLiBvZiBmb3VuZCB3b3JkZm9ybXMgaXMgbm90IGtub3duIHRpbGwgd2UKKwkgKiAJICBmZXRjaCBhbGwgb2YgdGhlbSBmcm9tIFJlc3VsdFNldCEgCisJICogCS0gZHVlIHRvIFNFTEVDVCBESVNUSU5DVCBvbmx5IHVuaXEgd2YgYXJlIHJldHVybmVkLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYShTdGF0ZW1lbnQgc3RtdCwgTGVtbWFJbmZvIGxlbW1hSW5mbykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hIjsKKwlTdHJpbmcKKwkJc3FsOworCQkKKwlzcWwgPSBTdHJpbmcuZm9ybWF0KCJTRUxFQ1QgRElTVElOQ1Qgd2YgZnJvbSAlcyBXSEVSRSBsZW1tYT0nJXMnICVzICVzICVzIiwgCisJCQlkYlRhYmxlLAorCQkJbGVtbWFJbmZvLmxlbW1hLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiQU5EIHByb3AxPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAxID8gIkFORCBwcm9wMT0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiQU5EIHByb3AyPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAxID8gIkFORCBwcm9wMj0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiQU5EIHNwZWM9J3RydWUnIiAgIDogCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICJBTkQgc3BlYz0nZmFsc2UnIiAgOiAiIik7CisJCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgZnVuYywgbGVtbWFJbmZvLnByb3AxLCBsZW1tYUluZm8ucHJvcDIsIGxlbW1hSW5mby5zcGVjKTsKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbCA9ICclcycuXG4iLCBmdW5jLCBzcWwpOworCisJdHJ5IHsKKwkJbGVtbWFJbmZvLnJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoZW4gZXhlY3V0aW5nIHNxbD0nJXMnIVxuIiwgZnVuYywgc3FsKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gYWxsIHNxbCBzdHVmZiBhcmUgY2xvc2VkIG91dHNpZGUgdGhpcyBmdW5jdGlvbiwgc28gZG9uJ3QgY2xvc2UgdGhlbSBoZXJlIQorCQl9CQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3MKKwkgKiBSZXR1cm5zIEdlbmVyYWwgSW5mb3MgYWJvdXQgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIHJlYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJJbmZvcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJZGJJbmZvID0gcmVhZERiTGVtbWF0YUluZm9zKHN0bXQpOworCQkJCisJCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCByZWFkIEdlbmVyYWwgSW5mb3MgZnJvbSBHbGVtbSBEYXRhYmFzZSFcbiIsIGZ1bmMpOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSBjb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSBzdG10LmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIG1heSBiZSBudWxsLgorCQkKKwl9IC8vIHJlYWREYkluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiTGVtbWF0YUluZm9zOgorCSAqIHJlYWRzIGFuZCByZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGNvbnRlbnQgCisJICogb2YgdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIFJldHVybnMgMD1PSyBvciBlcnJvciBjb2RlID4gMC4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkxlbW1hdGFJbmZvcyhTdGF0ZW1lbnQgc3RtdCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAicmVhZERiTGVtbWFJbmZvcyI7CisJU3RyaW5nW10KKwkJc3FsID0gewkiU0VMRUNUIENPVU5UKGRpc3RpbmN0IGxlbW1hKSBmcm9tICIgKyBkYlRhYmxlICwJLy8gY291bnRzIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSwJCQkJCS8vIGNvdW50cyB0b3RhbCBuby4gb2Ygc3RvcmVkIHdvcmRmb3Jtcy4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPXRydWUiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPXRydWUifTsKKwlSZXN1bHRTZXQKKwkJcmVzID0gbnVsbDsgCisJaW50W10KKwkJbkNvdW50cyA9IG5ldyBpbnRbc3FsLmxlbmd0aF07CisJaW50CQkKKwkJaSA9IDAsIAorCQluRGlzdExlbW1hdGEgPSAtMSwJLy8gbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEgaW4gREIuCisJCW5XZnMJCSA9IC0xOwkvLyBuby4gb2Ygd29yZGZvcm1zIGluIERCLgorCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBleHRyYWN0aW5nIGFncmVnYXRlZCBpbmZvcyBhYm91dCBEYXRhYmFzZSBjb250ZW50cy4uLlxuIiwgZnVuYyk7CisJCisJZGJJbmZvID0gbmV3IEdsZW1tREJJbmZvKCk7CisKKwkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwl0cnkgeworCQlmb3IoaT0wOyBpPHNxbC5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCXJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbFtpXSk7CisJCQlpZiggcmVzLm5leHQoKSApCisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IHJlcy5nZXRJbnQoMSk7IC8vIGNvdW50IGlzIGluIGNvbHVtbiAxLgorCQkJZWxzZQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBleHRyYWN0IGNvdW50IGZyb20gJyVzJyFcbiIsIGZ1bmMsIHNxbFtpXSk7CisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IC0xOworCQkJCX0KKwkJCX0KKyAgICAgICAKKyAgICAgICAgfQorICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgIAl7CisgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogc3FsPSclcycgZmFpbGVkIVxuIiwgZnVuYywgc3FsW2ldKTsKKyAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAJfQorCWZpbmFsbHkgeworCQl0cnkgeworCQkJcmVzLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBPSworCX0gLy8gcmVhZERiTGVtbWF0YUluZm9zCisJCisJLyoqKioqKioqKioqKioqKioqKioqIFRlc3QgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zX3Rlc3QKKwkgKiBUaGlzIGlzIGRlYnVnIGNvZGUgd3JpdHRlbiB0byB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIERlcmJ5CisJICogRGF0YWJhc2UgZnJvbSBhbiBleHRlcm5hbCBKYXZhIFByb2dyYW1tLgorCSAqIDA4LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCByZWFkRGJJbmZvc190ZXN0KCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlTdHJpbmcKKwkJaW5zZXJ0U3RtdCA9ICIiOworCQorCS8vIENvbm5lY3QgdG8gRGVyYnkgZGF0YWJhc2U6CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCQorCQkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwkJdHJ5CisJCQl7CisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIAorICAgICAgICAgICAgCXNxbCA9ICJTRUxFQ1QgKiBGUk9NICIgKyBkYlRhYmxlOworICAgICAgICAgICAgUmVzdWx0U2V0IAorICAgICAgICAgICAgCXJlc3VsdCA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CisgCisgICAgICAgICAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHRhYmxlICclcyc6XG4iLCAgZnVuYywgZGJUYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQubmV4dCgpKSB7CisgICAgICAgICAgICAJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiJyVzJyA6ICclcycgOiAnJXMnIDogJyVzJyAuXG4iLCByZXN1bHQuZ2V0U3RyaW5nKDEpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygyKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMyksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDQpKTsKKyAgICAgICAgCQlpbnNlcnRTdG10ID0gaW5zZXJ0U3RtdCArICI8cD4iICsgcmVzdWx0LmdldFN0cmluZygxKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZygyKSArICIgOiAiICsKKyAgICAgICAgICAgICAgICAJCSAgICAgcmVzdWx0LmdldFN0cmluZygzKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZyg0KSArICI8L3A+IjsKKyAgICAgICAgICAgIAl9CisJCQl9CisJICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgICAgICAJeworCSAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBpbnNlcnRTdG10PSclcycgZmFpbGVkIS5cbiIsIGZ1bmMsIHN0bXQpOworICAgICAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICAgICAgY29uLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nICclcyBmYWlsZWQhXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJdHJ5IHsKKwkJY29uLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkJCisJfSAvLyByZWFkRGJJbmZvc190ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogaW1wb3J0R2xlbW1MZW1hdGFfdGVzdAorCSAqIFRlc3QgVmVyc2lvbi4KKwkgKiAxMi4xMi4xOS9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QoU3RyaW5nIGZuKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdCI7CisJSW5wdXRTdHJlYW0gCisJCWluOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluMiA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQlyOworCQorCS8qCisJICogUmVhZCBMZW1tYXRhICsgSW5mbyBmcm9tIGZpbGU6IAorCSAqLworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCQorCXRyeSB7CisJCS8vaW4gPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSggbmV3IEZpbGVJbnB1dFN0cmVhbShmbikgKTsKKwkJaW4yID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlcihmbikpOworCQl3aGlsZSggKGxpbmUgPSBpbjIucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoID09IDMgKQorCQkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBJbXBvcnQ6IGxlbT0nJXMnIERlY29tcD0nJXMnIFdmPSclcycuXG4iLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1sxXSwgbGVtbWFJbmZvWzJdKTsKKwkJCWVsc2UKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogaW1wb3J0R2xlbW1MYW1hdGE6ICclcycgaGFzICVkIGNvbXBvbmVudHMhXG4iLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IG9wZW4gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJcmV0dXJuIDE7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKworCXRyeSB7CisJCWluMi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCS8qIENoZWNrIGNvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJICovIAorCXIgPSByZWFkRGJJbmZvc190ZXN0KCk7CisJaWYoIHIgIT0gMCApCisJCXJldHVybiByOworCQkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzkwLzYwZjBkNGEzNDIzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS85MC82MGYwZDRhMzQyM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTQ3YzY5Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS85MC82MGYwZDRhMzQyM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpAQCAtMCwwICsxLDk2OSBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCisvKiAwLjEgOiAxNy4wNi4yMC9GQiAKKyAqIDAuMiA6IDI1LjEwLjIxL0ZCCisgKiAgICAgICBsb2dpbmcgb2YgdGhlIEFQSSBSZXF1ZXN0cy4KKyAqICAgICAgIGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorICogICAgICAgY29ycmVjdGluZyBjYWxsaW5nIG9mIGxlbW1hICsgcHJvcDEvcHJvcDIvc3BlYy4KKyAqICAgICAgIGhhbmRsaW5nIG9mIGxlbW1hdGEgd2l0aCAnw58nLgorICogCisgKiBHZW5lcmFsIGNvbW1lbnRzIHRvIHRoZSBlbmNvZGluZyBvZiBkZXJpdmF0aW9ucyBmcm9tIGxlbW1hIHRvIHdmcyBhbmQgaG93IHRoZXkgYXJlIGVuY29kZWQKKyAqIGluIHRoZSBEZXJieSBkYXRhYmFzZToKKyAqIAorICogR0xFTU0gZW5jb2Rpbmc6ICAKKyAqICAgXyBfIDogK0ZsZXggICAgICAgw5ZsZSAtPiDDlmwgICAgICAKKyAqICAgKyBfIDogK0NvbXAgICAgICAgw5ZsbGFtcGUgLT4gw5ZsIG9yIExhbXBlIChjb21wb3VuZCkuCisgKiAgIF8gKyA6ICtvdGhlciAgICAgIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuc2NodWggKG5vIGNvbXBvdW5kIGZvciAnVHVybnNjaHVoJywgb25seSBwcmVmaXgpLgorICogICArICsgOiArQ29tcCtvdGhlciBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybiArIFNjaHVoIChjb21wb3VuZCBmb3IgJ1NjaHVoJyArIFByZWZpeCkuCisgKiBDMiBsZW1tYXRpemF0aW9uIG9wdGlvbnM6CisgKiAgIEZsZXggIChpZGVudGljYWwgdG8gR2xlbW0pCisgKiAgIENvbXAgIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykKKyAqICAgT3RoZXIgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKS4KKyAqICAgU3BlYyAgKG9ubHkgQzI6IGluY2x1ZGVzIGFsbCB3ZnMgd2l0aCBoaXBoZW4gYW5kL29yIHNvbWUgbm9uLWFscGhhYmV0aWMgSVNPODg1OS0xIGNoYXJzKQorICogICAgICAgICBFLmcuIMOWbC1FeHBvcnRlLCAiTWFya2VuIi3DlmxlLgorICogRGVyYnkgRW5jb2Rpbmc6CisgKiAgcHJvcDEgCXByb3AyCXNwZWMgICAJbWVhbmluZyBpbiBDMjoKKyAqICAwCQkwCQktCQlGbGV4CisgKiAgMQkJMAkJLQkJQ29tcAorICogIDAJCTEJCS0JCU90aGVyIChwcmVmaXgpCisgKiAgMQkJMQkJLQkJQ29tcCArIE90aGVyCisgKiAgLQkJLQkJMAkJLVNwZWMKKyAqICAtCQktCQkxCQkrU3BlYworICogCisgKiBFeGFtcGxlczoKKyAqICZTY2h1aAkJCTogU2NodWgsIFNjaHVoZSwgLi4uIG9ubHkgZmxleGlvbnMKKyAqICZTY2h1aCtjb21wCQk6IFNjaHVoZSwgVHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzLgorICogJlNjaHVoK290aGVyCQk6IFNjaHVoZSwgQW50aXNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgcHJlZml4ZWQgd2ZzIChubyBjb21wb3VuZHMpLgorICogJlNjaHVoK2NvbXArb3RoZXI6IFNjaHVoZSwgQW50aXNjaHVoZSwgVHVybnNjaHVoZSwgQW50aXR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcyBhbmQgCisgKiAJCQkJCSAgcHJlZml4ZWQgc2luZ2xlIHdmcyAoQW50aXNjaHVoZSkgYW5kIHByZWZpeGVkIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtzcGVjCQk6ICJBbnRpIi1TY2h1aGUsIDY4Z2VyLVNjaHVoZS4uLiBtYXkgYmUgY29tYmluZWQgd2l0aCBldmVyeSBvcHRpb25zOiBhZGRzCisgKiAgICAgICAgICAgICAgICAgICAgd2ZzIHdpdGggaHlwaGVuIGFuZC9vciBub24tYWxwaGFiZXRpYyBjaGFycy4KKyAqIAorICogQ29udmVyc2lvbiBydWxlczoKKyAqIAorICogICZzY2hsaWXDn2VuIC0+IGludGVybmFsIHNlYXJjaCBmb3IgJ3NjaGxpZXNzZW4nLAorICogIGJlY2F1c2UgR2xlbW0gb3V0cHV0cyAnc3MnIGZvciAnw58nLgorICogIAorICogQ2hhcmFjdGVyIEVuY29kaW5nOgorICogCisgKiAtIFdoZW4gaW1wb3J0aW5nIHdmcyB0byB0aGUgRGVyYnkgRGF0YWJhc2Ugd2l0aCBkb0N1cmxHbGVtbVNlcnZpY2VzL2luZGV4TGVtbWF0YToKKyAqIAorICogICBJTlBVVDogd29yZGZvcm0gbGlzdCBpbiBbVVRGLThdIDogVVRGLTggaXMgdGhlbiBjb252ZXJ0ZWQgdG8gTGF0MSBmb3IgR2xlbW0sCisgKiAgICAgICAgICB0aGUgb3V0cHV0IG9mIEdsZW1tIFtMYXQxXSBpcyByZXR1cm5lZCB0byB0aGUgR2xlbW1TZXJ2aWNlcyB3aXRob3V0IHJlY29udmVyc2lvbgorICogICAgICAgICAgdG8gVVRGOCBhbmQgaW1wb3J0ZWQgaW50byBEZXJieSBEYXRhYmFzZSB1bmNoYW5nZWQuCisgKgkJCisgKi8KKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNC4xMS4yMSI7IAorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMiI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVQcm9wcwkJPSAiL1dFQi1JTkYvR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIjsKKwkKKwkvLyB0aGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgcmVhZCBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyAodGhlc2UgYXJlIHRoZSBkZWZhdWx0IHZhbHVlcyk6CisJcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggCQk9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCXByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQkJCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJQENvbnRleHQKKwlwcml2YXRlIFNlcnZsZXRDb250ZXh0IHNlcnZsZXRDb250ZXh0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZm91dAk9IG51bGw7CisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmZXJyCT0gbnVsbDsJCQorCQkKKwkvKiAKKyAJICogCisJICogLSBhZnRlciBsb2FkUHJvcGVydGllcywgc2V0cyB0aGUgY2xhc3MgdmFyaWFibGUgd2l0aCBsb2FkZWQgcHJvcGVydHkgdmFsdWVzLgorCSAqIAorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlHU19Xb3JraW5nUGF0aCAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiR1NfV29ya2luZ1BhdGgiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiKTsKKwlmbmFtZVdmcwkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVXZnMiLCAJICAgImdsX3dmc19pbi50eHQiKTsKKwlmbmFtZVdmcwkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lV2ZzOworCWZuYW1lT3V0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZU91dCIsIAkgICAiR2xlbW1TZXJ2aWNlcy5sb2ciKTsKKwlmbmFtZU91dAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lT3V0OworCWZuYW1lRXJyCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUVyciIsIAkgICAiR2xlbW1TZXJ2aWNlcy5lcnIiKTsKKwlmbmFtZUVycgkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lRXJyOworCWZuYW1lU2NyaXB0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVNjcmlwdCIsCSAgICJkb0dsZW1tIik7CisJZm5hbWVTY3JpcHQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVNjcmlwdDsKKwlmbmFtZUxlbWF0YQkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVMZW1hdGEiLCAgICAidG1wL2xlbTMiKTsKKwlmbmFtZUxlbWF0YQkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lTGVtYXRhOworCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyoKKwkgKiAgbG9nX1JlcXVlc3Q6CisJICogIAorCSAqICAtIHdyaXRlIGluZm8gYWJvdXQgQVBJIFJlcXVlc3QuCisJICogIFBhcmFtZXRlcnM6CisJICogIHJlcXVlc3RQYXRoCTogcGF0aCBvZiB3ZWJhcHAgYWRkcmVzc2VkIGJ5IHRoZSByZXF1ZXN0LgorCSAqICBmdW5jCQk6IG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHdoaWNoIGltcGxlbWVudHMgdGhlIHJlcXVlc3QuCisJICogIAorCSAqICAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBsb2dfUmVxdWVzdChTdHJpbmcgcmVxdWVzdFBhdGgsIFN0cmluZyBmdW5jKQorCQorCXsKKwkvLyB0cmFuc2Zvcm0gImRhdGVUdGltZSIgLT4gImRhdGUgdGltZSI6CisJCisJZm91dC5wcmludGYoIiMjI1xuIik7CisJZm91dC5wcmludGYoIiMjIyAlczogJXMgOiB2ZXJzPSclcycsIHZkYXRlPSclcycgcmVxdWVzdD0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdFBhdGgsIHZlcnNpb24sIHZlcnNpb25EYXRlLCAKKwkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCX0gLy8gbG9nX1JlcXVlc3QKKwkJCisJLyogZm9ybWF0RGJOYW1lCisJICogCisJICogLSBnZXRzIG5hbWUgb2YgRGF0YWJhc2UgdXNlZCBieSBEZXJieSBmcm9tIHByb3BzIAorCSAqICAgYW5kIGZvcm1hdCBpdCB0byBIVE1MLgorCSAqICAKKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgU3RyaW5nIGZvcm1hdERiTmFtZShQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlTdHJpbmcKKwkJZGJOYW1lOworCVN0cmluZworCQlkYlBhdGggPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlpbnQKKwkJaiA9IGRiUGF0aC5sYXN0SW5kZXhPZignLycpOworCQorCWlmKCBqID4gMCApCisJCWRiTmFtZSA9IGRiUGF0aC5zdWJzdHJpbmcoaisxKTsKKwllbHNlCisJCWRiTmFtZSA9IGRiUGF0aDsKKwkKKwlyZXR1cm4gZGJOYW1lOyAvLyAiPHA+PGI+RGF0YWJhc2U6ICIgKyBkYk5hbWUgKyAiPC9iPjwvcD5cbiI7CisJfSAvLyBmb3JtYXREYk5hbWUKKworCS8qCisJICogY2xvc2VMb2dTdHJlYW1zOgorCSAqIAorCSAqIC0gY2xvc2UgdGhlIGZvdXQvZmVyciBsb2cgc3RyZWFtcy4KKwkgKiAKKwkgKiAyNi4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBjbG9zZUxvZ1N0cmVhbXMoKQorCQorCXsKKwlpZiggZm91dCAhPSBudWxsKQorCQlmb3V0LmNsb3NlKCk7CisJZm91dCA9IG51bGw7CisJCisJaWYoIGZlcnIgIT0gbnVsbCApCisJCWZlcnIuY2xvc2UoKTsKKwlmZXJyID0gbnVsbDsKKwl9IC8vIGNsb3NlTG9nU3RyZWFtcworCQorCS8qIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisJICogCisJICogLSBsb2FkIEdsZW1tU2VydmljZXMucHJvcGVydGllcywgc2V0cyBHbGVtbVNlcnZpY2VzIGNvbnN0YW50cworCSAqICAgYW5kIGxvZ3MgdGhlIHJlcXVlc3QuCisJICogLSBsb2FkIHByb3BlcnRpZXMgYW5kIHNldCBjb25zdGFudHMgYmVmb3JlIGxvZ2dpbmcgYW55dGhpbmcsIGJlY2F1c2UKKwkgKiAgIGxvZ2dpbmcgd2lsbCBiZSBkb25lIGludG8gdGhlIGxhc3Qgc3Rkb3V0L3N0ZGVyciBvcGVuZWQgaW4gZ2xhc3NmaXNoJ3MgSlZNLAorCSAqICAgZS5nLiBpbiB0aGUgbG9nIG9mIGFub3RoZXIgU2VydmljZS4KKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgUHJvcGVydGllcyBpbml0X2FuZF9sb2dfUmVxdWVzdChTdHJpbmcgZnVuYywgU3RyaW5nIHJlcXVlc3RQYXRoKQorCQorCXsKKwlTdHJpbmcKKwkJcmVhbFBhdGggPSBzZXJ2bGV0Q29udGV4dC5nZXRSZWFsUGF0aChmbmFtZVByb3BzKTsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKGlmIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlQcm9wZXJ0aWVzCisJCXByb3BzID0gVXRpbHMubG9hZFByb3BlcnRpZXMoc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSwgZm5hbWVQcm9wcywgcmVhbFBhdGgsIGZhbHNlKTsKKwkKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gZm91dCBhbmQgZmVyciBhcyByZXBsYWNlbWVudCBmb3Igc3Rkb3V0L3N0ZGVyciBmb3IgdXNlIGluIEdsZW1tU2VydmljZXMuCisJLy8gZG8gbm90IHVzZSBvciByZWRpcmVjdCBTeXN0ZW0ub3V0IGFuZCBTeXN0ZW0uZXJyLCBhcyB0aGV5IHdpbGwgYmUgcmVkaXJlY3RlZAorCS8vIGJ5IG90aGVyIFNlcnZpY2VzIGluIHRoZSBzYW1lIGdsYXNzZmlzaCBKVk0sIGUuZy4gYnkgdGhlIFdmb3JtU2VydmljZXMuCisJZm91dCA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZU91dCk7CisJZmVyciA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZUVycik7CisJCisJLy9VdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQorCWxvZ19SZXF1ZXN0KHJlcXVlc3RQYXRoLCBmdW5jKTsKKwkKKwlyZXR1cm4gcHJvcHM7CisJfSAvLyBpbml0X2FuZF9sb2dfUmVxdWVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCVN0cmluZworCQlzdGF0dXM7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvc3RhdHVzLyIpOworCQorCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCQorCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5wcm9wZXJ0aWVzPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+ZGF0YWJhc2U8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSwKKwkJCQkJCQlzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpID09IG51bGwgPyAibm90IGZvdW5kIiA6CisJCQkJCQkJCXByb3BzLmlzRW1wdHkoKSA/ICJlbXB0eSIgOiAibG9hZGVkIiwKKwkJCQkJCQlmb3JtYXREYk5hbWUocHJvcHMpCisJCQkJCQkJKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIAorCSAqIGRvUE9TVF9pbXBvcnRMZW1tYURhdGE6CisJICogCisJICogUE9TVDogL2luZGV4L2FkZC86IHRleHQvcGxhaW4KKwkgKiBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZS4KKwkgKiBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZAorCSAqIGludG8gdGhlIGRhdGFiYXNlLgorCSAqIElucHV0OiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKi8KKwkKKwlAUGF0aCgiYWRkL3tkYXRhYmFzZW5hbWUiKSAKKwlAUE9TVCAKKwlAQ29uc3VtZXMoInRleHQvcGxhaW4iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCQkJCQkJCSgKKwkJCQkJCQlTdHJpbmcgCQkJCQkJbGlzdCwKKwkJCQkJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAlmaW5hbCBTdHJpbmcgZGJuYW1lCisJCQkJCQkJKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvUE9TVF9pbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIGFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJCisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2FkZC8iKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBzdWJtaXR0ZWQgZGF0YWJhc2VuYW1lPSclcycuXG4iLCBmdW5jLCBkYm5hbWUpOworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHBvc3RlZCBsaXN0ID0gJyVzJy5cbiIsIGZ1bmMsIGxpc3QpOworCQorCS8vIFdyaXRlIHN1Ym1pdHRlZCBsaXN0IG9mIHdvcmRmb3JtcyB0byBmaWxlOgorCXRyeQorCQl7CisJCW9zID0gRmlsZXMubmV3T3V0cHV0U3RyZWFtKHApOworCQlvcy53cml0ZShsaXN0LmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSkpOworCSAgICBvcy5jbG9zZSgpOworCSAgICBiRG9uZSA9IHRydWU7CisJICAgIGZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGZpbGUgJyVzJyBiZXNjaHJpZWJlbi5cbiIsIGZ1bmMsIGZuYW1lV2ZzKTsKKwkgICAgfQorCWNhdGNoKElPRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoZmVycik7CisJCX0KKyAgICAKKwlpZiggYkRvbmUgKQorCQltc2cgPSAiPHA+TGlzdCB3cml0dGVuIHRvIGZpbGU6ICIgKyBwLnRvU3RyaW5nKCkgKyAiPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+PGI+RmlsZSBFcnJvcjogPC9iPiBjYW5ub3Qgd3JpdGUgdG8gIiArIHAudG9TdHJpbmcoKSArICIhPC9wPiI7CisJCisJLyoKKwkgKiAgZXhlY3V0ZSBHbGVtbSBzaGVsbCBzY3JpcHQ6CisJICovCisJU3RyaW5nCisJCW1zZ0dsZW1tU2NyaXB0LCBtc2dJbXBvcnQ7CisJaW50IAorCQlyID0gVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0KGZuYW1lU2NyaXB0LCBmbmFtZVdmcywgZm91dCwgZmVycik7CisJCisJaWYoIHIgPT0gMCApCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEF1c2bDvGhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhLCBwcm9wcyk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJCisJfSAvLyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisKKwkvKiBkb0dFVF92aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzID0gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby8iKTsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCWZpbmFsIFN0cmluZworCQlkYk5hbWUgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5kYXRhYmFzZTwvYj46ICVzPC9wPiIsIGZvcm1hdERiTmFtZShwcm9wcykpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBkYk5hbWUgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIGRvR0VUX3ZpZXdEQkluZm8KKworCisJLyogZG9HRVRfdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+dmVyc2lvbiAiICsgdmVyc2lvbiArICIgdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgcmVxdWVzdCA9ICciICsgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSArICInPC9pPjwvaDQ+XG4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMTo8L2I+IChDMiBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX08L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT57bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKTwvY29kZT48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsPC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+w5ZsP29wdHM9ZmxleCtjb21wK290aGVyK3NwZWM8L2NvZGU+PC9wPiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAyOjwvYj4gKGludGVybmFsIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfT9wcm9wMT1bMDEyXSZhbXA7cHJvcDI9WzAxMl0mYW1wO3NwZWM9WzAxMl08L2NvZGU+ICh3aGVyZSBlYWNoIHByb3AxLCBwcm9wMiwgc3BlYyBpcyBvcHRpb25hbCkuPC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbD9wcm9wMT0wJmFtcDtwcm9wMj0xJmFtcDtzcGVjPTI8L2NvZGU+PC9wPiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Iik7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JyVkJyBwcm9wMj0nJWQnIHNwZWM9JyVkJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCS8qIAorCWZvcihpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwkJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwkJfQkKKwkgKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggbGVtbWFJbmZvLm9wdHNTZXR0aW5nID09IExlbW1hSW5mby5PUFRTX1NFVFRJTkdfQzIgKSAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZywgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxLHByb3AyLHNwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpbnQKKwkJbldmcyA9IGxlbW1hSW5mby5uV2ZzOworCQorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCS8vIGxvZyBvdXRjb21lOgorCWlmKCBuV2ZzIDwgMCApCisJCWZvdXQucHJpbnRmKCJFcnJvcjogJXM6IHJldHVybmluZyAwIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYyk7CisJZWxzZQorCQlmb3V0LnByaW50ZigiRGVidWcuICVzOiByZXR1cm5pbmcgJWQgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jLCBuV2ZzKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogbm90ZToKKwkgKiAtIGlmIEJyb3dzZXIgcmVxdWVzdDogSFRUUFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICd0ZXh0L2h0bWwsLi4ueG1sLi4uJworCSAqIC0gaWYgV2Zvcm1TZXJ2aWNlcyByZXF1ZXN0OiBIdHRwU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ2FwcGxpY2F0aW9uL2pzb24nLgorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICogCisJICogLSBzdWJtaXR0ZWQgVVJMLCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWEsIGlzIGludGVycHJldGVkIGJ5IGdsYXNzZmlzaCBhcworCSAqICAgYmVpbmcgSVNPLTg4NTktMSBlbmNvZGVkLiBXaGVuIHRoZSByZXF1ZXN0IGlzIFVURi04IGVuY29kZWQsIFVtbGF1dHMgYW5kCisJICogICAnw58nIGFyZSBtaXMtaW50ZXJwcmVkZWQsIGxlYWRpbmcgdG8gYW4gZXJyb25lcm91cyByZXF1ZXN0IHRvIHRoZSBEZXJieQorCSAqICAgZGF0YWJhc2UuCisJICogLSBSZXF1ZXN0ZWQgbGVtbWEgJ2xlbW1hJyBoYXMgdG8gYmUgdHJhbnNmb3JtZWQgdG8gVVRGLTggZmlyc3QuCisJICogLSBub3RlOiBldmVuIHdoZW4gc3VibWl0dGluZyB0aGUgR0VUIHJlcXVlc3QgYnkgc3BlY2lmeWluZyAnY2hhcmVuY29kZT1VVEYtOCcsCisJICogICBnbGFzc2Zpc2ggZG9lcyBub3QgY29udmVydCBpdCBhdXRvbWF0aWNhbGx5IGFzIGV4cGVjdGVkLgorCSAqICAgCisJICogIDIyLjEwLjIxL0ZCCisJICogCisJICogLSBpZiBhY2NlcHQ9YXBwbGljYXRpb24vanNvbiByZXR1cm4gVVRGLTggKFdmb3JtU2VydmljZXMpLgorCSAqIC0gZWxzZSBpZiBhY2NlcHQ9dGV4dC9odG1sIGRvIG5vdCB0cmFuc2Zvcm0gY2hhcmFjdGVyIGVuY29kaW5nIChCcm93c2VyKS4KKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQENvbnN1bWVzKCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2h0bWwiKQorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm87CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJZmluYWwgYm9vbGVhbgorCQliRW5jb2RlTGVtbWEgPSBmYWxzZTsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsKKwkKKwkvKiB0ZXN0OgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlpZiggYkVuY29kZUxlbW1hICkKKwkJeworCQkvLyB3aGVuIGFjY2VwdGluZyBKU09OLCB1cmwgaGFzIHRvIGJlIGNvbnZlcnRlZCB0byBVVEYtOCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hOgorCQl0cnkgeworCQkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhuZXcgU3RyaW5nKGxlbW1hLmdldEJ5dGVzKCJJU08tODg1OS0xIiksICJ1dGYtOCIpKTsKKwkJCX0gCisJCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCUxlbW1hUmVzcG9uc2UKKwkJCQlsZW1yZXNwID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtcmVzcCkuYnVpbGQoKTsKKwkJCX0KKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbVVRGLThdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisJZWxzZQorCQl7CisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFt1bmNoYW5nZWRdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisKKwkvKiBkb2VzIG5vdCBoZWxwOgorCSBTdHJpbmcKKwkgCXJlcXVlc3RDaGFyRW5jb2RpbmcgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0Q2hhcmFjdGVyRW5jb2RpbmcoKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlcXVlc3QgY2hhcmFjdGVyIGVuY29kaW5nID0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdENoYXJFbmNvZGluZyk7CisJKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJeworCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCS8vcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQl9CisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOwkKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJLyoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3Rlc3QvaW5mby8iKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vZm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQlmb3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvOTAvOTAwMDM5YWJiNDNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzkwLzkwMDAzOWFiYjQzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNGVjYTAKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzkwLzkwMDAzOWFiYjQzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsNzQ0IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKK2ltcG9ydCBqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7CitpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAob3ZlcndyaXR0ZW4gYnkgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKGZpbmFsIGFzc2lnbm1lbnRzKToKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJFbWIgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIjsKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLyogdmFyaWFibGVzICovCisJc3RhdGljIGludCBuRXhjZXB0U3RtdAkJPSAwOwkvLyBjb3VudCBuby4gb2YgZXhjZXB0aW9ucyBmb3IgcHJlcGFyZWRTdG10LgorCXN0YXRpYyBpbnQgbkV4Y2VwdEluc2VydAk9IDA7CS8vIGNvdW50IG5vLiBvZiBleGNlcHRpb25zIGZvciBJbnNlcnRzLgorCQorCS8qCisJICogc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJICogCisJICogQXJndW1lbnRzOgorCSAqIHByb3BzCTogUHJvcGVydGllcyBsb2FkZWQgYnkgdGhlIEdsZW1tU2VydmljZXMuCisJICogTm90ZXM6CisJICogLSB0aGlzIGZ1bmN0aW9uIGxvYWRzIG9ubHkgdGhvc2UgQ29uc3RhbnRzIG5lZWRlZCBpbiB0aGlzIGNsYXNzLgorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcwlwcm9wcykKKwkKKwl7CisJZm5hbWVEQgkJIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgCSIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlzZXJ2ZXJIb3N0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJzZXJ2ZXJIb3N0IiwJIi8vbG9jYWxob3N0OjE1MjcvIik7CisJZGVyYnlEQlVSTCAJCT0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCQkJCisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCQkJCQlpbXBvcnRHbGVtbUxlbWF0YQorCSAqIFBhcmFtZXRlcnM6CisJICogZm4JCSA6IGFic29sdXRlIGZpbGUgbmFtZSBvZiBHTEVNTSBvdXRwdXQgW0lTTzg4NTktMV0gZXhwZWN0ZWQsIG5vdCBVVEYtOCEKKwkgKiBwcm9wcwkgOiBQcm9wZXJ0aWVzIHZvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgdG8gc2V0IGNvbnN0YW50cyBuZWVkZWQKKwkgKiAJCQkgICBpbiB0aGlzIGNsYXNzLgorCSAqIGRicGF0aAkgOiBsb2NhdGlvbiArIG5hbWUgb2YgZGF0YWJhc2Ugd2hlcmUgdG8gc3RvcmUgbGVtbWF0YSt3ZnMuCisJICogUmV0dXJucwkgOiAwPU9LLCAtMTogZ2VuZXJhbCBlcnJvcjsgPiAwIDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAKKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIGR5bmFtaWNhbGx5IGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqIDA0LjExLjIxL0ZCIGRicGF0aC4KKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YShTdHJpbmcgZm4sIFByb3BlcnRpZXMgcHJvcHMsIGZpbmFsIFN0cmluZyBkYnBhdGgpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YSI7CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4gPSBudWxsOworCWludAorCQluRXJyb3JzOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyB3aGVuIGluZGV4aW5nIGRhdGEgaW50byB0aGUgZGF0YWJhc2UsIHNlbGVjdCB0aGUgc3VibWl0dGVkIGRicGF0aCwKKwkvLyAobm90IHRoZSBvbmUgc3RvcmVkIGluIHRoZSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCWRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGRicGF0aDsKKwkKKwkvLyBvcGVuIHJlYWRlciBvbiBHbGVtbSBMZW1tYXRhOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCWluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCQorCQluRXJyb3JzID0gd3JpdGVEQkxlbW1hdGEoaW4pOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBmcm9tICclcychXG4iLCBmdW5jLCBmbik7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCisJLy8gY2xvc2UgUmVhZGVyOgorCXRyeSB7CisJCWluLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJbkVycm9ycyA9IC0xOworCQl9CisJCisgCWlmKCBuRXJyb3JzID09IDAgKQorIAkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQgZG9uZSBzdWNjZXNzZnVsbHkuXG4iLCBmdW5jKTsKKyAJZWxzZQorIAkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQ6ICVkIEVycm9ycyFcbiIsIGZ1bmMsIG5FcnJvcnMpOworIAkKKwlyZXR1cm4gbkVycm9yczsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YQorCQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVEQkxlbW1hdGEoKQorCSAqICAgICAgICAgICAgICAgICAgICAgICAKKwkgKiBzdG9yZXMgbGlzdCBvZiBsZW1tYXRhICsgaW5mb3MgaW50byBEZXJieSBkYi4KKwkgKiBGaWxlIGZvcm1hdDogIkxlbW1hIERlY29tcG9zaXRpb24gV2YiLAorCSAqICAgICAgICAgICAgICBlLmcuOiAiSMOkdXNlciArLSBIYXVzIi4KKwkgKiBSZXR1cm5zOiAwID0gT0sgb3IgLTE6IGdlbmVyYWwgZXJyb3Igb3IgPiAwOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIDA5LjAxLjIwL0ZCCisJICogMDQuMTEuMjEvRkIgdHVybiBhdXRvY29tbWl0IG9mZiB0byBhY2NlbGVyYXRlIGh1Z2UgYW1vdW50IG9mIGluc2VydGlvbnMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYXRhKEJ1ZmZlcmVkUmVhZGVyIGluKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hdGEiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJUHJlcGFyZWRTdGF0ZW1lbnQKKwkJc3RtdFByZXAgPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10IAkgPSBudWxsOworCVN0cmluZworCQlsaW5lOwkKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQluSW5zZXJ0ZWQgPSAwLAkvLyBuby4gb2YgbGVtbWEvd2YgcGFpcnMgaW1wb3J0ZWQuCisJCXJldCA9IDA7IC8vIE9LLgorCWJvb2xlYW4KKwkJY29udGFpbnNTcGVjOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZSwKKwkvLyBzZXQgQXV0b2NvbW1pdCA9IGZhbHNlIHRvIGFjY2VsZXJhdGUgaW5zZXJ0aW9uczoKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJY29uLnNldEF1dG9Db21taXQoZmFsc2UpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZCAoYXV0b0NvbW1pdD1vZmYpLlxuIiwgZnVuYyk7CisKKwkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQlzdG10UHJlcCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KGluc2VydFByZXBhcmVkUXVlcnkpOworCQllbHNlCisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCisJCXdoaWxlKCAobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCAhPSAzICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzISBFeHBlY3RlZCA9IDMhIENhbm5vdCBiZSBzdG9yZWQhXG4iLCBmdW5jLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCQluRXJyb3JzKys7CisJCQkJY29udGludWU7CisJCQkJfQorCQkJCisJCQkvLyBHZXQgSW5mbywgaWYgd29yZGZvcm0gY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlICctJywgaW50ZXJwdW5jdGlvbiBldGMuOgorCQkJLy8gbGVtbWFJbmZvWzJdID0gd29yZGZvcm0uCisJCQljb250YWluc1NwZWMgPSBMZW1tYUluZm8uaXNXZlNwZWNpYWxDYXNlKGxlbW1hSW5mb1syXSk7CisJCQkvLyBzdG9yZSBpbnRvIERCOgorCQkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoc3RtdFByZXAsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQllbHNlCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3Moc3RtdCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCQorCQkJaWYoIHJldCAhPSAwICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgc3RvcmUgbGVtbWEgJyVzJyBpbnRvIERCISAocmV0PSVkKVxuIiwgZnVuYywgbGluZSwgcmV0KTsKKwkJCQluRXJyb3JzKys7IAorCQkJCX0KKwkJCWVsc2UKKwkJCQluSW5zZXJ0ZWQrKzsKKwkJCX0gLy8gd2hpbGUKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgR2xlbW0gbGVtbWF0YStpbmZvcyBmcm9tIGZpbGUhIEV4aXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOyAKKwkJfQkKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisJZmluYWxseSAKKwkJeyAKKwkJdHJ5IHsKKwkJCS8vIGltcG9ydGFudDogbm93IGNvbW1pdCwgYXMgYXV0b0NvbW1pdCBpcyBkZWFjdGl2YXRlZCwKKwkJCS8vIHRoaXMgYWxzbyByZW1vdmVzIGRhdGFiYXNlIGxvY2tzOgorCQkJY29uLmNvbW1pdCgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb21taXQgYXQgdGhlIGVuZCBvZiB0aGUgd2ZzIGxpc3QgZmFpbGVkIVxuIiwgZnVuYyk7CisJCQl9CQkKKwkJCisJCXRyeSB7IC8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIAorCQkJCXN0bXQuY2xvc2UoKTsKKwkJCWlmKCBzdG10UHJlcCAhPSBudWxsICkgCisJCQkJc3RtdFByZXAuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiSW5mbyA6ICVzOiBuby4gb2YgbGVtbWF0YS93ZiBwYWlycyBpbnNlcnRlZCA9ICVkLlxuIiwgZnVuYywgbkluc2VydGVkKTsKKwkKKwlyZXR1cm4gbkVycm9yczsgLy8gMD1PSywgPjAgPSBuby4gb2YgZXJyb3JzLgorCX0gLy8gd3JpdGVEQkxlbW1hdGEKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQ6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gcnVsZXMgaW50byBEZXJieSBEQi4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgaXMgdGhlIHZlcnNpb24gd2l0aCBhIFByZXBhcmVkUXVlcnkuCisJICogUGFyYW1ldGVyczoKKwkgKiBzcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTcuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoCisJCQlQcmVwYXJlZFN0YXRlbWVudCBzdG10LCAKKwkJCVN0cmluZyBsZW1tYSwgCisJCQlTdHJpbmcgd2YsIAorCQkJU3RyaW5nIGRlY29tcG9zaXRpb24sIAorCQkJYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQiOworCWZpbmFsIGJvb2xlYW4KKwkJYkxvZyA9IGZhbHNlOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCWJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICAKKwkvLyBmb3IgbG9naW5nIG9ubHk6CisJc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCWlmKCBiTG9nICkKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisgICAgLy8gbm93IGluc2VydCBuZXcgdmFsdWVzIGludG8gUHJlcGFyZWRTdGF0ZW1lbnQ6CisgICAgdHJ5IHsKKyAgICAJc3RtdC5zZXRTdHJpbmcoIDEsIGxlbW1hKTsKKyAgICAgICAgc3RtdC5zZXRTdHJpbmcoIDIsIHdmKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDMsIHByb3AxKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDQsIHByb3AyKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDUsIHNwZWMpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByZXBhcmVkIHN0bXQgPSAnJXMnLlxuIiwgIGZ1bmMsIHN0bXQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUxKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoCSJFcnJvcjogJXM6IHdoaWxlIGZpbGxpbmcgcHJlcGFyZWQgc3RhdGVtZW50IHdpdGggbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSclYicgcHJvcDI9JyViJyBzcGVjPSclYichXG4iLCAgCisJCQkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQlpZiggKytuRXhjZXB0U3RtdCA8PSAxICkKKwkJCWUxLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorICAgIAorICAgIHRyeSB7CisJCS8vIGV4ZWN1dGUgdGhlIGZpbGxlZCBwcmVwYXJlZCBzdGF0ZW1lbnQ6CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiEgKG49JWQpXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLCBuKTsKKyAJCQlyZXR1cm4gMjsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAzOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIGludG8gRGVyYnkgREIuCisJICogUGFyYW1ldGVyczoKKwkgKiBjb250YWluc1NwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxMC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvcyhTdGF0ZW1lbnQgc3RtdCwgU3RyaW5nIGxlbW1hLCBTdHJpbmcgd2YsIFN0cmluZyBkZWNvbXBvc2l0aW9uLCBib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvcyI7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJQm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIHNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAgICAKKyAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKwl0cnkgeworCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKHNxbEluc2VydCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWFEYXRhCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgZnJvbSB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dDogbGVtbWEgKyBHTEVNTV9PUFRTX3h4eCAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hRGF0YShMZW1tYUluZm8gbGVtbWFJbmZvLCBQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWFEYXRhIjsKKworCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWxlbW1hSW5mby5jb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCWxlbW1hSW5mby5zdG10ID0gbGVtbWFJbmZvLmNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJaW50IHIgPSByZWFkREJMZW1tYShsZW1tYUluZm8uc3RtdCwgbGVtbWFJbmZvKTsKKwkJCQorCQlpZiggciAhPSAwICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGdldCBkYXRhIGZvciBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyFcbiIsIAorCQkJCQlmdW5jLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGxlbW1hSW5mby5jb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYURhdGEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBieSBhY2Nlc3NpbmcgdGhlIEdsZW1tREIuCisJICogSW5wdXQgOiBsZW1tYSArIHByb3AxKzIgKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqIE91dHB1dDogCisJICogIC0gY29udGFpbnMgYSBSZXN1bHRTZXQgZm9yIGZldGNoaW5nIHRoZSB3b3JkZm9ybXMuCisJICogCSAgVGhpcyBSZXN1bHRTZXQgd2lsbCBoYXZlIGJlIGJlIGNsb3NlZCB3aXRoIExlbW1hSW5mby5jbG9zZSgpLgorCSAqIAkgIFRoZSBuby4gb2YgZm91bmQgd29yZGZvcm1zIGlzIG5vdCBrbm93biB0aWxsIHdlCisJICogCSAgZmV0Y2ggYWxsIG9mIHRoZW0gZnJvbSBSZXN1bHRTZXQhIAorCSAqIAktIGR1ZSB0byBTRUxFQ1QgRElTVElOQ1Qgb25seSB1bmlxIHdmIGFyZSByZXR1cm5lZC4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWEoU3RhdGVtZW50IHN0bXQsIExlbW1hSW5mbyBsZW1tYUluZm8pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYSI7CisJU3RyaW5nCisJCXNxbDsKKwkJCisJc3FsID0gU3RyaW5nLmZvcm1hdCgiU0VMRUNUIERJU1RJTkNUIHdmIGZyb20gJXMgV0hFUkUgbGVtbWE9JyVzJyAlcyAlcyAlcyIsIAorCQkJZGJUYWJsZSwKKwkJCWxlbW1hSW5mby5sZW1tYSwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIkFORCBwcm9wMT0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICJBTkQgcHJvcDE9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIkFORCBwcm9wMj0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICJBTkQgcHJvcDI9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAxID8gIkFORCBzcGVjPSd0cnVlJyIgICA6IAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiQU5EIHNwZWM9J2ZhbHNlJyIgIDogIiIpOworCQorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIGZ1bmMsIGxlbW1hSW5mby5wcm9wMSwgbGVtbWFJbmZvLnByb3AyLCBsZW1tYUluZm8uc3BlYyk7CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWwgPSAnJXMnLlxuIiwgZnVuYywgc3FsKTsKKworCXRyeSB7CisJCWxlbW1hSW5mby5yZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOwkKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGVuIGV4ZWN1dGluZyBzcWw9JyVzJyFcbiIsIGZ1bmMsIHNxbCk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisJZmluYWxseSB7CisJCS8vIGFsbCBzcWwgc3R1ZmYgYXJlIGNsb3NlZCBvdXRzaWRlIHRoaXMgZnVuY3Rpb24sIHNvIGRvbid0IGNsb3NlIHRoZW0gaGVyZSEKKwkJfQkKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zCisJICogUmV0dXJucyBHZW5lcmFsIEluZm9zIGFib3V0IHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiByZWFkIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiSW5mb3MoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWRiSW5mbyA9IHJlYWREYkxlbW1hdGFJbmZvcyhzdG10KTsKKwkJCQorCQlpZiggZGJJbmZvID09IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgcmVhZCBHZW5lcmFsIEluZm9zIGZyb20gR2xlbW0gRGF0YWJhc2UhXG4iLCBmdW5jKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIG51bGw7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgc3RtdC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBtYXkgYmUgbnVsbC4KKwkJCisJfSAvLyByZWFkRGJJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkxlbW1hdGFJbmZvczoKKwkgKiByZWFkcyBhbmQgcmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjb250ZW50IAorCSAqIG9mIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiBSZXR1cm5zIDA9T0sgb3IgZXJyb3IgY29kZSA+IDAuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJMZW1tYXRhSW5mb3MoU3RhdGVtZW50IHN0bXQpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInJlYWREYkxlbW1hSW5mb3MiOworCVN0cmluZ1tdCisJCXNxbCA9IHsJIlNFTEVDVCBDT1VOVChkaXN0aW5jdCBsZW1tYSkgZnJvbSAiICsgZGJUYWJsZSAsCS8vIGNvdW50cyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YS4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUsCQkJCQkvLyBjb3VudHMgdG90YWwgbm8uIG9mIHN0b3JlZCB3b3JkZm9ybXMuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj10cnVlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj10cnVlIn07CisJUmVzdWx0U2V0CisJCXJlcyA9IG51bGw7IAorCWludFtdCisJCW5Db3VudHMgPSBuZXcgaW50W3NxbC5sZW5ndGhdOworCWludAkJCisJCWkgPSAwLCAKKwkJbkRpc3RMZW1tYXRhID0gLTEsCS8vIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhIGluIERCLgorCQluV2ZzCQkgPSAtMTsJLy8gbm8uIG9mIHdvcmRmb3JtcyBpbiBEQi4KKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogZXh0cmFjdGluZyBhZ3JlZ2F0ZWQgaW5mb3MgYWJvdXQgRGF0YWJhc2UgY29udGVudHMuLi5cbiIsIGZ1bmMpOworCQorCWRiSW5mbyA9IG5ldyBHbGVtbURCSW5mbygpOworCisJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJdHJ5IHsKKwkJZm9yKGk9MDsgaTxzcWwubGVuZ3RoOyBpKyspCisJCQl7CisJCQlyZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWxbaV0pOworCQkJaWYoIHJlcy5uZXh0KCkgKQorCQkJCWRiSW5mby5jb3VudHNbaV0gPSByZXMuZ2V0SW50KDEpOyAvLyBjb3VudCBpcyBpbiBjb2x1bW4gMS4KKwkJCWVsc2UKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZXh0cmFjdCBjb3VudCBmcm9tICclcychXG4iLCBmdW5jLCBzcWxbaV0pOworCQkJCWRiSW5mby5jb3VudHNbaV0gPSAtMTsKKwkJCQl9CisJCQl9CisgICAgICAgCisgICAgICAgIH0KKyAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAJeworICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHNxbD0nJXMnIGZhaWxlZCFcbiIsIGZ1bmMsIHNxbFtpXSk7CisgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgCX0KKwlmaW5hbGx5IHsKKwkJdHJ5IHsKKwkJCXJlcy5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gT0sKKwl9IC8vIHJlYWREYkxlbW1hdGFJbmZvcworCQorCS8qKioqKioqKioqKioqKioqKioqKiBUZXN0IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQorCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvc190ZXN0CisJICogVGhpcyBpcyBkZWJ1ZyBjb2RlIHdyaXR0ZW4gdG8gdGVzdCBpZiB3ZSBjYW4gYWNjZXNzIHRoZSBEZXJieQorCSAqIERhdGFiYXNlIGZyb20gYW4gZXh0ZXJuYWwgSmF2YSBQcm9ncmFtbS4KKwkgKiAwOC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgcmVhZERiSW5mb3NfdGVzdCgpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJU3RyaW5nCisJCWluc2VydFN0bXQgPSAiIjsKKwkKKwkvLyBDb25uZWN0IHRvIERlcmJ5IGRhdGFiYXNlOgorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQkKKwkJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJCXRyeQorCQkJeworCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIFN0cmluZyAKKyAgICAgICAgICAgIAlzcWwgPSAiU0VMRUNUICogRlJPTSAiICsgZGJUYWJsZTsKKyAgICAgICAgICAgIFJlc3VsdFNldCAKKyAgICAgICAgICAgIAlyZXN1bHQgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOworIAorICAgICAgICAgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiB0YWJsZSAnJXMnOlxuIiwgIGZ1bmMsIGRiVGFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAocmVzdWx0Lm5leHQoKSkgeworICAgICAgICAgICAgCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIiclcycgOiAnJXMnIDogJyVzJyA6ICclcycgLlxuIiwgcmVzdWx0LmdldFN0cmluZygxKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMiksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDMpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZyg0KSk7CisgICAgICAgIAkJaW5zZXJ0U3RtdCA9IGluc2VydFN0bXQgKyAiPHA+IiArIHJlc3VsdC5nZXRTdHJpbmcoMSkgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoMikgKyAiIDogIiArCisgICAgICAgICAgICAgICAgCQkgICAgIHJlc3VsdC5nZXRTdHJpbmcoMykgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoNCkgKyAiPC9wPiI7CisgICAgICAgICAgICAJfQorCQkJfQorCSAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAgICAgCXsKKwkgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogaW5zZXJ0U3RtdD0nJXMnIGZhaWxlZCEuXG4iLCBmdW5jLCBzdG10KTsKKyAgICAgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIAl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGluZyAnJXMgZmFpbGVkIVxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCXJldHVybiAxOworCQl9CisJCisJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCXRyeSB7CisJCWNvbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCQorCX0gLy8gcmVhZERiSW5mb3NfdGVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIGltcG9ydEdsZW1tTGVtYXRhX3Rlc3QKKwkgKiBUZXN0IFZlcnNpb24uCisJICogMTIuMTIuMTkvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0KFN0cmluZyBmbikKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QiOworCUlucHV0U3RyZWFtIAorCQlpbjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbjIgPSBudWxsOworCVN0cmluZworCQlsaW5lOworCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJcjsKKwkKKwkvKgorCSAqIFJlYWQgTGVtbWF0YSArIEluZm8gZnJvbSBmaWxlOiAKKwkgKi8KKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQkKKwl0cnkgeworCQkvL2luID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oIG5ldyBGaWxlSW5wdXRTdHJlYW0oZm4pICk7CisJCWluMiA9IG5ldyBCdWZmZXJlZFJlYWRlciggbmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJd2hpbGUoIChsaW5lID0gaW4yLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCA9PSAzICkKKwkJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogSW1wb3J0OiBsZW09JyVzJyBEZWNvbXA9JyVzJyBXZj0nJXMnLlxuIiwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMV0sIGxlbW1hSW5mb1syXSk7CisJCQllbHNlCisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6IGltcG9ydEdsZW1tTGFtYXRhOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzIVxuIiwgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQl9CisJCX0gCisJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBvcGVuICclcychXG4iLCBmdW5jLCBmbik7CisJCXJldHVybiAxOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisKKwl0cnkgeworCQlpbjIuY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwkvKiBDaGVjayBjb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCSAqLyAKKwlyID0gcmVhZERiSW5mb3NfdGVzdCgpOworCWlmKCByICE9IDAgKQorCQlyZXR1cm4gcjsKKwkJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdAorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS85MS8xMGYxNDc4MDRjM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvOTEvMTBmMTQ3ODA0YzNkMDAxYzEwYjFiMTdkZGQzMDllNmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ5OGZkYwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvOTEvMTBmMTQ3ODA0YzNkMDAxYzEwYjFiMTdkZGQzMDllNmYKQEAgLTAsMCArMSw5NzQgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworLyogMC4xIDogMTcuMDYuMjAvRkIgCisgKiAwLjIgOiAyNS4xMC4yMS9GQgorICogICAgICAgbG9naW5nIG9mIHRoZSBBUEkgUmVxdWVzdHMuCisgKiAgICAgICBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKyAqICAgICAgIGNvcnJlY3RpbmcgY2FsbGluZyBvZiBsZW1tYSArIHByb3AxL3Byb3AyL3NwZWMuCisgKiAgICAgICBoYW5kbGluZyBvZiBsZW1tYXRhIHdpdGggJ8OfJy4KKyAqIAorICogR2VuZXJhbCBjb21tZW50cyB0byB0aGUgZW5jb2Rpbmcgb2YgZGVyaXZhdGlvbnMgZnJvbSBsZW1tYSB0byB3ZnMgYW5kIGhvdyB0aGV5IGFyZSBlbmNvZGVkCisgKiBpbiB0aGUgRGVyYnkgZGF0YWJhc2U6CisgKiAKKyAqIEdMRU1NIGVuY29kaW5nOiAgCisgKiAgIF8gXyA6ICtGbGV4ICAgICAgIMOWbGUgLT4gw5ZsICAgICAgCisgKiAgICsgXyA6ICtDb21wICAgICAgIMOWbGxhbXBlIC0+IMOWbCBvciBMYW1wZSAoY29tcG91bmQpLgorICogICBfICsgOiArb3RoZXIgICAgICBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybnNjaHVoIChubyBjb21wb3VuZCBmb3IgJ1R1cm5zY2h1aCcsIG9ubHkgcHJlZml4KS4KKyAqICAgKyArIDogK0NvbXArb3RoZXIgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm4gKyBTY2h1aCAoY29tcG91bmQgZm9yICdTY2h1aCcgKyBQcmVmaXgpLgorICogQzIgbGVtbWF0aXphdGlvbiBvcHRpb25zOgorICogICBGbGV4ICAoaWRlbnRpY2FsIHRvIEdsZW1tKQorICogICBDb21wICAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpCisgKiAgIE90aGVyIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykuCisgKiAgIFNwZWMgIChvbmx5IEMyOiBpbmNsdWRlcyBhbGwgd2ZzIHdpdGggaGlwaGVuIGFuZC9vciBzb21lIG5vbi1hbHBoYWJldGljIElTTzg4NTktMSBjaGFycykKKyAqICAgICAgICAgRS5nLiDDlmwtRXhwb3J0ZSwgIk1hcmtlbiItw5ZsZS4KKyAqIERlcmJ5IEVuY29kaW5nOgorICogIHByb3AxIAlwcm9wMglzcGVjICAgCW1lYW5pbmcgaW4gQzI6CisgKiAgMAkJMAkJLQkJRmxleAorICogIDEJCTAJCS0JCUNvbXAKKyAqICAwCQkxCQktCQlPdGhlciAocHJlZml4KQorICogIDEJCTEJCS0JCUNvbXAgKyBPdGhlcgorICogIC0JCS0JCTAJCS1TcGVjCisgKiAgLQkJLQkJMQkJK1NwZWMKKyAqIAorICogRXhhbXBsZXM6CisgKiAmU2NodWgJCQk6IFNjaHVoLCBTY2h1aGUsIC4uLiBvbmx5IGZsZXhpb25zCisgKiAmU2NodWgrY29tcAkJOiBTY2h1aGUsIFR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtvdGhlcgkJOiBTY2h1aGUsIEFudGlzY2h1aGUuLi4gZmxleGlvbnMgYW5kIHByZWZpeGVkIHdmcyAobm8gY29tcG91bmRzKS4KKyAqICZTY2h1aCtjb21wK290aGVyOiBTY2h1aGUsIEFudGlzY2h1aGUsIFR1cm5zY2h1aGUsIEFudGl0dXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMgYW5kIAorICogCQkJCQkgIHByZWZpeGVkIHNpbmdsZSB3ZnMgKEFudGlzY2h1aGUpIGFuZCBwcmVmaXhlZCBjb21wb3VuZHMuCisgKiAmU2NodWgrc3BlYwkJOiAiQW50aSItU2NodWhlLCA2OGdlci1TY2h1aGUuLi4gbWF5IGJlIGNvbWJpbmVkIHdpdGggZXZlcnkgb3B0aW9uczogYWRkcworICogICAgICAgICAgICAgICAgICAgIHdmcyB3aXRoIGh5cGhlbiBhbmQvb3Igbm9uLWFscGhhYmV0aWMgY2hhcnMuCisgKiAKKyAqIENvbnZlcnNpb24gcnVsZXM6CisgKiAKKyAqICAmc2NobGllw59lbiAtPiBpbnRlcm5hbCBzZWFyY2ggZm9yICdzY2hsaWVzc2VuJywKKyAqICBiZWNhdXNlIEdsZW1tIG91dHB1dHMgJ3NzJyBmb3IgJ8OfJy4KKyAqICAKKyAqIENoYXJhY3RlciBFbmNvZGluZzoKKyAqIAorICogLSBXaGVuIGltcG9ydGluZyB3ZnMgdG8gdGhlIERlcmJ5IERhdGFiYXNlIHdpdGggZG9DdXJsR2xlbW1TZXJ2aWNlcy9pbmRleExlbW1hdGE6CisgKiAKKyAqICAgSU5QVVQ6IHdvcmRmb3JtIGxpc3QgaW4gW1VURi04XSA6IFVURi04IGlzIHRoZW4gY29udmVydGVkIHRvIExhdDEgZm9yIEdsZW1tLAorICogICAgICAgICAgdGhlIG91dHB1dCBvZiBHbGVtbSBbTGF0MV0gaXMgcmV0dXJuZWQgdG8gdGhlIEdsZW1tU2VydmljZXMgd2l0aG91dCByZWNvbnZlcnNpb24KKyAqICAgICAgICAgIHRvIFVURjggYW5kIGltcG9ydGVkIGludG8gRGVyYnkgRGF0YWJhc2UgdW5jaGFuZ2VkLgorICoJCQorICovCisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDQuMTEuMjEiOyAKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjIiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lUHJvcHMJCT0gIi9XRUItSU5GL0dsZW1tU2VydmljZXMucHJvcGVydGllcyI7CisJCisJLy8gdGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHJlYWQgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgKHRoZXNlIGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMpOgorCXByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoIAkJPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCUBDb250ZXh0CisJcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBzZXJ2bGV0Q29udGV4dDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZvdXQJPSBudWxsOworCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZmVycgk9IG51bGw7CQkKKwkJCisJLyogCisgCSAqIAorCSAqIC0gYWZ0ZXIgbG9hZFByb3BlcnRpZXMsIHNldHMgdGhlIGNsYXNzIHZhcmlhYmxlIHdpdGggbG9hZGVkIHByb3BlcnR5IHZhbHVlcy4KKwkgKiAKKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJR1NfV29ya2luZ1BhdGggCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgIkdTX1dvcmtpbmdQYXRoIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIik7CisJZm5hbWVXZnMJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lV2ZzIiwgCSAgICJnbF93ZnNfaW4udHh0Iik7CisJZm5hbWVXZnMJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVdmczsKKwlmbmFtZU91dAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVPdXQiLCAJICAgIkdsZW1tU2VydmljZXMubG9nIik7CisJZm5hbWVPdXQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZU91dDsKKwlmbmFtZUVycgkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVFcnIiLCAJICAgIkdsZW1tU2VydmljZXMuZXJyIik7CisJZm5hbWVFcnIJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUVycjsKKwlmbmFtZVNjcmlwdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVTY3JpcHQiLAkgICAiZG9HbGVtbSIpOworCWZuYW1lU2NyaXB0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVTY3JpcHQ7CisJZm5hbWVMZW1hdGEJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lTGVtYXRhIiwgICAgInRtcC9sZW0zIik7CisJZm5hbWVMZW1hdGEJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUxlbWF0YTsKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qCisJICogIGxvZ19SZXF1ZXN0OgorCSAqICAKKwkgKiAgLSB3cml0ZSBpbmZvIGFib3V0IEFQSSBSZXF1ZXN0LgorCSAqICBQYXJhbWV0ZXJzOgorCSAqICByZXF1ZXN0UGF0aAk6IHBhdGggb2Ygd2ViYXBwIGFkZHJlc3NlZCBieSB0aGUgcmVxdWVzdC4KKwkgKiAgZnVuYwkJOiBuYW1lIG9mIHRoZSBmdW5jdGlvbiB3aGljaCBpbXBsZW1lbnRzIHRoZSByZXF1ZXN0LgorCSAqICAKKwkgKiAgMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgbG9nX1JlcXVlc3QoU3RyaW5nIHJlcXVlc3RQYXRoLCBTdHJpbmcgZnVuYykKKwkKKwl7CisJLy8gdHJhbnNmb3JtICJkYXRlVHRpbWUiIC0+ICJkYXRlIHRpbWUiOgorCQorCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCWZvdXQucHJpbnRmKCIjIyMgJXM6ICVzIDogdmVycz0nJXMnLCB2ZGF0ZT0nJXMnIHJlcXVlc3Q9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RQYXRoLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgCisJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwl9IC8vIGxvZ19SZXF1ZXN0CisJCQorCS8qIGZvcm1hdERiTmFtZQorCSAqIAorCSAqIC0gZ2V0cyBuYW1lIG9mIERhdGFiYXNlIHVzZWQgYnkgRGVyYnkgZnJvbSBwcm9wcyAKKwkgKiAgIGFuZCBmb3JtYXQgaXQgdG8gSFRNTC4KKwkgKiAgCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFN0cmluZyBmb3JtYXREYk5hbWUoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJU3RyaW5nCisJCWRiTmFtZTsKKwlTdHJpbmcKKwkJZGJQYXRoID0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJaW50CisJCWogPSBkYlBhdGgubGFzdEluZGV4T2YoJy8nKTsKKwkKKwlpZiggaiA+IDAgKQorCQlkYk5hbWUgPSBkYlBhdGguc3Vic3RyaW5nKGorMSk7CisJZWxzZQorCQlkYk5hbWUgPSBkYlBhdGg7CisJCisJcmV0dXJuIGRiTmFtZTsgLy8gIjxwPjxiPkRhdGFiYXNlOiAiICsgZGJOYW1lICsgIjwvYj48L3A+XG4iOworCX0gLy8gZm9ybWF0RGJOYW1lCisKKwkvKgorCSAqIGNsb3NlTG9nU3RyZWFtczoKKwkgKiAKKwkgKiAtIGNsb3NlIHRoZSBmb3V0L2ZlcnIgbG9nIHN0cmVhbXMuCisJICogCisJICogMjYuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgY2xvc2VMb2dTdHJlYW1zKCkKKwkKKwl7CisJaWYoIGZvdXQgIT0gbnVsbCkKKwkJZm91dC5jbG9zZSgpOworCWZvdXQgPSBudWxsOworCQorCWlmKCBmZXJyICE9IG51bGwgKQorCQlmZXJyLmNsb3NlKCk7CisJZmVyciA9IG51bGw7CisJfSAvLyBjbG9zZUxvZ1N0cmVhbXMKKwkKKwkvKiBpbml0X2FuZF9sb2dfUmVxdWVzdAorCSAqIAorCSAqIC0gbG9hZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMsIHNldHMgR2xlbW1TZXJ2aWNlcyBjb25zdGFudHMKKwkgKiAgIGFuZCBsb2dzIHRoZSByZXF1ZXN0LgorCSAqIC0gbG9hZCBwcm9wZXJ0aWVzIGFuZCBzZXQgY29uc3RhbnRzIGJlZm9yZSBsb2dnaW5nIGFueXRoaW5nLCBiZWNhdXNlCisJICogICBsb2dnaW5nIHdpbGwgYmUgZG9uZSBpbnRvIHRoZSBsYXN0IHN0ZG91dC9zdGRlcnIgb3BlbmVkIGluIGdsYXNzZmlzaCdzIEpWTSwKKwkgKiAgIGUuZy4gaW4gdGhlIGxvZyBvZiBhbm90aGVyIFNlcnZpY2UuCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFByb3BlcnRpZXMgaW5pdF9hbmRfbG9nX1JlcXVlc3QoU3RyaW5nIGZ1bmMsIFN0cmluZyByZXF1ZXN0UGF0aCkKKwkKKwl7CisJU3RyaW5nCisJCXJlYWxQYXRoID0gc2VydmxldENvbnRleHQuZ2V0UmVhbFBhdGgoZm5hbWVQcm9wcyk7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtIChpZiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJUHJvcGVydGllcworCQlwcm9wcyA9IFV0aWxzLmxvYWRQcm9wZXJ0aWVzKHNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcyksIGZuYW1lUHJvcHMsIHJlYWxQYXRoLCBmYWxzZSk7CisJCisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIGZvdXQgYW5kIGZlcnIgYXMgcmVwbGFjZW1lbnQgZm9yIHN0ZG91dC9zdGRlcnIgZm9yIHVzZSBpbiBHbGVtbVNlcnZpY2VzLgorCS8vIGRvIG5vdCB1c2Ugb3IgcmVkaXJlY3QgU3lzdGVtLm91dCBhbmQgU3lzdGVtLmVyciwgYXMgdGhleSB3aWxsIGJlIHJlZGlyZWN0ZWQKKwkvLyBieSBvdGhlciBTZXJ2aWNlcyBpbiB0aGUgc2FtZSBnbGFzc2Zpc2ggSlZNLCBlLmcuIGJ5IHRoZSBXZm9ybVNlcnZpY2VzLgorCWZvdXQgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVPdXQpOworCWZlcnIgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVFcnIpOworCQorCS8vVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkKKwlsb2dfUmVxdWVzdChyZXF1ZXN0UGF0aCwgZnVuYyk7CisJCisJcmV0dXJuIHByb3BzOworCX0gLy8gaW5pdF9hbmRfbG9nX1JlcXVlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwlTdHJpbmcKKwkJc3RhdHVzOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3N0YXR1cy8iKTsKKwkKKwkvLyBodHRwU2VydmxldFJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW52KTsKKwkKKwlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+cHJvcGVydGllczwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPmRhdGFiYXNlPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIiksCisJCQkJCQkJc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSA9PSBudWxsID8gIm5vdCBmb3VuZCIgOgorCQkJCQkJCQlwcm9wcy5pc0VtcHR5KCkgPyAiZW1wdHkiIDogImxvYWRlZCIsCisJCQkJCQkJZm9ybWF0RGJOYW1lKHByb3BzKQorCQkJCQkJCSk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJY2xvc2VMb2dTdHJlYW1zKCk7CisJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiAKKwkgKiBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhOgorCSAqIAorCSAqIFBPU1Q6IC9pbmRleC9hZGQve2RhdGFiYXNlbmFtZX06IHRleHQvcGxhaW4KKwkgKiAKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGxpc3QJCSA6IHRoZSBsaXN0IG9mIHdmcyBzZW50IGluIHRoZSBib2R5IG9mIHRoZSBQT1NUIHJlcXVlc3QuCisJICogZGJwYXRoCSA6IHRoZSBsb2NhdGlvbiBvZiB0aGUgZGF0YWJhc2Ugd2hlcmUgdGhlIGxlbW1hK3dmcyBhcmUgdG8gYmUgc3RvcmVkLgorCSAqIE5vdGVzICAgICA6CisJICogLSBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZSBsb2NhdGVkIGF0ICdkYXRhYmFzZW5hbWUnLgorCSAqIC0gVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQgaW50byBhIERlcmJ5IGRhdGFiYXNlLgorCSAqIElucHV0CSA6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqIDA0LjExLjIxL0ZCCisJICogLSBzdWJtaXR0ZWQgZGF0YWJhc2UgcGF0aC4KKwkgKi8KKwkKKwlAUGF0aCgiYWRkL3tkYXRhYmFzZXBhdGh9IikgCisJQFBPU1QgCisJQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvUE9TVF9pbXBvcnRMZW1tYURhdGEKKwkJCQkJCQkoCisJCQkJCQkJU3RyaW5nIAkJCQkJCQkJbGlzdCwKKwkJCQkJCQlAUGF0aFBhcmFtKHZhbHVlPSJkYXRhYmFzZXBhdGgiKSAJZmluYWwgU3RyaW5nIGRicGF0aAorCQkJCQkJCSkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb1BPU1RfaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSBhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCQorCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9hZGQvIik7CisJCisJZm91dC5wcmludGYoIkluZm8gOiAlczogc2VsZWN0ZWQgZGF0YWJhc2UgcGF0aCA9ICclcycuXG4iLCBmdW5jLCBkYnBhdGgpOworCQorCS8vIFdyaXRlIHN1Ym1pdHRlZCBsaXN0IG9mIHdvcmRmb3JtcyB0byBmaWxlOgorCXRyeQorCQl7CisJCW9zID0gRmlsZXMubmV3T3V0cHV0U3RyZWFtKHApOworCQlvcy53cml0ZShsaXN0LmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSkpOworCSAgICBvcy5jbG9zZSgpOworCSAgICBiRG9uZSA9IHRydWU7CisJICAgIGZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGZpbGUgJyVzJyBiZXNjaHJpZWJlbi5cbiIsIGZ1bmMsIGZuYW1lV2ZzKTsKKwkgICAgfQorCWNhdGNoKElPRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoZmVycik7CisJCX0KKyAgICAKKwlpZiggYkRvbmUgKQorCQltc2cgPSAiPHA+TGlzdCB3cml0dGVuIHRvIGZpbGU6ICIgKyBwLnRvU3RyaW5nKCkgKyAiPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+PGI+RmlsZSBFcnJvcjogPC9iPiBjYW5ub3Qgd3JpdGUgdG8gIiArIHAudG9TdHJpbmcoKSArICIhPC9wPiI7CisJCisJLyoKKwkgKiAgZXhlY3V0ZSBHbGVtbSBzaGVsbCBzY3JpcHQ6CisJICovCisJU3RyaW5nCisJCW1zZ0dsZW1tU2NyaXB0LCBtc2dJbXBvcnQ7CisJaW50IAorCQlyID0gVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0KGZuYW1lU2NyaXB0LCBmbmFtZVdmcywgZm91dCwgZmVycik7CisJCisJaWYoIHIgPT0gMCApCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEF1c2bDvGhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhLCBwcm9wcywgZGJwYXRoKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBpbXBvcnRHbGVtbUxlbW1hdGEgcmV0dXJucyByPSVkLlxuIiwgZnVuYywgcik7CisJaWYoIG5FcnJvcnMgPT0gMCApCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiAiICsgbkVycm9ycyArICIgZXJyb3JzITwvcD4iOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGVuZGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJLy8gUmV0dXJuIEluZm9zOgorCXJldHVybiAKKwkJCSAgICI8aHRtbD4iICsKKwkJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwkKKwl9IC8vIGRvUE9TVF9pbXBvcnRMZW1tYURhdGEKKworCS8qIGRvR0VUX3ZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnMgPSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvLyIpOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJZmluYWwgU3RyaW5nCisJCWRiTmFtZSA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPmRhdGFiYXNlPC9iPjogJXM8L3A+IiwgZm9ybWF0RGJOYW1lKHByb3BzKSk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIGRiTmFtZSArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gZG9HRVRfdmlld0RCSW5mbworCisKKwkvKiBkb0dFVF92aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND52ZXJzaW9uICIgKyB2ZXJzaW9uICsgIiB2b20gIiArIHZlcnNpb25EYXRlICsgIiByZXF1ZXN0ID0gJyIgKyBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpICsgIic8L2k+PC9oND5cbiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAxOjwvYj4gKEMyIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfTwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPntsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpPC9jb2RlPjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw8L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT7Dlmw/b3B0cz1mbGV4K2NvbXArb3RoZXIrc3BlYzwvY29kZT48L3A+IiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDI6PC9iPiAoaW50ZXJuYWwgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9P3Byb3AxPVswMTJdJmFtcDtwcm9wMj1bMDEyXSZhbXA7c3BlYz1bMDEyXTwvY29kZT4gKHdoZXJlIGVhY2ggcHJvcDEsIHByb3AyLCBzcGVjIGlzIG9wdGlvbmFsKS48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsP3Byb3AxPTAmYW1wO3Byb3AyPTEmYW1wO3NwZWM9MjwvY29kZT48L3A+IjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0iKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0nJWQnIHByb3AyPSclZCcgc3BlYz0nJWQnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJLyogCisJZm9yKGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCQl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCQl9CQorCSAqLworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCBsZW1tYUluZm8ub3B0c1NldHRpbmcgPT0gTGVtbWFJbmZvLk9QVFNfU0VUVElOR19DMiApIAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEscHJvcDIsc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZyk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWludAorCQluV2ZzID0gbGVtbWFJbmZvLm5XZnM7CisJCisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJLy8gbG9nIG91dGNvbWU6CisJaWYoIG5XZnMgPCAwICkKKwkJZm91dC5wcmludGYoIkVycm9yOiAlczogcmV0dXJuaW5nIDAgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jKTsKKwllbHNlCisJCWZvdXQucHJpbnRmKCJEZWJ1Zy4gJXM6IHJldHVybmluZyAlZCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMsIG5XZnMpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiBub3RlOgorCSAqIC0gaWYgQnJvd3NlciByZXF1ZXN0OiBIVFRQU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ3RleHQvaHRtbCwuLi54bWwuLi4nCisJICogLSBpZiBXZm9ybVNlcnZpY2VzIHJlcXVlc3Q6IEh0dHBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAnYXBwbGljYXRpb24vanNvbicuCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKiAKKwkgKiAtIHN1Ym1pdHRlZCBVUkwsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYSwgaXMgaW50ZXJwcmV0ZWQgYnkgZ2xhc3NmaXNoIGFzCisJICogICBiZWluZyBJU08tODg1OS0xIGVuY29kZWQuIFdoZW4gdGhlIHJlcXVlc3QgaXMgVVRGLTggZW5jb2RlZCwgVW1sYXV0cyBhbmQKKwkgKiAgICfDnycgYXJlIG1pcy1pbnRlcnByZWRlZCwgbGVhZGluZyB0byBhbiBlcnJvbmVyb3VzIHJlcXVlc3QgdG8gdGhlIERlcmJ5CisJICogICBkYXRhYmFzZS4KKwkgKiAtIFJlcXVlc3RlZCBsZW1tYSAnbGVtbWEnIGhhcyB0byBiZSB0cmFuc2Zvcm1lZCB0byBVVEYtOCBmaXJzdC4KKwkgKiAtIG5vdGU6IGV2ZW4gd2hlbiBzdWJtaXR0aW5nIHRoZSBHRVQgcmVxdWVzdCBieSBzcGVjaWZ5aW5nICdjaGFyZW5jb2RlPVVURi04JywKKwkgKiAgIGdsYXNzZmlzaCBkb2VzIG5vdCBjb252ZXJ0IGl0IGF1dG9tYXRpY2FsbHkgYXMgZXhwZWN0ZWQuCisJICogICAKKwkgKiAgMjIuMTAuMjEvRkIKKwkgKiAKKwkgKiAtIGlmIGFjY2VwdD1hcHBsaWNhdGlvbi9qc29uIHJldHVybiBVVEYtOCAoV2Zvcm1TZXJ2aWNlcykuCisJICogLSBlbHNlIGlmIGFjY2VwdD10ZXh0L2h0bWwgZG8gbm90IHRyYW5zZm9ybSBjaGFyYWN0ZXIgZW5jb2RpbmcgKEJyb3dzZXIpLgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAQ29uc3VtZXMoImFwcGxpY2F0aW9uL2pzb24sIHRleHQvaHRtbCIpCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbzsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwlmaW5hbCBib29sZWFuCisJCWJFbmNvZGVMZW1tYSA9IGZhbHNlOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOworCQorCS8qIHRlc3Q6CisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWlmKCBiRW5jb2RlTGVtbWEgKQorCQl7CisJCS8vIHdoZW4gYWNjZXB0aW5nIEpTT04sIHVybCBoYXMgdG8gYmUgY29udmVydGVkIHRvIFVURi04LCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWE6CisJCXRyeSB7CisJCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKG5ldyBTdHJpbmcobGVtbWEuZ2V0Qnl0ZXMoIklTTy04ODU5LTEiKSwgInV0Zi04IikpOworCQkJfSAKKwkJY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZTEpIHsKKwkJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQkJTGVtbWFSZXNwb25zZQorCQkJCWxlbXJlc3AgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1yZXNwKS5idWlsZCgpOworCQkJfQorCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFtVVEYtOF0gb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWFJbmZvLmxlbW1hT3JpZywgb3B0aW9ucyk7CisJCX0KKwllbHNlCisJCXsKKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW3VuY2hhbmdlZF0gb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWFJbmZvLmxlbW1hT3JpZywgb3B0aW9ucyk7CisJCX0KKworCS8qIGRvZXMgbm90IGhlbHA6CisJIFN0cmluZworCSAJcmVxdWVzdENoYXJFbmNvZGluZyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRDaGFyYWN0ZXJFbmNvZGluZygpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVxdWVzdCBjaGFyYWN0ZXIgZW5jb2RpbmcgPSclcycuXG4iLCBmdW5jLCByZXF1ZXN0Q2hhckVuY29kaW5nKTsKKwkqLworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQl7CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJLy9yZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCX0KKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CQorCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwkvKgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvdGVzdC9pbmZvLyIpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9mb3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCWZvdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS85NS9mMDk2YTZmNjU1M2QwMDFjMTBiMWIxN2RkZDMwOWU2ZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvOTUvZjA5NmE2ZjY1NTNkMDAxYzEwYjFiMTdkZGQzMDllNmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZkOWVkNgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvOTUvZjA5NmE2ZjY1NTNkMDAxYzEwYjFiMTdkZGQzMDllNmYKQEAgLTAsMCArMSw5ODYgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworLyogMC4xIDogMTcuMDYuMjAvRkIgCisgKiAwLjIgOiAyNS4xMC4yMS9GQgorICogICAgICAgbG9naW5nIG9mIHRoZSBBUEkgUmVxdWVzdHMuCisgKiAgICAgICBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKyAqICAgICAgIGNvcnJlY3RpbmcgY2FsbGluZyBvZiBsZW1tYSArIHByb3AxL3Byb3AyL3NwZWMuCisgKiAgICAgICBoYW5kbGluZyBvZiBsZW1tYXRhIHdpdGggJ8OfJy4KKyAqIAorICogR2VuZXJhbCBjb21tZW50cyB0byB0aGUgZW5jb2Rpbmcgb2YgZGVyaXZhdGlvbnMgZnJvbSBsZW1tYSB0byB3ZnMgYW5kIGhvdyB0aGV5IGFyZSBlbmNvZGVkCisgKiBpbiB0aGUgRGVyYnkgZGF0YWJhc2U6CisgKiAKKyAqIEdMRU1NIGVuY29kaW5nOiAgCisgKiAgIF8gXyA6ICtGbGV4ICAgICAgIMOWbGUgLT4gw5ZsICAgICAgCisgKiAgICsgXyA6ICtDb21wICAgICAgIMOWbGxhbXBlIC0+IMOWbCBvciBMYW1wZSAoY29tcG91bmQpLgorICogICBfICsgOiArb3RoZXIgICAgICBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybnNjaHVoIChubyBjb21wb3VuZCBmb3IgJ1R1cm5zY2h1aCcsIG9ubHkgcHJlZml4KS4KKyAqICAgKyArIDogK0NvbXArb3RoZXIgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm4gKyBTY2h1aCAoY29tcG91bmQgZm9yICdTY2h1aCcgKyBQcmVmaXgpLgorICogQzIgbGVtbWF0aXphdGlvbiBvcHRpb25zOgorICogICBGbGV4ICAoaWRlbnRpY2FsIHRvIEdsZW1tKQorICogICBDb21wICAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpCisgKiAgIE90aGVyIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykuCisgKiAgIFNwZWMgIChvbmx5IEMyOiBpbmNsdWRlcyBhbGwgd2ZzIHdpdGggaGlwaGVuIGFuZC9vciBzb21lIG5vbi1hbHBoYWJldGljIElTTzg4NTktMSBjaGFycykKKyAqICAgICAgICAgRS5nLiDDlmwtRXhwb3J0ZSwgIk1hcmtlbiItw5ZsZS4KKyAqIERlcmJ5IEVuY29kaW5nOgorICogIHByb3AxIAlwcm9wMglzcGVjICAgCW1lYW5pbmcgaW4gQzI6CisgKiAgMAkJMAkJLQkJRmxleAorICogIDEJCTAJCS0JCUNvbXAKKyAqICAwCQkxCQktCQlPdGhlciAocHJlZml4KQorICogIDEJCTEJCS0JCUNvbXAgKyBPdGhlcgorICogIC0JCS0JCTAJCS1TcGVjCisgKiAgLQkJLQkJMQkJK1NwZWMKKyAqIAorICogRXhhbXBsZXM6CisgKiAmU2NodWgJCQk6IFNjaHVoLCBTY2h1aGUsIC4uLiBvbmx5IGZsZXhpb25zCisgKiAmU2NodWgrY29tcAkJOiBTY2h1aGUsIFR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtvdGhlcgkJOiBTY2h1aGUsIEFudGlzY2h1aGUuLi4gZmxleGlvbnMgYW5kIHByZWZpeGVkIHdmcyAobm8gY29tcG91bmRzKS4KKyAqICZTY2h1aCtjb21wK290aGVyOiBTY2h1aGUsIEFudGlzY2h1aGUsIFR1cm5zY2h1aGUsIEFudGl0dXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMgYW5kIAorICogCQkJCQkgIHByZWZpeGVkIHNpbmdsZSB3ZnMgKEFudGlzY2h1aGUpIGFuZCBwcmVmaXhlZCBjb21wb3VuZHMuCisgKiAmU2NodWgrc3BlYwkJOiAiQW50aSItU2NodWhlLCA2OGdlci1TY2h1aGUuLi4gbWF5IGJlIGNvbWJpbmVkIHdpdGggZXZlcnkgb3B0aW9uczogYWRkcworICogICAgICAgICAgICAgICAgICAgIHdmcyB3aXRoIGh5cGhlbiBhbmQvb3Igbm9uLWFscGhhYmV0aWMgY2hhcnMuCisgKiAKKyAqIENvbnZlcnNpb24gcnVsZXM6CisgKiAKKyAqICAmc2NobGllw59lbiAtPiBpbnRlcm5hbCBzZWFyY2ggZm9yICdzY2hsaWVzc2VuJywKKyAqICBiZWNhdXNlIEdsZW1tIG91dHB1dHMgJ3NzJyBmb3IgJ8OfJy4KKyAqICAKKyAqIENoYXJhY3RlciBFbmNvZGluZzoKKyAqIAorICogLSBXaGVuIGltcG9ydGluZyB3ZnMgdG8gdGhlIERlcmJ5IERhdGFiYXNlIHdpdGggZG9DdXJsR2xlbW1TZXJ2aWNlcy9pbmRleExlbW1hdGE6CisgKiAKKyAqICAgSU5QVVQ6IHdvcmRmb3JtIGxpc3QgaW4gW1VURi04XSA6IFVURi04IGlzIHRoZW4gY29udmVydGVkIHRvIExhdDEgZm9yIEdsZW1tLAorICogICAgICAgICAgdGhlIG91dHB1dCBvZiBHbGVtbSBbTGF0MV0gaXMgcmV0dXJuZWQgdG8gdGhlIEdsZW1tU2VydmljZXMgd2l0aG91dCByZWNvbnZlcnNpb24KKyAqICAgICAgICAgIHRvIFVURjggYW5kIGltcG9ydGVkIGludG8gRGVyYnkgRGF0YWJhc2UgdW5jaGFuZ2VkLgorICoJCQorICovCisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDQuMTEuMjEiOyAKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjIiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lUHJvcHMJCT0gIi9XRUItSU5GL0dsZW1tU2VydmljZXMucHJvcGVydGllcyI7CisJCisJLy8gdGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHJlYWQgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgKHRoZXNlIGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMpOgorCXByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoIAkJPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCUBDb250ZXh0CisJcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBzZXJ2bGV0Q29udGV4dDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZvdXQJPSBudWxsOworCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZmVycgk9IG51bGw7CQkKKwkJCisJLyogCisgCSAqIAorCSAqIC0gYWZ0ZXIgbG9hZFByb3BlcnRpZXMsIHNldHMgdGhlIGNsYXNzIHZhcmlhYmxlIHdpdGggbG9hZGVkIHByb3BlcnR5IHZhbHVlcy4KKwkgKiAKKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJR1NfV29ya2luZ1BhdGggCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgIkdTX1dvcmtpbmdQYXRoIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIik7CisJZm5hbWVXZnMJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lV2ZzIiwgCSAgICJnbF93ZnNfaW4udHh0Iik7CisJZm5hbWVXZnMJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVdmczsKKwlmbmFtZU91dAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVPdXQiLCAJICAgIkdsZW1tU2VydmljZXMubG9nIik7CisJZm5hbWVPdXQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZU91dDsKKwlmbmFtZUVycgkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVFcnIiLCAJICAgIkdsZW1tU2VydmljZXMuZXJyIik7CisJZm5hbWVFcnIJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUVycjsKKwlmbmFtZVNjcmlwdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVTY3JpcHQiLAkgICAiZG9HbGVtbSIpOworCWZuYW1lU2NyaXB0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVTY3JpcHQ7CisJZm5hbWVMZW1hdGEJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lTGVtYXRhIiwgICAgInRtcC9sZW0zIik7CisJZm5hbWVMZW1hdGEJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUxlbWF0YTsKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qCisJICogIGxvZ19SZXF1ZXN0OgorCSAqICAKKwkgKiAgLSB3cml0ZSBpbmZvIGFib3V0IEFQSSBSZXF1ZXN0LgorCSAqICBQYXJhbWV0ZXJzOgorCSAqICByZXF1ZXN0UGF0aAk6IHBhdGggb2Ygd2ViYXBwIGFkZHJlc3NlZCBieSB0aGUgcmVxdWVzdC4KKwkgKiAgZnVuYwkJOiBuYW1lIG9mIHRoZSBmdW5jdGlvbiB3aGljaCBpbXBsZW1lbnRzIHRoZSByZXF1ZXN0LgorCSAqICAKKwkgKiAgMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgbG9nX1JlcXVlc3QoU3RyaW5nIHJlcXVlc3RQYXRoLCBTdHJpbmcgZnVuYykKKwkKKwl7CisJLy8gdHJhbnNmb3JtICJkYXRlVHRpbWUiIC0+ICJkYXRlIHRpbWUiOgorCQorCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCWZvdXQucHJpbnRmKCIjIyMgJXM6ICVzIDogdmVycz0nJXMnLCB2ZGF0ZT0nJXMnIHJlcXVlc3Q9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RQYXRoLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgCisJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwl9IC8vIGxvZ19SZXF1ZXN0CisJCQorCS8qIGZvcm1hdERiTmFtZQorCSAqIAorCSAqIC0gZ2V0cyBuYW1lIG9mIERhdGFiYXNlIHVzZWQgYnkgRGVyYnkgZnJvbSBwcm9wcyAKKwkgKiAgIGFuZCBmb3JtYXQgaXQgdG8gSFRNTC4KKwkgKiAgCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFN0cmluZyBmb3JtYXREYk5hbWUoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJU3RyaW5nCisJCWRiTmFtZTsKKwlTdHJpbmcKKwkJZGJQYXRoID0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJaW50CisJCWogPSBkYlBhdGgubGFzdEluZGV4T2YoJy8nKTsKKwkKKwlpZiggaiA+IDAgKQorCQlkYk5hbWUgPSBkYlBhdGguc3Vic3RyaW5nKGorMSk7CisJZWxzZQorCQlkYk5hbWUgPSBkYlBhdGg7CisJCisJcmV0dXJuIGRiTmFtZTsgLy8gIjxwPjxiPkRhdGFiYXNlOiAiICsgZGJOYW1lICsgIjwvYj48L3A+XG4iOworCX0gLy8gZm9ybWF0RGJOYW1lCisKKwkvKgorCSAqIGNsb3NlTG9nU3RyZWFtczoKKwkgKiAKKwkgKiAtIGNsb3NlIHRoZSBmb3V0L2ZlcnIgbG9nIHN0cmVhbXMuCisJICogCisJICogMjYuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgY2xvc2VMb2dTdHJlYW1zKCkKKwkKKwl7CisJaWYoIGZvdXQgIT0gbnVsbCkKKwkJZm91dC5jbG9zZSgpOworCWZvdXQgPSBudWxsOworCQorCWlmKCBmZXJyICE9IG51bGwgKQorCQlmZXJyLmNsb3NlKCk7CisJZmVyciA9IG51bGw7CisJfSAvLyBjbG9zZUxvZ1N0cmVhbXMKKwkKKwkvKiBpbml0X2FuZF9sb2dfUmVxdWVzdAorCSAqIAorCSAqIC0gbG9hZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMsIHNldHMgR2xlbW1TZXJ2aWNlcyBjb25zdGFudHMKKwkgKiAgIGFuZCBsb2dzIHRoZSByZXF1ZXN0LgorCSAqIC0gbG9hZCBwcm9wZXJ0aWVzIGFuZCBzZXQgY29uc3RhbnRzIGJlZm9yZSBsb2dnaW5nIGFueXRoaW5nLCBiZWNhdXNlCisJICogICBsb2dnaW5nIHdpbGwgYmUgZG9uZSBpbnRvIHRoZSBsYXN0IHN0ZG91dC9zdGRlcnIgb3BlbmVkIGluIGdsYXNzZmlzaCdzIEpWTSwKKwkgKiAgIGUuZy4gaW4gdGhlIGxvZyBvZiBhbm90aGVyIFNlcnZpY2UuCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFByb3BlcnRpZXMgaW5pdF9hbmRfbG9nX1JlcXVlc3QoU3RyaW5nIGZ1bmMsIFN0cmluZyByZXF1ZXN0UGF0aCkKKwkKKwl7CisJU3RyaW5nCisJCXJlYWxQYXRoID0gc2VydmxldENvbnRleHQuZ2V0UmVhbFBhdGgoZm5hbWVQcm9wcyk7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtIChpZiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJUHJvcGVydGllcworCQlwcm9wcyA9IFV0aWxzLmxvYWRQcm9wZXJ0aWVzKHNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcyksIGZuYW1lUHJvcHMsIHJlYWxQYXRoLCBmYWxzZSk7CisJCisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIGZvdXQgYW5kIGZlcnIgYXMgcmVwbGFjZW1lbnQgZm9yIHN0ZG91dC9zdGRlcnIgZm9yIHVzZSBpbiBHbGVtbVNlcnZpY2VzLgorCS8vIGRvIG5vdCB1c2Ugb3IgcmVkaXJlY3QgU3lzdGVtLm91dCBhbmQgU3lzdGVtLmVyciwgYXMgdGhleSB3aWxsIGJlIHJlZGlyZWN0ZWQKKwkvLyBieSBvdGhlciBTZXJ2aWNlcyBpbiB0aGUgc2FtZSBnbGFzc2Zpc2ggSlZNLCBlLmcuIGJ5IHRoZSBXZm9ybVNlcnZpY2VzLgorCWZvdXQgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVPdXQpOworCWZlcnIgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVFcnIpOworCQorCS8vVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkKKwlsb2dfUmVxdWVzdChyZXF1ZXN0UGF0aCwgZnVuYyk7CisJCisJcmV0dXJuIHByb3BzOworCX0gLy8gaW5pdF9hbmRfbG9nX1JlcXVlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwlTdHJpbmcKKwkJc3RhdHVzOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3N0YXR1cy8iKTsKKwkKKwkvLyBodHRwU2VydmxldFJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW52KTsKKwkKKwlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+cHJvcGVydGllczwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPmRhdGFiYXNlPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIiksCisJCQkJCQkJc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSA9PSBudWxsID8gIm5vdCBmb3VuZCIgOgorCQkJCQkJCQlwcm9wcy5pc0VtcHR5KCkgPyAiZW1wdHkiIDogImxvYWRlZCIsCisJCQkJCQkJZm9ybWF0RGJOYW1lKHByb3BzKQorCQkJCQkJCSk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJY2xvc2VMb2dTdHJlYW1zKCk7CisJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiAKKwkgKiBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhOgorCSAqIAorCSAqIFBPU1Q6IC9pbmRleC9hZGQve2RhdGFiYXNlbmFtZX06IHRleHQvcGxhaW4KKwkgKiAKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGxpc3QJCSAJOiB0aGUgbGlzdCBvZiB3ZnMgc2VudCBpbiB0aGUgYm9keSBvZiB0aGUgUE9TVCByZXF1ZXN0LgorCSAqIGRicGF0aEVuY29kZWQ6IHRoZSBsb2NhdGlvbiBvZiB0aGUgZGF0YWJhc2Ugd2hlcmUgdGhlIGxlbW1hK3dmcyBhcmUgdG8gYmUgc3RvcmVkLgorCSAqICAgICAgICAgICAgIAkgIGVuY29kZWQgYXMgIi5ob21lLnVzZXIuS29yQVAuLi4uIiwgbXVzdCBiZSBjb252ZXJ0ZWQgdG8KKwkgKiAgICAgICAgICAgIAkgICIvaG9tZS91c2VyL0tvckFQLy4uLiIKKwkgKiAgICAgICAgIAkJICBJTVBPUlRBTlQ6IGRvIG5vdCB1c2UgYSAnLicgZm9yIGVuY29kaW5nIGFueXRoaW5nIGVsc2UgdGhhbiBhICcvJy4KKwkgKiBOb3RlcyAgICAgOgorCSAqIC0gYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UgbG9jYXRlZCBhdCAnZGF0YWJhc2VuYW1lJy4KKwkgKiAtIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkIGludG8gYSBEZXJieSBkYXRhYmFzZS4KKwkgKiBJbnB1dAkgOiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKiAwNC4xMS4yMS9GQgorCSAqIC0gc3VibWl0dGVkIGRhdGFiYXNlIHBhdGguCisJICovCisJCisJQFBhdGgoImFkZC97ZGF0YWJhc2VwYXRofSIpIAorCUBQT1NUIAorCUBDb25zdW1lcygidGV4dC9wbGFpbiIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisJCQkJCQkJKAorCQkJCQkJCVN0cmluZyAJCQkJCQkJCQkJICBsaXN0LAorCQkJCQkJCUBQYXRoUGFyYW0odmFsdWU9ImRhdGFiYXNlcGF0aCIpIGZpbmFsIFN0cmluZyBkYnBhdGhFbmNvZGVkCisJCQkJCQkJKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvUE9TVF9pbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIAorCQlhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCVN0cmluZworCQlkYnBhdGg7CisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBudWxsOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvYWRkL3tkYnBhdGh9Iik7CisJCisJZGJwYXRoID0gZGJwYXRoRW5jb2RlZC5yZXBsYWNlKCcuJywgJy8nKTsKKwkKKwlmb3V0LnByaW50ZigiSW5mbyA6ICVzOiBzZWxlY3RlZCBkYXRhYmFzZSBwYXRoID0gJyVzJy5cbiIsIGZ1bmMsIGRicGF0aCk7CisJZm91dC5wcmludGYoIkluZm8gOiAlczogd29ya2luZyBkaXJlY3RvcnkgPSAnJXMnLlxuIiwgZnVuYywgR1NfV29ya2luZ1BhdGgpOworCQorCS8vIHNldCBmaWxlIGFuZCBwYXRocyBhZnRlciBHU19Xb3JraW5nUGF0aCBoYXMgYmVlbiBpbml0aWFsaXNlZDoKKwlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgZm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShmZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzLCBmb3V0LCBmZXJyKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZsO8aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEsIHByb3BzLCBkYnBhdGgpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwkKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCQorCX0gLy8gZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCisJLyogZG9HRVRfdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVycyA9ICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vIik7CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlmaW5hbCBTdHJpbmcKKwkJZGJOYW1lID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+ZGF0YWJhc2U8L2I+OiAlczwvcD4iLCBmb3JtYXREYk5hbWUocHJvcHMpKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgZGJOYW1lICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyBkb0dFVF92aWV3REJJbmZvCisKKworCS8qIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0PnZlcnNpb24gIiArIHZlcnNpb24gKyAiIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIHJlcXVlc3QgPSAnIiArIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikgKyAiJzwvaT48L2g0PlxuIiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDE6PC9iPiAoQzIgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9PC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+e2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYyk8L2NvZGU+PC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbDwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPsOWbD9vcHRzPWZsZXgrY29tcCtvdGhlcitzcGVjPC9jb2RlPjwvcD4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMjo8L2I+IChpbnRlcm5hbCBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX0/cHJvcDE9WzAxMl0mYW1wO3Byb3AyPVswMTJdJmFtcDtzcGVjPVswMTJdPC9jb2RlPiAod2hlcmUgZWFjaCBwcm9wMSwgcHJvcDIsIHNwZWMgaXMgb3B0aW9uYWwpLjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw/cHJvcDE9MCZhbXA7cHJvcDI9MSZhbXA7c3BlYz0yPC9jb2RlPjwvcD4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfSIpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSclZCcgcHJvcDI9JyVkJyBzcGVjPSclZCcuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwkvKiAKKwlmb3IoaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJCX0JCisJICovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoIGxlbW1hSW5mby5vcHRzU2V0dGluZyA9PSBMZW1tYUluZm8uT1BUU19TRVRUSU5HX0MyICkgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMSxwcm9wMixzcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaW50CisJCW5XZnMgPSBsZW1tYUluZm8ubldmczsKKwkKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwkvLyBsb2cgb3V0Y29tZToKKwlpZiggbldmcyA8IDAgKQorCQlmb3V0LnByaW50ZigiRXJyb3I6ICVzOiByZXR1cm5pbmcgMCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMpOworCWVsc2UKKwkJZm91dC5wcmludGYoIkRlYnVnLiAlczogcmV0dXJuaW5nICVkIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYywgbldmcyk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIG5vdGU6CisJICogLSBpZiBCcm93c2VyIHJlcXVlc3Q6IEhUVFBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAndGV4dC9odG1sLC4uLnhtbC4uLicKKwkgKiAtIGlmIFdmb3JtU2VydmljZXMgcmVxdWVzdDogSHR0cFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICdhcHBsaWNhdGlvbi9qc29uJy4KKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqIAorCSAqIC0gc3VibWl0dGVkIFVSTCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hLCBpcyBpbnRlcnByZXRlZCBieSBnbGFzc2Zpc2ggYXMKKwkgKiAgIGJlaW5nIElTTy04ODU5LTEgZW5jb2RlZC4gV2hlbiB0aGUgcmVxdWVzdCBpcyBVVEYtOCBlbmNvZGVkLCBVbWxhdXRzIGFuZAorCSAqICAgJ8OfJyBhcmUgbWlzLWludGVycHJlZGVkLCBsZWFkaW5nIHRvIGFuIGVycm9uZXJvdXMgcmVxdWVzdCB0byB0aGUgRGVyYnkKKwkgKiAgIGRhdGFiYXNlLgorCSAqIC0gUmVxdWVzdGVkIGxlbW1hICdsZW1tYScgaGFzIHRvIGJlIHRyYW5zZm9ybWVkIHRvIFVURi04IGZpcnN0LgorCSAqIC0gbm90ZTogZXZlbiB3aGVuIHN1Ym1pdHRpbmcgdGhlIEdFVCByZXF1ZXN0IGJ5IHNwZWNpZnlpbmcgJ2NoYXJlbmNvZGU9VVRGLTgnLAorCSAqICAgZ2xhc3NmaXNoIGRvZXMgbm90IGNvbnZlcnQgaXQgYXV0b21hdGljYWxseSBhcyBleHBlY3RlZC4KKwkgKiAgIAorCSAqICAyMi4xMC4yMS9GQgorCSAqIAorCSAqIC0gaWYgYWNjZXB0PWFwcGxpY2F0aW9uL2pzb24gcmV0dXJuIFVURi04IChXZm9ybVNlcnZpY2VzKS4KKwkgKiAtIGVsc2UgaWYgYWNjZXB0PXRleHQvaHRtbCBkbyBub3QgdHJhbnNmb3JtIGNoYXJhY3RlciBlbmNvZGluZyAoQnJvd3NlcikuCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBDb25zdW1lcygiYXBwbGljYXRpb24vanNvbiwgdGV4dC9odG1sIikKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCQorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCWZpbmFsIGJvb2xlYW4KKwkJYkVuY29kZUxlbW1hID0gZmFsc2U7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CisJCisJLyogdGVzdDoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJaWYoIGJFbmNvZGVMZW1tYSApCisJCXsKKwkJLy8gd2hlbiBhY2NlcHRpbmcgSlNPTiwgdXJsIGhhcyB0byBiZSBjb252ZXJ0ZWQgdG8gVVRGLTgsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYToKKwkJdHJ5IHsKKwkJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obmV3IFN0cmluZyhsZW1tYS5nZXRCeXRlcygiSVNPLTg4NTktMSIpLCAidXRmLTgiKSk7CisJCQl9IAorCQljYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlMSkgeworCQkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCQlMZW1tYVJlc3BvbnNlCisJCQkJbGVtcmVzcCA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbXJlc3ApLmJ1aWxkKCk7CisJCQl9CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW1VURi04XSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCWVsc2UKKwkJeworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbdW5jaGFuZ2VkXSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCisJLyogZG9lcyBub3QgaGVscDoKKwkgU3RyaW5nCisJIAlyZXF1ZXN0Q2hhckVuY29kaW5nID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldENoYXJhY3RlckVuY29kaW5nKCk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiByZXF1ZXN0IGNoYXJhY3RlciBlbmNvZGluZyA9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RDaGFyRW5jb2RpbmcpOworCSovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXsKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQkvL3JldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJfQorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsJCisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCS8qCisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC90ZXN0L2luZm8vIik7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL2ZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJZm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5Lzk2L2YwN2M0MjQyN2UzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS85Ni9mMDdjNDI0MjdlM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTg3MGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS85Ni9mMDdjNDI0MjdlM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpAQCAtMCwwICsxLDcyOCBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnNxbC5Db25uZWN0aW9uOworaW1wb3J0IGphdmEuc3FsLkRyaXZlck1hbmFnZXI7CitpbXBvcnQgamF2YS5zcWwuUHJlcGFyZWRTdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS5zcWwuUmVzdWx0U2V0OworaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5TdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitwdWJsaWMgY2xhc3MgR2xlbW1EQgorCit7CisJc3RhdGljIHB1YmxpYyBTdHJpbmcgZGJUYWJsZSAJPSAiR2xlbW1MZW1tYXRhIjsKKwlzdGF0aWMgU3RyaW5nIGRiTGVtbWEgCQkgCT0gImxlbW1hIjsKKwlzdGF0aWMgU3RyaW5nIGRiV2YJIAkJCT0gIndmIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDEgCQkJPSAicHJvcDEiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMiAJCQk9ICJwcm9wMiI7CisKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKG92ZXJ3cml0dGVuIGJ5IEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZuYW1lREIgPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgc2VydmVySG9zdCA9ICIvL2xvY2FsaG9zdDoxNTI3LyI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChmaW5hbCBhc3NpZ25tZW50cyk6CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyRW1iID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZERyaXZlciI7CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyQ2xpZW50ID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREcml2ZXIiOworCisJZmluYWwgc3RhdGljIGJvb2xlYW4KKwkJdXNlUHJlcGFyZWRTdG10ID0gdHJ1ZTsgLy8gMT11c2UgUHJlcGFyZWRTdGF0ZW1lbnQgYW5kIG5vdCBTdGF0ZW1lbnQuCisJCisJLy8gdmFsdWVzIHRvIGJlIGluc2VydGVkOiBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYy4KKwlzdGF0aWMgU3RyaW5nIGluc2VydFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKCclcycsICclcycsICclcycsICclcycsICclcycpIjsKKwlzdGF0aWMgU3RyaW5nIGluc2VydFByZXBhcmVkUXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoPywgPywgPywgPywgPykiOworCQorCS8qCisJICogc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJICogCisJICogQXJndW1lbnRzOgorCSAqIHByb3BzCTogUHJvcGVydGllcyBsb2FkZWQgYnkgdGhlIEdsZW1tU2VydmljZXMuCisJICogTm90ZXM6CisJICogLSB0aGlzIGZ1bmN0aW9uIGxvYWRzIG9ubHkgdGhvc2UgQ29uc3RhbnRzIG5lZWRlZCBpbiB0aGlzIGNsYXNzLgorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcwlwcm9wcykKKwkKKwl7CisJZm5hbWVEQgkJIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgCSIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlzZXJ2ZXJIb3N0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJzZXJ2ZXJIb3N0IiwJIi8vbG9jYWxob3N0OjE1MjcvIik7CisJZGVyYnlEQlVSTCAJCT0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCQkJCisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCQkJCQlpbXBvcnRHbGVtbUxlbWF0YQorCSAqIFBhcmFtZXRlcnM6CisJICogZm4JCSA6IGFic29sdXRlIGZpbGUgbmFtZSBvZiBHTEVNTSBvdXRwdXQgW0lTTzg4NTktMV0gZXhwZWN0ZWQsIG5vdCBVVEYtOCEKKwkgKiBwcm9wcwkgOiBQcm9wZXJ0aWVzIHZvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgdG8gc2V0IGNvbnN0YW50cyBuZWVkZWQKKwkgKiAJCQkgICBpbiB0aGlzIGNsYXNzLgorCSAqIGRicGF0aAkgOiBsb2NhdGlvbiArIG5hbWUgb2YgZGF0YWJhc2Ugd2hlcmUgdG8gc3RvcmUgbGVtbWF0YSt3ZnMuCisJICogUmV0dXJucwkgOiAwPU9LLCAtMTogZ2VuZXJhbCBlcnJvcjsgPiAwIDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAKKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIGR5bmFtaWNhbGx5IGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqIDA0LjExLjIxL0ZCIGRicGF0aC4KKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YShTdHJpbmcgZm4sIFByb3BlcnRpZXMgcHJvcHMsIGZpbmFsIFN0cmluZyBkYnBhdGgpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YSI7CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4gPSBudWxsOworCWludAorCQluRXJyb3JzOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyB3aGVuIGluZGV4aW5nIGRhdGEgaW50byB0aGUgZGF0YWJhc2UsIHNlbGVjdCB0aGUgc3VibWl0dGVkIGRicGF0aCwKKwkvLyAobm90IHRoZSBvbmUgc3RvcmVkIGluIHRoZSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCWRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGRicGF0aDsKKwkKKwkvLyBvcGVuIHJlYWRlciBvbiBHbGVtbSBMZW1tYXRhOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCWluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCQorCQluRXJyb3JzID0gd3JpdGVEQkxlbW1hdGEoaW4pOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBmcm9tICclcychXG4iLCBmdW5jLCBmbik7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAtMTsKKwkJfQorCisJLy8gY2xvc2UgUmVhZGVyOgorCXRyeSB7CisJCWluLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJbkVycm9ycyA9IC0xOworCQl9CisJCisgCWlmKCBuRXJyb3JzID09IDAgKQorIAkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQgZG9uZSBzdWNjZXNzZnVsbHkuXG4iLCBmdW5jKTsKKyAJZWxzZQorIAkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQ6ICVkIEVycm9ycyFcbiIsIGZ1bmMsIG5FcnJvcnMpOworIAkKKwlyZXR1cm4gbkVycm9yczsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YQorCQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiB3cml0ZURCTGVtbWF0YSgpCisJICogc3RvcmVzIGxpc3Qgb2YgbGVtbWF0YSArIGluZm9zIGludG8gRGVyYnkgZGIuCisJICogRmlsZSBmb3JtYXQ6ICJMZW1tYSBEZWNvbXBvc2l0aW9uIFdmIiwKKwkgKiAgICAgICAgICAgICAgZS5nLjogIkjDpHVzZXIgKy0gSGF1cyIuCisJICogUmV0dXJuczogMCA9IE9LIG9yIC0xOiBnZW5lcmFsIGVycm9yIG9yID4gMDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAwOS4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hdGEoQnVmZmVyZWRSZWFkZXIgaW4pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWF0YSI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlQcmVwYXJlZFN0YXRlbWVudAorCQlzdG10UHJlcCA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgCSA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CQorCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCW5JbnNlcnRlZCA9IDAsCS8vIG5vLiBvZiBsZW1tYS93ZiBwYWlycyBpbXBvcnRlZC4KKwkJcmV0ID0gMDsgLy8gT0suCisJYm9vbGVhbgorCQljb250YWluc1NwZWM7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlLAorCS8vIHNldCBBdXRvY29tbWl0ID0gZmFsc2UgdG8gYWNjZWxlcmF0ZSBpbnNlcnRpb25zOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQljb24uc2V0QXV0b0NvbW1pdChmYWxzZSk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkIChhdXRvQ29tbWl0PW9mZikuXG4iLCBmdW5jKTsKKworCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCXN0bXRQcmVwID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0UHJlcGFyZWRRdWVyeSk7CisJCWVsc2UKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisKKwkJd2hpbGUoIChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoICE9IDMgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6ICclcycgaGFzICVkIGNvbXBvbmVudHMhIEV4cGVjdGVkID0gMyEgQ2Fubm90IGJlIHN0b3JlZCFcbiIsIGZ1bmMsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJCW5FcnJvcnMrKzsKKwkJCQljb250aW51ZTsKKwkJCQl9CisJCQkKKwkJCS8vIEdldCBJbmZvLCBpZiB3b3JkZm9ybSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgJy0nLCBpbnRlcnB1bmN0aW9uIGV0Yy46CisJCQkvLyBsZW1tYUluZm9bMl0gPSB3b3JkZm9ybS4KKwkJCWNvbnRhaW5zU3BlYyA9IExlbW1hSW5mby5pc1dmU3BlY2lhbENhc2UobGVtbWFJbmZvWzJdKTsKKwkJCS8vIHN0b3JlIGludG8gREI6CisJCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZChzdG10UHJlcCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvcyhzdG10LCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJCisJCQlpZiggcmV0ICE9IDAgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBzdG9yZSBsZW1tYSAnJXMnIGludG8gREIhXG4iLCBmdW5jLCBsaW5lKTsKKwkJCQluRXJyb3JzKys7IAorCQkJCX0KKwkJCWVsc2UKKwkJCQluSW5zZXJ0ZWQrKzsKKwkJCX0gLy8gd2hpbGUKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgR2xlbW0gbGVtbWF0YStpbmZvcyBmcm9tIGZpbGUhIEV4aXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIC0xOyAKKwkJfQkKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIC0xOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIAorCQkJCXN0bXQuY2xvc2UoKTsKKwkJCWlmKCBzdG10UHJlcCAhPSBudWxsICkgCisJCQkJc3RtdFByZXAuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0JCQorCQl9CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiSW5mbyA6ICVzOiBuby4gb2YgbGVtbWF0YS93ZiBwYWlycyBpbnNlcnRlZCA9ICVkLlxuIiwgZnVuYywgbkluc2VydGVkKTsKKwkKKwlyZXR1cm4gbkVycm9yczsgLy8gMD1PSywgPjAgPSBuby4gb2YgZXJyb3JzLgorCX0gLy8gd3JpdGVEQkxlbW1hdGEKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQ6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gcnVsZXMgaW50byBEZXJieSBEQi4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgaXMgdGhlIHZlcnNpb24gd2l0aCBhIFByZXBhcmVkUXVlcnkuCisJICogUGFyYW1ldGVyczoKKwkgKiBzcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTcuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoCisJCQlQcmVwYXJlZFN0YXRlbWVudCBzdG10LCAKKwkJCVN0cmluZyBsZW1tYSwgCisJCQlTdHJpbmcgd2YsIAorCQkJU3RyaW5nIGRlY29tcG9zaXRpb24sIAorCQkJYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQiOworCWZpbmFsIGJvb2xlYW4KKwkJYkxvZyA9IGZhbHNlOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCWJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICAKKwkvLyBmb3IgbG9naW5nIG9ubHk6CisJc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCWlmKCBiTG9nICkKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisgICAgLy8gbm93IGluc2VydCBuZXcgdmFsdWVzIGludG8gUHJlcGFyZWRTdGF0ZW1lbnQ6CisgICAgdHJ5IHsKKyAgICAJc3RtdC5zZXRTdHJpbmcoIDEsIGxlbW1hKTsKKyAgICAgICAgc3RtdC5zZXRTdHJpbmcoIDIsIHdmKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDMsIHByb3AxKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDQsIHByb3AyKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDUsIHNwZWMpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByZXBhcmVkIHN0bXQgPSAnJXMnLlxuIiwgIGZ1bmMsIHN0bXQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUxKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoCSJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JyViJyBwcm9wMj0nJWInIHNwZWM9JyViJyFcbiIsICAKKwkJCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfQorICAgIAorICAgIHRyeSB7CisJCS8vIGV4ZWN1dGUgdGhlIGZpbGxlZCBwcmVwYXJlZCBzdGF0ZW1lbnQ6CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisgICAgCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZAorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3M6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gaW50byBEZXJieSBEQi4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGNvbnRhaW5zU3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDEwLjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zKFN0YXRlbWVudCBzdG10LCBTdHJpbmcgbGVtbWEsIFN0cmluZyB3ZiwgU3RyaW5nIGRlY29tcG9zaXRpb24sIGJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zIjsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlCb29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworICAgIAorICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorCXRyeSB7CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoc3FsSW5zZXJ0KTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYURhdGEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBmcm9tIHRoZSBHbGVtbURCLgorCSAqIElucHV0OiBsZW1tYSArIEdMRU1NX09QVFNfeHh4IChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWFEYXRhKExlbW1hSW5mbyBsZW1tYUluZm8sIFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYURhdGEiOworCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJbGVtbWFJbmZvLmNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJbGVtbWFJbmZvLnN0bXQgPSBsZW1tYUluZm8uY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlpbnQgciA9IHJlYWREQkxlbW1hKGxlbW1hSW5mby5zdG10LCBsZW1tYUluZm8pOworCQkJCisJCWlmKCByICE9IDAgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZ2V0IGRhdGEgZm9yIGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIVxuIiwgCisJCQkJCWZ1bmMsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwkJCXJldHVybiAxOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggbGVtbWFJbmZvLmNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hRGF0YQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGJ5IGFjY2Vzc2luZyB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dCA6IGxlbW1hICsgcHJvcDErMiAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogT3V0cHV0OiAKKwkgKiAgLSBjb250YWlucyBhIFJlc3VsdFNldCBmb3IgZmV0Y2hpbmcgdGhlIHdvcmRmb3Jtcy4KKwkgKiAJICBUaGlzIFJlc3VsdFNldCB3aWxsIGhhdmUgYmUgYmUgY2xvc2VkIHdpdGggTGVtbWFJbmZvLmNsb3NlKCkuCisJICogCSAgVGhlIG5vLiBvZiBmb3VuZCB3b3JkZm9ybXMgaXMgbm90IGtub3duIHRpbGwgd2UKKwkgKiAJICBmZXRjaCBhbGwgb2YgdGhlbSBmcm9tIFJlc3VsdFNldCEgCisJICogCS0gZHVlIHRvIFNFTEVDVCBESVNUSU5DVCBvbmx5IHVuaXEgd2YgYXJlIHJldHVybmVkLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYShTdGF0ZW1lbnQgc3RtdCwgTGVtbWFJbmZvIGxlbW1hSW5mbykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hIjsKKwlTdHJpbmcKKwkJc3FsOworCQkKKwlzcWwgPSBTdHJpbmcuZm9ybWF0KCJTRUxFQ1QgRElTVElOQ1Qgd2YgZnJvbSAlcyBXSEVSRSBsZW1tYT0nJXMnICVzICVzICVzIiwgCisJCQlkYlRhYmxlLAorCQkJbGVtbWFJbmZvLmxlbW1hLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiQU5EIHByb3AxPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAxID8gIkFORCBwcm9wMT0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiQU5EIHByb3AyPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAxID8gIkFORCBwcm9wMj0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiQU5EIHNwZWM9J3RydWUnIiAgIDogCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICJBTkQgc3BlYz0nZmFsc2UnIiAgOiAiIik7CisJCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgZnVuYywgbGVtbWFJbmZvLnByb3AxLCBsZW1tYUluZm8ucHJvcDIsIGxlbW1hSW5mby5zcGVjKTsKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbCA9ICclcycuXG4iLCBmdW5jLCBzcWwpOworCisJdHJ5IHsKKwkJbGVtbWFJbmZvLnJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoZW4gZXhlY3V0aW5nIHNxbD0nJXMnIVxuIiwgZnVuYywgc3FsKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gYWxsIHNxbCBzdHVmZiBhcmUgY2xvc2VkIG91dHNpZGUgdGhpcyBmdW5jdGlvbiwgc28gZG9uJ3QgY2xvc2UgdGhlbSBoZXJlIQorCQl9CQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3MKKwkgKiBSZXR1cm5zIEdlbmVyYWwgSW5mb3MgYWJvdXQgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIHJlYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJJbmZvcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJZGJJbmZvID0gcmVhZERiTGVtbWF0YUluZm9zKHN0bXQpOworCQkJCisJCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCByZWFkIEdlbmVyYWwgSW5mb3MgZnJvbSBHbGVtbSBEYXRhYmFzZSFcbiIsIGZ1bmMpOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSBjb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSBzdG10LmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIG1heSBiZSBudWxsLgorCQkKKwl9IC8vIHJlYWREYkluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiTGVtbWF0YUluZm9zOgorCSAqIHJlYWRzIGFuZCByZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGNvbnRlbnQgCisJICogb2YgdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIFJldHVybnMgMD1PSyBvciBlcnJvciBjb2RlID4gMC4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkxlbW1hdGFJbmZvcyhTdGF0ZW1lbnQgc3RtdCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAicmVhZERiTGVtbWFJbmZvcyI7CisJU3RyaW5nW10KKwkJc3FsID0gewkiU0VMRUNUIENPVU5UKGRpc3RpbmN0IGxlbW1hKSBmcm9tICIgKyBkYlRhYmxlICwJLy8gY291bnRzIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSwJCQkJCS8vIGNvdW50cyB0b3RhbCBuby4gb2Ygc3RvcmVkIHdvcmRmb3Jtcy4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPXRydWUiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPXRydWUifTsKKwlSZXN1bHRTZXQKKwkJcmVzID0gbnVsbDsgCisJaW50W10KKwkJbkNvdW50cyA9IG5ldyBpbnRbc3FsLmxlbmd0aF07CisJaW50CQkKKwkJaSA9IDAsIAorCQluRGlzdExlbW1hdGEgPSAtMSwJLy8gbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEgaW4gREIuCisJCW5XZnMJCSA9IC0xOwkvLyBuby4gb2Ygd29yZGZvcm1zIGluIERCLgorCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBleHRyYWN0aW5nIGFncmVnYXRlZCBpbmZvcyBhYm91dCBEYXRhYmFzZSBjb250ZW50cy4uLlxuIiwgZnVuYyk7CisJCisJZGJJbmZvID0gbmV3IEdsZW1tREJJbmZvKCk7CisKKwkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwl0cnkgeworCQlmb3IoaT0wOyBpPHNxbC5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCXJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbFtpXSk7CisJCQlpZiggcmVzLm5leHQoKSApCisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IHJlcy5nZXRJbnQoMSk7IC8vIGNvdW50IGlzIGluIGNvbHVtbiAxLgorCQkJZWxzZQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBleHRyYWN0IGNvdW50IGZyb20gJyVzJyFcbiIsIGZ1bmMsIHNxbFtpXSk7CisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IC0xOworCQkJCX0KKwkJCX0KKyAgICAgICAKKyAgICAgICAgfQorICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgIAl7CisgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogc3FsPSclcycgZmFpbGVkIVxuIiwgZnVuYywgc3FsW2ldKTsKKyAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAJfQorCWZpbmFsbHkgeworCQl0cnkgeworCQkJcmVzLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBPSworCX0gLy8gcmVhZERiTGVtbWF0YUluZm9zCisJCisJLyoqKioqKioqKioqKioqKioqKioqIFRlc3QgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zX3Rlc3QKKwkgKiBUaGlzIGlzIGRlYnVnIGNvZGUgd3JpdHRlbiB0byB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIERlcmJ5CisJICogRGF0YWJhc2UgZnJvbSBhbiBleHRlcm5hbCBKYXZhIFByb2dyYW1tLgorCSAqIDA4LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCByZWFkRGJJbmZvc190ZXN0KCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlTdHJpbmcKKwkJaW5zZXJ0U3RtdCA9ICIiOworCQorCS8vIENvbm5lY3QgdG8gRGVyYnkgZGF0YWJhc2U6CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCQorCQkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwkJdHJ5CisJCQl7CisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIAorICAgICAgICAgICAgCXNxbCA9ICJTRUxFQ1QgKiBGUk9NICIgKyBkYlRhYmxlOworICAgICAgICAgICAgUmVzdWx0U2V0IAorICAgICAgICAgICAgCXJlc3VsdCA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CisgCisgICAgICAgICAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHRhYmxlICclcyc6XG4iLCAgZnVuYywgZGJUYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQubmV4dCgpKSB7CisgICAgICAgICAgICAJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiJyVzJyA6ICclcycgOiAnJXMnIDogJyVzJyAuXG4iLCByZXN1bHQuZ2V0U3RyaW5nKDEpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygyKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMyksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDQpKTsKKyAgICAgICAgCQlpbnNlcnRTdG10ID0gaW5zZXJ0U3RtdCArICI8cD4iICsgcmVzdWx0LmdldFN0cmluZygxKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZygyKSArICIgOiAiICsKKyAgICAgICAgICAgICAgICAJCSAgICAgcmVzdWx0LmdldFN0cmluZygzKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZyg0KSArICI8L3A+IjsKKyAgICAgICAgICAgIAl9CisJCQl9CisJICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgICAgICAJeworCSAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBpbnNlcnRTdG10PSclcycgZmFpbGVkIS5cbiIsIGZ1bmMsIHN0bXQpOworICAgICAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgY29uLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nICclcyBmYWlsZWQhXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJdHJ5IHsKKwkJY29uLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkJCisJfSAvLyByZWFkRGJJbmZvc190ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogaW1wb3J0R2xlbW1MZW1hdGFfdGVzdAorCSAqIFRlc3QgVmVyc2lvbi4KKwkgKiAxMi4xMi4xOS9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QoU3RyaW5nIGZuKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdCI7CisJSW5wdXRTdHJlYW0gCisJCWluOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluMiA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQlyOworCQorCS8qCisJICogUmVhZCBMZW1tYXRhICsgSW5mbyBmcm9tIGZpbGU6IAorCSAqLworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCQorCXRyeSB7CisJCS8vaW4gPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSggbmV3IEZpbGVJbnB1dFN0cmVhbShmbikgKTsKKwkJaW4yID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlcihmbikpOworCQl3aGlsZSggKGxpbmUgPSBpbjIucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoID09IDMgKQorCQkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBJbXBvcnQ6IGxlbT0nJXMnIERlY29tcD0nJXMnIFdmPSclcycuXG4iLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1sxXSwgbGVtbWFJbmZvWzJdKTsKKwkJCWVsc2UKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogaW1wb3J0R2xlbW1MYW1hdGE6ICclcycgaGFzICVkIGNvbXBvbmVudHMhXG4iLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IG9wZW4gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJcmV0dXJuIDE7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKworCXRyeSB7CisJCWluMi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQorCS8qIENoZWNrIGNvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJICovIAorCXIgPSByZWFkRGJJbmZvc190ZXN0KCk7CisJaWYoIHIgIT0gMCApCisJCXJldHVybiByOworCQkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5Lzk4LzYwYzZlMTNlMTIyYzAwMWMxYzQxY2U1NTllYTVlMTZiIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS85OC82MGM2ZTEzZTEyMmMwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWJlMGU5Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS85OC82MGM2ZTEzZTEyMmMwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpAQCAtMCwwICsxLDcxOSBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDYuMTAuMjEiOyAvLyIxNy4wNi4yMCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4xIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCQlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCQlTdHJpbmcKKwkJCXN0YXR1czsKKwkJVXRpbHMKKwkJCXUgPSBuZXcgVXRpbHMoKTsKKwkJUHJvcGVydGllcworCQkJcHJvcHM7CisJCVN0cmluZworCQkJcHJvcE5hbWUgPSAiR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIjsKKwkJLy8gcmVhZCB0ZXN0CisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJCisJCQkJCisJCS8vZ2V0U2VydmxldENvbnRleHQoLikKKwkJLy8gaHR0cFNlcnZsZXRSZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKGVudik7CisKKwkJSW5wdXRTdHJlYW0KKwkJCS8vaW5Qcm9wID0gR2xlbW1TZXJ2aWNlcy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpLmdldFJlc291cmNlQXNTdHJlYW0ocHJvcE5hbWUpOworCQkJaW5Qcm9wID0gSHR0cFNlcnZsZXRSZXF1ZXN0LmNsYXNzLmdldFJlc291cmNlQXNTdHJlYW0ocHJvcE5hbWUpOworCisJCWlmKCBpblByb3AgPT0gbnVsbCApCisJCQl7CisJCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgbG9hZCAnJXMnIVxuIiwgZnVuYywgcHJvcE5hbWUpOworCQkJcmV0dXJuIG51bGw7CisJCQl9CisJCQorCQl0cnkgeworCQkJcHJvcHMubG9hZChpblByb3ApOworCQkJU2V0PEVudHJ5PE9iamVjdCxPYmplY3Q+PgorCQkJCXByb3BzU2V0ID0gcHJvcHMuZW50cnlTZXQoKTsKKwkJCQorCQkJZm9yKEVudHJ5PE9iamVjdCwgT2JqZWN0PiBwcm9wRW50cnkgOiBwcm9wc1NldCkKKwkJCQl7CisJCQkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcCAlcyA9ICclcycuXG4iLCBmdW5jLCBwcm9wRW50cnkuZ2V0S2V5KCksIHByb3BFbnRyeS5nZXRWYWx1ZSgpKTsKKwkJCQl9CisJCQl9IAorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGxvYWQgcHJvcHMgJ0dsZW1tU2VydmljZXMucHJvcGVydGllcychIiwgIGZ1bmMpOworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQkKKwkJLy8gZW5kIG9mIHJlYWQgdGVzdAorCQkKKwkJLy8gdGVzdAorCQkvKiovCisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJCisJCSAvKiBwcm9wcy5zZXRQcm9wZXJ0eSgicCIsICJ0ZXN0Iik7CisJCSAqLworCQlGaWxlT3V0cHV0U3RyZWFtIG91dDsKKwkJdHJ5IHsKKwkJCW91dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKCJnbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiKTsKKwkJCXByb3BzLnN0b3JlKG91dCwgICJ0ZXN0IEdsZW1tU2VydmljZXMgcHJvcGVydGllcyIpOworCQkJfSAKKwkJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX07CisJCS8qKi8KKwkJCisJCS8vIGVuZCBvdGVzdAorCQkKKwkJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiQVBJOiAlczogL2luZGV4L3N0YXR1cy8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCisJCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCQlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIFBPU1Q6IC9pbmRleC9hZGQvOiB0ZXh0L3BsYWluCisJICogYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UuCisJICogVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQKKwkgKiBpbnRvIHRoZSBkYXRhYmFzZS4KKwkgKiBJbnB1dDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICovCisJQFBhdGgoImFkZCIpIEBQT1NUIEBDb25zdW1lcygidGV4dC9wbGFpbiIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBpbXBvcnRMZW1tYURhdGEoU3RyaW5nIGxpc3QpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSBhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCQorCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvYWRkLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZu+/vWhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCX0KKworCS8qIHZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIHZpZXdEQkluZm8KKworCisJLyogdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgLSBTdGF0dXM6IDxpPldvcmsgaW4gcHJvZ3Jlc3MuLi4hPC9pPik8L2g0PlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggIW9wdGlvbnMuZXF1YWxzKCJ1bmRlZiIpKQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMS9wcm9wMi9zcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogR2xlbW1TZXJ2aWNlcyAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uRGF0ZSwgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCS8vU3lzdGVtLm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzllLzQwZDRiMWM4MDQ4ZjAwMWExY2I4YTFlYTA4MzQzOGFlIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS85ZS80MGQ0YjFjODA0OGYwMDFhMWNiOGExZWEwODM0MzhhZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODc0MjFiCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS85ZS80MGQ0YjFjODA0OGYwMDFhMWNiOGExZWEwODM0MzhhZQpAQCAtMCwwICsxLDc3IEBACis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiAKKwl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKwl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICA8Z3JvdXBJZD5kZS5rb3JhcC5zZXJ2aWNlczwvZ3JvdXBJZD4KKyAgPGFydGlmYWN0SWQ+dGVzdHM8L2FydGlmYWN0SWQ+CisgIDx2ZXJzaW9uPjAuMTwvdmVyc2lvbj4KKyAgPCEtLSAgPnBhY2thZ2luZz53YXI8L3BhY2thZ2luZy0tPgorICA8bmFtZT5Kc29uIFRlc3QgTWV0aG9kczwvbmFtZT4KKyAgCisgIDxkZXNjcmlwdGlvbj5UZXN0cyBmb3IgSnNvbiBQYXJzaW5nPC9kZXNjcmlwdGlvbj4KKyAgCisgIDxkZXBlbmRlbmNpZXM+CisgICAgPGRlcGVuZGVuY3k+CisgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KKyAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgorICAgICAgPHZlcnNpb24+My44LjE8L3ZlcnNpb24+CisgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgPC9kZXBlbmRlbmN5PgorICAgPGRlcGVuZGVuY3k+CisgICAgPGdyb3VwSWQ+Y29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmU8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+amFja3Nvbi1jb3JlPC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjIuOS42PC92ZXJzaW9uPgorICAgIDxzY29wZT5jb21waWxlPC9zY29wZT4KKyAgIDwvZGVwZW5kZW5jeT4KKwk8ZGVwZW5kZW5jeT4KKwkgIDxncm91cElkPmNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlPC9ncm91cElkPgorCSAgPGFydGlmYWN0SWQ+amFja3Nvbi1hbm5vdGF0aW9uczwvYXJ0aWZhY3RJZD4KKwkgIDx2ZXJzaW9uPjIuOS42PC92ZXJzaW9uPgorCTwvZGVwZW5kZW5jeT4KKwk8ZGVwZW5kZW5jeT4KKwkgIDxncm91cElkPmNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlPC9ncm91cElkPgorCSAgPGFydGlmYWN0SWQ+amFja3Nvbi1kYXRhYmluZDwvYXJ0aWZhY3RJZD4KKwkgIDx2ZXJzaW9uPjIuOS42PC92ZXJzaW9uPgorCSAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KKwk8L2RlcGVuZGVuY3k+CisJPGRlcGVuZGVuY3k+CisJCTxncm91cElkPmRlLmtvcmFwLmpzb248L2dyb3VwSWQ+CisJCTxhcnRpZmFjdElkPkpzb25UcmF2ZXJzZTwvYXJ0aWZhY3RJZD4KKwkJPHZlcnNpb24+MC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorCTwvZGVwZW5kZW5jeT4KKwk8ZGVwZW5kZW5jeT4KKwkJPGdyb3VwSWQ+ZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50PC9ncm91cElkPgorCQk8YXJ0aWZhY3RJZD5HbGVtbUNsaWVudDwvYXJ0aWZhY3RJZD4KKwkJPHZlcnNpb24+MC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorCTwvZGVwZW5kZW5jeT4KKwk8ZGVwZW5kZW5jeT4KKwkJPGdyb3VwSWQ+ZGUua29yYXAuc2VydmljZXM8L2dyb3VwSWQ+CisJCTxhcnRpZmFjdElkPnV0aWxzPC9hcnRpZmFjdElkPgorCQk8dmVyc2lvbj4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisJPC9kZXBlbmRlbmN5PgorICA8L2RlcGVuZGVuY2llcz4KKyAgCisgIDxidWlsZD4KKyAgICA8c291cmNlRGlyZWN0b3J5PnNyYzwvc291cmNlRGlyZWN0b3J5PgorICAgIDxwbHVnaW5zPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tY29tcGlsZXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4zLjcuMDwvdmVyc2lvbj4KKyAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgPHNvdXJjZT4xLjg8L3NvdXJjZT4KKyAgICAgICAgICA8dGFyZ2V0PjEuODwvdGFyZ2V0PgorICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICA8L3BsdWdpbj4KKyAgICAgIDxwbHVnaW4+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXdhci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjMuMi4xPC92ZXJzaW9uPgorICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8ZmFpbE9uTWlzc2luZ1dlYlhtbD5mYWxzZTwvZmFpbE9uTWlzc2luZ1dlYlhtbD4KKyAgICAgICAgICA8d2FyU291cmNlRGlyZWN0b3J5PldlYkNvbnRlbnQ8L3dhclNvdXJjZURpcmVjdG9yeT4KKyAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgPC9wbHVnaW4+CisgICAgPC9wbHVnaW5zPgorICAgIDxmaW5hbE5hbWU+VGVzdEdsZW1tU2VydmljZXM8L2ZpbmFsTmFtZT4KKyAgPC9idWlsZD4KKyAgCis8L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS85ZS85MGE0MGMwNTUyM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvOWUvOTBhNDBjMDU1MjNkMDAxYzEwYjFiMTdkZGQzMDllNmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM3MmVkZAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvOWUvOTBhNDBjMDU1MjNkMDAxYzEwYjFiMTdkZGQzMDllNmYKQEAgLTAsMCArMSw5NzggQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworLyogMC4xIDogMTcuMDYuMjAvRkIgCisgKiAwLjIgOiAyNS4xMC4yMS9GQgorICogICAgICAgbG9naW5nIG9mIHRoZSBBUEkgUmVxdWVzdHMuCisgKiAgICAgICBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKyAqICAgICAgIGNvcnJlY3RpbmcgY2FsbGluZyBvZiBsZW1tYSArIHByb3AxL3Byb3AyL3NwZWMuCisgKiAgICAgICBoYW5kbGluZyBvZiBsZW1tYXRhIHdpdGggJ8OfJy4KKyAqIAorICogR2VuZXJhbCBjb21tZW50cyB0byB0aGUgZW5jb2Rpbmcgb2YgZGVyaXZhdGlvbnMgZnJvbSBsZW1tYSB0byB3ZnMgYW5kIGhvdyB0aGV5IGFyZSBlbmNvZGVkCisgKiBpbiB0aGUgRGVyYnkgZGF0YWJhc2U6CisgKiAKKyAqIEdMRU1NIGVuY29kaW5nOiAgCisgKiAgIF8gXyA6ICtGbGV4ICAgICAgIMOWbGUgLT4gw5ZsICAgICAgCisgKiAgICsgXyA6ICtDb21wICAgICAgIMOWbGxhbXBlIC0+IMOWbCBvciBMYW1wZSAoY29tcG91bmQpLgorICogICBfICsgOiArb3RoZXIgICAgICBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybnNjaHVoIChubyBjb21wb3VuZCBmb3IgJ1R1cm5zY2h1aCcsIG9ubHkgcHJlZml4KS4KKyAqICAgKyArIDogK0NvbXArb3RoZXIgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm4gKyBTY2h1aCAoY29tcG91bmQgZm9yICdTY2h1aCcgKyBQcmVmaXgpLgorICogQzIgbGVtbWF0aXphdGlvbiBvcHRpb25zOgorICogICBGbGV4ICAoaWRlbnRpY2FsIHRvIEdsZW1tKQorICogICBDb21wICAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpCisgKiAgIE90aGVyIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykuCisgKiAgIFNwZWMgIChvbmx5IEMyOiBpbmNsdWRlcyBhbGwgd2ZzIHdpdGggaGlwaGVuIGFuZC9vciBzb21lIG5vbi1hbHBoYWJldGljIElTTzg4NTktMSBjaGFycykKKyAqICAgICAgICAgRS5nLiDDlmwtRXhwb3J0ZSwgIk1hcmtlbiItw5ZsZS4KKyAqIERlcmJ5IEVuY29kaW5nOgorICogIHByb3AxIAlwcm9wMglzcGVjICAgCW1lYW5pbmcgaW4gQzI6CisgKiAgMAkJMAkJLQkJRmxleAorICogIDEJCTAJCS0JCUNvbXAKKyAqICAwCQkxCQktCQlPdGhlciAocHJlZml4KQorICogIDEJCTEJCS0JCUNvbXAgKyBPdGhlcgorICogIC0JCS0JCTAJCS1TcGVjCisgKiAgLQkJLQkJMQkJK1NwZWMKKyAqIAorICogRXhhbXBsZXM6CisgKiAmU2NodWgJCQk6IFNjaHVoLCBTY2h1aGUsIC4uLiBvbmx5IGZsZXhpb25zCisgKiAmU2NodWgrY29tcAkJOiBTY2h1aGUsIFR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtvdGhlcgkJOiBTY2h1aGUsIEFudGlzY2h1aGUuLi4gZmxleGlvbnMgYW5kIHByZWZpeGVkIHdmcyAobm8gY29tcG91bmRzKS4KKyAqICZTY2h1aCtjb21wK290aGVyOiBTY2h1aGUsIEFudGlzY2h1aGUsIFR1cm5zY2h1aGUsIEFudGl0dXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMgYW5kIAorICogCQkJCQkgIHByZWZpeGVkIHNpbmdsZSB3ZnMgKEFudGlzY2h1aGUpIGFuZCBwcmVmaXhlZCBjb21wb3VuZHMuCisgKiAmU2NodWgrc3BlYwkJOiAiQW50aSItU2NodWhlLCA2OGdlci1TY2h1aGUuLi4gbWF5IGJlIGNvbWJpbmVkIHdpdGggZXZlcnkgb3B0aW9uczogYWRkcworICogICAgICAgICAgICAgICAgICAgIHdmcyB3aXRoIGh5cGhlbiBhbmQvb3Igbm9uLWFscGhhYmV0aWMgY2hhcnMuCisgKiAKKyAqIENvbnZlcnNpb24gcnVsZXM6CisgKiAKKyAqICAmc2NobGllw59lbiAtPiBpbnRlcm5hbCBzZWFyY2ggZm9yICdzY2hsaWVzc2VuJywKKyAqICBiZWNhdXNlIEdsZW1tIG91dHB1dHMgJ3NzJyBmb3IgJ8OfJy4KKyAqICAKKyAqIENoYXJhY3RlciBFbmNvZGluZzoKKyAqIAorICogLSBXaGVuIGltcG9ydGluZyB3ZnMgdG8gdGhlIERlcmJ5IERhdGFiYXNlIHdpdGggZG9DdXJsR2xlbW1TZXJ2aWNlcy9pbmRleExlbW1hdGE6CisgKiAKKyAqICAgSU5QVVQ6IHdvcmRmb3JtIGxpc3QgaW4gW1VURi04XSA6IFVURi04IGlzIHRoZW4gY29udmVydGVkIHRvIExhdDEgZm9yIEdsZW1tLAorICogICAgICAgICAgdGhlIG91dHB1dCBvZiBHbGVtbSBbTGF0MV0gaXMgcmV0dXJuZWQgdG8gdGhlIEdsZW1tU2VydmljZXMgd2l0aG91dCByZWNvbnZlcnNpb24KKyAqICAgICAgICAgIHRvIFVURjggYW5kIGltcG9ydGVkIGludG8gRGVyYnkgRGF0YWJhc2UgdW5jaGFuZ2VkLgorICoJCQorICovCisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDQuMTEuMjEiOyAKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjIiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lUHJvcHMJCT0gIi9XRUItSU5GL0dsZW1tU2VydmljZXMucHJvcGVydGllcyI7CisJCisJLy8gdGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHJlYWQgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgKHRoZXNlIGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMpOgorCXByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoIAkJPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCUBDb250ZXh0CisJcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBzZXJ2bGV0Q29udGV4dDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZvdXQJPSBudWxsOworCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZmVycgk9IG51bGw7CQkKKwkJCisJLyogCisgCSAqIAorCSAqIC0gYWZ0ZXIgbG9hZFByb3BlcnRpZXMsIHNldHMgdGhlIGNsYXNzIHZhcmlhYmxlIHdpdGggbG9hZGVkIHByb3BlcnR5IHZhbHVlcy4KKwkgKiAKKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJR1NfV29ya2luZ1BhdGggCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgIkdTX1dvcmtpbmdQYXRoIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIik7CisJZm5hbWVXZnMJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lV2ZzIiwgCSAgICJnbF93ZnNfaW4udHh0Iik7CisJZm5hbWVXZnMJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVdmczsKKwlmbmFtZU91dAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVPdXQiLCAJICAgIkdsZW1tU2VydmljZXMubG9nIik7CisJZm5hbWVPdXQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZU91dDsKKwlmbmFtZUVycgkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVFcnIiLCAJICAgIkdsZW1tU2VydmljZXMuZXJyIik7CisJZm5hbWVFcnIJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUVycjsKKwlmbmFtZVNjcmlwdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVTY3JpcHQiLAkgICAiZG9HbGVtbSIpOworCWZuYW1lU2NyaXB0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVTY3JpcHQ7CisJZm5hbWVMZW1hdGEJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lTGVtYXRhIiwgICAgInRtcC9sZW0zIik7CisJZm5hbWVMZW1hdGEJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUxlbWF0YTsKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qCisJICogIGxvZ19SZXF1ZXN0OgorCSAqICAKKwkgKiAgLSB3cml0ZSBpbmZvIGFib3V0IEFQSSBSZXF1ZXN0LgorCSAqICBQYXJhbWV0ZXJzOgorCSAqICByZXF1ZXN0UGF0aAk6IHBhdGggb2Ygd2ViYXBwIGFkZHJlc3NlZCBieSB0aGUgcmVxdWVzdC4KKwkgKiAgZnVuYwkJOiBuYW1lIG9mIHRoZSBmdW5jdGlvbiB3aGljaCBpbXBsZW1lbnRzIHRoZSByZXF1ZXN0LgorCSAqICAKKwkgKiAgMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgbG9nX1JlcXVlc3QoU3RyaW5nIHJlcXVlc3RQYXRoLCBTdHJpbmcgZnVuYykKKwkKKwl7CisJLy8gdHJhbnNmb3JtICJkYXRlVHRpbWUiIC0+ICJkYXRlIHRpbWUiOgorCQorCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCWZvdXQucHJpbnRmKCIjIyMgJXM6ICVzIDogdmVycz0nJXMnLCB2ZGF0ZT0nJXMnIHJlcXVlc3Q9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RQYXRoLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgCisJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwl9IC8vIGxvZ19SZXF1ZXN0CisJCQorCS8qIGZvcm1hdERiTmFtZQorCSAqIAorCSAqIC0gZ2V0cyBuYW1lIG9mIERhdGFiYXNlIHVzZWQgYnkgRGVyYnkgZnJvbSBwcm9wcyAKKwkgKiAgIGFuZCBmb3JtYXQgaXQgdG8gSFRNTC4KKwkgKiAgCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFN0cmluZyBmb3JtYXREYk5hbWUoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJU3RyaW5nCisJCWRiTmFtZTsKKwlTdHJpbmcKKwkJZGJQYXRoID0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJaW50CisJCWogPSBkYlBhdGgubGFzdEluZGV4T2YoJy8nKTsKKwkKKwlpZiggaiA+IDAgKQorCQlkYk5hbWUgPSBkYlBhdGguc3Vic3RyaW5nKGorMSk7CisJZWxzZQorCQlkYk5hbWUgPSBkYlBhdGg7CisJCisJcmV0dXJuIGRiTmFtZTsgLy8gIjxwPjxiPkRhdGFiYXNlOiAiICsgZGJOYW1lICsgIjwvYj48L3A+XG4iOworCX0gLy8gZm9ybWF0RGJOYW1lCisKKwkvKgorCSAqIGNsb3NlTG9nU3RyZWFtczoKKwkgKiAKKwkgKiAtIGNsb3NlIHRoZSBmb3V0L2ZlcnIgbG9nIHN0cmVhbXMuCisJICogCisJICogMjYuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgY2xvc2VMb2dTdHJlYW1zKCkKKwkKKwl7CisJaWYoIGZvdXQgIT0gbnVsbCkKKwkJZm91dC5jbG9zZSgpOworCWZvdXQgPSBudWxsOworCQorCWlmKCBmZXJyICE9IG51bGwgKQorCQlmZXJyLmNsb3NlKCk7CisJZmVyciA9IG51bGw7CisJfSAvLyBjbG9zZUxvZ1N0cmVhbXMKKwkKKwkvKiBpbml0X2FuZF9sb2dfUmVxdWVzdAorCSAqIAorCSAqIC0gbG9hZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMsIHNldHMgR2xlbW1TZXJ2aWNlcyBjb25zdGFudHMKKwkgKiAgIGFuZCBsb2dzIHRoZSByZXF1ZXN0LgorCSAqIC0gbG9hZCBwcm9wZXJ0aWVzIGFuZCBzZXQgY29uc3RhbnRzIGJlZm9yZSBsb2dnaW5nIGFueXRoaW5nLCBiZWNhdXNlCisJICogICBsb2dnaW5nIHdpbGwgYmUgZG9uZSBpbnRvIHRoZSBsYXN0IHN0ZG91dC9zdGRlcnIgb3BlbmVkIGluIGdsYXNzZmlzaCdzIEpWTSwKKwkgKiAgIGUuZy4gaW4gdGhlIGxvZyBvZiBhbm90aGVyIFNlcnZpY2UuCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFByb3BlcnRpZXMgaW5pdF9hbmRfbG9nX1JlcXVlc3QoU3RyaW5nIGZ1bmMsIFN0cmluZyByZXF1ZXN0UGF0aCkKKwkKKwl7CisJU3RyaW5nCisJCXJlYWxQYXRoID0gc2VydmxldENvbnRleHQuZ2V0UmVhbFBhdGgoZm5hbWVQcm9wcyk7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtIChpZiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJUHJvcGVydGllcworCQlwcm9wcyA9IFV0aWxzLmxvYWRQcm9wZXJ0aWVzKHNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcyksIGZuYW1lUHJvcHMsIHJlYWxQYXRoLCBmYWxzZSk7CisJCisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIGZvdXQgYW5kIGZlcnIgYXMgcmVwbGFjZW1lbnQgZm9yIHN0ZG91dC9zdGRlcnIgZm9yIHVzZSBpbiBHbGVtbVNlcnZpY2VzLgorCS8vIGRvIG5vdCB1c2Ugb3IgcmVkaXJlY3QgU3lzdGVtLm91dCBhbmQgU3lzdGVtLmVyciwgYXMgdGhleSB3aWxsIGJlIHJlZGlyZWN0ZWQKKwkvLyBieSBvdGhlciBTZXJ2aWNlcyBpbiB0aGUgc2FtZSBnbGFzc2Zpc2ggSlZNLCBlLmcuIGJ5IHRoZSBXZm9ybVNlcnZpY2VzLgorCWZvdXQgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVPdXQpOworCWZlcnIgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVFcnIpOworCQorCS8vVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkKKwlsb2dfUmVxdWVzdChyZXF1ZXN0UGF0aCwgZnVuYyk7CisJCisJcmV0dXJuIHByb3BzOworCX0gLy8gaW5pdF9hbmRfbG9nX1JlcXVlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwlTdHJpbmcKKwkJc3RhdHVzOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3N0YXR1cy8iKTsKKwkKKwkvLyBodHRwU2VydmxldFJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW52KTsKKwkKKwlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+cHJvcGVydGllczwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPmRhdGFiYXNlPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIiksCisJCQkJCQkJc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSA9PSBudWxsID8gIm5vdCBmb3VuZCIgOgorCQkJCQkJCQlwcm9wcy5pc0VtcHR5KCkgPyAiZW1wdHkiIDogImxvYWRlZCIsCisJCQkJCQkJZm9ybWF0RGJOYW1lKHByb3BzKQorCQkJCQkJCSk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJY2xvc2VMb2dTdHJlYW1zKCk7CisJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiAKKwkgKiBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhOgorCSAqIAorCSAqIFBPU1Q6IC9pbmRleC9hZGQve2RhdGFiYXNlbmFtZX06IHRleHQvcGxhaW4KKwkgKiAKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGxpc3QJCSA6IHRoZSBsaXN0IG9mIHdmcyBzZW50IGluIHRoZSBib2R5IG9mIHRoZSBQT1NUIHJlcXVlc3QuCisJICogZGJwYXRoCSA6IHRoZSBsb2NhdGlvbiBvZiB0aGUgZGF0YWJhc2Ugd2hlcmUgdGhlIGxlbW1hK3dmcyBhcmUgdG8gYmUgc3RvcmVkLgorCSAqIE5vdGVzICAgICA6CisJICogLSBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZSBsb2NhdGVkIGF0ICdkYXRhYmFzZW5hbWUnLgorCSAqIC0gVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQgaW50byBhIERlcmJ5IGRhdGFiYXNlLgorCSAqIElucHV0CSA6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqIDA0LjExLjIxL0ZCCisJICogLSBzdWJtaXR0ZWQgZGF0YWJhc2UgcGF0aC4KKwkgKi8KKwkKKwlAUGF0aCgiYWRkL3tkYXRhYmFzZXBhdGh9IikgCisJQFBPU1QgCisJQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvUE9TVF9pbXBvcnRMZW1tYURhdGEKKwkJCQkJCQkoCisJCQkJCQkJU3RyaW5nIAkJCQkJCQkJbGlzdCwKKwkJCQkJCQlAUGF0aFBhcmFtKHZhbHVlPSJkYXRhYmFzZXBhdGgiKSAJZmluYWwgU3RyaW5nIGRicGF0aAorCQkJCQkJCSkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb1BPU1RfaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSAKKwkJYXJMaXN0ID0gbGlzdC5zcGxpdCgiXG4iKTsKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IG51bGw7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9hZGQve2RicGF0aH0iKTsKKwkKKwlmb3V0LnByaW50ZigiSW5mbyA6ICVzOiBzZWxlY3RlZCBkYXRhYmFzZSBwYXRoID0gJyVzJy5cbiIsIGZ1bmMsIGRicGF0aCk7CisJZm91dC5wcmludGYoIkluZm8gOiAlczogd29ya2luZyBkaXJlY3RvcnkgPSAnJXMnLlxuIiwgZnVuYywgR1NfV29ya2luZ1BhdGgpOworCQorCS8vIHNldCBmaWxlIGFuZCBwYXRocyBhZnRlciBHU19Xb3JraW5nUGF0aCBoYXMgYmVlbiBpbml0aWFsaXNlZDoKKwlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgZm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShmZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzLCBmb3V0LCBmZXJyKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZsO8aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEsIHByb3BzLCBkYnBhdGgpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCQorCX0gLy8gZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCisJLyogZG9HRVRfdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVycyA9ICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vIik7CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlmaW5hbCBTdHJpbmcKKwkJZGJOYW1lID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+ZGF0YWJhc2U8L2I+OiAlczwvcD4iLCBmb3JtYXREYk5hbWUocHJvcHMpKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgZGJOYW1lICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyBkb0dFVF92aWV3REJJbmZvCisKKworCS8qIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0PnZlcnNpb24gIiArIHZlcnNpb24gKyAiIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIHJlcXVlc3QgPSAnIiArIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikgKyAiJzwvaT48L2g0PlxuIiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDE6PC9iPiAoQzIgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9PC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+e2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYyk8L2NvZGU+PC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbDwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPsOWbD9vcHRzPWZsZXgrY29tcCtvdGhlcitzcGVjPC9jb2RlPjwvcD4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMjo8L2I+IChpbnRlcm5hbCBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX0/cHJvcDE9WzAxMl0mYW1wO3Byb3AyPVswMTJdJmFtcDtzcGVjPVswMTJdPC9jb2RlPiAod2hlcmUgZWFjaCBwcm9wMSwgcHJvcDIsIHNwZWMgaXMgb3B0aW9uYWwpLjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw/cHJvcDE9MCZhbXA7cHJvcDI9MSZhbXA7c3BlYz0yPC9jb2RlPjwvcD4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfSIpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSclZCcgcHJvcDI9JyVkJyBzcGVjPSclZCcuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwkvKiAKKwlmb3IoaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJCX0JCisJICovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoIGxlbW1hSW5mby5vcHRzU2V0dGluZyA9PSBMZW1tYUluZm8uT1BUU19TRVRUSU5HX0MyICkgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMSxwcm9wMixzcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaW50CisJCW5XZnMgPSBsZW1tYUluZm8ubldmczsKKwkKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwkvLyBsb2cgb3V0Y29tZToKKwlpZiggbldmcyA8IDAgKQorCQlmb3V0LnByaW50ZigiRXJyb3I6ICVzOiByZXR1cm5pbmcgMCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMpOworCWVsc2UKKwkJZm91dC5wcmludGYoIkRlYnVnLiAlczogcmV0dXJuaW5nICVkIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYywgbldmcyk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIG5vdGU6CisJICogLSBpZiBCcm93c2VyIHJlcXVlc3Q6IEhUVFBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAndGV4dC9odG1sLC4uLnhtbC4uLicKKwkgKiAtIGlmIFdmb3JtU2VydmljZXMgcmVxdWVzdDogSHR0cFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICdhcHBsaWNhdGlvbi9qc29uJy4KKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqIAorCSAqIC0gc3VibWl0dGVkIFVSTCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hLCBpcyBpbnRlcnByZXRlZCBieSBnbGFzc2Zpc2ggYXMKKwkgKiAgIGJlaW5nIElTTy04ODU5LTEgZW5jb2RlZC4gV2hlbiB0aGUgcmVxdWVzdCBpcyBVVEYtOCBlbmNvZGVkLCBVbWxhdXRzIGFuZAorCSAqICAgJ8OfJyBhcmUgbWlzLWludGVycHJlZGVkLCBsZWFkaW5nIHRvIGFuIGVycm9uZXJvdXMgcmVxdWVzdCB0byB0aGUgRGVyYnkKKwkgKiAgIGRhdGFiYXNlLgorCSAqIC0gUmVxdWVzdGVkIGxlbW1hICdsZW1tYScgaGFzIHRvIGJlIHRyYW5zZm9ybWVkIHRvIFVURi04IGZpcnN0LgorCSAqIC0gbm90ZTogZXZlbiB3aGVuIHN1Ym1pdHRpbmcgdGhlIEdFVCByZXF1ZXN0IGJ5IHNwZWNpZnlpbmcgJ2NoYXJlbmNvZGU9VVRGLTgnLAorCSAqICAgZ2xhc3NmaXNoIGRvZXMgbm90IGNvbnZlcnQgaXQgYXV0b21hdGljYWxseSBhcyBleHBlY3RlZC4KKwkgKiAgIAorCSAqICAyMi4xMC4yMS9GQgorCSAqIAorCSAqIC0gaWYgYWNjZXB0PWFwcGxpY2F0aW9uL2pzb24gcmV0dXJuIFVURi04IChXZm9ybVNlcnZpY2VzKS4KKwkgKiAtIGVsc2UgaWYgYWNjZXB0PXRleHQvaHRtbCBkbyBub3QgdHJhbnNmb3JtIGNoYXJhY3RlciBlbmNvZGluZyAoQnJvd3NlcikuCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBDb25zdW1lcygiYXBwbGljYXRpb24vanNvbiwgdGV4dC9odG1sIikKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCQorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCWZpbmFsIGJvb2xlYW4KKwkJYkVuY29kZUxlbW1hID0gZmFsc2U7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CisJCisJLyogdGVzdDoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJaWYoIGJFbmNvZGVMZW1tYSApCisJCXsKKwkJLy8gd2hlbiBhY2NlcHRpbmcgSlNPTiwgdXJsIGhhcyB0byBiZSBjb252ZXJ0ZWQgdG8gVVRGLTgsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYToKKwkJdHJ5IHsKKwkJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obmV3IFN0cmluZyhsZW1tYS5nZXRCeXRlcygiSVNPLTg4NTktMSIpLCAidXRmLTgiKSk7CisJCQl9IAorCQljYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlMSkgeworCQkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCQlMZW1tYVJlc3BvbnNlCisJCQkJbGVtcmVzcCA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbXJlc3ApLmJ1aWxkKCk7CisJCQl9CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW1VURi04XSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCWVsc2UKKwkJeworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbdW5jaGFuZ2VkXSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCisJLyogZG9lcyBub3QgaGVscDoKKwkgU3RyaW5nCisJIAlyZXF1ZXN0Q2hhckVuY29kaW5nID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldENoYXJhY3RlckVuY29kaW5nKCk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiByZXF1ZXN0IGNoYXJhY3RlciBlbmNvZGluZyA9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RDaGFyRW5jb2RpbmcpOworCSovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXsKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQkvL3JldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJfQorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsJCisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCS8qCisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC90ZXN0L2luZm8vIik7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL2ZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJZm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2ExL2YwMGY0OGU0ODcyYjAwMWMxYzQxY2U1NTllYTVlMTZiIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9hMS9mMDBmNDhlNDg3MmIwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzY2N2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9hMS9mMDBmNDhlNDg3MmIwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpAQCAtMCwwICsxLDcwOSBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDYuMTAuMjEiOyAvLyIxNy4wNi4yMCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4xIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCQlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCQlTdHJpbmcKKwkJCXN0YXR1czsKKwkJVXRpbHMKKwkJCXUgPSBuZXcgVXRpbHMoKTsKKwkJUHJvcGVydGllcworCQkJcHJvcHM7CisJCQorCQkvLyByZWFkIHRlc3QKKwkJcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworCQkvL0h0dHBTZXJ2bGV0Q29udGV4dAorCQkKKwkJLy8gaHR0cFNlcnZsZXRSZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKGVudik7CisJCUlucHV0U3RyZWFtCisJCQlpblByb3AgPSBHbGVtbVNlcnZpY2VzLmNsYXNzLmdldENsYXNzTG9hZGVyKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbSgiR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIik7CisJCQorCQl0cnkgeworCQkJcHJvcHMubG9hZChpblByb3ApOworCQkJU2V0PEVudHJ5PE9iamVjdCxPYmplY3Q+PgorCQkJCXByb3BzU2V0ID0gcHJvcHMuZW50cnlTZXQoKTsKKwkJCQorCQkJZm9yKEVudHJ5PE9iamVjdCwgT2JqZWN0PiBwcm9wRW50cnkgOiBwcm9wc1NldCkKKwkJCQl7CisJCQkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcCAlcyA9ICclcycuXG4iLCBmdW5jLCBwcm9wRW50cnkuZ2V0S2V5KCksIHByb3BFbnRyeS5nZXRWYWx1ZSgpKTsKKwkJCQl9CisJCQl9IAorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGxvYWQgcHJvcHMgJ0dsZW1tU2VydmljZXMucHJvcGVydGllcychIiwgIGZ1bmMpOworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQkKKwkJLy8gZW5kIG9mIHJlYWQgdGVzdAorCQkKKwkJLy8gdGVzdAorCQkvKgorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCQorCQkgKiBwcm9wcy5zZXRQcm9wZXJ0eSgicCIsICJ0ZXN0Iik7CisJCSAqCisJCUZpbGVPdXRwdXRTdHJlYW0gb3V0OworCQl0cnkgeworCQkJb3V0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oImdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOworCQkJcHJvcHMuc3RvcmUob3V0LCAgInRlc3QgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIik7CisJCQl9IAorCQljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfTsKKwkJKi8KKwkJCisJCS8vIGVuZCBvdGVzdAorCQkKKwkJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiQVBJOiAlczogL2luZGV4L3N0YXR1cy8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCisJCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCQlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIFBPU1Q6IC9pbmRleC9hZGQvOiB0ZXh0L3BsYWluCisJICogYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UuCisJICogVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQKKwkgKiBpbnRvIHRoZSBkYXRhYmFzZS4KKwkgKiBJbnB1dDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICovCisJQFBhdGgoImFkZCIpIEBQT1NUIEBDb25zdW1lcygidGV4dC9wbGFpbiIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBpbXBvcnRMZW1tYURhdGEoU3RyaW5nIGxpc3QpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSBhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCQorCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvYWRkLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZu+/vWhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCX0KKworCS8qIHZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIHZpZXdEQkluZm8KKworCisJLyogdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgLSBTdGF0dXM6IDxpPldvcmsgaW4gcHJvZ3Jlc3MuLi4hPC9pPik8L2g0PlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggIW9wdGlvbnMuZXF1YWxzKCJ1bmRlZiIpKQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMS9wcm9wMi9zcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogR2xlbW1TZXJ2aWNlcyAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uRGF0ZSwgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCS8vU3lzdGVtLm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2EyLzkwY2UwNWM2OWEzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9hMi85MGNlMDVjNjlhM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzgyMWE1Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9hMi85MGNlMDVjNjlhM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpAQCAtMCwwICsxLDczOCBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnNxbC5Db25uZWN0aW9uOworaW1wb3J0IGphdmEuc3FsLkRyaXZlck1hbmFnZXI7CitpbXBvcnQgamF2YS5zcWwuUHJlcGFyZWRTdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS5zcWwuUmVzdWx0U2V0OworaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5TdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitwdWJsaWMgY2xhc3MgR2xlbW1EQgorCit7CisJc3RhdGljIHB1YmxpYyBTdHJpbmcgZGJUYWJsZSAJPSAiR2xlbW1MZW1tYXRhIjsKKwlzdGF0aWMgU3RyaW5nIGRiTGVtbWEgCQkgCT0gImxlbW1hIjsKKwlzdGF0aWMgU3RyaW5nIGRiV2YJIAkJCT0gIndmIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDEgCQkJPSAicHJvcDEiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMiAJCQk9ICJwcm9wMiI7CisKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKG92ZXJ3cml0dGVuIGJ5IEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZuYW1lREIgPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgc2VydmVySG9zdCA9ICIvL2xvY2FsaG9zdDoxNTI3LyI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChmaW5hbCBhc3NpZ25tZW50cyk6CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyRW1iID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZERyaXZlciI7CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyQ2xpZW50ID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREcml2ZXIiOworCisJZmluYWwgc3RhdGljIGJvb2xlYW4KKwkJdXNlUHJlcGFyZWRTdG10ID0gdHJ1ZTsgLy8gMT11c2UgUHJlcGFyZWRTdGF0ZW1lbnQgYW5kIG5vdCBTdGF0ZW1lbnQuCisJCisJLy8gdmFsdWVzIHRvIGJlIGluc2VydGVkOiBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYy4KKwlzdGF0aWMgU3RyaW5nIGluc2VydFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKCclcycsICclcycsICclcycsICclcycsICclcycpIjsKKwlzdGF0aWMgU3RyaW5nIGluc2VydFByZXBhcmVkUXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoPywgPywgPywgPywgPykiOworCQorCS8qCisJICogc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJICogCisJICogQXJndW1lbnRzOgorCSAqIHByb3BzCTogUHJvcGVydGllcyBsb2FkZWQgYnkgdGhlIEdsZW1tU2VydmljZXMuCisJICogTm90ZXM6CisJICogLSB0aGlzIGZ1bmN0aW9uIGxvYWRzIG9ubHkgdGhvc2UgQ29uc3RhbnRzIG5lZWRlZCBpbiB0aGlzIGNsYXNzLgorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcwlwcm9wcykKKwkKKwl7CisJZm5hbWVEQgkJIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgCSIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlzZXJ2ZXJIb3N0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJzZXJ2ZXJIb3N0IiwJIi8vbG9jYWxob3N0OjE1MjcvIik7CisJZGVyYnlEQlVSTCAJCT0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCQkJCisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCQkJCQlpbXBvcnRHbGVtbUxlbWF0YQorCSAqIFBhcmFtZXRlcnM6CisJICogZm4JCSA6IGFic29sdXRlIGZpbGUgbmFtZSBvZiBHTEVNTSBvdXRwdXQgW0lTTzg4NTktMV0gZXhwZWN0ZWQsIG5vdCBVVEYtOCEKKwkgKiBwcm9wcwkgOiBQcm9wZXJ0aWVzIHZvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgdG8gc2V0IGNvbnN0YW50cyBuZWVkZWQKKwkgKiAJCQkgICBpbiB0aGlzIGNsYXNzLgorCSAqIGRicGF0aAkgOiBsb2NhdGlvbiArIG5hbWUgb2YgZGF0YWJhc2Ugd2hlcmUgdG8gc3RvcmUgbGVtbWF0YSt3ZnMuCisJICogUmV0dXJucwkgOiAwPU9LLCAtMTogZ2VuZXJhbCBlcnJvcjsgPiAwIDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAKKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIGR5bmFtaWNhbGx5IGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqIDA0LjExLjIxL0ZCIGRicGF0aC4KKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YShTdHJpbmcgZm4sIFByb3BlcnRpZXMgcHJvcHMsIGZpbmFsIFN0cmluZyBkYnBhdGgpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YSI7CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4gPSBudWxsOworCWludAorCQluRXJyb3JzOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyB3aGVuIGluZGV4aW5nIGRhdGEgaW50byB0aGUgZGF0YWJhc2UsIHNlbGVjdCB0aGUgc3VibWl0dGVkIGRicGF0aCwKKwkvLyAobm90IHRoZSBvbmUgc3RvcmVkIGluIHRoZSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCWRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGRicGF0aDsKKwkKKwkvLyBvcGVuIHJlYWRlciBvbiBHbGVtbSBMZW1tYXRhOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCWluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCQorCQluRXJyb3JzID0gd3JpdGVEQkxlbW1hdGEoaW4pOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBmcm9tICclcychXG4iLCBmdW5jLCBmbik7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCisJLy8gY2xvc2UgUmVhZGVyOgorCXRyeSB7CisJCWluLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJbkVycm9ycyA9IC0xOworCQl9CisJCisgCWlmKCBuRXJyb3JzID09IDAgKQorIAkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQgZG9uZSBzdWNjZXNzZnVsbHkuXG4iLCBmdW5jKTsKKyAJZWxzZQorIAkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQ6ICVkIEVycm9ycyFcbiIsIGZ1bmMsIG5FcnJvcnMpOworIAkKKwlyZXR1cm4gbkVycm9yczsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YQorCQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVEQkxlbW1hdGEoKQorCSAqICAgICAgICAgICAgICAgICAgICAgICAKKwkgKiBzdG9yZXMgbGlzdCBvZiBsZW1tYXRhICsgaW5mb3MgaW50byBEZXJieSBkYi4KKwkgKiBGaWxlIGZvcm1hdDogIkxlbW1hIERlY29tcG9zaXRpb24gV2YiLAorCSAqICAgICAgICAgICAgICBlLmcuOiAiSMOkdXNlciArLSBIYXVzIi4KKwkgKiBSZXR1cm5zOiAwID0gT0sgb3IgLTE6IGdlbmVyYWwgZXJyb3Igb3IgPiAwOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIDA5LjAxLjIwL0ZCCisJICogMDQuMTEuMjEvRkIgdHVybiBhdXRvY29tbWl0IG9mZiB0byBhY2NlbGVyYXRlIGh1Z2UgYW1vdW50IG9mIGluc2VydGlvbnMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYXRhKEJ1ZmZlcmVkUmVhZGVyIGluKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hdGEiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJUHJlcGFyZWRTdGF0ZW1lbnQKKwkJc3RtdFByZXAgPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10IAkgPSBudWxsOworCVN0cmluZworCQlsaW5lOwkKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQluSW5zZXJ0ZWQgPSAwLAkvLyBuby4gb2YgbGVtbWEvd2YgcGFpcnMgaW1wb3J0ZWQuCisJCXJldCA9IDA7IC8vIE9LLgorCWJvb2xlYW4KKwkJY29udGFpbnNTcGVjOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZSwKKwkvLyBzZXQgQXV0b2NvbW1pdCA9IGZhbHNlIHRvIGFjY2VsZXJhdGUgaW5zZXJ0aW9uczoKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJY29uLnNldEF1dG9Db21taXQoZmFsc2UpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZCAoYXV0b0NvbW1pdD1vZmYpLlxuIiwgZnVuYyk7CisKKwkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQlzdG10UHJlcCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KGluc2VydFByZXBhcmVkUXVlcnkpOworCQllbHNlCisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCisJCXdoaWxlKCAobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCAhPSAzICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzISBFeHBlY3RlZCA9IDMhIENhbm5vdCBiZSBzdG9yZWQhXG4iLCBmdW5jLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCQluRXJyb3JzKys7CisJCQkJY29udGludWU7CisJCQkJfQorCQkJCisJCQkvLyBHZXQgSW5mbywgaWYgd29yZGZvcm0gY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlICctJywgaW50ZXJwdW5jdGlvbiBldGMuOgorCQkJLy8gbGVtbWFJbmZvWzJdID0gd29yZGZvcm0uCisJCQljb250YWluc1NwZWMgPSBMZW1tYUluZm8uaXNXZlNwZWNpYWxDYXNlKGxlbW1hSW5mb1syXSk7CisJCQkvLyBzdG9yZSBpbnRvIERCOgorCQkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoc3RtdFByZXAsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQllbHNlCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3Moc3RtdCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCQorCQkJaWYoIHJldCAhPSAwICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgc3RvcmUgbGVtbWEgJyVzJyBpbnRvIERCISAocmV0PSVkKVxuIiwgZnVuYywgbGluZSwgcmV0KTsKKwkJCQluRXJyb3JzKys7IAorCQkJCX0KKwkJCWVsc2UKKwkJCQluSW5zZXJ0ZWQrKzsKKwkJCX0gLy8gd2hpbGUKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgR2xlbW0gbGVtbWF0YStpbmZvcyBmcm9tIGZpbGUhIEV4aXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOyAKKwkJfQkKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisJZmluYWxseSAKKwkJeyAKKwkJdHJ5IHsKKwkJCS8vIGltcG9ydGFudDogbm93IGNvbW1pdCwgYXMgYXV0b0NvbW1pdCBpcyBkZWFjdGl2YXRlZDoKKwkJCWNvbi5jb21taXQoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29tbWl0IGF0IHRoZSBlbmQgb2YgdGhlIHdmcyBsaXN0IGZhaWxlZCFcbiIsIGZ1bmMpOworCQkJfQkJCisJCQorCQl0cnkgeyAvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSAKKwkJCQlzdG10LmNsb3NlKCk7CisJCQlpZiggc3RtdFByZXAgIT0gbnVsbCApIAorCQkJCXN0bXRQcmVwLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkluZm8gOiAlczogbm8uIG9mIGxlbW1hdGEvd2YgcGFpcnMgaW5zZXJ0ZWQgPSAlZC5cbiIsIGZ1bmMsIG5JbnNlcnRlZCk7CisJCisJcmV0dXJuIG5FcnJvcnM7IC8vIDA9T0ssID4wID0gbm8uIG9mIGVycm9ycy4KKwl9IC8vIHdyaXRlREJMZW1tYXRhCisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIHJ1bGVzIGludG8gRGVyYnkgREIuCisJICogTm90ZXM6CisJICogLSB0aGlzIGlzIHRoZSB2ZXJzaW9uIHdpdGggYSBQcmVwYXJlZFF1ZXJ5LgorCSAqIFBhcmFtZXRlcnM6CisJICogc3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDE3LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKAorCQkJUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCwgCisJCQlTdHJpbmcgbGVtbWEsIAorCQkJU3RyaW5nIHdmLCAKKwkJCVN0cmluZyBkZWNvbXBvc2l0aW9uLCAKKwkJCWJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkIjsKKwlmaW5hbCBib29sZWFuCisJCWJMb2cgPSBmYWxzZTsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlib29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgCisJLy8gZm9yIGxvZ2luZyBvbmx5OgorCXNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwlpZiggYkxvZyApCisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorICAgIC8vIG5vdyBpbnNlcnQgbmV3IHZhbHVlcyBpbnRvIFByZXBhcmVkU3RhdGVtZW50OgorICAgIHRyeSB7CisgICAgCXN0bXQuc2V0U3RyaW5nKCAxLCBsZW1tYSk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKCAyLCB3Zik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbigzLCBwcm9wMSk7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig0LCBwcm9wMik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig1LCBzcGVjKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcmVwYXJlZCBzdG10ID0gJyVzJy5cbiIsICBmdW5jLCBzdG10LnRvU3RyaW5nKCkpOworICAgICAgICB9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlMSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKAkiRXJyb3I6ICVzOiB3aGlsZSBmaWxsaW5nIHByZXBhcmVkIHN0YXRlbWVudCB3aXRoIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0nJWInIHByb3AyPSclYicgc3BlYz0nJWInIVxuIiwgIAorCQkJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZTEucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisgICAgCisgICAgdHJ5IHsKKwkJLy8gZXhlY3V0ZSB0aGUgZmlsbGVkIHByZXBhcmVkIHN0YXRlbWVudDoKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZSgpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViISAobj0lZClcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMsIG4pOworIAkJCXJldHVybiAyOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDM7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZAorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3M6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gaW50byBEZXJieSBEQi4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGNvbnRhaW5zU3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDEwLjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zKFN0YXRlbWVudCBzdG10LCBTdHJpbmcgbGVtbWEsIFN0cmluZyB3ZiwgU3RyaW5nIGRlY29tcG9zaXRpb24sIGJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zIjsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlCb29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworICAgIAorICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorCXRyeSB7CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoc3FsSW5zZXJ0KTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYURhdGEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBmcm9tIHRoZSBHbGVtbURCLgorCSAqIElucHV0OiBsZW1tYSArIEdMRU1NX09QVFNfeHh4IChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWFEYXRhKExlbW1hSW5mbyBsZW1tYUluZm8sIFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYURhdGEiOworCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJbGVtbWFJbmZvLmNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJbGVtbWFJbmZvLnN0bXQgPSBsZW1tYUluZm8uY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlpbnQgciA9IHJlYWREQkxlbW1hKGxlbW1hSW5mby5zdG10LCBsZW1tYUluZm8pOworCQkJCisJCWlmKCByICE9IDAgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZ2V0IGRhdGEgZm9yIGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIVxuIiwgCisJCQkJCWZ1bmMsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwkJCXJldHVybiAxOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggbGVtbWFJbmZvLmNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hRGF0YQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGJ5IGFjY2Vzc2luZyB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dCA6IGxlbW1hICsgcHJvcDErMiAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogT3V0cHV0OiAKKwkgKiAgLSBjb250YWlucyBhIFJlc3VsdFNldCBmb3IgZmV0Y2hpbmcgdGhlIHdvcmRmb3Jtcy4KKwkgKiAJICBUaGlzIFJlc3VsdFNldCB3aWxsIGhhdmUgYmUgYmUgY2xvc2VkIHdpdGggTGVtbWFJbmZvLmNsb3NlKCkuCisJICogCSAgVGhlIG5vLiBvZiBmb3VuZCB3b3JkZm9ybXMgaXMgbm90IGtub3duIHRpbGwgd2UKKwkgKiAJICBmZXRjaCBhbGwgb2YgdGhlbSBmcm9tIFJlc3VsdFNldCEgCisJICogCS0gZHVlIHRvIFNFTEVDVCBESVNUSU5DVCBvbmx5IHVuaXEgd2YgYXJlIHJldHVybmVkLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYShTdGF0ZW1lbnQgc3RtdCwgTGVtbWFJbmZvIGxlbW1hSW5mbykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hIjsKKwlTdHJpbmcKKwkJc3FsOworCQkKKwlzcWwgPSBTdHJpbmcuZm9ybWF0KCJTRUxFQ1QgRElTVElOQ1Qgd2YgZnJvbSAlcyBXSEVSRSBsZW1tYT0nJXMnICVzICVzICVzIiwgCisJCQlkYlRhYmxlLAorCQkJbGVtbWFJbmZvLmxlbW1hLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiQU5EIHByb3AxPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAxID8gIkFORCBwcm9wMT0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiQU5EIHByb3AyPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAxID8gIkFORCBwcm9wMj0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiQU5EIHNwZWM9J3RydWUnIiAgIDogCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICJBTkQgc3BlYz0nZmFsc2UnIiAgOiAiIik7CisJCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgZnVuYywgbGVtbWFJbmZvLnByb3AxLCBsZW1tYUluZm8ucHJvcDIsIGxlbW1hSW5mby5zcGVjKTsKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbCA9ICclcycuXG4iLCBmdW5jLCBzcWwpOworCisJdHJ5IHsKKwkJbGVtbWFJbmZvLnJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoZW4gZXhlY3V0aW5nIHNxbD0nJXMnIVxuIiwgZnVuYywgc3FsKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gYWxsIHNxbCBzdHVmZiBhcmUgY2xvc2VkIG91dHNpZGUgdGhpcyBmdW5jdGlvbiwgc28gZG9uJ3QgY2xvc2UgdGhlbSBoZXJlIQorCQl9CQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3MKKwkgKiBSZXR1cm5zIEdlbmVyYWwgSW5mb3MgYWJvdXQgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIHJlYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJJbmZvcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJZGJJbmZvID0gcmVhZERiTGVtbWF0YUluZm9zKHN0bXQpOworCQkJCisJCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCByZWFkIEdlbmVyYWwgSW5mb3MgZnJvbSBHbGVtbSBEYXRhYmFzZSFcbiIsIGZ1bmMpOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSBjb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSBzdG10LmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIG1heSBiZSBudWxsLgorCQkKKwl9IC8vIHJlYWREYkluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiTGVtbWF0YUluZm9zOgorCSAqIHJlYWRzIGFuZCByZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGNvbnRlbnQgCisJICogb2YgdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIFJldHVybnMgMD1PSyBvciBlcnJvciBjb2RlID4gMC4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkxlbW1hdGFJbmZvcyhTdGF0ZW1lbnQgc3RtdCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAicmVhZERiTGVtbWFJbmZvcyI7CisJU3RyaW5nW10KKwkJc3FsID0gewkiU0VMRUNUIENPVU5UKGRpc3RpbmN0IGxlbW1hKSBmcm9tICIgKyBkYlRhYmxlICwJLy8gY291bnRzIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSwJCQkJCS8vIGNvdW50cyB0b3RhbCBuby4gb2Ygc3RvcmVkIHdvcmRmb3Jtcy4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPXRydWUiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPXRydWUifTsKKwlSZXN1bHRTZXQKKwkJcmVzID0gbnVsbDsgCisJaW50W10KKwkJbkNvdW50cyA9IG5ldyBpbnRbc3FsLmxlbmd0aF07CisJaW50CQkKKwkJaSA9IDAsIAorCQluRGlzdExlbW1hdGEgPSAtMSwJLy8gbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEgaW4gREIuCisJCW5XZnMJCSA9IC0xOwkvLyBuby4gb2Ygd29yZGZvcm1zIGluIERCLgorCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBleHRyYWN0aW5nIGFncmVnYXRlZCBpbmZvcyBhYm91dCBEYXRhYmFzZSBjb250ZW50cy4uLlxuIiwgZnVuYyk7CisJCisJZGJJbmZvID0gbmV3IEdsZW1tREJJbmZvKCk7CisKKwkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwl0cnkgeworCQlmb3IoaT0wOyBpPHNxbC5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCXJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbFtpXSk7CisJCQlpZiggcmVzLm5leHQoKSApCisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IHJlcy5nZXRJbnQoMSk7IC8vIGNvdW50IGlzIGluIGNvbHVtbiAxLgorCQkJZWxzZQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBleHRyYWN0IGNvdW50IGZyb20gJyVzJyFcbiIsIGZ1bmMsIHNxbFtpXSk7CisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IC0xOworCQkJCX0KKwkJCX0KKyAgICAgICAKKyAgICAgICAgfQorICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgIAl7CisgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogc3FsPSclcycgZmFpbGVkIVxuIiwgZnVuYywgc3FsW2ldKTsKKyAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAJfQorCWZpbmFsbHkgeworCQl0cnkgeworCQkJcmVzLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBPSworCX0gLy8gcmVhZERiTGVtbWF0YUluZm9zCisJCisJLyoqKioqKioqKioqKioqKioqKioqIFRlc3QgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zX3Rlc3QKKwkgKiBUaGlzIGlzIGRlYnVnIGNvZGUgd3JpdHRlbiB0byB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIERlcmJ5CisJICogRGF0YWJhc2UgZnJvbSBhbiBleHRlcm5hbCBKYXZhIFByb2dyYW1tLgorCSAqIDA4LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCByZWFkRGJJbmZvc190ZXN0KCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlTdHJpbmcKKwkJaW5zZXJ0U3RtdCA9ICIiOworCQorCS8vIENvbm5lY3QgdG8gRGVyYnkgZGF0YWJhc2U6CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCQorCQkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwkJdHJ5CisJCQl7CisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIAorICAgICAgICAgICAgCXNxbCA9ICJTRUxFQ1QgKiBGUk9NICIgKyBkYlRhYmxlOworICAgICAgICAgICAgUmVzdWx0U2V0IAorICAgICAgICAgICAgCXJlc3VsdCA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CisgCisgICAgICAgICAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHRhYmxlICclcyc6XG4iLCAgZnVuYywgZGJUYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQubmV4dCgpKSB7CisgICAgICAgICAgICAJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiJyVzJyA6ICclcycgOiAnJXMnIDogJyVzJyAuXG4iLCByZXN1bHQuZ2V0U3RyaW5nKDEpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygyKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMyksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDQpKTsKKyAgICAgICAgCQlpbnNlcnRTdG10ID0gaW5zZXJ0U3RtdCArICI8cD4iICsgcmVzdWx0LmdldFN0cmluZygxKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZygyKSArICIgOiAiICsKKyAgICAgICAgICAgICAgICAJCSAgICAgcmVzdWx0LmdldFN0cmluZygzKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZyg0KSArICI8L3A+IjsKKyAgICAgICAgICAgIAl9CisJCQl9CisJICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgICAgICAJeworCSAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBpbnNlcnRTdG10PSclcycgZmFpbGVkIS5cbiIsIGZ1bmMsIHN0bXQpOworICAgICAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICAgICAgY29uLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nICclcyBmYWlsZWQhXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJdHJ5IHsKKwkJY29uLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkJCisJfSAvLyByZWFkRGJJbmZvc190ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogaW1wb3J0R2xlbW1MZW1hdGFfdGVzdAorCSAqIFRlc3QgVmVyc2lvbi4KKwkgKiAxMi4xMi4xOS9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QoU3RyaW5nIGZuKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdCI7CisJSW5wdXRTdHJlYW0gCisJCWluOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluMiA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQlyOworCQorCS8qCisJICogUmVhZCBMZW1tYXRhICsgSW5mbyBmcm9tIGZpbGU6IAorCSAqLworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCQorCXRyeSB7CisJCS8vaW4gPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSggbmV3IEZpbGVJbnB1dFN0cmVhbShmbikgKTsKKwkJaW4yID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlcihmbikpOworCQl3aGlsZSggKGxpbmUgPSBpbjIucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoID09IDMgKQorCQkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBJbXBvcnQ6IGxlbT0nJXMnIERlY29tcD0nJXMnIFdmPSclcycuXG4iLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1sxXSwgbGVtbWFJbmZvWzJdKTsKKwkJCWVsc2UKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogaW1wb3J0R2xlbW1MYW1hdGE6ICclcycgaGFzICVkIGNvbXBvbmVudHMhXG4iLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IG9wZW4gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJcmV0dXJuIDE7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKworCXRyeSB7CisJCWluMi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCS8qIENoZWNrIGNvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJICovIAorCXIgPSByZWFkRGJJbmZvc190ZXN0KCk7CisJaWYoIHIgIT0gMCApCisJCXJldHVybiByOworCQkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2E3LzEwYTQ5MGNjNTFiYTAwMWExYTY3ODc5YjA1MmNjNzdjIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9hNy8xMGE0OTBjYzUxYmEwMDFhMWE2Nzg3OWIwNTJjYzc3YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWUyNzk5Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9hNy8xMGE0OTBjYzUxYmEwMDFhMWE2Nzg3OWIwNTJjYzc3YwpAQCAtMCwwICsxLDMxIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorIDxoZWFkPgorICA8dGl0bGU+V29yZGZvcm0gU2VydmljZXMgKGluY2x1ZGluZyBHbGVtbSBTZXJ2aWNlcyk8L3RpdGxlPgorICA8IS0tIGxvYWQgY2xpZW50IGphdmFzY3JpcHQgbGlicmFyeSAtLT4KKyAgPHNjcmlwdCBzcmM9Imh0dHBzOi8va29yYXAuaWRzLW1hbm5oZWltLmRlL2pzL2tvcmFwLXBsdWdpbi0wLjIuanMiCisgICAgICAgICAgZGF0YS1zZXJ2ZXI9Imh0dHBzOi8va29yYXAuaWRzLW1hbm5oZWltLmRlLyI+PC9zY3JpcHQ+CisgPC9oZWFkPgorIDxib2R5PgorICA8c2NyaXB0PgorICAgICAgIGxldCBkYXRhID0geworICAgICAgICAgJ2FjdGlvbicgOiAncGlwZScsCisgICAgICAgICAnc2VydmljZScgOiAnaHR0cDovL2MwcjRmdC5pZHMtbWFubmhlaW0uZGU6NDA5MTMvd2Zvcm1TZXJ2aWNlcy0wLjEtU05BUFNIT1Qvd2Zvcm1TZXJ2aWNlcy9wbHVnaW4uaHRtbCcKKyAgICAgICB9OworCisgICAgICAgZnVuY3Rpb24gcGx1Z2luaXQgKHApIHsKKyAgICAgICAgIHAub25NZXNzYWdlID0gZnVuY3Rpb24obXNnKSB7CisgICAgICAgICAgIGlmIChtc2cua2V5ID09ICdnbGVtbScpIHsKKyAgICAgICAgICAgICBpZiAobXNnLnZhbHVlKSB7CisgICAgICAgICAgICAgICBkYXRhWydqb2InXSA9ICdhZGQnOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgIGRhdGFbJ2pvYiddID0gJ2RlbCc7CisgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICBLb3JBUGx1Z2luLnNlbmRNc2coZGF0YSk7CisgICAgICAgICAgIH07CisgICAgICAgICB9OworICAgICAgIH07CisgICAgIDwvc2NyaXB0PgorICAgPC9ib2R5PgorPC9odG1sPiAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2FhLzQwYTBkYTg5NjYyYTAwMWMxYzQxY2U1NTllYTVlMTZiIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9hYS80MGEwZGE4OTY2MmEwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzllNzg5Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9hYS80MGEwZGE4OTY2MmEwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpAQCAtMCwwICsxLDY3MiBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnNxbC5Db25uZWN0aW9uOworaW1wb3J0IGphdmEuc3FsLkRyaXZlck1hbmFnZXI7CitpbXBvcnQgamF2YS5zcWwuUHJlcGFyZWRTdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS5zcWwuUmVzdWx0U2V0OworaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5TdGF0ZW1lbnQ7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzczoKKwlzdGF0aWMgU3RyaW5nIGZuYW1lREIgPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCMiI7CisJc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlzdGF0aWMgU3RyaW5nIGRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJc3RhdGljIFN0cmluZyBkZXJieURyaXZlckVtYiA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuRW1iZWRkZWREcml2ZXIiOworCXN0YXRpYyBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIGltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIFJldHVybnMJIDogMD1PSywgLTE6IGdlbmVyYWwgZXJyb3I7ID4gMCA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogCisJICogMTAuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YShTdHJpbmcgZm4pCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YSI7CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4gPSBudWxsOworCWludAorCQluRXJyb3JzOworCQorCS8vIG9wZW4gcmVhZGVyIG9uIEdsZW1tIExlbW1hdGE6CisJLy8gCisJdHJ5IHsKKwkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCWluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCQorCQluRXJyb3JzID0gd3JpdGVEQkxlbW1hdGEoaW4pOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgZnJvbSAnJXMnIVxuIiwgZnVuYywgZm4pOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gLTE7CisJCX0KKworCS8vIGNsb3NlIFJlYWRlcjoKKwl0cnkgeworCQlpbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCW5FcnJvcnMgPSAtMTsKKwkJfQorCQorIAlpZiggbkVycm9ycyA9PSAwICkKKyAJCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydCBkb25lIHN1Y2Nlc3NmdWxseS5cbiIsIGZ1bmMpOworIAllbHNlCisgCQlTeXN0ZW0uZXJyLnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQ6ICVkIEVycm9ycyFcbiIsIGZ1bmMsIG5FcnJvcnMpOworIAkKKwlyZXR1cm4gbkVycm9yczsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YQorCQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiB3cml0ZURCTGVtbWF0YSgpCisJICogc3RvcmVzIGxpc3Qgb2YgbGVtbWF0YSArIGluZm9zIGludG8gRGVyYnkgZGIuCisJICogRmlsZSBmb3JtYXQ6ICJMZW1tYSBEZWNvbXBvc2l0aW9uIFdmIiwKKwkgKiAgICAgICAgICAgICAgZS5nLjogIkjvv711c2VyICstIEhhdXMiLgorCSAqIFJldHVybnM6IDAgPSBPSyBvciAtMTogZ2VuZXJhbCBlcnJvciBvciA+IDA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogMDkuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYXRhKEJ1ZmZlcmVkUmVhZGVyIGluKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hdGEiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJUHJlcGFyZWRTdGF0ZW1lbnQKKwkJc3RtdFByZXAgPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10IAkgPSBudWxsOworCVN0cmluZworCQlsaW5lOwkKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlyZXQgPSAwOyAvLyBPSy4KKwlib29sZWFuCisJCWNvbnRhaW5zU3BlYzsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKworCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCXN0bXRQcmVwID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0UHJlcGFyZWRRdWVyeSk7CisJCWVsc2UKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisKKwkJd2hpbGUoIChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoICE9IDMgKQorCQkJCXsKKwkJCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzISBFeHBlY3RlZCA9IDMhIENhbm5vdCBiZSBzdG9yZWQhXG4iLCBmdW5jLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCQluRXJyb3JzKys7CisJCQkJY29udGludWU7CisJCQkJfQorCQkJCisJCQkvLyBHZXQgSW5mbywgaWYgd29yZGZvcm0gY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlICctJywgaW50ZXJwdW5jdGlvbiBldGMuOgorCQkJLy8gbGVtbWFJbmZvWzJdID0gd29yZGZvcm0uCisJCQljb250YWluc1NwZWMgPSBMZW1tYUluZm8uaXNXZlNwZWNpYWxDYXNlKGxlbW1hSW5mb1syXSk7CisJCQkvLyBzdG9yZSBpbnRvIERCOgorCQkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoc3RtdFByZXAsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQllbHNlCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3Moc3RtdCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCQorCQkJaWYoIHJldCAhPSAwICkKKwkJCQl7CisJCQkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHN0b3JlIGxlbW1hICclcycgaW50byBEQiFcbiIsIGZ1bmMsIGxpbmUpOworCQkJCW5FcnJvcnMrKzsgCisJCQkJfQorCQkJfSAvLyB3aGlsZQorCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgR2xlbW0gbGVtbWF0YStpbmZvcyBmcm9tIGZpbGUhIEV4aXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIC0xOyAKKwkJfQkKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgCisJCQkJY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgCisJCQkJc3RtdC5jbG9zZSgpOworCQkJaWYoIHN0bXRQcmVwICE9IG51bGwgKSAKKwkJCQlzdG10UHJlcC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gbkVycm9yczsgLy8gMD1PSywgPjAgPSBuby4gb2YgZXJyb3JzLgorCX0gLy8gd3JpdGVEQkxlbW1hdGEKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQ6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gcnVsZXMgaW50byBEZXJieSBEQi4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgaXMgdGhlIHZlcnNpb24gd2l0aCBhIFByZXBhcmVkUXVlcnkuCisJICogUGFyYW1ldGVyczoKKwkgKiBzcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTcuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoCisJCQlQcmVwYXJlZFN0YXRlbWVudCBzdG10LCAKKwkJCVN0cmluZyBsZW1tYSwgCisJCQlTdHJpbmcgd2YsIAorCQkJU3RyaW5nIGRlY29tcG9zaXRpb24sIAorCQkJYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQiOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCWJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICAKKwkvLyBmb3IgbG9naW5nIG9ubHk6CisJc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworICAgIFN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKyAgICAvLyBub3cgaW5zZXJ0IG5ldyB2YWx1ZXMgaW50byBQcmVwYXJlZFN0YXRlbWVudDoKKyAgICB0cnkgeworICAgIAlzdG10LnNldFN0cmluZyggMSwgbGVtbWEpOworICAgICAgICBzdG10LnNldFN0cmluZyggMiwgd2YpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oMywgcHJvcDEpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNCwgcHJvcDIpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNSwgc3BlYyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByZXBhcmVkIHN0bXQgPSAnJXMnLlxuIiwgIGZ1bmMsIHN0bXQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUxKSB7CisJCVN5c3RlbS5lcnIucHJpbnRmKAkiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSclYicgcHJvcDI9JyViJyBzcGVjPSclYichXG4iLCAgCisJCQkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKyAgICAKKyAgICB0cnkgeworCQkvLyBleGVjdXRlIHRoZSBmaWxsZWQgcHJlcGFyZWQgc3RhdGVtZW50OgorCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDE7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisgICAgCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZAorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3M6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gaW50byBEZXJieSBEQi4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGNvbnRhaW5zU3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDEwLjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zKFN0YXRlbWVudCBzdG10LCBTdHJpbmcgbGVtbWEsIFN0cmluZyB3ZiwgU3RyaW5nIGRlY29tcG9zaXRpb24sIGJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zIjsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlCb29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworICAgIAorICAgIFN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKwl0cnkgeworCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKHNxbEluc2VydCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDE7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYURhdGEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBmcm9tIHRoZSBHbGVtbURCLgorCSAqIElucHV0OiBsZW1tYSArIEdMRU1NX09QVFNfeHh4IChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWFEYXRhKExlbW1hSW5mbyBsZW1tYUluZm8pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYURhdGEiOworCisJdHJ5IHsKKwkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJbGVtbWFJbmZvLmNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCWxlbW1hSW5mby5zdG10ID0gbGVtbWFJbmZvLmNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJaW50IHIgPSByZWFkREJMZW1tYShsZW1tYUluZm8uc3RtdCwgbGVtbWFJbmZvKTsKKwkJCQorCQlpZiggciAhPSAwICkKKwkJCXsKKwkJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBnZXQgZGF0YSBmb3IgbGVtbWE9JyVzJyBvcHRpb25zPSclcychXG4iLCAKKwkJCQkJZnVuYywgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCQkJcmV0dXJuIDE7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBsZW1tYUluZm8uY29uID09IG51bGwgKQorCQkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYURhdGEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBieSBhY2Nlc3NpbmcgdGhlIEdsZW1tREIuCisJICogSW5wdXQgOiBsZW1tYSArIHByb3AxKzIgKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqIE91dHB1dDogCisJICogIC0gY29udGFpbnMgYSBSZXN1bHRTZXQgZm9yIGZldGNoaW5nIHRoZSB3b3JkZm9ybXMuCisJICogCSAgVGhpcyBSZXN1bHRTZXQgd2lsbCBoYXZlIGJlIGJlIGNsb3NlZCB3aXRoIExlbW1hSW5mby5jbG9zZSgpLgorCSAqIAkgIFRoZSBuby4gb2YgZm91bmQgd29yZGZvcm1zIGlzIG5vdCBrbm93biB0aWxsIHdlCisJICogCSAgZmV0Y2ggYWxsIG9mIHRoZW0gZnJvbSBSZXN1bHRTZXQhIAorCSAqIAktIGR1ZSB0byBTRUxFQ1QgRElTVElOQ1Qgb25seSB1bmlxIHdmIGFyZSByZXR1cm5lZC4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWEoU3RhdGVtZW50IHN0bXQsIExlbW1hSW5mbyBsZW1tYUluZm8pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYSI7CisJU3RyaW5nCisJCXNxbDsKKwkJCisJc3FsID0gU3RyaW5nLmZvcm1hdCgiU0VMRUNUIERJU1RJTkNUIHdmIGZyb20gJXMgV0hFUkUgbGVtbWE9JyVzJyAlcyAlcyAlcyIsIAorCQkJZGJUYWJsZSwKKwkJCWxlbW1hSW5mby5sZW1tYSwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIkFORCBwcm9wMT0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICJBTkQgcHJvcDE9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIkFORCBwcm9wMj0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICJBTkQgcHJvcDI9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAxID8gIkFORCBzcGVjPSd0cnVlJyIgICA6IAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiQU5EIHNwZWM9J2ZhbHNlJyIgIDogIiIpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCBmdW5jLCBsZW1tYUluZm8ucHJvcDEsIGxlbW1hSW5mby5wcm9wMiwgbGVtbWFJbmZvLnNwZWMpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbCA9ICclcycuXG4iLCBmdW5jLCBzcWwpOworCisJdHJ5IHsKKwkJbGVtbWFJbmZvLnJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGVuIGV4ZWN1dGluZyBzcWw9JyVzJyFcbiIsIGZ1bmMsIHNxbCk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisJZmluYWxseSB7CisJCS8vIGFsbCBzcWwgc3R1ZmYgYXJlIGNsb3NlZCBvdXRzaWRlIHRoaXMgZnVuY3Rpb24sIHNvIGRvbid0IGNsb3NlIHRoZW0gaGVyZSEKKwkJfQkKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zCisJICogUmV0dXJucyBHZW5lcmFsIEluZm9zIGFib3V0IHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiSW5mb3MoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWRiSW5mbyA9IHJlYWREYkxlbW1hdGFJbmZvcyhzdG10KTsKKwkJCQorCQlpZiggZGJJbmZvID09IG51bGwgKQorCQkJeworCQkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHJlYWQgR2VuZXJhbCBJbmZvcyBmcm9tIEdsZW1tIERhdGFiYXNlIVxuIiwgZnVuYyk7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIG51bGw7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgc3RtdC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBtYXkgYmUgbnVsbC4KKwkJCisJfSAvLyByZWFkRGJJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkxlbW1hdGFJbmZvczoKKwkgKiByZWFkcyBhbmQgcmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjb250ZW50IAorCSAqIG9mIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiBSZXR1cm5zIDA9T0sgb3IgZXJyb3IgY29kZSA+IDAuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJMZW1tYXRhSW5mb3MoU3RhdGVtZW50IHN0bXQpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInJlYWREYkxlbW1hSW5mb3MiOworCVN0cmluZ1tdCisJCXNxbCA9IHsJIlNFTEVDVCBDT1VOVChkaXN0aW5jdCBsZW1tYSkgZnJvbSAiICsgZGJUYWJsZSAsCS8vIGNvdW50cyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YS4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUsCQkJCQkvLyBjb3VudHMgdG90YWwgbm8uIG9mIHN0b3JlZCB3b3JkZm9ybXMuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj10cnVlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj10cnVlIn07CisJUmVzdWx0U2V0CisJCXJlcyA9IG51bGw7IAorCWludFtdCisJCW5Db3VudHMgPSBuZXcgaW50W3NxbC5sZW5ndGhdOworCWludAkJCisJCWkgPSAwLCAKKwkJbkRpc3RMZW1tYXRhID0gLTEsCS8vIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhIGluIERCLgorCQluV2ZzCQkgPSAtMTsJLy8gbm8uIG9mIHdvcmRmb3JtcyBpbiBEQi4KKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGV4dHJhY3RpbmcgYWdyZWdhdGVkIGluZm9zIGFib3V0IERhdGFiYXNlIGNvbnRlbnRzLi4uXG4iLCBmdW5jKTsKKwkKKwlkYkluZm8gPSBuZXcgR2xlbW1EQkluZm8oKTsKKworCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCXRyeSB7CisJCWZvcihpPTA7IGk8c3FsLmxlbmd0aDsgaSsrKQorCQkJeworCQkJcmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsW2ldKTsKKwkJCWlmKCByZXMubmV4dCgpICkKKwkJCQlkYkluZm8uY291bnRzW2ldID0gcmVzLmdldEludCgxKTsgLy8gY291bnQgaXMgaW4gY29sdW1uIDEuCisJCQllbHNlCisJCQkJeworCQkJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBleHRyYWN0IGNvdW50IGZyb20gJyVzJyFcbiIsIGZ1bmMsIHNxbFtpXSk7CisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IC0xOworCQkJCX0KKwkJCX0KKyAgICAgICAKKyAgICAgICAgfQorICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgIAl7CisgICAJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IHNxbD0nJXMnIGZhaWxlZCFcbiIsIGZ1bmMsIHNxbFtpXSk7CisgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgCX0KKwlmaW5hbGx5IHsKKwkJdHJ5IHsKKwkJCXJlcy5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gT0sKKwl9IC8vIHJlYWREYkxlbW1hdGFJbmZvcworCQorCS8qKioqKioqKioqKioqKioqKioqKiBUZXN0IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQorCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvc190ZXN0CisJICogVGhpcyBpcyBkZWJ1ZyBjb2RlIHdyaXR0ZW4gdG8gdGVzdCBpZiB3ZSBjYW4gYWNjZXNzIHRoZSBEZXJieQorCSAqIERhdGFiYXNlIGZyb20gYW4gZXh0ZXJuYWwgSmF2YSBQcm9ncmFtbS4KKwkgKiAwOC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgcmVhZERiSW5mb3NfdGVzdCgpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJU3RyaW5nCisJCWluc2VydFN0bXQgPSAiIjsKKwkKKwkvLyBDb25uZWN0IHRvIERlcmJ5IGRhdGFiYXNlOgorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCQorCQkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwkJdHJ5CisJCQl7CisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIAorICAgICAgICAgICAgCXNxbCA9ICJTRUxFQ1QgKiBGUk9NICIgKyBkYlRhYmxlOworICAgICAgICAgICAgUmVzdWx0U2V0IAorICAgICAgICAgICAgCXJlc3VsdCA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CisgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiB0YWJsZSAnJXMnOlxuIiwgIGZ1bmMsIGRiVGFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAocmVzdWx0Lm5leHQoKSkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRmKCInJXMnIDogJyVzJyA6ICclcycgOiAnJXMnIC5cbiIsIHJlc3VsdC5nZXRTdHJpbmcoMSksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDIpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygzKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoNCkpOworICAgICAgICAJCWluc2VydFN0bXQgPSBpbnNlcnRTdG10ICsgIjxwPiIgKyByZXN1bHQuZ2V0U3RyaW5nKDEpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDIpICsgIiA6ICIgKworICAgICAgICAgICAgICAgIAkJICAgICByZXN1bHQuZ2V0U3RyaW5nKDMpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDQpICsgIjwvcD4iOworICAgICAgICAgICAgCX0KKwkJCX0KKwkgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgICAgIAl7CisJCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBpbnNlcnRTdG10PSclcycgZmFpbGVkIS5cbiIsIGZ1bmMsIHN0bXQpOworICAgICAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgY29uLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGluZyAnJXMgZmFpbGVkIVxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCXJldHVybiAxOworCQl9CisJCisJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCXRyeSB7CisJCWNvbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCQorCX0gLy8gcmVhZERiSW5mb3NfdGVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIGltcG9ydEdsZW1tTGVtYXRhX3Rlc3QKKwkgKiBUZXN0IFZlcnNpb24uCisJICogMTIuMTIuMTkvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0KFN0cmluZyBmbikKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QiOworCUlucHV0U3RyZWFtIAorCQlpbjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbjIgPSBudWxsOworCVN0cmluZworCQlsaW5lOworCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJcjsKKwkKKwkvKgorCSAqIFJlYWQgTGVtbWF0YSArIEluZm8gZnJvbSBmaWxlOiAKKwkgKi8KKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJCisJdHJ5IHsKKwkJLy9pbiA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKCBuZXcgRmlsZUlucHV0U3RyZWFtKGZuKSApOworCQlpbjIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCXdoaWxlKCAobGluZSA9IGluMi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoID09IDMgKQorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogSW1wb3J0OiBsZW09JyVzJyBEZWNvbXA9JyVzJyBXZj0nJXMnLlxuIiwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMV0sIGxlbW1hSW5mb1syXSk7CisJCQllbHNlCisJCQkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiBpbXBvcnRHbGVtbUxhbWF0YTogJyVzJyBoYXMgJWQgY29tcG9uZW50cyFcbiIsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJfQorCQl9IAorCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IG9wZW4gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJcmV0dXJuIDE7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKworCXRyeSB7CisJCWluMi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQorCS8qIENoZWNrIGNvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJICovIAorCXIgPSByZWFkRGJJbmZvc190ZXN0KCk7CisJaWYoIHIgIT0gMCApCisJCXJldHVybiByOworCQkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2FhLzcwNmNhODdkODQyYjAwMWMxYzQxY2U1NTllYTVlMTZiIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9hYS83MDZjYTg3ZDg0MmIwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTdjNzU1Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9hYS83MDZjYTg3ZDg0MmIwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpAQCAtMCwwICsxLDcwMiBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNi4xMC4yMSI7IC8vIjE3LjA2LjIwIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjEiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJCVN0cmluZworCQkJc3RhdHVzOworCQlVdGlscworCQkJdSA9IG5ldyBVdGlscygpOworCQlQcm9wZXJ0aWVzCisJCQlwcm9wczsKKwkJCisJCS8vIHJlYWQgdGVzdAorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCS8vSHR0cFNlcnZsZXRDb250ZXh0CisJCQorCQkvLyBodHRwU2VydmxldFJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW52KTsKKwkJSW5wdXRTdHJlYW0KKwkJCWluUHJvcCA9IEdsZW1tU2VydmljZXMuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKCJHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiKTsKKwkJCisJCXRyeSB7CisJCQlwcm9wcy5sb2FkKGluUHJvcCk7CisJCQlTZXQ8U3RyaW5nPgorCQkJCXNldFByb3AgPSBwcm9wcy5zdHJpbmdQcm9wZXJ0eU5hbWVzKCk7CisJCQl9IAorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGxvYWQgcHJvcHMgJ0dsZW1tU2VydmljZXMucHJvcGVydGllcychIiwgIGZ1bmMpOworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQkKKwkJLy8gZW5kIG9mIHJlYWQgdGVzdAorCQkKKwkJLy8gdGVzdAorCQkvKgorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCQorCQkgKiBwcm9wcy5zZXRQcm9wZXJ0eSgicCIsICJ0ZXN0Iik7CisJCSAqCisJCUZpbGVPdXRwdXRTdHJlYW0gb3V0OworCQl0cnkgeworCQkJb3V0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oImdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOworCQkJcHJvcHMuc3RvcmUob3V0LCAgInRlc3QgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIik7CisJCQl9IAorCQljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfTsKKwkJKi8KKwkJCisJCS8vIGVuZCBvdGVzdAorCQkKKwkJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiQVBJOiAlczogL2luZGV4L3N0YXR1cy8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCisJCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCQlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIFBPU1Q6IC9pbmRleC9hZGQvOiB0ZXh0L3BsYWluCisJICogYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UuCisJICogVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQKKwkgKiBpbnRvIHRoZSBkYXRhYmFzZS4KKwkgKiBJbnB1dDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICovCisJQFBhdGgoImFkZCIpIEBQT1NUIEBDb25zdW1lcygidGV4dC9wbGFpbiIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBpbXBvcnRMZW1tYURhdGEoU3RyaW5nIGxpc3QpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSBhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCQorCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvYWRkLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZu+/vWhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCX0KKworCS8qIHZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIHZpZXdEQkluZm8KKworCisJLyogdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgLSBTdGF0dXM6IDxpPldvcmsgaW4gcHJvZ3Jlc3MuLi4hPC9pPik8L2g0PlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggIW9wdGlvbnMuZXF1YWxzKCJ1bmRlZiIpKQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMS9wcm9wMi9zcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogR2xlbW1TZXJ2aWNlcyAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uRGF0ZSwgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCS8vU3lzdGVtLm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2FiLzcwNDRkOGI2NWQzZTAwMWMxMDM1YzFlYWYzOGFmNTkwIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9hYi83MDQ0ZDhiNjVkM2UwMDFjMTAzNWMxZWFmMzhhZjU5MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGExNTU3Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9hYi83MDQ0ZDhiNjVkM2UwMDFjMTAzNWMxZWFmMzhhZjU5MApAQCAtMCwwICsxLDgxMiBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnNxbC5Db25uZWN0aW9uOworaW1wb3J0IGphdmEuc3FsLkRyaXZlck1hbmFnZXI7CitpbXBvcnQgamF2YS5zcWwuUHJlcGFyZWRTdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS5zcWwuUmVzdWx0U2V0OworaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5TdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworcHVibGljIGNsYXNzIEdsZW1tREIKKworeworCXN0YXRpYyBwdWJsaWMgU3RyaW5nIGRiVGFibGUgCT0gIkdsZW1tTGVtbWF0YSI7CisJc3RhdGljIFN0cmluZyBkYkxlbW1hIAkJIAk9ICJsZW1tYSI7CisJc3RhdGljIFN0cmluZyBkYldmCSAJCQk9ICJ3ZiI7CisJc3RhdGljIFN0cmluZyBkYlByb3AxIAkJCT0gInByb3AxIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDIgCQkJPSAicHJvcDIiOworCisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChvdmVyd3JpdHRlbiBieSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCXByaXZhdGUgc3RhdGljIFN0cmluZyBmbmFtZURCID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNlcnZlckhvc3QgPSAiLy9sb2NhbGhvc3Q6MTUyNy8iOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAoZmluYWwgYXNzaWdubWVudHMpOgorCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckVtYiA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuRW1iZWRkZWREcml2ZXIiOworCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckNsaWVudCA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50RHJpdmVyIjsKKworCWZpbmFsIHN0YXRpYyBib29sZWFuCisJCXVzZVByZXBhcmVkU3RtdCA9IHRydWU7IC8vIDE9dXNlIFByZXBhcmVkU3RhdGVtZW50IGFuZCBub3QgU3RhdGVtZW50LgorCQorCS8vIHZhbHVlcyB0byBiZSBpbnNlcnRlZDogbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMuCisJc3RhdGljIFN0cmluZyBpbnNlcnRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICgnJXMnLCAnJXMnLCAnJXMnLCAnJXMnLCAnJXMnKSI7CisJc3RhdGljIFN0cmluZyBpbnNlcnRQcmVwYXJlZFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKD8sID8sID8sID8sID8pIjsKKwkKKwkvLyBDb25zdGFudHMgb2YgdGFibGUgR2xlbW1MZW1tYXRhOgorCXN0YXRpYyBmaW5hbCBpbnQgbWF4TGVtbWFTaXplCT0gNjQ7IAkvLyBtYXguIG5vLiBvZiBjaGFycywgYXMgZGVjbGFyZWQgaW4gdGFibGUgR2xlbW1MZW1tYXRhLgorCXN0YXRpYyBmaW5hbCBpbnQgbWF4V2ZTaXplCQk9IDY0OwkvLyBtYXguIG5vLiBvZiBjaGFycywgYXMgZGVjbGFyZWQgaW4gdGFibGUgR2xlbW1MZW1tYXRhLgorCQorCS8qIHZhcmlhYmxlcyAqLworCXN0YXRpYyBpbnQgbkV4Y2VwdFN0bXQJCQk9IDA7CS8vIGNvdW50IG5vLiBvZiBleGNlcHRpb25zIGZvciBwcmVwYXJlZFN0bXQuCisJc3RhdGljIGludCBuRXhjZXB0SW5zZXJ0CQk9IDA7CS8vIGNvdW50IG5vLiBvZiBleGNlcHRpb25zIGZvciBJbnNlcnRzLgorCQorCS8qCisJICogc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJICogCisJICogQXJndW1lbnRzOgorCSAqIHByb3BzCTogUHJvcGVydGllcyBsb2FkZWQgYnkgdGhlIEdsZW1tU2VydmljZXMuCisJICogTm90ZXM6CisJICogLSB0aGlzIGZ1bmN0aW9uIGxvYWRzIG9ubHkgdGhvc2UgQ29uc3RhbnRzIG5lZWRlZCBpbiB0aGlzIGNsYXNzLgorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcwlwcm9wcykKKwkKKwl7CisJZm5hbWVEQgkJIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgCSIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlzZXJ2ZXJIb3N0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJzZXJ2ZXJIb3N0IiwJIi8vbG9jYWxob3N0OjE1MjcvIik7CisJZGVyYnlEQlVSTCAJCT0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCQkJCisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKiAgICBjaGVja0RlcmJ5Q29ubmVjdGlvbjoKKwkgKiAKKwkgKiBjaGVjayBpZiBEZXJieSBOZXR3b3JrIFNlcnZlciBpcyBhdmFpbGFibGUuCisJICogUmV0dXJuczogMCAoPU9LKSBvciAtMSAob24gZXJyb3IpLgorCSAqIDA1LjExLjIxL0ZCCisJICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgY2hlY2tEZXJieUNvbm5lY3Rpb24oKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAiY2hlY2tEZXJieUNvbm5lY3Rpb24iOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlLAorCS8vIHNldCBBdXRvY29tbWl0ID0gZmFsc2UgdG8gYWNjZWxlcmF0ZSBpbnNlcnRpb25zOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyB0byAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IAorCQl7IAorCQl0cnkgeyAvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyBjaGVja19EZXJieUNvbm5lY3Rpb24KKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCQkJCQlpbXBvcnRHbGVtbUxlbWF0YQorCSAqIFBhcmFtZXRlcnM6CisJICogZm4JCSA6IGFic29sdXRlIGZpbGUgbmFtZSBvZiBHTEVNTSBvdXRwdXQgW0lTTzg4NTktMV0gZXhwZWN0ZWQsIG5vdCBVVEYtOCEKKwkgKiBwcm9wcwkgOiBQcm9wZXJ0aWVzIHZvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgdG8gc2V0IGNvbnN0YW50cyBuZWVkZWQKKwkgKiAJCQkgICBpbiB0aGlzIGNsYXNzLgorCSAqIGRicGF0aAkgOiBsb2NhdGlvbiArIG5hbWUgb2YgZGF0YWJhc2Ugd2hlcmUgdG8gc3RvcmUgbGVtbWF0YSt3ZnMuCisJICogUmV0dXJucwkgOiAwPU9LLCAtMTogZ2VuZXJhbCBlcnJvcjsgPiAwIDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAKKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIGR5bmFtaWNhbGx5IGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqIDA0LjExLjIxL0ZCIGRicGF0aC4KKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YShTdHJpbmcgZm4sIFByb3BlcnRpZXMgcHJvcHMsIGZpbmFsIFN0cmluZyBkYnBhdGgpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YSI7CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4gPSBudWxsOworCWludAorCQluRXJyb3JzOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyB3aGVuIGluZGV4aW5nIGRhdGEgaW50byB0aGUgZGF0YWJhc2UsIHNlbGVjdCB0aGUgc3VibWl0dGVkIGRicGF0aCwKKwkvLyAobm90IHRoZSBvbmUgc3RvcmVkIGluIHRoZSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCWRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGRicGF0aDsKKwkKKwkvLyBvcGVuIHJlYWRlciBvbiBHbGVtbSBMZW1tYXRhOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCWluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCQorCQluRXJyb3JzID0gd3JpdGVEQkxlbW1hdGEoaW4pOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBmcm9tICclcychXG4iLCBmdW5jLCBmbik7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCisJLy8gY2xvc2UgUmVhZGVyOgorCXRyeSB7CisJCWluLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJbkVycm9ycyA9IC0xOworCQl9CisJCisJaWYoIG5FcnJvcnMgPT0gLTEgKQorCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IFNRTCBlcnJvciB3aGVuIGNyZWF0aW5nIFNRTCBzdGF0ZW1lbnQhXG4iLCBmdW5jKTsKKwllbHNlIGlmKCBuRXJyb3JzID09IC0yICkKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGVycm9yIHRvIERlcmJ5IFNlcnZlciFcbiIsIGZ1bmMpOworCWVsc2UgaWYoIG5FcnJvcnMgPT0gMCApCisgCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydCBkb25lIHN1Y2Nlc3NmdWxseS5cbiIsIGZ1bmMpOworIAllbHNlCisgCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydDogJWQgRXJyb3JzIVxuIiwgZnVuYywgbkVycm9ycyk7CisgCQorCXJldHVybiBuRXJyb3JzOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhCisJCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAorCSAqICAgICAgICAgICAgICAgICAgICAgICB3cml0ZURCTGVtbWF0YSgpCisJICogICAgICAgICAgICAgICAgICAgICAgIAorCSAqIHN0b3JlcyBsaXN0IG9mIGxlbW1hdGEgKyBpbmZvcyBpbnRvIERlcmJ5IGRiLgorCSAqIEZpbGUgZm9ybWF0OiAiTGVtbWEgRGVjb21wb3NpdGlvbiBXZiIsCisJICogICAgICAgICAgICAgIGUuZy46ICJIw6R1c2VyICstIEhhdXMiLgorCSAqIFJldHVybnM6IDAgPSBPSyBvciAKKwkgKiAJCQktMTogU1FMIGluc2VydCBlcnJvciwgb3IKKwkgKiAJCQktMjogY29ubmVjdGlvbiBlcnJvciB0byBEZXJieSBTZXJ2ZXIsIG9yCisJICogCQkgICA+IDA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogMDkuMDEuMjAvRkIKKwkgKiAwNC4xMS4yMS9GQiB0dXJuIGF1dG9jb21taXQgb2ZmIHRvIGFjY2VsZXJhdGUgaHVnZSBhbW91bnQgb2YgaW5zZXJ0aW9ucy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hdGEoQnVmZmVyZWRSZWFkZXIgaW4pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWF0YSI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlQcmVwYXJlZFN0YXRlbWVudAorCQlzdG10UHJlcCA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgCSA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CQorCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCW5JbnNlcnRlZCA9IDAsCS8vIG5vLiBvZiBsZW1tYS93ZiBwYWlycyBpbXBvcnRlZC4KKwkJcmV0ID0gMDsgLy8gT0suCisJYm9vbGVhbgorCQljb250YWluc1NwZWM7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlLAorCS8vIHNldCBBdXRvY29tbWl0ID0gZmFsc2UgdG8gYWNjZWxlcmF0ZSBpbnNlcnRpb25zOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQljb24uc2V0QXV0b0NvbW1pdChmYWxzZSk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkIChhdXRvQ29tbWl0PW9mZikuXG4iLCBmdW5jKTsKKwkJCisJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJc3RtdFByZXAgPSBjb24ucHJlcGFyZVN0YXRlbWVudChpbnNlcnRQcmVwYXJlZFF1ZXJ5KTsKKwkJZWxzZQorCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKworCQl3aGlsZSggKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggIT0gMyApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogJyVzJyBoYXMgJWQgY29tcG9uZW50cyEgRXhwZWN0ZWQgPSAzISBDYW5ub3QgYmUgc3RvcmVkIVxuIiwgZnVuYywgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQkJbkVycm9ycysrOworCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQorCQkJLy8gR2V0IEluZm8sIGlmIHdvcmRmb3JtIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSAnLScsIGludGVycHVuY3Rpb24gZXRjLjoKKwkJCS8vIGxlbW1hSW5mb1syXSA9IHdvcmRmb3JtLgorCQkJY29udGFpbnNTcGVjID0gTGVtbWFJbmZvLmlzV2ZTcGVjaWFsQ2FzZShsZW1tYUluZm9bMl0pOworCQkJLy8gc3RvcmUgaW50byBEQjoKKwkJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKHN0bXRQcmVwLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJZWxzZQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zKHN0bXQsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQkKKwkJCWlmKCByZXQgIT0gMCApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHN0b3JlIGxlbW1hICclcycgaW50byBEQiEgKHJldD0lZClcbiIsIGZ1bmMsIGxpbmUsIHJldCk7CisJCQkJbkVycm9ycysrOyAKKwkJCQl9CisJCQllbHNlCisJCQkJbkluc2VydGVkKys7CisJCQl9IC8vIHdoaWxlCisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIEdsZW1tIGxlbW1hdGEraW5mb3MgZnJvbSBmaWxlISBFeGl0IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMjsgCisJCX0JCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCWZpbmFsbHkgCisJCXsgCisJCXRyeSB7CisJCQkvLyBpbXBvcnRhbnQ6IG5vdyBjb21taXQsIGFzIGF1dG9Db21taXQgaXMgZGVhY3RpdmF0ZWQsCisJCQkvLyB0aGlzIGFsc28gcmVtb3ZlcyBkYXRhYmFzZSBsb2NrczoKKwkJCWNvbi5jb21taXQoKTsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29tbWl0IHN1Y2Nlc3NmdWxsLlxuIiwgZnVuYyk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29tbWl0IGF0IHRoZSBlbmQgb2YgdGhlIHdmcyBsaXN0IGZhaWxlZCFcbiIsIGZ1bmMpOworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQkKKwkJdHJ5IHsgLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQkJaWYoIGNvbiAhPSBudWxsICkgCisJCQkJY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgCisJCQkJc3RtdC5jbG9zZSgpOworCQkJaWYoIHN0bXRQcmVwICE9IG51bGwgKSAKKwkJCQlzdG10UHJlcC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJJbmZvIDogJXM6IG5vLiBvZiBsZW1tYXRhL3dmIHBhaXJzIGluc2VydGVkID0gJWQuXG4iLCBmdW5jLCBuSW5zZXJ0ZWQpOworCQorCXJldHVybiBuRXJyb3JzOyAvLyAwPU9LLCA+MCA9IG5vLiBvZiBlcnJvcnMuCisJfSAvLyB3cml0ZURCTGVtbWF0YQorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZDoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBydWxlcyBpbnRvIERlcmJ5IERCLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBpcyB0aGUgdmVyc2lvbiB3aXRoIGEgUHJlcGFyZWRRdWVyeS4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIHNwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxNy4wMS4yMC9GQgorCSAqIDA1LjEuMjEvRkIgcmVqZWN0IGxlbW1hL3dmID4gNjQgY2hhcnMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKAorCQkJUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCwgCisJCQlTdHJpbmcgbGVtbWEsIAorCQkJU3RyaW5nIHdmLCAKKwkJCVN0cmluZyBkZWNvbXBvc2l0aW9uLCAKKwkJCWJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkIjsKKwlmaW5hbCBib29sZWFuCisJCWJMb2cgPSBmYWxzZTsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlib29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwkvLyBjaGVjayBzaXplIG9mIHdmIGFuZCBsZW1tYSBhZ2FpbnN0IGZpZWxkIHNpemUgaW4gdGFibGUgR2xlbW1MZW1tYXRhOgorCWlmKCBsZW1tYS5sZW5ndGgoKSA+PSBHbGVtbURCLm1heExlbW1hU2l6ZSApIAorCQl7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogbGVtbWEgcmVqZWN0ZWQgKD4gJWQpOiAnJXMnIVxuIiwKKwkJCQlmdW5jLCBtYXhMZW1tYVNpemUsIGxlbW1hKTsKKwkJcmV0dXJuIDQ7CisJCX0KKwlpZiggd2YubGVuZ3RoKCkgPj0gR2xlbW1EQi5tYXhXZlNpemUgKSAKKwkJeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdmIHJlamVjdGVkICg+ICVkKTogJyVzJyFcbiIsCisJCQkJZnVuYywgbWF4V2ZTaXplLCB3Zik7CisJCXJldHVybiA1OworCQl9CisJIAorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICAKKwkvLyBmb3IgbG9naW5nIG9ubHk6CisJc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCWlmKCBiTG9nICkKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisgICAgLy8gbm93IGluc2VydCBuZXcgdmFsdWVzIGludG8gUHJlcGFyZWRTdGF0ZW1lbnQ6CisgICAgdHJ5IHsKKyAgICAJc3RtdC5zZXRTdHJpbmcoIDEsIGxlbW1hKTsKKyAgICAgICAgc3RtdC5zZXRTdHJpbmcoIDIsIHdmKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDMsIHByb3AxKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDQsIHByb3AyKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDUsIHNwZWMpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByZXBhcmVkIHN0bXQgPSAnJXMnLlxuIiwgIGZ1bmMsIHN0bXQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUxKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoCSJFcnJvcjogJXM6IHdoaWxlIGZpbGxpbmcgcHJlcGFyZWQgc3RhdGVtZW50IHdpdGggbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSclYicgcHJvcDI9JyViJyBzcGVjPSclYichXG4iLCAgCisJCQkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQlpZiggKytuRXhjZXB0U3RtdCA8PSAxICkKKwkJCWUxLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorICAgIAorICAgIHRyeSB7CisJCS8vIGV4ZWN1dGUgdGhlIGZpbGxlZCBwcmVwYXJlZCBzdGF0ZW1lbnQ6CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiEgKG49JWQpXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLCBuKTsKKyAJCQlyZXR1cm4gMjsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWlmKCArK25FeGNlcHRJbnNlcnQgPD0gMSApCisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMzsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvczoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBpbnRvIERlcmJ5IERCLgorCSAqIFBhcmFtZXRlcnM6CisJICogY29udGFpbnNTcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTAuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3MoU3RhdGVtZW50IHN0bXQsIFN0cmluZyBsZW1tYSwgU3RyaW5nIHdmLCBTdHJpbmcgZGVjb21wb3NpdGlvbiwgYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3MiOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCUJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICBzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgICAgCisgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisJdHJ5IHsKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZShzcWxJbnNlcnQpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDE7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hRGF0YQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGZyb20gdGhlIEdsZW1tREIuCisJICogSW5wdXQ6IGxlbW1hICsgR0xFTU1fT1BUU194eHggKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYURhdGEoTGVtbWFJbmZvIGxlbW1hSW5mbywgUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hRGF0YSI7CisKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlsZW1tYUluZm8uY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlsZW1tYUluZm8uc3RtdCA9IGxlbW1hSW5mby5jb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWludCByID0gcmVhZERCTGVtbWEobGVtbWFJbmZvLnN0bXQsIGxlbW1hSW5mbyk7CisJCQkKKwkJaWYoIHIgIT0gMCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBnZXQgZGF0YSBmb3IgbGVtbWE9JyVzJyBvcHRpb25zPSclcychXG4iLCAKKwkJCQkJZnVuYywgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCQkJcmV0dXJuIDE7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBsZW1tYUluZm8uY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWFEYXRhCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgYnkgYWNjZXNzaW5nIHRoZSBHbGVtbURCLgorCSAqIElucHV0IDogbGVtbWEgKyBwcm9wMSsyIChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiBPdXRwdXQ6IAorCSAqICAtIGNvbnRhaW5zIGEgUmVzdWx0U2V0IGZvciBmZXRjaGluZyB0aGUgd29yZGZvcm1zLgorCSAqIAkgIFRoaXMgUmVzdWx0U2V0IHdpbGwgaGF2ZSBiZSBiZSBjbG9zZWQgd2l0aCBMZW1tYUluZm8uY2xvc2UoKS4KKwkgKiAJICBUaGUgbm8uIG9mIGZvdW5kIHdvcmRmb3JtcyBpcyBub3Qga25vd24gdGlsbCB3ZQorCSAqIAkgIGZldGNoIGFsbCBvZiB0aGVtIGZyb20gUmVzdWx0U2V0ISAKKwkgKiAJLSBkdWUgdG8gU0VMRUNUIERJU1RJTkNUIG9ubHkgdW5pcSB3ZiBhcmUgcmV0dXJuZWQuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hKFN0YXRlbWVudCBzdG10LCBMZW1tYUluZm8gbGVtbWFJbmZvKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWEiOworCVN0cmluZworCQlzcWw7CisJCQorCXNxbCA9IFN0cmluZy5mb3JtYXQoIlNFTEVDVCBESVNUSU5DVCB3ZiBmcm9tICVzIFdIRVJFIGxlbW1hPSclcycgJXMgJXMgJXMiLCAKKwkJCWRiVGFibGUsCisJCQlsZW1tYUluZm8ubGVtbWEsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICJBTkQgcHJvcDE9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AxID09IDEgPyAiQU5EIHByb3AxPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICJBTkQgcHJvcDI9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AyID09IDEgPyAiQU5EIHByb3AyPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICJBTkQgc3BlYz0ndHJ1ZSciICAgOiAKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIkFORCBzcGVjPSdmYWxzZSciICA6ICIiKTsKKwkKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCBmdW5jLCBsZW1tYUluZm8ucHJvcDEsIGxlbW1hSW5mby5wcm9wMiwgbGVtbWFJbmZvLnNwZWMpOworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsID0gJyVzJy5cbiIsIGZ1bmMsIHNxbCk7CisKKwl0cnkgeworCQlsZW1tYUluZm8ucmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsJCisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hlbiBleGVjdXRpbmcgc3FsPSclcychXG4iLCBmdW5jLCBzcWwpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBhbGwgc3FsIHN0dWZmIGFyZSBjbG9zZWQgb3V0c2lkZSB0aGlzIGZ1bmN0aW9uLCBzbyBkb24ndCBjbG9zZSB0aGVtIGhlcmUhCisJCX0JCisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvcworCSAqIFJldHVybnMgR2VuZXJhbCBJbmZvcyBhYm91dCB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgcmVhZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkluZm9zKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlkYkluZm8gPSByZWFkRGJMZW1tYXRhSW5mb3Moc3RtdCk7CisJCQkKKwkJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHJlYWQgR2VuZXJhbCBJbmZvcyBmcm9tIEdsZW1tIERhdGFiYXNlIVxuIiwgZnVuYyk7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiBudWxsOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIGNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIHN0bXQuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gbWF5IGJlIG51bGwuCisJCQorCX0gLy8gcmVhZERiSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJMZW1tYXRhSW5mb3M6CisJICogcmVhZHMgYW5kIHJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY29udGVudCAKKwkgKiBvZiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogUmV0dXJucyAwPU9LIG9yIGVycm9yIGNvZGUgPiAwLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiTGVtbWF0YUluZm9zKFN0YXRlbWVudCBzdG10KQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJyZWFkRGJMZW1tYUluZm9zIjsKKwlTdHJpbmdbXQorCQlzcWwgPSB7CSJTRUxFQ1QgQ09VTlQoZGlzdGluY3QgbGVtbWEpIGZyb20gIiArIGRiVGFibGUgLAkvLyBjb3VudHMgbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlLAkJCQkJLy8gY291bnRzIHRvdGFsIG5vLiBvZiBzdG9yZWQgd29yZGZvcm1zLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9dHJ1ZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9dHJ1ZSJ9OworCVJlc3VsdFNldAorCQlyZXMgPSBudWxsOyAKKwlpbnRbXQorCQluQ291bnRzID0gbmV3IGludFtzcWwubGVuZ3RoXTsKKwlpbnQJCQorCQlpID0gMCwgCisJCW5EaXN0TGVtbWF0YSA9IC0xLAkvLyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YSBpbiBEQi4KKwkJbldmcwkJID0gLTE7CS8vIG5vLiBvZiB3b3JkZm9ybXMgaW4gREIuCisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGV4dHJhY3RpbmcgYWdyZWdhdGVkIGluZm9zIGFib3V0IERhdGFiYXNlIGNvbnRlbnRzLi4uXG4iLCBmdW5jKTsKKwkKKwlkYkluZm8gPSBuZXcgR2xlbW1EQkluZm8oKTsKKworCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCXRyeSB7CisJCWZvcihpPTA7IGk8c3FsLmxlbmd0aDsgaSsrKQorCQkJeworCQkJcmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsW2ldKTsKKwkJCWlmKCByZXMubmV4dCgpICkKKwkJCQlkYkluZm8uY291bnRzW2ldID0gcmVzLmdldEludCgxKTsgLy8gY291bnQgaXMgaW4gY29sdW1uIDEuCisJCQllbHNlCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGV4dHJhY3QgY291bnQgZnJvbSAnJXMnIVxuIiwgZnVuYywgc3FsW2ldKTsKKwkJCQlkYkluZm8uY291bnRzW2ldID0gLTE7CisJCQkJfQorCQkJfQorICAgICAgIAorICAgICAgICB9CisgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgCXsKKyAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBzcWw9JyVzJyBmYWlsZWQhXG4iLCBmdW5jLCBzcWxbaV0pOworICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgIHJldHVybiBudWxsOworICAgIAl9CisJZmluYWxseSB7CisJCXRyeSB7CisJCQlyZXMuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0KKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIE9LCisJfSAvLyByZWFkRGJMZW1tYXRhSW5mb3MKKwkKKwkvKioqKioqKioqKioqKioqKioqKiogVGVzdCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3NfdGVzdAorCSAqIFRoaXMgaXMgZGVidWcgY29kZSB3cml0dGVuIHRvIHRlc3QgaWYgd2UgY2FuIGFjY2VzcyB0aGUgRGVyYnkKKwkgKiBEYXRhYmFzZSBmcm9tIGFuIGV4dGVybmFsIEphdmEgUHJvZ3JhbW0uCisJICogMDguMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IHJlYWREYkluZm9zX3Rlc3QoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCVN0cmluZworCQlpbnNlcnRTdG10ID0gIiI7CisJCisJLy8gQ29ubmVjdCB0byBEZXJieSBkYXRhYmFzZToKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkJCisJCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCQl0cnkKKwkJCXsKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBTdHJpbmcgCisgICAgICAgICAgICAJc3FsID0gIlNFTEVDVCAqIEZST00gIiArIGRiVGFibGU7CisgICAgICAgICAgICBSZXN1bHRTZXQgCisgICAgICAgICAgICAJcmVzdWx0ID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsKKyAKKyAgICAgICAgICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogdGFibGUgJyVzJzpcbiIsICBmdW5jLCBkYlRhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKHJlc3VsdC5uZXh0KCkpIHsKKyAgICAgICAgICAgIAlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCInJXMnIDogJyVzJyA6ICclcycgOiAnJXMnIC5cbiIsIHJlc3VsdC5nZXRTdHJpbmcoMSksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDIpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygzKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoNCkpOworICAgICAgICAJCWluc2VydFN0bXQgPSBpbnNlcnRTdG10ICsgIjxwPiIgKyByZXN1bHQuZ2V0U3RyaW5nKDEpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDIpICsgIiA6ICIgKworICAgICAgICAgICAgICAgIAkJICAgICByZXN1bHQuZ2V0U3RyaW5nKDMpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDQpICsgIjwvcD4iOworICAgICAgICAgICAgCX0KKwkJCX0KKwkgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgICAgIAl7CisJICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGluc2VydFN0bXQ9JyVzJyBmYWlsZWQhLlxuIiwgZnVuYywgc3RtdCk7CisgICAgICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgICAgICBjb24uY2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3RpbmcgJyVzIGZhaWxlZCFcbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwl0cnkgeworCQljb24uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQkKKwl9IC8vIHJlYWREYkluZm9zX3Rlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiBpbXBvcnRHbGVtbUxlbWF0YV90ZXN0CisJICogVGVzdCBWZXJzaW9uLgorCSAqIDEyLjEyLjE5L0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdChTdHJpbmcgZm4pCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YV90ZXN0IjsKKwlJbnB1dFN0cmVhbSAKKwkJaW47CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4yID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCXI7CisJCisJLyoKKwkgKiBSZWFkIExlbW1hdGEgKyBJbmZvIGZyb20gZmlsZTogCisJICovCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJCisJdHJ5IHsKKwkJLy9pbiA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKCBuZXcgRmlsZUlucHV0U3RyZWFtKGZuKSApOworCQlpbjIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCXdoaWxlKCAobGluZSA9IGluMi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggPT0gMyApCisJCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IEltcG9ydDogbGVtPSclcycgRGVjb21wPSclcycgV2Y9JyVzJy5cbiIsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzFdLCBsZW1tYUluZm9bMl0pOworCQkJZWxzZQorCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiBpbXBvcnRHbGVtbUxhbWF0YTogJyVzJyBoYXMgJWQgY29tcG9uZW50cyFcbiIsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJfQorCQl9IAorCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgb3BlbiAnJXMnIVxuIiwgZnVuYywgZm4pOworCQlyZXR1cm4gMTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCisJdHJ5IHsKKwkJaW4yLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQl9CisJCisJLyogQ2hlY2sgY29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwkgKi8gCisJciA9IHJlYWREYkluZm9zX3Rlc3QoKTsKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIHI7CisJCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYWQvOTA4ZmQzNDU1NTNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2FkLzkwOGZkMzQ1NTUzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZTQyY2YKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2FkLzkwOGZkMzQ1NTUzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsNzIxIEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKK2ltcG9ydCBqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7CitpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAob3ZlcndyaXR0ZW4gYnkgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKGZpbmFsIGFzc2lnbm1lbnRzKToKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJFbWIgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIjsKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLyoKKwkgKiBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkgKiAKKwkgKiBBcmd1bWVudHM6CisJICogcHJvcHMJOiBQcm9wZXJ0aWVzIGxvYWRlZCBieSB0aGUgR2xlbW1TZXJ2aWNlcy4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgZnVuY3Rpb24gbG9hZHMgb25seSB0aG9zZSBDb25zdGFudHMgbmVlZGVkIGluIHRoaXMgY2xhc3MuCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzCXByb3BzKQorCQorCXsKKwlmbmFtZURCCQkgCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAJIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCXNlcnZlckhvc3QJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgInNlcnZlckhvc3QiLAkiLy9sb2NhbGhvc3Q6MTUyNy8iKTsKKwlkZXJieURCVVJMIAkJPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJCQkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIHdoZW4gaW5kZXhpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSwgc2VsZWN0IHRoZSBzdWJtaXR0ZWQgZGJwYXRoLAorCS8vIChub3QgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZGJwYXRoOworCQorCS8vIG9wZW4gcmVhZGVyIG9uIEdsZW1tIExlbW1hdGE6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJCisJCW5FcnJvcnMgPSB3cml0ZURCTGVtbWF0YShpbik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIGZyb20gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwkvLyBjbG9zZSBSZWFkZXI6CisJdHJ5IHsKKwkJaW4uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQluRXJyb3JzID0gLTE7CisJCX0KKwkKKyAJaWYoIG5FcnJvcnMgPT0gMCApCisgCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydCBkb25lIHN1Y2Nlc3NmdWxseS5cbiIsIGZ1bmMpOworIAllbHNlCisgCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydDogJWQgRXJyb3JzIVxuIiwgZnVuYywgbkVycm9ycyk7CisgCQorCXJldHVybiBuRXJyb3JzOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhCisJCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIHdyaXRlREJMZW1tYXRhKCkKKwkgKiBzdG9yZXMgbGlzdCBvZiBsZW1tYXRhICsgaW5mb3MgaW50byBEZXJieSBkYi4KKwkgKiBGaWxlIGZvcm1hdDogIkxlbW1hIERlY29tcG9zaXRpb24gV2YiLAorCSAqICAgICAgICAgICAgICBlLmcuOiAiSO+/vXVzZXIgKy0gSGF1cyIuCisJICogUmV0dXJuczogMCA9IE9LIG9yIC0xOiBnZW5lcmFsIGVycm9yIG9yID4gMDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAwOS4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hdGEoQnVmZmVyZWRSZWFkZXIgaW4pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWF0YSI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlQcmVwYXJlZFN0YXRlbWVudAorCQlzdG10UHJlcCA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgCSA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CQorCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCXJldCA9IDA7IC8vIE9LLgorCWJvb2xlYW4KKwkJY29udGFpbnNTcGVjOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKworCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCXN0bXRQcmVwID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0UHJlcGFyZWRRdWVyeSk7CisJCWVsc2UKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisKKwkJd2hpbGUoIChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoICE9IDMgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6ICclcycgaGFzICVkIGNvbXBvbmVudHMhIEV4cGVjdGVkID0gMyEgQ2Fubm90IGJlIHN0b3JlZCFcbiIsIGZ1bmMsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJCW5FcnJvcnMrKzsKKwkJCQljb250aW51ZTsKKwkJCQl9CisJCQkKKwkJCS8vIEdldCBJbmZvLCBpZiB3b3JkZm9ybSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgJy0nLCBpbnRlcnB1bmN0aW9uIGV0Yy46CisJCQkvLyBsZW1tYUluZm9bMl0gPSB3b3JkZm9ybS4KKwkJCWNvbnRhaW5zU3BlYyA9IExlbW1hSW5mby5pc1dmU3BlY2lhbENhc2UobGVtbWFJbmZvWzJdKTsKKwkJCS8vIHN0b3JlIGludG8gREI6CisJCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZChzdG10UHJlcCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvcyhzdG10LCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJCisJCQlpZiggcmV0ICE9IDAgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBzdG9yZSBsZW1tYSAnJXMnIGludG8gREIhXG4iLCBmdW5jLCBsaW5lKTsKKwkJCQluRXJyb3JzKys7IAorCQkJCX0KKwkJCX0gLy8gd2hpbGUKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgR2xlbW0gbGVtbWF0YStpbmZvcyBmcm9tIGZpbGUhIEV4aXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIC0xOyAKKwkJfQkKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIC0xOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIAorCQkJCXN0bXQuY2xvc2UoKTsKKwkJCWlmKCBzdG10UHJlcCAhPSBudWxsICkgCisJCQkJc3RtdFByZXAuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIG5FcnJvcnM7IC8vIDA9T0ssID4wID0gbm8uIG9mIGVycm9ycy4KKwl9IC8vIHdyaXRlREJMZW1tYXRhCisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIHJ1bGVzIGludG8gRGVyYnkgREIuCisJICogTm90ZXM6CisJICogLSB0aGlzIGlzIHRoZSB2ZXJzaW9uIHdpdGggYSBQcmVwYXJlZFF1ZXJ5LgorCSAqIFBhcmFtZXRlcnM6CisJICogc3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDE3LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKAorCQkJUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCwgCisJCQlTdHJpbmcgbGVtbWEsIAorCQkJU3RyaW5nIHdmLCAKKwkJCVN0cmluZyBkZWNvbXBvc2l0aW9uLCAKKwkJCWJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkIjsKKwlmaW5hbCBib29sZWFuCisJCWJMb2cgPSBmYWxzZTsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlib29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgCisJLy8gZm9yIGxvZ2luZyBvbmx5OgorCXNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwlpZiggYkxvZyApCisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorICAgIC8vIG5vdyBpbnNlcnQgbmV3IHZhbHVlcyBpbnRvIFByZXBhcmVkU3RhdGVtZW50OgorICAgIHRyeSB7CisgICAgCXN0bXQuc2V0U3RyaW5nKCAxLCBsZW1tYSk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKCAyLCB3Zik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbigzLCBwcm9wMSk7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig0LCBwcm9wMik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig1LCBzcGVjKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcmVwYXJlZCBzdG10ID0gJyVzJy5cbiIsICBmdW5jLCBzdG10LnRvU3RyaW5nKCkpOworICAgICAgICB9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlMSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKAkiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSclYicgcHJvcDI9JyViJyBzcGVjPSclYichXG4iLCAgCisJCQkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKyAgICAKKyAgICB0cnkgeworCQkvLyBleGVjdXRlIHRoZSBmaWxsZWQgcHJlcGFyZWQgc3RhdGVtZW50OgorCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9OworCQorICAgIAorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIGludG8gRGVyYnkgREIuCisJICogUGFyYW1ldGVyczoKKwkgKiBjb250YWluc1NwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxMC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvcyhTdGF0ZW1lbnQgc3RtdCwgU3RyaW5nIGxlbW1hLCBTdHJpbmcgd2YsIFN0cmluZyBkZWNvbXBvc2l0aW9uLCBib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvcyI7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJQm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIHNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAgICAKKyAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKwl0cnkgeworCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKHNxbEluc2VydCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWFEYXRhCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgZnJvbSB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dDogbGVtbWEgKyBHTEVNTV9PUFRTX3h4eCAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hRGF0YShMZW1tYUluZm8gbGVtbWFJbmZvLCBQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWFEYXRhIjsKKworCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWxlbW1hSW5mby5jb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCWxlbW1hSW5mby5zdG10ID0gbGVtbWFJbmZvLmNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJaW50IHIgPSByZWFkREJMZW1tYShsZW1tYUluZm8uc3RtdCwgbGVtbWFJbmZvKTsKKwkJCQorCQlpZiggciAhPSAwICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGdldCBkYXRhIGZvciBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyFcbiIsIAorCQkJCQlmdW5jLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGxlbW1hSW5mby5jb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYURhdGEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBieSBhY2Nlc3NpbmcgdGhlIEdsZW1tREIuCisJICogSW5wdXQgOiBsZW1tYSArIHByb3AxKzIgKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqIE91dHB1dDogCisJICogIC0gY29udGFpbnMgYSBSZXN1bHRTZXQgZm9yIGZldGNoaW5nIHRoZSB3b3JkZm9ybXMuCisJICogCSAgVGhpcyBSZXN1bHRTZXQgd2lsbCBoYXZlIGJlIGJlIGNsb3NlZCB3aXRoIExlbW1hSW5mby5jbG9zZSgpLgorCSAqIAkgIFRoZSBuby4gb2YgZm91bmQgd29yZGZvcm1zIGlzIG5vdCBrbm93biB0aWxsIHdlCisJICogCSAgZmV0Y2ggYWxsIG9mIHRoZW0gZnJvbSBSZXN1bHRTZXQhIAorCSAqIAktIGR1ZSB0byBTRUxFQ1QgRElTVElOQ1Qgb25seSB1bmlxIHdmIGFyZSByZXR1cm5lZC4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWEoU3RhdGVtZW50IHN0bXQsIExlbW1hSW5mbyBsZW1tYUluZm8pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYSI7CisJU3RyaW5nCisJCXNxbDsKKwkJCisJc3FsID0gU3RyaW5nLmZvcm1hdCgiU0VMRUNUIERJU1RJTkNUIHdmIGZyb20gJXMgV0hFUkUgbGVtbWE9JyVzJyAlcyAlcyAlcyIsIAorCQkJZGJUYWJsZSwKKwkJCWxlbW1hSW5mby5sZW1tYSwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIkFORCBwcm9wMT0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICJBTkQgcHJvcDE9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIkFORCBwcm9wMj0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICJBTkQgcHJvcDI9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAxID8gIkFORCBzcGVjPSd0cnVlJyIgICA6IAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiQU5EIHNwZWM9J2ZhbHNlJyIgIDogIiIpOworCQorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIGZ1bmMsIGxlbW1hSW5mby5wcm9wMSwgbGVtbWFJbmZvLnByb3AyLCBsZW1tYUluZm8uc3BlYyk7CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWwgPSAnJXMnLlxuIiwgZnVuYywgc3FsKTsKKworCXRyeSB7CisJCWxlbW1hSW5mby5yZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOwkKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGVuIGV4ZWN1dGluZyBzcWw9JyVzJyFcbiIsIGZ1bmMsIHNxbCk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisJZmluYWxseSB7CisJCS8vIGFsbCBzcWwgc3R1ZmYgYXJlIGNsb3NlZCBvdXRzaWRlIHRoaXMgZnVuY3Rpb24sIHNvIGRvbid0IGNsb3NlIHRoZW0gaGVyZSEKKwkJfQkKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zCisJICogUmV0dXJucyBHZW5lcmFsIEluZm9zIGFib3V0IHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiByZWFkIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiSW5mb3MoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWRiSW5mbyA9IHJlYWREYkxlbW1hdGFJbmZvcyhzdG10KTsKKwkJCQorCQlpZiggZGJJbmZvID09IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgcmVhZCBHZW5lcmFsIEluZm9zIGZyb20gR2xlbW0gRGF0YWJhc2UhXG4iLCBmdW5jKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIG51bGw7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgc3RtdC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBtYXkgYmUgbnVsbC4KKwkJCisJfSAvLyByZWFkRGJJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkxlbW1hdGFJbmZvczoKKwkgKiByZWFkcyBhbmQgcmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjb250ZW50IAorCSAqIG9mIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiBSZXR1cm5zIDA9T0sgb3IgZXJyb3IgY29kZSA+IDAuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJMZW1tYXRhSW5mb3MoU3RhdGVtZW50IHN0bXQpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInJlYWREYkxlbW1hSW5mb3MiOworCVN0cmluZ1tdCisJCXNxbCA9IHsJIlNFTEVDVCBDT1VOVChkaXN0aW5jdCBsZW1tYSkgZnJvbSAiICsgZGJUYWJsZSAsCS8vIGNvdW50cyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YS4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUsCQkJCQkvLyBjb3VudHMgdG90YWwgbm8uIG9mIHN0b3JlZCB3b3JkZm9ybXMuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj10cnVlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj10cnVlIn07CisJUmVzdWx0U2V0CisJCXJlcyA9IG51bGw7IAorCWludFtdCisJCW5Db3VudHMgPSBuZXcgaW50W3NxbC5sZW5ndGhdOworCWludAkJCisJCWkgPSAwLCAKKwkJbkRpc3RMZW1tYXRhID0gLTEsCS8vIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhIGluIERCLgorCQluV2ZzCQkgPSAtMTsJLy8gbm8uIG9mIHdvcmRmb3JtcyBpbiBEQi4KKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogZXh0cmFjdGluZyBhZ3JlZ2F0ZWQgaW5mb3MgYWJvdXQgRGF0YWJhc2UgY29udGVudHMuLi5cbiIsIGZ1bmMpOworCQorCWRiSW5mbyA9IG5ldyBHbGVtbURCSW5mbygpOworCisJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJdHJ5IHsKKwkJZm9yKGk9MDsgaTxzcWwubGVuZ3RoOyBpKyspCisJCQl7CisJCQlyZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWxbaV0pOworCQkJaWYoIHJlcy5uZXh0KCkgKQorCQkJCWRiSW5mby5jb3VudHNbaV0gPSByZXMuZ2V0SW50KDEpOyAvLyBjb3VudCBpcyBpbiBjb2x1bW4gMS4KKwkJCWVsc2UKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZXh0cmFjdCBjb3VudCBmcm9tICclcychXG4iLCBmdW5jLCBzcWxbaV0pOworCQkJCWRiSW5mby5jb3VudHNbaV0gPSAtMTsKKwkJCQl9CisJCQl9CisgICAgICAgCisgICAgICAgIH0KKyAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAJeworICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHNxbD0nJXMnIGZhaWxlZCFcbiIsIGZ1bmMsIHNxbFtpXSk7CisgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgCX0KKwlmaW5hbGx5IHsKKwkJdHJ5IHsKKwkJCXJlcy5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gT0sKKwl9IC8vIHJlYWREYkxlbW1hdGFJbmZvcworCQorCS8qKioqKioqKioqKioqKioqKioqKiBUZXN0IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQorCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvc190ZXN0CisJICogVGhpcyBpcyBkZWJ1ZyBjb2RlIHdyaXR0ZW4gdG8gdGVzdCBpZiB3ZSBjYW4gYWNjZXNzIHRoZSBEZXJieQorCSAqIERhdGFiYXNlIGZyb20gYW4gZXh0ZXJuYWwgSmF2YSBQcm9ncmFtbS4KKwkgKiAwOC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgcmVhZERiSW5mb3NfdGVzdCgpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJU3RyaW5nCisJCWluc2VydFN0bXQgPSAiIjsKKwkKKwkvLyBDb25uZWN0IHRvIERlcmJ5IGRhdGFiYXNlOgorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQkKKwkJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJCXRyeQorCQkJeworCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIFN0cmluZyAKKyAgICAgICAgICAgIAlzcWwgPSAiU0VMRUNUICogRlJPTSAiICsgZGJUYWJsZTsKKyAgICAgICAgICAgIFJlc3VsdFNldCAKKyAgICAgICAgICAgIAlyZXN1bHQgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOworIAorICAgICAgICAgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiB0YWJsZSAnJXMnOlxuIiwgIGZ1bmMsIGRiVGFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAocmVzdWx0Lm5leHQoKSkgeworICAgICAgICAgICAgCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIiclcycgOiAnJXMnIDogJyVzJyA6ICclcycgLlxuIiwgcmVzdWx0LmdldFN0cmluZygxKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMiksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDMpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZyg0KSk7CisgICAgICAgIAkJaW5zZXJ0U3RtdCA9IGluc2VydFN0bXQgKyAiPHA+IiArIHJlc3VsdC5nZXRTdHJpbmcoMSkgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoMikgKyAiIDogIiArCisgICAgICAgICAgICAgICAgCQkgICAgIHJlc3VsdC5nZXRTdHJpbmcoMykgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoNCkgKyAiPC9wPiI7CisgICAgICAgICAgICAJfQorCQkJfQorCSAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAgICAgCXsKKwkgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogaW5zZXJ0U3RtdD0nJXMnIGZhaWxlZCEuXG4iLCBmdW5jLCBzdG10KTsKKyAgICAgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIAl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGluZyAnJXMgZmFpbGVkIVxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCXJldHVybiAxOworCQl9CisJCisJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCXRyeSB7CisJCWNvbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCQorCX0gLy8gcmVhZERiSW5mb3NfdGVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIGltcG9ydEdsZW1tTGVtYXRhX3Rlc3QKKwkgKiBUZXN0IFZlcnNpb24uCisJICogMTIuMTIuMTkvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0KFN0cmluZyBmbikKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QiOworCUlucHV0U3RyZWFtIAorCQlpbjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbjIgPSBudWxsOworCVN0cmluZworCQlsaW5lOworCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJcjsKKwkKKwkvKgorCSAqIFJlYWQgTGVtbWF0YSArIEluZm8gZnJvbSBmaWxlOiAKKwkgKi8KKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQkKKwl0cnkgeworCQkvL2luID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oIG5ldyBGaWxlSW5wdXRTdHJlYW0oZm4pICk7CisJCWluMiA9IG5ldyBCdWZmZXJlZFJlYWRlciggbmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJd2hpbGUoIChsaW5lID0gaW4yLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCA9PSAzICkKKwkJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogSW1wb3J0OiBsZW09JyVzJyBEZWNvbXA9JyVzJyBXZj0nJXMnLlxuIiwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMV0sIGxlbW1hSW5mb1syXSk7CisJCQllbHNlCisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6IGltcG9ydEdsZW1tTGFtYXRhOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzIVxuIiwgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQl9CisJCX0gCisJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBvcGVuICclcychXG4iLCBmdW5jLCBmbik7CisJCXJldHVybiAxOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisKKwl0cnkgeworCQlpbjIuY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkKKwkvKiBDaGVjayBjb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCSAqLyAKKwlyID0gcmVhZERiSW5mb3NfdGVzdCgpOworCWlmKCByICE9IDAgKQorCQlyZXR1cm4gcjsKKwkJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdAorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9hZC9kMDU0OWYyZTkzMWEwMDFhMTliMjg3NWRlMDI3MmM2YyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYWQvZDA1NDlmMmU5MzFhMDAxYTE5YjI4NzVkZTAyNzJjNmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMwZTYwZQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYWQvZDA1NDlmMmU5MzFhMDAxYTE5YjI4NzVkZTAyNzJjNmMKQEAgLTAsMCArMSwzMSBAQAorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgCisJeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisJeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgPGdyb3VwSWQ+ZGUua29yYXAuc2VydmljZXM8L2dyb3VwSWQ+CisgIDxhcnRpZmFjdElkPkdsZW1tU2VydmljZXMyPC9hcnRpZmFjdElkPgorICA8dmVyc2lvbj4wLjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KKyAgPG5hbWU+R2xlbW1TZXJ2aWNlczwvbmFtZT4KKyAgPGRlc2NyaXB0aW9uPlJFU1RmdWxsIEdsZW1tU2VydmljZXMgZsO8ciBLb3JBUDwvZGVzY3JpcHRpb24+CisgIDxidWlsZD4KKyAgICA8c291cmNlRGlyZWN0b3J5PnNyYzwvc291cmNlRGlyZWN0b3J5PgorICAgIDxwbHVnaW5zPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tY29tcGlsZXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4zLjcuMDwvdmVyc2lvbj4KKyAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgPHNvdXJjZT4xLjg8L3NvdXJjZT4KKyAgICAgICAgICA8dGFyZ2V0PjEuODwvdGFyZ2V0PgorICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICA8L3BsdWdpbj4KKyAgICAgIDxwbHVnaW4+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXdhci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjMuMi4xPC92ZXJzaW9uPgorICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8d2FyU291cmNlRGlyZWN0b3J5PldlYkNvbnRlbnQ8L3dhclNvdXJjZURpcmVjdG9yeT4KKyAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgPC9wbHVnaW4+CisgICAgPC9wbHVnaW5zPgorICA8L2J1aWxkPgorPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYjAvMjA1Nzk1NTgwYTNlMDAxYzEzNjNiZWI5MzJhZTYzYTEgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2IwLzIwNTc5NTU4MGEzZTAwMWMxMzYzYmViOTMyYWU2M2ExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMDZjNDUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2IwLzIwNTc5NTU4MGEzZTAwMWMxMzYzYmViOTMyYWU2M2ExCkBAIC0wLDAgKzEsNzQ2IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKK2ltcG9ydCBqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7CitpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAob3ZlcndyaXR0ZW4gYnkgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKGZpbmFsIGFzc2lnbm1lbnRzKToKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJFbWIgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIjsKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLyogdmFyaWFibGVzICovCisJc3RhdGljIGludCBuRXhjZXB0U3RtdAkJPSAwOwkvLyBjb3VudCBuby4gb2YgZXhjZXB0aW9ucyBmb3IgcHJlcGFyZWRTdG10LgorCXN0YXRpYyBpbnQgbkV4Y2VwdEluc2VydAk9IDA7CS8vIGNvdW50IG5vLiBvZiBleGNlcHRpb25zIGZvciBJbnNlcnRzLgorCQorCS8qCisJICogc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJICogCisJICogQXJndW1lbnRzOgorCSAqIHByb3BzCTogUHJvcGVydGllcyBsb2FkZWQgYnkgdGhlIEdsZW1tU2VydmljZXMuCisJICogTm90ZXM6CisJICogLSB0aGlzIGZ1bmN0aW9uIGxvYWRzIG9ubHkgdGhvc2UgQ29uc3RhbnRzIG5lZWRlZCBpbiB0aGlzIGNsYXNzLgorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcwlwcm9wcykKKwkKKwl7CisJZm5hbWVEQgkJIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgCSIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlzZXJ2ZXJIb3N0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJzZXJ2ZXJIb3N0IiwJIi8vbG9jYWxob3N0OjE1MjcvIik7CisJZGVyYnlEQlVSTCAJCT0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCQkJCisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCQkJCQlpbXBvcnRHbGVtbUxlbWF0YQorCSAqIFBhcmFtZXRlcnM6CisJICogZm4JCSA6IGFic29sdXRlIGZpbGUgbmFtZSBvZiBHTEVNTSBvdXRwdXQgW0lTTzg4NTktMV0gZXhwZWN0ZWQsIG5vdCBVVEYtOCEKKwkgKiBwcm9wcwkgOiBQcm9wZXJ0aWVzIHZvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgdG8gc2V0IGNvbnN0YW50cyBuZWVkZWQKKwkgKiAJCQkgICBpbiB0aGlzIGNsYXNzLgorCSAqIGRicGF0aAkgOiBsb2NhdGlvbiArIG5hbWUgb2YgZGF0YWJhc2Ugd2hlcmUgdG8gc3RvcmUgbGVtbWF0YSt3ZnMuCisJICogUmV0dXJucwkgOiAwPU9LLCAtMTogZ2VuZXJhbCBlcnJvcjsgPiAwIDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAKKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIGR5bmFtaWNhbGx5IGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqIDA0LjExLjIxL0ZCIGRicGF0aC4KKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YShTdHJpbmcgZm4sIFByb3BlcnRpZXMgcHJvcHMsIGZpbmFsIFN0cmluZyBkYnBhdGgpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YSI7CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4gPSBudWxsOworCWludAorCQluRXJyb3JzOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyB3aGVuIGluZGV4aW5nIGRhdGEgaW50byB0aGUgZGF0YWJhc2UsIHNlbGVjdCB0aGUgc3VibWl0dGVkIGRicGF0aCwKKwkvLyAobm90IHRoZSBvbmUgc3RvcmVkIGluIHRoZSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCWRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGRicGF0aDsKKwkKKwkvLyBvcGVuIHJlYWRlciBvbiBHbGVtbSBMZW1tYXRhOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCWluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCQorCQluRXJyb3JzID0gd3JpdGVEQkxlbW1hdGEoaW4pOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBmcm9tICclcychXG4iLCBmdW5jLCBmbik7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCisJLy8gY2xvc2UgUmVhZGVyOgorCXRyeSB7CisJCWluLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJbkVycm9ycyA9IC0xOworCQl9CisJCisgCWlmKCBuRXJyb3JzID09IDAgKQorIAkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQgZG9uZSBzdWNjZXNzZnVsbHkuXG4iLCBmdW5jKTsKKyAJZWxzZQorIAkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQ6ICVkIEVycm9ycyFcbiIsIGZ1bmMsIG5FcnJvcnMpOworIAkKKwlyZXR1cm4gbkVycm9yczsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YQorCQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVEQkxlbW1hdGEoKQorCSAqICAgICAgICAgICAgICAgICAgICAgICAKKwkgKiBzdG9yZXMgbGlzdCBvZiBsZW1tYXRhICsgaW5mb3MgaW50byBEZXJieSBkYi4KKwkgKiBGaWxlIGZvcm1hdDogIkxlbW1hIERlY29tcG9zaXRpb24gV2YiLAorCSAqICAgICAgICAgICAgICBlLmcuOiAiSMOkdXNlciArLSBIYXVzIi4KKwkgKiBSZXR1cm5zOiAwID0gT0sgb3IgLTE6IGdlbmVyYWwgZXJyb3Igb3IgPiAwOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIDA5LjAxLjIwL0ZCCisJICogMDQuMTEuMjEvRkIgdHVybiBhdXRvY29tbWl0IG9mZiB0byBhY2NlbGVyYXRlIGh1Z2UgYW1vdW50IG9mIGluc2VydGlvbnMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYXRhKEJ1ZmZlcmVkUmVhZGVyIGluKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hdGEiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJUHJlcGFyZWRTdGF0ZW1lbnQKKwkJc3RtdFByZXAgPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10IAkgPSBudWxsOworCVN0cmluZworCQlsaW5lOwkKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQluSW5zZXJ0ZWQgPSAwLAkvLyBuby4gb2YgbGVtbWEvd2YgcGFpcnMgaW1wb3J0ZWQuCisJCXJldCA9IDA7IC8vIE9LLgorCWJvb2xlYW4KKwkJY29udGFpbnNTcGVjOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZSwKKwkvLyBzZXQgQXV0b2NvbW1pdCA9IGZhbHNlIHRvIGFjY2VsZXJhdGUgaW5zZXJ0aW9uczoKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJY29uLnNldEF1dG9Db21taXQoZmFsc2UpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZCAoYXV0b0NvbW1pdD1vZmYpLlxuIiwgZnVuYyk7CisKKwkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQlzdG10UHJlcCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KGluc2VydFByZXBhcmVkUXVlcnkpOworCQllbHNlCisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCisJCXdoaWxlKCAobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCAhPSAzICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzISBFeHBlY3RlZCA9IDMhIENhbm5vdCBiZSBzdG9yZWQhXG4iLCBmdW5jLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCQluRXJyb3JzKys7CisJCQkJY29udGludWU7CisJCQkJfQorCQkJCisJCQkvLyBHZXQgSW5mbywgaWYgd29yZGZvcm0gY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlICctJywgaW50ZXJwdW5jdGlvbiBldGMuOgorCQkJLy8gbGVtbWFJbmZvWzJdID0gd29yZGZvcm0uCisJCQljb250YWluc1NwZWMgPSBMZW1tYUluZm8uaXNXZlNwZWNpYWxDYXNlKGxlbW1hSW5mb1syXSk7CisJCQkvLyBzdG9yZSBpbnRvIERCOgorCQkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoc3RtdFByZXAsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQllbHNlCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3Moc3RtdCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCQorCQkJaWYoIHJldCAhPSAwICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgc3RvcmUgbGVtbWEgJyVzJyBpbnRvIERCISAocmV0PSVkKVxuIiwgZnVuYywgbGluZSwgcmV0KTsKKwkJCQluRXJyb3JzKys7IAorCQkJCX0KKwkJCWVsc2UKKwkJCQluSW5zZXJ0ZWQrKzsKKwkJCX0gLy8gd2hpbGUKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgR2xlbW0gbGVtbWF0YStpbmZvcyBmcm9tIGZpbGUhIEV4aXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOyAKKwkJfQkKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisJZmluYWxseSAKKwkJeyAKKwkJdHJ5IHsKKwkJCS8vIGltcG9ydGFudDogbm93IGNvbW1pdCwgYXMgYXV0b0NvbW1pdCBpcyBkZWFjdGl2YXRlZCwKKwkJCS8vIHRoaXMgYWxzbyByZW1vdmVzIGRhdGFiYXNlIGxvY2tzOgorCQkJY29uLmNvbW1pdCgpOworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb21taXQgc3VjY2Vzc2Z1bGwuXG4iLCBmdW5jKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29tbWl0IGF0IHRoZSBlbmQgb2YgdGhlIHdmcyBsaXN0IGZhaWxlZCFcbiIsIGZ1bmMpOworCQkJfQkJCisJCQorCQl0cnkgeyAvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSAKKwkJCQlzdG10LmNsb3NlKCk7CisJCQlpZiggc3RtdFByZXAgIT0gbnVsbCApIAorCQkJCXN0bXRQcmVwLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkluZm8gOiAlczogbm8uIG9mIGxlbW1hdGEvd2YgcGFpcnMgaW5zZXJ0ZWQgPSAlZC5cbiIsIGZ1bmMsIG5JbnNlcnRlZCk7CisJCisJcmV0dXJuIG5FcnJvcnM7IC8vIDA9T0ssID4wID0gbm8uIG9mIGVycm9ycy4KKwl9IC8vIHdyaXRlREJMZW1tYXRhCisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIHJ1bGVzIGludG8gRGVyYnkgREIuCisJICogTm90ZXM6CisJICogLSB0aGlzIGlzIHRoZSB2ZXJzaW9uIHdpdGggYSBQcmVwYXJlZFF1ZXJ5LgorCSAqIFBhcmFtZXRlcnM6CisJICogc3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDE3LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKAorCQkJUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCwgCisJCQlTdHJpbmcgbGVtbWEsIAorCQkJU3RyaW5nIHdmLCAKKwkJCVN0cmluZyBkZWNvbXBvc2l0aW9uLCAKKwkJCWJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkIjsKKwlmaW5hbCBib29sZWFuCisJCWJMb2cgPSBmYWxzZTsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlib29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgCisJLy8gZm9yIGxvZ2luZyBvbmx5OgorCXNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwlpZiggYkxvZyApCisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorICAgIC8vIG5vdyBpbnNlcnQgbmV3IHZhbHVlcyBpbnRvIFByZXBhcmVkU3RhdGVtZW50OgorICAgIHRyeSB7CisgICAgCXN0bXQuc2V0U3RyaW5nKCAxLCBsZW1tYSk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKCAyLCB3Zik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbigzLCBwcm9wMSk7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig0LCBwcm9wMik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig1LCBzcGVjKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcmVwYXJlZCBzdG10ID0gJyVzJy5cbiIsICBmdW5jLCBzdG10LnRvU3RyaW5nKCkpOworICAgICAgICB9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlMSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKAkiRXJyb3I6ICVzOiB3aGlsZSBmaWxsaW5nIHByZXBhcmVkIHN0YXRlbWVudCB3aXRoIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0nJWInIHByb3AyPSclYicgc3BlYz0nJWInIVxuIiwgIAorCQkJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJaWYoICsrbkV4Y2VwdFN0bXQgPD0gMSApCisJCQllMS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKyAgICAKKyAgICB0cnkgeworCQkvLyBleGVjdXRlIHRoZSBmaWxsZWQgcHJlcGFyZWQgc3RhdGVtZW50OgorCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhIChuPSVkKVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYywgbik7CisgCQkJcmV0dXJuIDI7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQlpZiggKytuRXhjZXB0SW5zZXJ0IDw9IDEgKQorCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDM7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZAorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3M6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gaW50byBEZXJieSBEQi4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGNvbnRhaW5zU3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDEwLjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zKFN0YXRlbWVudCBzdG10LCBTdHJpbmcgbGVtbWEsIFN0cmluZyB3ZiwgU3RyaW5nIGRlY29tcG9zaXRpb24sIGJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zIjsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlCb29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworICAgIAorICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorCXRyeSB7CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoc3FsSW5zZXJ0KTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYURhdGEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBmcm9tIHRoZSBHbGVtbURCLgorCSAqIElucHV0OiBsZW1tYSArIEdMRU1NX09QVFNfeHh4IChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWFEYXRhKExlbW1hSW5mbyBsZW1tYUluZm8sIFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYURhdGEiOworCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJbGVtbWFJbmZvLmNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJbGVtbWFJbmZvLnN0bXQgPSBsZW1tYUluZm8uY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlpbnQgciA9IHJlYWREQkxlbW1hKGxlbW1hSW5mby5zdG10LCBsZW1tYUluZm8pOworCQkJCisJCWlmKCByICE9IDAgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZ2V0IGRhdGEgZm9yIGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIVxuIiwgCisJCQkJCWZ1bmMsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwkJCXJldHVybiAxOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggbGVtbWFJbmZvLmNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hRGF0YQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGJ5IGFjY2Vzc2luZyB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dCA6IGxlbW1hICsgcHJvcDErMiAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogT3V0cHV0OiAKKwkgKiAgLSBjb250YWlucyBhIFJlc3VsdFNldCBmb3IgZmV0Y2hpbmcgdGhlIHdvcmRmb3Jtcy4KKwkgKiAJICBUaGlzIFJlc3VsdFNldCB3aWxsIGhhdmUgYmUgYmUgY2xvc2VkIHdpdGggTGVtbWFJbmZvLmNsb3NlKCkuCisJICogCSAgVGhlIG5vLiBvZiBmb3VuZCB3b3JkZm9ybXMgaXMgbm90IGtub3duIHRpbGwgd2UKKwkgKiAJICBmZXRjaCBhbGwgb2YgdGhlbSBmcm9tIFJlc3VsdFNldCEgCisJICogCS0gZHVlIHRvIFNFTEVDVCBESVNUSU5DVCBvbmx5IHVuaXEgd2YgYXJlIHJldHVybmVkLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYShTdGF0ZW1lbnQgc3RtdCwgTGVtbWFJbmZvIGxlbW1hSW5mbykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hIjsKKwlTdHJpbmcKKwkJc3FsOworCQkKKwlzcWwgPSBTdHJpbmcuZm9ybWF0KCJTRUxFQ1QgRElTVElOQ1Qgd2YgZnJvbSAlcyBXSEVSRSBsZW1tYT0nJXMnICVzICVzICVzIiwgCisJCQlkYlRhYmxlLAorCQkJbGVtbWFJbmZvLmxlbW1hLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiQU5EIHByb3AxPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAxID8gIkFORCBwcm9wMT0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiQU5EIHByb3AyPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAxID8gIkFORCBwcm9wMj0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiQU5EIHNwZWM9J3RydWUnIiAgIDogCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICJBTkQgc3BlYz0nZmFsc2UnIiAgOiAiIik7CisJCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgZnVuYywgbGVtbWFJbmZvLnByb3AxLCBsZW1tYUluZm8ucHJvcDIsIGxlbW1hSW5mby5zcGVjKTsKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbCA9ICclcycuXG4iLCBmdW5jLCBzcWwpOworCisJdHJ5IHsKKwkJbGVtbWFJbmZvLnJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoZW4gZXhlY3V0aW5nIHNxbD0nJXMnIVxuIiwgZnVuYywgc3FsKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gYWxsIHNxbCBzdHVmZiBhcmUgY2xvc2VkIG91dHNpZGUgdGhpcyBmdW5jdGlvbiwgc28gZG9uJ3QgY2xvc2UgdGhlbSBoZXJlIQorCQl9CQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3MKKwkgKiBSZXR1cm5zIEdlbmVyYWwgSW5mb3MgYWJvdXQgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIHJlYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJJbmZvcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJZGJJbmZvID0gcmVhZERiTGVtbWF0YUluZm9zKHN0bXQpOworCQkJCisJCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCByZWFkIEdlbmVyYWwgSW5mb3MgZnJvbSBHbGVtbSBEYXRhYmFzZSFcbiIsIGZ1bmMpOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSBjb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSBzdG10LmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIG1heSBiZSBudWxsLgorCQkKKwl9IC8vIHJlYWREYkluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiTGVtbWF0YUluZm9zOgorCSAqIHJlYWRzIGFuZCByZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGNvbnRlbnQgCisJICogb2YgdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIFJldHVybnMgMD1PSyBvciBlcnJvciBjb2RlID4gMC4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkxlbW1hdGFJbmZvcyhTdGF0ZW1lbnQgc3RtdCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAicmVhZERiTGVtbWFJbmZvcyI7CisJU3RyaW5nW10KKwkJc3FsID0gewkiU0VMRUNUIENPVU5UKGRpc3RpbmN0IGxlbW1hKSBmcm9tICIgKyBkYlRhYmxlICwJLy8gY291bnRzIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSwJCQkJCS8vIGNvdW50cyB0b3RhbCBuby4gb2Ygc3RvcmVkIHdvcmRmb3Jtcy4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPXRydWUiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPXRydWUifTsKKwlSZXN1bHRTZXQKKwkJcmVzID0gbnVsbDsgCisJaW50W10KKwkJbkNvdW50cyA9IG5ldyBpbnRbc3FsLmxlbmd0aF07CisJaW50CQkKKwkJaSA9IDAsIAorCQluRGlzdExlbW1hdGEgPSAtMSwJLy8gbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEgaW4gREIuCisJCW5XZnMJCSA9IC0xOwkvLyBuby4gb2Ygd29yZGZvcm1zIGluIERCLgorCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBleHRyYWN0aW5nIGFncmVnYXRlZCBpbmZvcyBhYm91dCBEYXRhYmFzZSBjb250ZW50cy4uLlxuIiwgZnVuYyk7CisJCisJZGJJbmZvID0gbmV3IEdsZW1tREJJbmZvKCk7CisKKwkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwl0cnkgeworCQlmb3IoaT0wOyBpPHNxbC5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCXJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbFtpXSk7CisJCQlpZiggcmVzLm5leHQoKSApCisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IHJlcy5nZXRJbnQoMSk7IC8vIGNvdW50IGlzIGluIGNvbHVtbiAxLgorCQkJZWxzZQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBleHRyYWN0IGNvdW50IGZyb20gJyVzJyFcbiIsIGZ1bmMsIHNxbFtpXSk7CisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IC0xOworCQkJCX0KKwkJCX0KKyAgICAgICAKKyAgICAgICAgfQorICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgIAl7CisgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogc3FsPSclcycgZmFpbGVkIVxuIiwgZnVuYywgc3FsW2ldKTsKKyAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAJfQorCWZpbmFsbHkgeworCQl0cnkgeworCQkJcmVzLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBPSworCX0gLy8gcmVhZERiTGVtbWF0YUluZm9zCisJCisJLyoqKioqKioqKioqKioqKioqKioqIFRlc3QgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zX3Rlc3QKKwkgKiBUaGlzIGlzIGRlYnVnIGNvZGUgd3JpdHRlbiB0byB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIERlcmJ5CisJICogRGF0YWJhc2UgZnJvbSBhbiBleHRlcm5hbCBKYXZhIFByb2dyYW1tLgorCSAqIDA4LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCByZWFkRGJJbmZvc190ZXN0KCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlTdHJpbmcKKwkJaW5zZXJ0U3RtdCA9ICIiOworCQorCS8vIENvbm5lY3QgdG8gRGVyYnkgZGF0YWJhc2U6CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCQorCQkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwkJdHJ5CisJCQl7CisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIAorICAgICAgICAgICAgCXNxbCA9ICJTRUxFQ1QgKiBGUk9NICIgKyBkYlRhYmxlOworICAgICAgICAgICAgUmVzdWx0U2V0IAorICAgICAgICAgICAgCXJlc3VsdCA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CisgCisgICAgICAgICAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHRhYmxlICclcyc6XG4iLCAgZnVuYywgZGJUYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQubmV4dCgpKSB7CisgICAgICAgICAgICAJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiJyVzJyA6ICclcycgOiAnJXMnIDogJyVzJyAuXG4iLCByZXN1bHQuZ2V0U3RyaW5nKDEpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygyKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMyksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDQpKTsKKyAgICAgICAgCQlpbnNlcnRTdG10ID0gaW5zZXJ0U3RtdCArICI8cD4iICsgcmVzdWx0LmdldFN0cmluZygxKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZygyKSArICIgOiAiICsKKyAgICAgICAgICAgICAgICAJCSAgICAgcmVzdWx0LmdldFN0cmluZygzKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZyg0KSArICI8L3A+IjsKKyAgICAgICAgICAgIAl9CisJCQl9CisJICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgICAgICAJeworCSAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBpbnNlcnRTdG10PSclcycgZmFpbGVkIS5cbiIsIGZ1bmMsIHN0bXQpOworICAgICAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICAgICAgY29uLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nICclcyBmYWlsZWQhXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJdHJ5IHsKKwkJY29uLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkJCisJfSAvLyByZWFkRGJJbmZvc190ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogaW1wb3J0R2xlbW1MZW1hdGFfdGVzdAorCSAqIFRlc3QgVmVyc2lvbi4KKwkgKiAxMi4xMi4xOS9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QoU3RyaW5nIGZuKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdCI7CisJSW5wdXRTdHJlYW0gCisJCWluOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluMiA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQlyOworCQorCS8qCisJICogUmVhZCBMZW1tYXRhICsgSW5mbyBmcm9tIGZpbGU6IAorCSAqLworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCQorCXRyeSB7CisJCS8vaW4gPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSggbmV3IEZpbGVJbnB1dFN0cmVhbShmbikgKTsKKwkJaW4yID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlcihmbikpOworCQl3aGlsZSggKGxpbmUgPSBpbjIucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoID09IDMgKQorCQkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBJbXBvcnQ6IGxlbT0nJXMnIERlY29tcD0nJXMnIFdmPSclcycuXG4iLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1sxXSwgbGVtbWFJbmZvWzJdKTsKKwkJCWVsc2UKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogaW1wb3J0R2xlbW1MYW1hdGE6ICclcycgaGFzICVkIGNvbXBvbmVudHMhXG4iLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IG9wZW4gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJcmV0dXJuIDE7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKworCXRyeSB7CisJCWluMi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCS8qIENoZWNrIGNvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJICovIAorCXIgPSByZWFkRGJJbmZvc190ZXN0KCk7CisJaWYoIHIgIT0gMCApCisJCXJldHVybiByOworCQkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2IzLzAwNjJmMzcxYWMyYTAwMWMxYzQxY2U1NTllYTVlMTZiIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9iMy8wMDYyZjM3MWFjMmEwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTY3MzUzCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9iMy8wMDYyZjM3MWFjMmEwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpAQCAtMCwwICsxLDY4MyBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA2LjEwLjIxIjsgLy8iMTcuMDYuMjAiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMSI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwkJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwkJU3RyaW5nCisJCQlzdGF0dXM7CisJCVV0aWxzCisJCQl1ID0gbmV3IFV0aWxzKCk7CisJCVByb3BlcnRpZXMKKwkJCXByb3BzOworCQkKKwkJLy8gcmVhZCB0ZXN0CisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJCisJCS8vIGVuZCBvZiByZWFkIHRlc3QKKwkJCisJCS8vIHRlc3QKKwkJLyoKKwkJcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworCQkKKwkJICogcHJvcHMuc2V0UHJvcGVydHkoInAiLCAidGVzdCIpOworCQkgKgorCQlGaWxlT3V0cHV0U3RyZWFtIG91dDsKKwkJdHJ5IHsKKwkJCW91dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKCJnbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiKTsKKwkJCXByb3BzLnN0b3JlKG91dCwgICJ0ZXN0IEdsZW1tU2VydmljZXMgcHJvcGVydGllcyIpOworCQkJfSAKKwkJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX07CisJCSovCisJCQorCQkvLyBlbmQgb3Rlc3QKKwkJCisJCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCQlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIkFQSTogJXM6IC9pbmRleC9zdGF0dXMvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKworCQlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkpOworCisJCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwkJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiBQT1NUOiAvaW5kZXgvYWRkLzogdGV4dC9wbGFpbgorCSAqIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlLgorCSAqIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkCisJICogaW50byB0aGUgZGF0YWJhc2UuCisJICogSW5wdXQ6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqLworCUBQYXRoKCJhZGQiKSBAUE9TVCBAQ29uc3VtZXMoInRleHQvcGxhaW4iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgaW1wb3J0TGVtbWFEYXRhKFN0cmluZyBsaXN0KSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gYXJMaXN0ID0gbGlzdC5zcGxpdCgiXG4iKTsKKwkKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IGZzLmdldFBhdGgoZm5hbWVXZnMpOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2FkZC8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQorCS8vIFdyaXRlIHN1Ym1pdHRlZCBsaXN0IG9mIHdvcmRmb3JtcyB0byBmaWxlOgorCXRyeQorCQl7CisJCW9zID0gRmlsZXMubmV3T3V0cHV0U3RyZWFtKHApOworCQlvcy53cml0ZShsaXN0LmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSkpOworCSAgICBvcy5jbG9zZSgpOworCSAgICBiRG9uZSA9IHRydWU7CisJICAgIFN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGZpbGUgJyVzJyBiZXNjaHJpZWJlbi5cbiIsIGZ1bmMsIGZuYW1lV2ZzKTsKKwkgICAgfQorCWNhdGNoKElPRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisJCX0KKyAgICAKKwlpZiggYkRvbmUgKQorCQltc2cgPSAiPHA+TGlzdCB3cml0dGVuIHRvIGZpbGU6ICIgKyBwLnRvU3RyaW5nKCkgKyAiPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+PGI+RmlsZSBFcnJvcjogPC9iPiBjYW5ub3Qgd3JpdGUgdG8gIiArIHAudG9TdHJpbmcoKSArICIhPC9wPiI7CisJCisJLyoKKwkgKiAgZXhlY3V0ZSBHbGVtbSBzaGVsbCBzY3JpcHQ6CisJICovCisJU3RyaW5nCisJCW1zZ0dsZW1tU2NyaXB0LCBtc2dJbXBvcnQ7CisJaW50IAorCQlyID0gVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0KGZuYW1lU2NyaXB0LCBmbmFtZVdmcyk7CisJCisJaWYoIHIgPT0gMCApCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEF1c2bvv71ocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBpbXBvcnRHbGVtbUxlbW1hdGEgcmV0dXJucyByPSVkLlxuIiwgZnVuYywgcik7CisJaWYoIG5FcnJvcnMgPT0gMCApCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiAiICsgbkVycm9ycyArICIgZXJyb3JzITwvcD4iOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGVuZGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJLy8gUmV0dXJuIEluZm9zOgorCXJldHVybiAKKwkJCSAgICI8aHRtbD4iICsKKwkJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwl9CisKKwkvKiB2aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyB2aWV3REJJbmZvCisKKworCS8qIHZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIC0gU3RhdHVzOiA8aT5Xb3JrIGluIHByb2dyZXNzLi4uITwvaT4pPC9oND5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoICFvcHRpb25zLmVxdWFscygidW5kZWYiKSkKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEvcHJvcDIvc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEdsZW1tU2VydmljZXMgJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbkRhdGUsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9iMy9hMDUxYWFhMDk0MWEwMDFhMTliMjg3NWRlMDI3MmM2YyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYjMvYTA1MWFhYTA5NDFhMDAxYTE5YjI4NzVkZTAyNzJjNmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q4ODdhYgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYjMvYTA1MWFhYTA5NDFhMDAxYTE5YjI4NzVkZTAyNzJjNmMKQEAgLTAsMCArMSw1NiBAQAorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgCisJeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisJeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgPGdyb3VwSWQ+ZGUua29yYXAuc2VydmljZXM8L2dyb3VwSWQ+CisgIDxhcnRpZmFjdElkPkdsZW1tU2VydmljZXMyPC9hcnRpZmFjdElkPgorICA8dmVyc2lvbj4wLjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KKyAgPG5hbWU+R2xlbW1TZXJ2aWNlczwvbmFtZT4KKyAgCisgIDxkZXNjcmlwdGlvbj5SRVNUZnVsbCBHbGVtbVNlcnZpY2VzIGbDvHIgS29yQVA8L2Rlc2NyaXB0aW9uPgorICAKKyAgPGRlcGVuZGVuY2llcz4KKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+CisgICAgICA8dmVyc2lvbj4zLjguMTwvdmVyc2lvbj4KKyAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICA8L2RlcGVuZGVuY3k+CisgICA8ZGVwZW5kZW5jeT4KKyAgICA8Z3JvdXBJZD5qYXZheC5zZXJ2bGV0PC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPnNlcnZsZXQtYXBpPC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjIuNTwvdmVyc2lvbj4KKyAgIDwvZGVwZW5kZW5jeT4KKyAgIDwhLS0gaHR0cHM6Ly9tdm5yZXBvc2l0b3J5LmNvbS9hcnRpZmFjdC9qYXZheC53cy5ycy9qYXZheC53cy5ycy1hcGkgLS0+CisgICA8ZGVwZW5kZW5jeT4KKyAgICA8Z3JvdXBJZD5qYXZheC53cy5yczwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5qYXZheC53cy5ycy1hcGk8L2FydGlmYWN0SWQ+CisgICAgPHZlcnNpb24+Mi4wPC92ZXJzaW9uPgorICAgPC9kZXBlbmRlbmN5PgorICA8L2RlcGVuZGVuY2llcz4KKyAgCisgIDxidWlsZD4KKyAgICA8c291cmNlRGlyZWN0b3J5PnNyYzwvc291cmNlRGlyZWN0b3J5PgorICAgIDxwbHVnaW5zPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tY29tcGlsZXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4zLjcuMDwvdmVyc2lvbj4KKyAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgPHNvdXJjZT4xLjg8L3NvdXJjZT4KKyAgICAgICAgICA8dGFyZ2V0PjEuODwvdGFyZ2V0PgorICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICA8L3BsdWdpbj4KKyAgICAgIDxwbHVnaW4+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXdhci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjMuMi4xPC92ZXJzaW9uPgorICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8d2FyU291cmNlRGlyZWN0b3J5PldlYkNvbnRlbnQ8L3dhclNvdXJjZURpcmVjdG9yeT4KKyAgICAgICAgICA8d2ViWG1sPldlYkNvbnRlbnRcV0VCLUlORlx3ZWIueG1sPC93ZWJYbWw+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvcGx1Z2luPgorICAgIDwvcGx1Z2lucz4KKyAgICA8ZmluYWxOYW1lPkdsZW1tU2VydmljZXM8L2ZpbmFsTmFtZT4KKyAgPC9idWlsZD4KKyAgCis8L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9iNi9hMGI3YjZlODQxM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYjYvYTBiN2I2ZTg0MTNkMDAxYzEwYjFiMTdkZGQzMDllNmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhlOWMyMAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYjYvYTBiN2I2ZTg0MTNkMDAxYzEwYjFiMTdkZGQzMDllNmYKQEAgLTAsMCArMSw5NTggQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworLyogMC4xIDogMTcuMDYuMjAvRkIgCisgKiAwLjIgOiAyNS4xMC4yMS9GQgorICogICAgICAgbG9naW5nIG9mIHRoZSBBUEkgUmVxdWVzdHMuCisgKiAgICAgICBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKyAqICAgICAgIGNvcnJlY3RpbmcgY2FsbGluZyBvZiBsZW1tYSArIHByb3AxL3Byb3AyL3NwZWMuCisgKiAgICAgICBoYW5kbGluZyBvZiBsZW1tYXRhIHdpdGggJ8OfJy4KKyAqIAorICogR2VuZXJhbCBjb21tZW50cyB0byB0aGUgZW5jb2Rpbmcgb2YgZGVyaXZhdGlvbnMgZnJvbSBsZW1tYSB0byB3ZnMgYW5kIGhvdyB0aGV5IGFyZSBlbmNvZGVkCisgKiBpbiB0aGUgRGVyYnkgZGF0YWJhc2U6CisgKiAKKyAqIEdMRU1NIGVuY29kaW5nOiAgCisgKiAgIF8gXyA6ICtGbGV4ICAgICAgIMOWbGUgLT4gw5ZsICAgICAgCisgKiAgICsgXyA6ICtDb21wICAgICAgIMOWbGxhbXBlIC0+IMOWbCBvciBMYW1wZSAoY29tcG91bmQpLgorICogICBfICsgOiArb3RoZXIgICAgICBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybnNjaHVoIChubyBjb21wb3VuZCBmb3IgJ1R1cm5zY2h1aCcsIG9ubHkgcHJlZml4KS4KKyAqICAgKyArIDogK0NvbXArb3RoZXIgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm4gKyBTY2h1aCAoY29tcG91bmQgZm9yICdTY2h1aCcgKyBQcmVmaXgpLgorICogQzIgbGVtbWF0aXphdGlvbiBvcHRpb25zOgorICogICBGbGV4ICAoaWRlbnRpY2FsIHRvIEdsZW1tKQorICogICBDb21wICAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpCisgKiAgIE90aGVyIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykuCisgKiAgIFNwZWMgIChvbmx5IEMyOiBpbmNsdWRlcyBhbGwgd2ZzIHdpdGggaGlwaGVuIGFuZC9vciBzb21lIG5vbi1hbHBoYWJldGljIElTTzg4NTktMSBjaGFycykKKyAqICAgICAgICAgRS5nLiDDlmwtRXhwb3J0ZSwgIk1hcmtlbiItw5ZsZS4KKyAqIERlcmJ5IEVuY29kaW5nOgorICogIHByb3AxIAlwcm9wMglzcGVjICAgCW1lYW5pbmcgaW4gQzI6CisgKiAgMAkJMAkJLQkJRmxleAorICogIDEJCTAJCS0JCUNvbXAKKyAqICAwCQkxCQktCQlPdGhlciAocHJlZml4KQorICogIDEJCTEJCS0JCUNvbXAgKyBPdGhlcgorICogIC0JCS0JCTAJCS1TcGVjCisgKiAgLQkJLQkJMQkJK1NwZWMKKyAqIAorICogRXhhbXBsZXM6CisgKiAmU2NodWgJCQk6IFNjaHVoLCBTY2h1aGUsIC4uLiBvbmx5IGZsZXhpb25zCisgKiAmU2NodWgrY29tcAkJOiBTY2h1aGUsIFR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtvdGhlcgkJOiBTY2h1aGUsIEFudGlzY2h1aGUuLi4gZmxleGlvbnMgYW5kIHByZWZpeGVkIHdmcyAobm8gY29tcG91bmRzKS4KKyAqICZTY2h1aCtjb21wK290aGVyOiBTY2h1aGUsIEFudGlzY2h1aGUsIFR1cm5zY2h1aGUsIEFudGl0dXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMgYW5kIAorICogCQkJCQkgIHByZWZpeGVkIHNpbmdsZSB3ZnMgKEFudGlzY2h1aGUpIGFuZCBwcmVmaXhlZCBjb21wb3VuZHMuCisgKiAmU2NodWgrc3BlYwkJOiAiQW50aSItU2NodWhlLCA2OGdlci1TY2h1aGUuLi4gbWF5IGJlIGNvbWJpbmVkIHdpdGggZXZlcnkgb3B0aW9uczogYWRkcworICogICAgICAgICAgICAgICAgICAgIHdmcyB3aXRoIGh5cGhlbiBhbmQvb3Igbm9uLWFscGhhYmV0aWMgY2hhcnMuCisgKiAKKyAqIENvbnZlcnNpb24gcnVsZXM6CisgKiAKKyAqICAmc2NobGllw59lbiAtPiBpbnRlcm5hbCBzZWFyY2ggZm9yICdzY2hsaWVzc2VuJywKKyAqICBiZWNhdXNlIEdsZW1tIG91dHB1dHMgJ3NzJyBmb3IgJ8OfJy4KKyAqICAKKyAqIENoYXJhY3RlciBFbmNvZGluZzoKKyAqIAorICogLSBXaGVuIGltcG9ydGluZyB3ZnMgdG8gdGhlIERlcmJ5IERhdGFiYXNlIHdpdGggZG9DdXJsR2xlbW1TZXJ2aWNlcy9pbmRleExlbW1hdGE6CisgKiAKKyAqICAgSU5QVVQ6IHdvcmRmb3JtIGxpc3QgaW4gW1VURi04XSA6IFVURi04IGlzIHRoZW4gY29udmVydGVkIHRvIExhdDEgZm9yIEdsZW1tLAorICogICAgICAgICAgdGhlIG91dHB1dCBvZiBHbGVtbSBbTGF0MV0gaXMgcmV0dXJuZWQgdG8gdGhlIEdsZW1tU2VydmljZXMgd2l0aG91dCByZWNvbnZlcnNpb24KKyAqICAgICAgICAgIHRvIFVURjggYW5kIGltcG9ydGVkIGludG8gRGVyYnkgRGF0YWJhc2UgdW5jaGFuZ2VkLgorICoJCQorICovCisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDQuMTEuMjEiOyAKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjIiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lUHJvcHMJCT0gIi9XRUItSU5GL0dsZW1tU2VydmljZXMucHJvcGVydGllcyI7CisJCisJLy8gdGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHJlYWQgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgKHRoZXNlIGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMpOgorCXByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoIAkJPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCUBDb250ZXh0CisJcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBzZXJ2bGV0Q29udGV4dDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZvdXQJPSBudWxsOworCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZmVycgk9IG51bGw7CQkKKwkJCisJLyogCisgCSAqIAorCSAqIC0gYWZ0ZXIgbG9hZFByb3BlcnRpZXMsIHNldHMgdGhlIGNsYXNzIHZhcmlhYmxlIHdpdGggbG9hZGVkIHByb3BlcnR5IHZhbHVlcy4KKwkgKiAKKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJR1NfV29ya2luZ1BhdGggCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgIkdTX1dvcmtpbmdQYXRoIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIik7CisJZm5hbWVXZnMJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lV2ZzIiwgCSAgICJnbF93ZnNfaW4udHh0Iik7CisJZm5hbWVXZnMJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVdmczsKKwlmbmFtZU91dAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVPdXQiLCAJICAgIkdsZW1tU2VydmljZXMubG9nIik7CisJZm5hbWVPdXQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZU91dDsKKwlmbmFtZUVycgkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVFcnIiLCAJICAgIkdsZW1tU2VydmljZXMuZXJyIik7CisJZm5hbWVFcnIJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUVycjsKKwlmbmFtZVNjcmlwdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVTY3JpcHQiLAkgICAiZG9HbGVtbSIpOworCWZuYW1lU2NyaXB0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVTY3JpcHQ7CisJZm5hbWVMZW1hdGEJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lTGVtYXRhIiwgICAgInRtcC9sZW0zIik7CisJZm5hbWVMZW1hdGEJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUxlbWF0YTsKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qCisJICogIGxvZ19SZXF1ZXN0OgorCSAqICAKKwkgKiAgLSB3cml0ZSBpbmZvIGFib3V0IEFQSSBSZXF1ZXN0LgorCSAqICBQYXJhbWV0ZXJzOgorCSAqICByZXF1ZXN0UGF0aAk6IHBhdGggb2Ygd2ViYXBwIGFkZHJlc3NlZCBieSB0aGUgcmVxdWVzdC4KKwkgKiAgZnVuYwkJOiBuYW1lIG9mIHRoZSBmdW5jdGlvbiB3aGljaCBpbXBsZW1lbnRzIHRoZSByZXF1ZXN0LgorCSAqICAKKwkgKiAgMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgbG9nX1JlcXVlc3QoU3RyaW5nIHJlcXVlc3RQYXRoLCBTdHJpbmcgZnVuYykKKwkKKwl7CisJLy8gdHJhbnNmb3JtICJkYXRlVHRpbWUiIC0+ICJkYXRlIHRpbWUiOgorCQorCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCWZvdXQucHJpbnRmKCIjIyMgJXM6ICVzIDogdmVycz0nJXMnLCB2ZGF0ZT0nJXMnIHJlcXVlc3Q9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RQYXRoLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgCisJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwl9IC8vIGxvZ19SZXF1ZXN0CisJCQorCS8qIGZvcm1hdERiTmFtZQorCSAqIAorCSAqIC0gZ2V0cyBuYW1lIG9mIERhdGFiYXNlIHVzZWQgYnkgRGVyYnkgZnJvbSBwcm9wcyAKKwkgKiAgIGFuZCBmb3JtYXQgaXQgdG8gSFRNTC4KKwkgKiAgCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFN0cmluZyBmb3JtYXREYk5hbWUoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJU3RyaW5nCisJCWRiTmFtZTsKKwlTdHJpbmcKKwkJZGJQYXRoID0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJaW50CisJCWogPSBkYlBhdGgubGFzdEluZGV4T2YoJy8nKTsKKwkKKwlpZiggaiA+IDAgKQorCQlkYk5hbWUgPSBkYlBhdGguc3Vic3RyaW5nKGorMSk7CisJZWxzZQorCQlkYk5hbWUgPSBkYlBhdGg7CisJCisJcmV0dXJuIGRiTmFtZTsgLy8gIjxwPjxiPkRhdGFiYXNlOiAiICsgZGJOYW1lICsgIjwvYj48L3A+XG4iOworCX0gLy8gZm9ybWF0RGJOYW1lCisKKwkvKgorCSAqIGNsb3NlTG9nU3RyZWFtczoKKwkgKiAKKwkgKiAtIGNsb3NlIHRoZSBmb3V0L2ZlcnIgbG9nIHN0cmVhbXMuCisJICogCisJICogMjYuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgY2xvc2VMb2dTdHJlYW1zKCkKKwkKKwl7CisJaWYoIGZvdXQgIT0gbnVsbCkKKwkJZm91dC5jbG9zZSgpOworCWZvdXQgPSBudWxsOworCQorCWlmKCBmZXJyICE9IG51bGwgKQorCQlmZXJyLmNsb3NlKCk7CisJZmVyciA9IG51bGw7CisJfSAvLyBjbG9zZUxvZ1N0cmVhbXMKKwkKKwkvKiBpbml0X2FuZF9sb2dfUmVxdWVzdAorCSAqIAorCSAqIC0gbG9hZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMsIHNldHMgR2xlbW1TZXJ2aWNlcyBjb25zdGFudHMKKwkgKiAgIGFuZCBsb2dzIHRoZSByZXF1ZXN0LgorCSAqIC0gbG9hZCBwcm9wZXJ0aWVzIGFuZCBzZXQgY29uc3RhbnRzIGJlZm9yZSBsb2dnaW5nIGFueXRoaW5nLCBiZWNhdXNlCisJICogICBsb2dnaW5nIHdpbGwgYmUgZG9uZSBpbnRvIHRoZSBsYXN0IHN0ZG91dC9zdGRlcnIgb3BlbmVkIGluIGdsYXNzZmlzaCdzIEpWTSwKKwkgKiAgIGUuZy4gaW4gdGhlIGxvZyBvZiBhbm90aGVyIFNlcnZpY2UuCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFByb3BlcnRpZXMgaW5pdF9hbmRfbG9nX1JlcXVlc3QoU3RyaW5nIGZ1bmMsIFN0cmluZyByZXF1ZXN0UGF0aCkKKwkKKwl7CisJU3RyaW5nCisJCXJlYWxQYXRoID0gc2VydmxldENvbnRleHQuZ2V0UmVhbFBhdGgoZm5hbWVQcm9wcyk7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtIChpZiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJUHJvcGVydGllcworCQlwcm9wcyA9IFV0aWxzLmxvYWRQcm9wZXJ0aWVzKHNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcyksIGZuYW1lUHJvcHMsIHJlYWxQYXRoLCBmYWxzZSk7CisJCisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIGZvdXQgYW5kIGZlcnIgYXMgcmVwbGFjZW1lbnQgZm9yIHN0ZG91dC9zdGRlcnIgZm9yIHVzZSBpbiBHbGVtbVNlcnZpY2VzLgorCS8vIGRvIG5vdCB1c2Ugb3IgcmVkaXJlY3QgU3lzdGVtLm91dCBhbmQgU3lzdGVtLmVyciwgYXMgdGhleSB3aWxsIGJlIHJlZGlyZWN0ZWQKKwkvLyBieSBvdGhlciBTZXJ2aWNlcyBpbiB0aGUgc2FtZSBnbGFzc2Zpc2ggSlZNLCBlLmcuIGJ5IHRoZSBXZm9ybVNlcnZpY2VzLgorCWZvdXQgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVPdXQpOworCWZlcnIgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVFcnIpOworCQorCS8vVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkKKwlsb2dfUmVxdWVzdChyZXF1ZXN0UGF0aCwgZnVuYyk7CisJCisJcmV0dXJuIHByb3BzOworCX0gLy8gaW5pdF9hbmRfbG9nX1JlcXVlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwlTdHJpbmcKKwkJc3RhdHVzOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3N0YXR1cy8iKTsKKwkKKwkvLyBodHRwU2VydmxldFJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW52KTsKKwkKKwlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+cHJvcGVydGllczwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPmRhdGFiYXNlPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIiksCisJCQkJCQkJc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSA9PSBudWxsID8gIm5vdCBmb3VuZCIgOgorCQkJCQkJCQlwcm9wcy5pc0VtcHR5KCkgPyAiZW1wdHkiIDogImxvYWRlZCIsCisJCQkJCQkJZm9ybWF0RGJOYW1lKHByb3BzKQorCQkJCQkJCSk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJY2xvc2VMb2dTdHJlYW1zKCk7CisJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiAKKwkgKiBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhOgorCSAqIAorCSAqIFBPU1Q6IC9pbmRleC9hZGQvOiB0ZXh0L3BsYWluCisJICogYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UuCisJICogVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQKKwkgKiBpbnRvIHRoZSBkYXRhYmFzZS4KKwkgKiBJbnB1dDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICovCisJQFBhdGgoImFkZCIpIEBQT1NUIEBDb25zdW1lcygidGV4dC9wbGFpbiIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhKFN0cmluZyBsaXN0KSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvUE9TVF9pbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIGFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJCisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2FkZC8iKTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBmb3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKGZlcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMsIGZvdXQsIGZlcnIpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNmw7xocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSwgcHJvcHMpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCQorCX0gLy8gZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCisJLyogZG9HRVRfdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVycyA9ICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vIik7CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlmaW5hbCBTdHJpbmcKKwkJZGJOYW1lID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+ZGF0YWJhc2U8L2I+OiAlczwvcD4iLCBmb3JtYXREYk5hbWUocHJvcHMpKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgZGJOYW1lICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyBkb0dFVF92aWV3REJJbmZvCisKKworCS8qIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0PnZlcnNpb24gIiArIHZlcnNpb24gKyAiIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIHJlcXVlc3QgPSAnIiArIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikgKyAiJzwvaT48L2g0PlxuIiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDE6PC9iPiAoQzIgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9PC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+e2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYyk8L2NvZGU+PC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbDwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPsOWbD9vcHRzPWZsZXgrY29tcCtvdGhlcitzcGVjPC9jb2RlPjwvcD4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMjo8L2I+IChpbnRlcm5hbCBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX0/cHJvcDE9WzAxMl0mYW1wO3Byb3AyPVswMTJdJmFtcDtzcGVjPVswMTJdPC9jb2RlPiAod2hlcmUgZWFjaCBwcm9wMSwgcHJvcDIsIHNwZWMgaXMgb3B0aW9uYWwpLjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw/cHJvcDE9MCZhbXA7cHJvcDI9MSZhbXA7c3BlYz0yPC9jb2RlPjwvcD4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfSIpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSclZCcgcHJvcDI9JyVkJyBzcGVjPSclZCcuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwkvKiAKKwlmb3IoaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJCX0JCisJICovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoIGxlbW1hSW5mby5vcHRzU2V0dGluZyA9PSBMZW1tYUluZm8uT1BUU19TRVRUSU5HX0MyICkgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMSxwcm9wMixzcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaW50CisJCW5XZnMgPSBsZW1tYUluZm8ubldmczsKKwkKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwkvLyBsb2cgb3V0Y29tZToKKwlpZiggbldmcyA8IDAgKQorCQlmb3V0LnByaW50ZigiRXJyb3I6ICVzOiByZXR1cm5pbmcgMCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMpOworCWVsc2UKKwkJZm91dC5wcmludGYoIkRlYnVnLiAlczogcmV0dXJuaW5nICVkIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYywgbldmcyk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIG5vdGU6CisJICogLSBpZiBCcm93c2VyIHJlcXVlc3Q6IEhUVFBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAndGV4dC9odG1sLC4uLnhtbC4uLicKKwkgKiAtIGlmIFdmb3JtU2VydmljZXMgcmVxdWVzdDogSHR0cFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICdhcHBsaWNhdGlvbi9qc29uJy4KKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqIAorCSAqIC0gc3VibWl0dGVkIFVSTCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hLCBpcyBpbnRlcnByZXRlZCBieSBnbGFzc2Zpc2ggYXMKKwkgKiAgIGJlaW5nIElTTy04ODU5LTEgZW5jb2RlZC4gV2hlbiB0aGUgcmVxdWVzdCBpcyBVVEYtOCBlbmNvZGVkLCBVbWxhdXRzIGFuZAorCSAqICAgJ8OfJyBhcmUgbWlzLWludGVycHJlZGVkLCBsZWFkaW5nIHRvIGFuIGVycm9uZXJvdXMgcmVxdWVzdCB0byB0aGUgRGVyYnkKKwkgKiAgIGRhdGFiYXNlLgorCSAqIC0gUmVxdWVzdGVkIGxlbW1hICdsZW1tYScgaGFzIHRvIGJlIHRyYW5zZm9ybWVkIHRvIFVURi04IGZpcnN0LgorCSAqIC0gbm90ZTogZXZlbiB3aGVuIHN1Ym1pdHRpbmcgdGhlIEdFVCByZXF1ZXN0IGJ5IHNwZWNpZnlpbmcgJ2NoYXJlbmNvZGU9VVRGLTgnLAorCSAqICAgZ2xhc3NmaXNoIGRvZXMgbm90IGNvbnZlcnQgaXQgYXV0b21hdGljYWxseSBhcyBleHBlY3RlZC4KKwkgKiAgIAorCSAqICAyMi4xMC4yMS9GQgorCSAqIAorCSAqIC0gaWYgYWNjZXB0PWFwcGxpY2F0aW9uL2pzb24gcmV0dXJuIFVURi04IChXZm9ybVNlcnZpY2VzKS4KKwkgKiAtIGVsc2UgaWYgYWNjZXB0PXRleHQvaHRtbCBkbyBub3QgdHJhbnNmb3JtIGNoYXJhY3RlciBlbmNvZGluZyAoQnJvd3NlcikuCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBDb25zdW1lcygiYXBwbGljYXRpb24vanNvbiwgdGV4dC9odG1sIikKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCQorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCWZpbmFsIGJvb2xlYW4KKwkJYkVuY29kZUxlbW1hID0gZmFsc2U7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CisJCisJLyogdGVzdDoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJaWYoIGJFbmNvZGVMZW1tYSApCisJCXsKKwkJLy8gd2hlbiBhY2NlcHRpbmcgSlNPTiwgdXJsIGhhcyB0byBiZSBjb252ZXJ0ZWQgdG8gVVRGLTgsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYToKKwkJdHJ5IHsKKwkJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obmV3IFN0cmluZyhsZW1tYS5nZXRCeXRlcygiSVNPLTg4NTktMSIpLCAidXRmLTgiKSk7CisJCQl9IAorCQljYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlMSkgeworCQkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCQlMZW1tYVJlc3BvbnNlCisJCQkJbGVtcmVzcCA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbXJlc3ApLmJ1aWxkKCk7CisJCQl9CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW1VURi04XSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCWVsc2UKKwkJeworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbdW5jaGFuZ2VkXSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCisJLyogZG9lcyBub3QgaGVscDoKKwkgU3RyaW5nCisJIAlyZXF1ZXN0Q2hhckVuY29kaW5nID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldENoYXJhY3RlckVuY29kaW5nKCk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiByZXF1ZXN0IGNoYXJhY3RlciBlbmNvZGluZyA9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RDaGFyRW5jb2RpbmcpOworCSovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXsKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQkvL3JldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJfQorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsJCisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCS8qCisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC90ZXN0L2luZm8vIik7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL2ZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJZm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2I3LzIwYzhjYzMyNDIzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9iNy8yMGM4Y2MzMjQyM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjExMTM5Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9iNy8yMGM4Y2MzMjQyM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpAQCAtMCwwICsxLDk2MiBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCisvKiAwLjEgOiAxNy4wNi4yMC9GQiAKKyAqIDAuMiA6IDI1LjEwLjIxL0ZCCisgKiAgICAgICBsb2dpbmcgb2YgdGhlIEFQSSBSZXF1ZXN0cy4KKyAqICAgICAgIGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorICogICAgICAgY29ycmVjdGluZyBjYWxsaW5nIG9mIGxlbW1hICsgcHJvcDEvcHJvcDIvc3BlYy4KKyAqICAgICAgIGhhbmRsaW5nIG9mIGxlbW1hdGEgd2l0aCAnw58nLgorICogCisgKiBHZW5lcmFsIGNvbW1lbnRzIHRvIHRoZSBlbmNvZGluZyBvZiBkZXJpdmF0aW9ucyBmcm9tIGxlbW1hIHRvIHdmcyBhbmQgaG93IHRoZXkgYXJlIGVuY29kZWQKKyAqIGluIHRoZSBEZXJieSBkYXRhYmFzZToKKyAqIAorICogR0xFTU0gZW5jb2Rpbmc6ICAKKyAqICAgXyBfIDogK0ZsZXggICAgICAgw5ZsZSAtPiDDlmwgICAgICAKKyAqICAgKyBfIDogK0NvbXAgICAgICAgw5ZsbGFtcGUgLT4gw5ZsIG9yIExhbXBlIChjb21wb3VuZCkuCisgKiAgIF8gKyA6ICtvdGhlciAgICAgIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuc2NodWggKG5vIGNvbXBvdW5kIGZvciAnVHVybnNjaHVoJywgb25seSBwcmVmaXgpLgorICogICArICsgOiArQ29tcCtvdGhlciBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybiArIFNjaHVoIChjb21wb3VuZCBmb3IgJ1NjaHVoJyArIFByZWZpeCkuCisgKiBDMiBsZW1tYXRpemF0aW9uIG9wdGlvbnM6CisgKiAgIEZsZXggIChpZGVudGljYWwgdG8gR2xlbW0pCisgKiAgIENvbXAgIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykKKyAqICAgT3RoZXIgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKS4KKyAqICAgU3BlYyAgKG9ubHkgQzI6IGluY2x1ZGVzIGFsbCB3ZnMgd2l0aCBoaXBoZW4gYW5kL29yIHNvbWUgbm9uLWFscGhhYmV0aWMgSVNPODg1OS0xIGNoYXJzKQorICogICAgICAgICBFLmcuIMOWbC1FeHBvcnRlLCAiTWFya2VuIi3DlmxlLgorICogRGVyYnkgRW5jb2Rpbmc6CisgKiAgcHJvcDEgCXByb3AyCXNwZWMgICAJbWVhbmluZyBpbiBDMjoKKyAqICAwCQkwCQktCQlGbGV4CisgKiAgMQkJMAkJLQkJQ29tcAorICogIDAJCTEJCS0JCU90aGVyIChwcmVmaXgpCisgKiAgMQkJMQkJLQkJQ29tcCArIE90aGVyCisgKiAgLQkJLQkJMAkJLVNwZWMKKyAqICAtCQktCQkxCQkrU3BlYworICogCisgKiBFeGFtcGxlczoKKyAqICZTY2h1aAkJCTogU2NodWgsIFNjaHVoZSwgLi4uIG9ubHkgZmxleGlvbnMKKyAqICZTY2h1aCtjb21wCQk6IFNjaHVoZSwgVHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzLgorICogJlNjaHVoK290aGVyCQk6IFNjaHVoZSwgQW50aXNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgcHJlZml4ZWQgd2ZzIChubyBjb21wb3VuZHMpLgorICogJlNjaHVoK2NvbXArb3RoZXI6IFNjaHVoZSwgQW50aXNjaHVoZSwgVHVybnNjaHVoZSwgQW50aXR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcyBhbmQgCisgKiAJCQkJCSAgcHJlZml4ZWQgc2luZ2xlIHdmcyAoQW50aXNjaHVoZSkgYW5kIHByZWZpeGVkIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtzcGVjCQk6ICJBbnRpIi1TY2h1aGUsIDY4Z2VyLVNjaHVoZS4uLiBtYXkgYmUgY29tYmluZWQgd2l0aCBldmVyeSBvcHRpb25zOiBhZGRzCisgKiAgICAgICAgICAgICAgICAgICAgd2ZzIHdpdGggaHlwaGVuIGFuZC9vciBub24tYWxwaGFiZXRpYyBjaGFycy4KKyAqIAorICogQ29udmVyc2lvbiBydWxlczoKKyAqIAorICogICZzY2hsaWXDn2VuIC0+IGludGVybmFsIHNlYXJjaCBmb3IgJ3NjaGxpZXNzZW4nLAorICogIGJlY2F1c2UgR2xlbW0gb3V0cHV0cyAnc3MnIGZvciAnw58nLgorICogIAorICogQ2hhcmFjdGVyIEVuY29kaW5nOgorICogCisgKiAtIFdoZW4gaW1wb3J0aW5nIHdmcyB0byB0aGUgRGVyYnkgRGF0YWJhc2Ugd2l0aCBkb0N1cmxHbGVtbVNlcnZpY2VzL2luZGV4TGVtbWF0YToKKyAqIAorICogICBJTlBVVDogd29yZGZvcm0gbGlzdCBpbiBbVVRGLThdIDogVVRGLTggaXMgdGhlbiBjb252ZXJ0ZWQgdG8gTGF0MSBmb3IgR2xlbW0sCisgKiAgICAgICAgICB0aGUgb3V0cHV0IG9mIEdsZW1tIFtMYXQxXSBpcyByZXR1cm5lZCB0byB0aGUgR2xlbW1TZXJ2aWNlcyB3aXRob3V0IHJlY29udmVyc2lvbgorICogICAgICAgICAgdG8gVVRGOCBhbmQgaW1wb3J0ZWQgaW50byBEZXJieSBEYXRhYmFzZSB1bmNoYW5nZWQuCisgKgkJCisgKi8KKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNC4xMS4yMSI7IAorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMiI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVQcm9wcwkJPSAiL1dFQi1JTkYvR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIjsKKwkKKwkvLyB0aGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgcmVhZCBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyAodGhlc2UgYXJlIHRoZSBkZWZhdWx0IHZhbHVlcyk6CisJcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggCQk9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCXByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQkJCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJQENvbnRleHQKKwlwcml2YXRlIFNlcnZsZXRDb250ZXh0IHNlcnZsZXRDb250ZXh0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZm91dAk9IG51bGw7CisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmZXJyCT0gbnVsbDsJCQorCQkKKwkvKiAKKyAJICogCisJICogLSBhZnRlciBsb2FkUHJvcGVydGllcywgc2V0cyB0aGUgY2xhc3MgdmFyaWFibGUgd2l0aCBsb2FkZWQgcHJvcGVydHkgdmFsdWVzLgorCSAqIAorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlHU19Xb3JraW5nUGF0aCAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiR1NfV29ya2luZ1BhdGgiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiKTsKKwlmbmFtZVdmcwkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVXZnMiLCAJICAgImdsX3dmc19pbi50eHQiKTsKKwlmbmFtZVdmcwkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lV2ZzOworCWZuYW1lT3V0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZU91dCIsIAkgICAiR2xlbW1TZXJ2aWNlcy5sb2ciKTsKKwlmbmFtZU91dAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lT3V0OworCWZuYW1lRXJyCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUVyciIsIAkgICAiR2xlbW1TZXJ2aWNlcy5lcnIiKTsKKwlmbmFtZUVycgkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lRXJyOworCWZuYW1lU2NyaXB0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVNjcmlwdCIsCSAgICJkb0dsZW1tIik7CisJZm5hbWVTY3JpcHQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVNjcmlwdDsKKwlmbmFtZUxlbWF0YQkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVMZW1hdGEiLCAgICAidG1wL2xlbTMiKTsKKwlmbmFtZUxlbWF0YQkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lTGVtYXRhOworCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyoKKwkgKiAgbG9nX1JlcXVlc3Q6CisJICogIAorCSAqICAtIHdyaXRlIGluZm8gYWJvdXQgQVBJIFJlcXVlc3QuCisJICogIFBhcmFtZXRlcnM6CisJICogIHJlcXVlc3RQYXRoCTogcGF0aCBvZiB3ZWJhcHAgYWRkcmVzc2VkIGJ5IHRoZSByZXF1ZXN0LgorCSAqICBmdW5jCQk6IG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHdoaWNoIGltcGxlbWVudHMgdGhlIHJlcXVlc3QuCisJICogIAorCSAqICAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBsb2dfUmVxdWVzdChTdHJpbmcgcmVxdWVzdFBhdGgsIFN0cmluZyBmdW5jKQorCQorCXsKKwkvLyB0cmFuc2Zvcm0gImRhdGVUdGltZSIgLT4gImRhdGUgdGltZSI6CisJCisJZm91dC5wcmludGYoIiMjI1xuIik7CisJZm91dC5wcmludGYoIiMjIyAlczogJXMgOiB2ZXJzPSclcycsIHZkYXRlPSclcycgcmVxdWVzdD0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdFBhdGgsIHZlcnNpb24sIHZlcnNpb25EYXRlLCAKKwkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCX0gLy8gbG9nX1JlcXVlc3QKKwkJCisJLyogZm9ybWF0RGJOYW1lCisJICogCisJICogLSBnZXRzIG5hbWUgb2YgRGF0YWJhc2UgdXNlZCBieSBEZXJieSBmcm9tIHByb3BzIAorCSAqICAgYW5kIGZvcm1hdCBpdCB0byBIVE1MLgorCSAqICAKKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgU3RyaW5nIGZvcm1hdERiTmFtZShQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlTdHJpbmcKKwkJZGJOYW1lOworCVN0cmluZworCQlkYlBhdGggPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlpbnQKKwkJaiA9IGRiUGF0aC5sYXN0SW5kZXhPZignLycpOworCQorCWlmKCBqID4gMCApCisJCWRiTmFtZSA9IGRiUGF0aC5zdWJzdHJpbmcoaisxKTsKKwllbHNlCisJCWRiTmFtZSA9IGRiUGF0aDsKKwkKKwlyZXR1cm4gZGJOYW1lOyAvLyAiPHA+PGI+RGF0YWJhc2U6ICIgKyBkYk5hbWUgKyAiPC9iPjwvcD5cbiI7CisJfSAvLyBmb3JtYXREYk5hbWUKKworCS8qCisJICogY2xvc2VMb2dTdHJlYW1zOgorCSAqIAorCSAqIC0gY2xvc2UgdGhlIGZvdXQvZmVyciBsb2cgc3RyZWFtcy4KKwkgKiAKKwkgKiAyNi4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBjbG9zZUxvZ1N0cmVhbXMoKQorCQorCXsKKwlpZiggZm91dCAhPSBudWxsKQorCQlmb3V0LmNsb3NlKCk7CisJZm91dCA9IG51bGw7CisJCisJaWYoIGZlcnIgIT0gbnVsbCApCisJCWZlcnIuY2xvc2UoKTsKKwlmZXJyID0gbnVsbDsKKwl9IC8vIGNsb3NlTG9nU3RyZWFtcworCQorCS8qIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisJICogCisJICogLSBsb2FkIEdsZW1tU2VydmljZXMucHJvcGVydGllcywgc2V0cyBHbGVtbVNlcnZpY2VzIGNvbnN0YW50cworCSAqICAgYW5kIGxvZ3MgdGhlIHJlcXVlc3QuCisJICogLSBsb2FkIHByb3BlcnRpZXMgYW5kIHNldCBjb25zdGFudHMgYmVmb3JlIGxvZ2dpbmcgYW55dGhpbmcsIGJlY2F1c2UKKwkgKiAgIGxvZ2dpbmcgd2lsbCBiZSBkb25lIGludG8gdGhlIGxhc3Qgc3Rkb3V0L3N0ZGVyciBvcGVuZWQgaW4gZ2xhc3NmaXNoJ3MgSlZNLAorCSAqICAgZS5nLiBpbiB0aGUgbG9nIG9mIGFub3RoZXIgU2VydmljZS4KKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgUHJvcGVydGllcyBpbml0X2FuZF9sb2dfUmVxdWVzdChTdHJpbmcgZnVuYywgU3RyaW5nIHJlcXVlc3RQYXRoKQorCQorCXsKKwlTdHJpbmcKKwkJcmVhbFBhdGggPSBzZXJ2bGV0Q29udGV4dC5nZXRSZWFsUGF0aChmbmFtZVByb3BzKTsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKGlmIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlQcm9wZXJ0aWVzCisJCXByb3BzID0gVXRpbHMubG9hZFByb3BlcnRpZXMoc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSwgZm5hbWVQcm9wcywgcmVhbFBhdGgsIGZhbHNlKTsKKwkKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gZm91dCBhbmQgZmVyciBhcyByZXBsYWNlbWVudCBmb3Igc3Rkb3V0L3N0ZGVyciBmb3IgdXNlIGluIEdsZW1tU2VydmljZXMuCisJLy8gZG8gbm90IHVzZSBvciByZWRpcmVjdCBTeXN0ZW0ub3V0IGFuZCBTeXN0ZW0uZXJyLCBhcyB0aGV5IHdpbGwgYmUgcmVkaXJlY3RlZAorCS8vIGJ5IG90aGVyIFNlcnZpY2VzIGluIHRoZSBzYW1lIGdsYXNzZmlzaCBKVk0sIGUuZy4gYnkgdGhlIFdmb3JtU2VydmljZXMuCisJZm91dCA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZU91dCk7CisJZmVyciA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZUVycik7CisJCisJLy9VdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQorCWxvZ19SZXF1ZXN0KHJlcXVlc3RQYXRoLCBmdW5jKTsKKwkKKwlyZXR1cm4gcHJvcHM7CisJfSAvLyBpbml0X2FuZF9sb2dfUmVxdWVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCVN0cmluZworCQlzdGF0dXM7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvc3RhdHVzLyIpOworCQorCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCQorCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5wcm9wZXJ0aWVzPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+ZGF0YWJhc2U8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSwKKwkJCQkJCQlzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpID09IG51bGwgPyAibm90IGZvdW5kIiA6CisJCQkJCQkJCXByb3BzLmlzRW1wdHkoKSA/ICJlbXB0eSIgOiAibG9hZGVkIiwKKwkJCQkJCQlmb3JtYXREYk5hbWUocHJvcHMpCisJCQkJCQkJKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIAorCSAqIGRvUE9TVF9pbXBvcnRMZW1tYURhdGE6CisJICogCisJICogUE9TVDogL2luZGV4L2FkZC86IHRleHQvcGxhaW4KKwkgKiBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZS4KKwkgKiBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZAorCSAqIGludG8gdGhlIGRhdGFiYXNlLgorCSAqIElucHV0OiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKi8KKwkKKwlAUGF0aCgiYWRkL3tkYXRhYmFzZW5hbWUiKSAKKwlAUE9TVCAKKwlAQ29uc3VtZXMoInRleHQvcGxhaW4iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9QT1NUX2ltcG9ydExlbW1hRGF0YShTdHJpbmcgbGlzdCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb1BPU1RfaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSBhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCQorCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9hZGQvIik7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgZm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShmZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzLCBmb3V0LCBmZXJyKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZsO8aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEsIHByb3BzKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBpbXBvcnRHbGVtbUxlbW1hdGEgcmV0dXJucyByPSVkLlxuIiwgZnVuYywgcik7CisJaWYoIG5FcnJvcnMgPT0gMCApCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiAiICsgbkVycm9ycyArICIgZXJyb3JzITwvcD4iOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGVuZGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJLy8gUmV0dXJuIEluZm9zOgorCXJldHVybiAKKwkJCSAgICI8aHRtbD4iICsKKwkJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwkKKwl9IC8vIGRvUE9TVF9pbXBvcnRMZW1tYURhdGEKKworCS8qIGRvR0VUX3ZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnMgPSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvLyIpOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJZmluYWwgU3RyaW5nCisJCWRiTmFtZSA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPmRhdGFiYXNlPC9iPjogJXM8L3A+IiwgZm9ybWF0RGJOYW1lKHByb3BzKSk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIGRiTmFtZSArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gZG9HRVRfdmlld0RCSW5mbworCisKKwkvKiBkb0dFVF92aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND52ZXJzaW9uICIgKyB2ZXJzaW9uICsgIiB2b20gIiArIHZlcnNpb25EYXRlICsgIiByZXF1ZXN0ID0gJyIgKyBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpICsgIic8L2k+PC9oND5cbiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAxOjwvYj4gKEMyIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfTwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPntsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpPC9jb2RlPjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw8L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT7Dlmw/b3B0cz1mbGV4K2NvbXArb3RoZXIrc3BlYzwvY29kZT48L3A+IiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDI6PC9iPiAoaW50ZXJuYWwgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9P3Byb3AxPVswMTJdJmFtcDtwcm9wMj1bMDEyXSZhbXA7c3BlYz1bMDEyXTwvY29kZT4gKHdoZXJlIGVhY2ggcHJvcDEsIHByb3AyLCBzcGVjIGlzIG9wdGlvbmFsKS48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsP3Byb3AxPTAmYW1wO3Byb3AyPTEmYW1wO3NwZWM9MjwvY29kZT48L3A+IjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0iKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0nJWQnIHByb3AyPSclZCcgc3BlYz0nJWQnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJLyogCisJZm9yKGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCQl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCQl9CQorCSAqLworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCBsZW1tYUluZm8ub3B0c1NldHRpbmcgPT0gTGVtbWFJbmZvLk9QVFNfU0VUVElOR19DMiApIAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEscHJvcDIsc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZyk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWludAorCQluV2ZzID0gbGVtbWFJbmZvLm5XZnM7CisJCisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJLy8gbG9nIG91dGNvbWU6CisJaWYoIG5XZnMgPCAwICkKKwkJZm91dC5wcmludGYoIkVycm9yOiAlczogcmV0dXJuaW5nIDAgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jKTsKKwllbHNlCisJCWZvdXQucHJpbnRmKCJEZWJ1Zy4gJXM6IHJldHVybmluZyAlZCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMsIG5XZnMpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiBub3RlOgorCSAqIC0gaWYgQnJvd3NlciByZXF1ZXN0OiBIVFRQU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ3RleHQvaHRtbCwuLi54bWwuLi4nCisJICogLSBpZiBXZm9ybVNlcnZpY2VzIHJlcXVlc3Q6IEh0dHBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAnYXBwbGljYXRpb24vanNvbicuCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKiAKKwkgKiAtIHN1Ym1pdHRlZCBVUkwsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYSwgaXMgaW50ZXJwcmV0ZWQgYnkgZ2xhc3NmaXNoIGFzCisJICogICBiZWluZyBJU08tODg1OS0xIGVuY29kZWQuIFdoZW4gdGhlIHJlcXVlc3QgaXMgVVRGLTggZW5jb2RlZCwgVW1sYXV0cyBhbmQKKwkgKiAgICfDnycgYXJlIG1pcy1pbnRlcnByZWRlZCwgbGVhZGluZyB0byBhbiBlcnJvbmVyb3VzIHJlcXVlc3QgdG8gdGhlIERlcmJ5CisJICogICBkYXRhYmFzZS4KKwkgKiAtIFJlcXVlc3RlZCBsZW1tYSAnbGVtbWEnIGhhcyB0byBiZSB0cmFuc2Zvcm1lZCB0byBVVEYtOCBmaXJzdC4KKwkgKiAtIG5vdGU6IGV2ZW4gd2hlbiBzdWJtaXR0aW5nIHRoZSBHRVQgcmVxdWVzdCBieSBzcGVjaWZ5aW5nICdjaGFyZW5jb2RlPVVURi04JywKKwkgKiAgIGdsYXNzZmlzaCBkb2VzIG5vdCBjb252ZXJ0IGl0IGF1dG9tYXRpY2FsbHkgYXMgZXhwZWN0ZWQuCisJICogICAKKwkgKiAgMjIuMTAuMjEvRkIKKwkgKiAKKwkgKiAtIGlmIGFjY2VwdD1hcHBsaWNhdGlvbi9qc29uIHJldHVybiBVVEYtOCAoV2Zvcm1TZXJ2aWNlcykuCisJICogLSBlbHNlIGlmIGFjY2VwdD10ZXh0L2h0bWwgZG8gbm90IHRyYW5zZm9ybSBjaGFyYWN0ZXIgZW5jb2RpbmcgKEJyb3dzZXIpLgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAQ29uc3VtZXMoImFwcGxpY2F0aW9uL2pzb24sIHRleHQvaHRtbCIpCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbzsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwlmaW5hbCBib29sZWFuCisJCWJFbmNvZGVMZW1tYSA9IGZhbHNlOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOworCQorCS8qIHRlc3Q6CisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWlmKCBiRW5jb2RlTGVtbWEgKQorCQl7CisJCS8vIHdoZW4gYWNjZXB0aW5nIEpTT04sIHVybCBoYXMgdG8gYmUgY29udmVydGVkIHRvIFVURi04LCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWE6CisJCXRyeSB7CisJCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKG5ldyBTdHJpbmcobGVtbWEuZ2V0Qnl0ZXMoIklTTy04ODU5LTEiKSwgInV0Zi04IikpOworCQkJfSAKKwkJY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZTEpIHsKKwkJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQkJTGVtbWFSZXNwb25zZQorCQkJCWxlbXJlc3AgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1yZXNwKS5idWlsZCgpOworCQkJfQorCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFtVVEYtOF0gb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWFJbmZvLmxlbW1hT3JpZywgb3B0aW9ucyk7CisJCX0KKwllbHNlCisJCXsKKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW3VuY2hhbmdlZF0gb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWFJbmZvLmxlbW1hT3JpZywgb3B0aW9ucyk7CisJCX0KKworCS8qIGRvZXMgbm90IGhlbHA6CisJIFN0cmluZworCSAJcmVxdWVzdENoYXJFbmNvZGluZyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRDaGFyYWN0ZXJFbmNvZGluZygpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVxdWVzdCBjaGFyYWN0ZXIgZW5jb2RpbmcgPSclcycuXG4iLCBmdW5jLCByZXF1ZXN0Q2hhckVuY29kaW5nKTsKKwkqLworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQl7CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJLy9yZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCX0KKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CQorCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwkvKgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvdGVzdC9pbmZvLyIpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9mb3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCWZvdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9iOS9lMDI1Nzk1NzUzM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYjkvZTAyNTc5NTc1MzNkMDAxYzEwYjFiMTdkZGQzMDllNmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNmMmQwZAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYjkvZTAyNTc5NTc1MzNkMDAxYzEwYjFiMTdkZGQzMDllNmYKQEAgLTAsMCArMSw5ODMgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworLyogMC4xIDogMTcuMDYuMjAvRkIgCisgKiAwLjIgOiAyNS4xMC4yMS9GQgorICogICAgICAgbG9naW5nIG9mIHRoZSBBUEkgUmVxdWVzdHMuCisgKiAgICAgICBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKyAqICAgICAgIGNvcnJlY3RpbmcgY2FsbGluZyBvZiBsZW1tYSArIHByb3AxL3Byb3AyL3NwZWMuCisgKiAgICAgICBoYW5kbGluZyBvZiBsZW1tYXRhIHdpdGggJ8OfJy4KKyAqIAorICogR2VuZXJhbCBjb21tZW50cyB0byB0aGUgZW5jb2Rpbmcgb2YgZGVyaXZhdGlvbnMgZnJvbSBsZW1tYSB0byB3ZnMgYW5kIGhvdyB0aGV5IGFyZSBlbmNvZGVkCisgKiBpbiB0aGUgRGVyYnkgZGF0YWJhc2U6CisgKiAKKyAqIEdMRU1NIGVuY29kaW5nOiAgCisgKiAgIF8gXyA6ICtGbGV4ICAgICAgIMOWbGUgLT4gw5ZsICAgICAgCisgKiAgICsgXyA6ICtDb21wICAgICAgIMOWbGxhbXBlIC0+IMOWbCBvciBMYW1wZSAoY29tcG91bmQpLgorICogICBfICsgOiArb3RoZXIgICAgICBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybnNjaHVoIChubyBjb21wb3VuZCBmb3IgJ1R1cm5zY2h1aCcsIG9ubHkgcHJlZml4KS4KKyAqICAgKyArIDogK0NvbXArb3RoZXIgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm4gKyBTY2h1aCAoY29tcG91bmQgZm9yICdTY2h1aCcgKyBQcmVmaXgpLgorICogQzIgbGVtbWF0aXphdGlvbiBvcHRpb25zOgorICogICBGbGV4ICAoaWRlbnRpY2FsIHRvIEdsZW1tKQorICogICBDb21wICAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpCisgKiAgIE90aGVyIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykuCisgKiAgIFNwZWMgIChvbmx5IEMyOiBpbmNsdWRlcyBhbGwgd2ZzIHdpdGggaGlwaGVuIGFuZC9vciBzb21lIG5vbi1hbHBoYWJldGljIElTTzg4NTktMSBjaGFycykKKyAqICAgICAgICAgRS5nLiDDlmwtRXhwb3J0ZSwgIk1hcmtlbiItw5ZsZS4KKyAqIERlcmJ5IEVuY29kaW5nOgorICogIHByb3AxIAlwcm9wMglzcGVjICAgCW1lYW5pbmcgaW4gQzI6CisgKiAgMAkJMAkJLQkJRmxleAorICogIDEJCTAJCS0JCUNvbXAKKyAqICAwCQkxCQktCQlPdGhlciAocHJlZml4KQorICogIDEJCTEJCS0JCUNvbXAgKyBPdGhlcgorICogIC0JCS0JCTAJCS1TcGVjCisgKiAgLQkJLQkJMQkJK1NwZWMKKyAqIAorICogRXhhbXBsZXM6CisgKiAmU2NodWgJCQk6IFNjaHVoLCBTY2h1aGUsIC4uLiBvbmx5IGZsZXhpb25zCisgKiAmU2NodWgrY29tcAkJOiBTY2h1aGUsIFR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtvdGhlcgkJOiBTY2h1aGUsIEFudGlzY2h1aGUuLi4gZmxleGlvbnMgYW5kIHByZWZpeGVkIHdmcyAobm8gY29tcG91bmRzKS4KKyAqICZTY2h1aCtjb21wK290aGVyOiBTY2h1aGUsIEFudGlzY2h1aGUsIFR1cm5zY2h1aGUsIEFudGl0dXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMgYW5kIAorICogCQkJCQkgIHByZWZpeGVkIHNpbmdsZSB3ZnMgKEFudGlzY2h1aGUpIGFuZCBwcmVmaXhlZCBjb21wb3VuZHMuCisgKiAmU2NodWgrc3BlYwkJOiAiQW50aSItU2NodWhlLCA2OGdlci1TY2h1aGUuLi4gbWF5IGJlIGNvbWJpbmVkIHdpdGggZXZlcnkgb3B0aW9uczogYWRkcworICogICAgICAgICAgICAgICAgICAgIHdmcyB3aXRoIGh5cGhlbiBhbmQvb3Igbm9uLWFscGhhYmV0aWMgY2hhcnMuCisgKiAKKyAqIENvbnZlcnNpb24gcnVsZXM6CisgKiAKKyAqICAmc2NobGllw59lbiAtPiBpbnRlcm5hbCBzZWFyY2ggZm9yICdzY2hsaWVzc2VuJywKKyAqICBiZWNhdXNlIEdsZW1tIG91dHB1dHMgJ3NzJyBmb3IgJ8OfJy4KKyAqICAKKyAqIENoYXJhY3RlciBFbmNvZGluZzoKKyAqIAorICogLSBXaGVuIGltcG9ydGluZyB3ZnMgdG8gdGhlIERlcmJ5IERhdGFiYXNlIHdpdGggZG9DdXJsR2xlbW1TZXJ2aWNlcy9pbmRleExlbW1hdGE6CisgKiAKKyAqICAgSU5QVVQ6IHdvcmRmb3JtIGxpc3QgaW4gW1VURi04XSA6IFVURi04IGlzIHRoZW4gY29udmVydGVkIHRvIExhdDEgZm9yIEdsZW1tLAorICogICAgICAgICAgdGhlIG91dHB1dCBvZiBHbGVtbSBbTGF0MV0gaXMgcmV0dXJuZWQgdG8gdGhlIEdsZW1tU2VydmljZXMgd2l0aG91dCByZWNvbnZlcnNpb24KKyAqICAgICAgICAgIHRvIFVURjggYW5kIGltcG9ydGVkIGludG8gRGVyYnkgRGF0YWJhc2UgdW5jaGFuZ2VkLgorICoJCQorICovCisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDQuMTEuMjEiOyAKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjIiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lUHJvcHMJCT0gIi9XRUItSU5GL0dsZW1tU2VydmljZXMucHJvcGVydGllcyI7CisJCisJLy8gdGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHJlYWQgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgKHRoZXNlIGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMpOgorCXByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoIAkJPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCUBDb250ZXh0CisJcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBzZXJ2bGV0Q29udGV4dDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZvdXQJPSBudWxsOworCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZmVycgk9IG51bGw7CQkKKwkJCisJLyogCisgCSAqIAorCSAqIC0gYWZ0ZXIgbG9hZFByb3BlcnRpZXMsIHNldHMgdGhlIGNsYXNzIHZhcmlhYmxlIHdpdGggbG9hZGVkIHByb3BlcnR5IHZhbHVlcy4KKwkgKiAKKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJR1NfV29ya2luZ1BhdGggCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgIkdTX1dvcmtpbmdQYXRoIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIik7CisJZm5hbWVXZnMJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lV2ZzIiwgCSAgICJnbF93ZnNfaW4udHh0Iik7CisJZm5hbWVXZnMJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVdmczsKKwlmbmFtZU91dAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVPdXQiLCAJICAgIkdsZW1tU2VydmljZXMubG9nIik7CisJZm5hbWVPdXQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZU91dDsKKwlmbmFtZUVycgkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVFcnIiLCAJICAgIkdsZW1tU2VydmljZXMuZXJyIik7CisJZm5hbWVFcnIJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUVycjsKKwlmbmFtZVNjcmlwdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVTY3JpcHQiLAkgICAiZG9HbGVtbSIpOworCWZuYW1lU2NyaXB0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVTY3JpcHQ7CisJZm5hbWVMZW1hdGEJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lTGVtYXRhIiwgICAgInRtcC9sZW0zIik7CisJZm5hbWVMZW1hdGEJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUxlbWF0YTsKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qCisJICogIGxvZ19SZXF1ZXN0OgorCSAqICAKKwkgKiAgLSB3cml0ZSBpbmZvIGFib3V0IEFQSSBSZXF1ZXN0LgorCSAqICBQYXJhbWV0ZXJzOgorCSAqICByZXF1ZXN0UGF0aAk6IHBhdGggb2Ygd2ViYXBwIGFkZHJlc3NlZCBieSB0aGUgcmVxdWVzdC4KKwkgKiAgZnVuYwkJOiBuYW1lIG9mIHRoZSBmdW5jdGlvbiB3aGljaCBpbXBsZW1lbnRzIHRoZSByZXF1ZXN0LgorCSAqICAKKwkgKiAgMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgbG9nX1JlcXVlc3QoU3RyaW5nIHJlcXVlc3RQYXRoLCBTdHJpbmcgZnVuYykKKwkKKwl7CisJLy8gdHJhbnNmb3JtICJkYXRlVHRpbWUiIC0+ICJkYXRlIHRpbWUiOgorCQorCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCWZvdXQucHJpbnRmKCIjIyMgJXM6ICVzIDogdmVycz0nJXMnLCB2ZGF0ZT0nJXMnIHJlcXVlc3Q9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RQYXRoLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgCisJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwl9IC8vIGxvZ19SZXF1ZXN0CisJCQorCS8qIGZvcm1hdERiTmFtZQorCSAqIAorCSAqIC0gZ2V0cyBuYW1lIG9mIERhdGFiYXNlIHVzZWQgYnkgRGVyYnkgZnJvbSBwcm9wcyAKKwkgKiAgIGFuZCBmb3JtYXQgaXQgdG8gSFRNTC4KKwkgKiAgCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFN0cmluZyBmb3JtYXREYk5hbWUoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJU3RyaW5nCisJCWRiTmFtZTsKKwlTdHJpbmcKKwkJZGJQYXRoID0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJaW50CisJCWogPSBkYlBhdGgubGFzdEluZGV4T2YoJy8nKTsKKwkKKwlpZiggaiA+IDAgKQorCQlkYk5hbWUgPSBkYlBhdGguc3Vic3RyaW5nKGorMSk7CisJZWxzZQorCQlkYk5hbWUgPSBkYlBhdGg7CisJCisJcmV0dXJuIGRiTmFtZTsgLy8gIjxwPjxiPkRhdGFiYXNlOiAiICsgZGJOYW1lICsgIjwvYj48L3A+XG4iOworCX0gLy8gZm9ybWF0RGJOYW1lCisKKwkvKgorCSAqIGNsb3NlTG9nU3RyZWFtczoKKwkgKiAKKwkgKiAtIGNsb3NlIHRoZSBmb3V0L2ZlcnIgbG9nIHN0cmVhbXMuCisJICogCisJICogMjYuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgY2xvc2VMb2dTdHJlYW1zKCkKKwkKKwl7CisJaWYoIGZvdXQgIT0gbnVsbCkKKwkJZm91dC5jbG9zZSgpOworCWZvdXQgPSBudWxsOworCQorCWlmKCBmZXJyICE9IG51bGwgKQorCQlmZXJyLmNsb3NlKCk7CisJZmVyciA9IG51bGw7CisJfSAvLyBjbG9zZUxvZ1N0cmVhbXMKKwkKKwkvKiBpbml0X2FuZF9sb2dfUmVxdWVzdAorCSAqIAorCSAqIC0gbG9hZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMsIHNldHMgR2xlbW1TZXJ2aWNlcyBjb25zdGFudHMKKwkgKiAgIGFuZCBsb2dzIHRoZSByZXF1ZXN0LgorCSAqIC0gbG9hZCBwcm9wZXJ0aWVzIGFuZCBzZXQgY29uc3RhbnRzIGJlZm9yZSBsb2dnaW5nIGFueXRoaW5nLCBiZWNhdXNlCisJICogICBsb2dnaW5nIHdpbGwgYmUgZG9uZSBpbnRvIHRoZSBsYXN0IHN0ZG91dC9zdGRlcnIgb3BlbmVkIGluIGdsYXNzZmlzaCdzIEpWTSwKKwkgKiAgIGUuZy4gaW4gdGhlIGxvZyBvZiBhbm90aGVyIFNlcnZpY2UuCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFByb3BlcnRpZXMgaW5pdF9hbmRfbG9nX1JlcXVlc3QoU3RyaW5nIGZ1bmMsIFN0cmluZyByZXF1ZXN0UGF0aCkKKwkKKwl7CisJU3RyaW5nCisJCXJlYWxQYXRoID0gc2VydmxldENvbnRleHQuZ2V0UmVhbFBhdGgoZm5hbWVQcm9wcyk7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtIChpZiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJUHJvcGVydGllcworCQlwcm9wcyA9IFV0aWxzLmxvYWRQcm9wZXJ0aWVzKHNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcyksIGZuYW1lUHJvcHMsIHJlYWxQYXRoLCBmYWxzZSk7CisJCisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIGZvdXQgYW5kIGZlcnIgYXMgcmVwbGFjZW1lbnQgZm9yIHN0ZG91dC9zdGRlcnIgZm9yIHVzZSBpbiBHbGVtbVNlcnZpY2VzLgorCS8vIGRvIG5vdCB1c2Ugb3IgcmVkaXJlY3QgU3lzdGVtLm91dCBhbmQgU3lzdGVtLmVyciwgYXMgdGhleSB3aWxsIGJlIHJlZGlyZWN0ZWQKKwkvLyBieSBvdGhlciBTZXJ2aWNlcyBpbiB0aGUgc2FtZSBnbGFzc2Zpc2ggSlZNLCBlLmcuIGJ5IHRoZSBXZm9ybVNlcnZpY2VzLgorCWZvdXQgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVPdXQpOworCWZlcnIgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVFcnIpOworCQorCS8vVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkKKwlsb2dfUmVxdWVzdChyZXF1ZXN0UGF0aCwgZnVuYyk7CisJCisJcmV0dXJuIHByb3BzOworCX0gLy8gaW5pdF9hbmRfbG9nX1JlcXVlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwlTdHJpbmcKKwkJc3RhdHVzOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3N0YXR1cy8iKTsKKwkKKwkvLyBodHRwU2VydmxldFJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW52KTsKKwkKKwlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+cHJvcGVydGllczwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPmRhdGFiYXNlPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIiksCisJCQkJCQkJc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSA9PSBudWxsID8gIm5vdCBmb3VuZCIgOgorCQkJCQkJCQlwcm9wcy5pc0VtcHR5KCkgPyAiZW1wdHkiIDogImxvYWRlZCIsCisJCQkJCQkJZm9ybWF0RGJOYW1lKHByb3BzKQorCQkJCQkJCSk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJY2xvc2VMb2dTdHJlYW1zKCk7CisJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiAKKwkgKiBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhOgorCSAqIAorCSAqIFBPU1Q6IC9pbmRleC9hZGQve2RhdGFiYXNlbmFtZX06IHRleHQvcGxhaW4KKwkgKiAKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGxpc3QJCSA6IHRoZSBsaXN0IG9mIHdmcyBzZW50IGluIHRoZSBib2R5IG9mIHRoZSBQT1NUIHJlcXVlc3QuCisJICogZGJwYXRoCSA6IHRoZSBsb2NhdGlvbiBvZiB0aGUgZGF0YWJhc2Ugd2hlcmUgdGhlIGxlbW1hK3dmcyBhcmUgdG8gYmUgc3RvcmVkLgorCSAqICAgICAgICAgICAgIGVuY29kZWQgYXMgIi5ob21lLnVzZXIuS29yQVAuLi4uIiwgbXVzdCBiZSBjb252ZXJ0ZWQgdG8KKwkgKiAgICAgICAgICAgICAiL2hvbWUvdXNlci9Lb3JBUC8uLi4iCisJICogICAgICAgICAgICAgSU1QT1JUQU5UOiBkbyBub3QgdXNlIGEgJy4nIGZvciBlbmNvZGluZyBhbnl0aGluZyBlbHNlIHRoYW4gYSAnLycuCisJICogTm90ZXMgICAgIDoKKwkgKiAtIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlIGxvY2F0ZWQgYXQgJ2RhdGFiYXNlbmFtZScuCisJICogLSBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZCBpbnRvIGEgRGVyYnkgZGF0YWJhc2UuCisJICogSW5wdXQJIDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICogMDQuMTEuMjEvRkIKKwkgKiAtIHN1Ym1pdHRlZCBkYXRhYmFzZSBwYXRoLgorCSAqLworCQorCUBQYXRoKCJhZGQve2RhdGFiYXNlcGF0aH0iKSAKKwlAUE9TVCAKKwlAQ29uc3VtZXMoInRleHQvcGxhaW4iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCQkJCQkJCSgKKwkJCQkJCQlTdHJpbmcgCQkJCQkJCQkJbGlzdCwKKwkJCQkJCQlAUGF0aFBhcmFtKHZhbHVlPSJkYXRhYmFzZXBhdGgiKSBTdHJpbmcgZGJwYXRoCisJCQkJCQkJKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvUE9TVF9pbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIAorCQlhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gbnVsbDsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2FkZC97ZGJwYXRofSIpOworCQorCWRicGF0aC5yZXBsYWNlKCcuJywgJy8nKTsKKwkKKwlmb3V0LnByaW50ZigiSW5mbyA6ICVzOiBzZWxlY3RlZCBkYXRhYmFzZSBwYXRoID0gJyVzJy5cbiIsIGZ1bmMsIGRicGF0aCk7CisJZm91dC5wcmludGYoIkluZm8gOiAlczogd29ya2luZyBkaXJlY3RvcnkgPSAnJXMnLlxuIiwgZnVuYywgR1NfV29ya2luZ1BhdGgpOworCQorCS8vIHNldCBmaWxlIGFuZCBwYXRocyBhZnRlciBHU19Xb3JraW5nUGF0aCBoYXMgYmVlbiBpbml0aWFsaXNlZDoKKwlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgZm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShmZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzLCBmb3V0LCBmZXJyKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZsO8aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEsIHByb3BzLCBkYnBhdGgpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCQorCX0gLy8gZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCisJLyogZG9HRVRfdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVycyA9ICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vIik7CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlmaW5hbCBTdHJpbmcKKwkJZGJOYW1lID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+ZGF0YWJhc2U8L2I+OiAlczwvcD4iLCBmb3JtYXREYk5hbWUocHJvcHMpKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgZGJOYW1lICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyBkb0dFVF92aWV3REJJbmZvCisKKworCS8qIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0PnZlcnNpb24gIiArIHZlcnNpb24gKyAiIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIHJlcXVlc3QgPSAnIiArIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikgKyAiJzwvaT48L2g0PlxuIiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDE6PC9iPiAoQzIgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9PC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+e2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYyk8L2NvZGU+PC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbDwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPsOWbD9vcHRzPWZsZXgrY29tcCtvdGhlcitzcGVjPC9jb2RlPjwvcD4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMjo8L2I+IChpbnRlcm5hbCBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX0/cHJvcDE9WzAxMl0mYW1wO3Byb3AyPVswMTJdJmFtcDtzcGVjPVswMTJdPC9jb2RlPiAod2hlcmUgZWFjaCBwcm9wMSwgcHJvcDIsIHNwZWMgaXMgb3B0aW9uYWwpLjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw/cHJvcDE9MCZhbXA7cHJvcDI9MSZhbXA7c3BlYz0yPC9jb2RlPjwvcD4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfSIpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSclZCcgcHJvcDI9JyVkJyBzcGVjPSclZCcuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwkvKiAKKwlmb3IoaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJCX0JCisJICovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoIGxlbW1hSW5mby5vcHRzU2V0dGluZyA9PSBMZW1tYUluZm8uT1BUU19TRVRUSU5HX0MyICkgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMSxwcm9wMixzcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaW50CisJCW5XZnMgPSBsZW1tYUluZm8ubldmczsKKwkKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwkvLyBsb2cgb3V0Y29tZToKKwlpZiggbldmcyA8IDAgKQorCQlmb3V0LnByaW50ZigiRXJyb3I6ICVzOiByZXR1cm5pbmcgMCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMpOworCWVsc2UKKwkJZm91dC5wcmludGYoIkRlYnVnLiAlczogcmV0dXJuaW5nICVkIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYywgbldmcyk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIG5vdGU6CisJICogLSBpZiBCcm93c2VyIHJlcXVlc3Q6IEhUVFBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAndGV4dC9odG1sLC4uLnhtbC4uLicKKwkgKiAtIGlmIFdmb3JtU2VydmljZXMgcmVxdWVzdDogSHR0cFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICdhcHBsaWNhdGlvbi9qc29uJy4KKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqIAorCSAqIC0gc3VibWl0dGVkIFVSTCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hLCBpcyBpbnRlcnByZXRlZCBieSBnbGFzc2Zpc2ggYXMKKwkgKiAgIGJlaW5nIElTTy04ODU5LTEgZW5jb2RlZC4gV2hlbiB0aGUgcmVxdWVzdCBpcyBVVEYtOCBlbmNvZGVkLCBVbWxhdXRzIGFuZAorCSAqICAgJ8OfJyBhcmUgbWlzLWludGVycHJlZGVkLCBsZWFkaW5nIHRvIGFuIGVycm9uZXJvdXMgcmVxdWVzdCB0byB0aGUgRGVyYnkKKwkgKiAgIGRhdGFiYXNlLgorCSAqIC0gUmVxdWVzdGVkIGxlbW1hICdsZW1tYScgaGFzIHRvIGJlIHRyYW5zZm9ybWVkIHRvIFVURi04IGZpcnN0LgorCSAqIC0gbm90ZTogZXZlbiB3aGVuIHN1Ym1pdHRpbmcgdGhlIEdFVCByZXF1ZXN0IGJ5IHNwZWNpZnlpbmcgJ2NoYXJlbmNvZGU9VVRGLTgnLAorCSAqICAgZ2xhc3NmaXNoIGRvZXMgbm90IGNvbnZlcnQgaXQgYXV0b21hdGljYWxseSBhcyBleHBlY3RlZC4KKwkgKiAgIAorCSAqICAyMi4xMC4yMS9GQgorCSAqIAorCSAqIC0gaWYgYWNjZXB0PWFwcGxpY2F0aW9uL2pzb24gcmV0dXJuIFVURi04IChXZm9ybVNlcnZpY2VzKS4KKwkgKiAtIGVsc2UgaWYgYWNjZXB0PXRleHQvaHRtbCBkbyBub3QgdHJhbnNmb3JtIGNoYXJhY3RlciBlbmNvZGluZyAoQnJvd3NlcikuCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBDb25zdW1lcygiYXBwbGljYXRpb24vanNvbiwgdGV4dC9odG1sIikKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCQorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCWZpbmFsIGJvb2xlYW4KKwkJYkVuY29kZUxlbW1hID0gZmFsc2U7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CisJCisJLyogdGVzdDoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJaWYoIGJFbmNvZGVMZW1tYSApCisJCXsKKwkJLy8gd2hlbiBhY2NlcHRpbmcgSlNPTiwgdXJsIGhhcyB0byBiZSBjb252ZXJ0ZWQgdG8gVVRGLTgsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYToKKwkJdHJ5IHsKKwkJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obmV3IFN0cmluZyhsZW1tYS5nZXRCeXRlcygiSVNPLTg4NTktMSIpLCAidXRmLTgiKSk7CisJCQl9IAorCQljYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlMSkgeworCQkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCQlMZW1tYVJlc3BvbnNlCisJCQkJbGVtcmVzcCA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbXJlc3ApLmJ1aWxkKCk7CisJCQl9CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW1VURi04XSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCWVsc2UKKwkJeworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbdW5jaGFuZ2VkXSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCisJLyogZG9lcyBub3QgaGVscDoKKwkgU3RyaW5nCisJIAlyZXF1ZXN0Q2hhckVuY29kaW5nID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldENoYXJhY3RlckVuY29kaW5nKCk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiByZXF1ZXN0IGNoYXJhY3RlciBlbmNvZGluZyA9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RDaGFyRW5jb2RpbmcpOworCSovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXsKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQkvL3JldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJfQorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsJCisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCS8qCisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC90ZXN0L2luZm8vIik7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL2ZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJZm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2JiL2EwNTI0NjQ1OTQxYTAwMWExOWIyODc1ZGUwMjcyYzZjIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9iYi9hMDUyNDY0NTk0MWEwMDFhMTliMjg3NWRlMDI3MmM2YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2JmZGVmCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9iYi9hMDUyNDY0NTk0MWEwMDFhMTliMjg3NWRlMDI3MmM2YwpAQCAtMCwwICsxLDU1IEBACis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiAKKwl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKwl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICA8Z3JvdXBJZD5kZS5rb3JhcC5zZXJ2aWNlczwvZ3JvdXBJZD4KKyAgPGFydGlmYWN0SWQ+R2xlbW1TZXJ2aWNlczI8L2FydGlmYWN0SWQ+CisgIDx2ZXJzaW9uPjAuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgorICA8bmFtZT5HbGVtbVNlcnZpY2VzPC9uYW1lPgorICAKKyAgPGRlc2NyaXB0aW9uPlJFU1RmdWxsIEdsZW1tU2VydmljZXMgZsO8ciBLb3JBUDwvZGVzY3JpcHRpb24+CisgIAorICA8ZGVwZW5kZW5jaWVzPgorICAgIDxkZXBlbmRlbmN5PgorICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+CisgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KKyAgICAgIDx2ZXJzaW9uPjMuOC4xPC92ZXJzaW9uPgorICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgIDwvZGVwZW5kZW5jeT4KKyAgIDxkZXBlbmRlbmN5PgorICAgIDxncm91cElkPmphdmF4LnNlcnZsZXQ8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+c2VydmxldC1hcGk8L2FydGlmYWN0SWQ+CisgICAgPHZlcnNpb24+Mi41PC92ZXJzaW9uPgorICAgPC9kZXBlbmRlbmN5PgorICAgPCEtLSBodHRwczovL212bnJlcG9zaXRvcnkuY29tL2FydGlmYWN0L2phdmF4LndzLnJzL2phdmF4LndzLnJzLWFwaSAtLT4KKyAgIDxkZXBlbmRlbmN5PgorICAgIDxncm91cElkPmphdmF4LndzLnJzPC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPmphdmF4LndzLnJzLWFwaTwvYXJ0aWZhY3RJZD4KKyAgICA8dmVyc2lvbj4yLjA8L3ZlcnNpb24+CisgICA8L2RlcGVuZGVuY3k+CisgIDwvZGVwZW5kZW5jaWVzPgorICAKKyAgPGJ1aWxkPgorICAgIDxzb3VyY2VEaXJlY3Rvcnk+c3JjPC9zb3VyY2VEaXJlY3Rvcnk+CisgICAgPHBsdWdpbnM+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1jb21waWxlci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjMuNy4wPC92ZXJzaW9uPgorICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8c291cmNlPjEuODwvc291cmNlPgorICAgICAgICAgIDx0YXJnZXQ+MS44PC90YXJnZXQ+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvcGx1Z2luPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4td2FyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+My4yLjE8L3ZlcnNpb24+CisgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgIDx3YXJTb3VyY2VEaXJlY3Rvcnk+V2ViQ29udGVudDwvd2FyU291cmNlRGlyZWN0b3J5PgorICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICA8L3BsdWdpbj4KKyAgICA8L3BsdWdpbnM+CisgICAgPGZpbmFsTmFtZT5HbGVtbVNlcnZpY2VzPC9maW5hbE5hbWU+CisgIDwvYnVpbGQ+CisgIAorPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYmUvMzA3ZDg5ZTE0MzNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2JlLzMwN2Q4OWUxNDMzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZTU5YmEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2JlLzMwN2Q4OWUxNDMzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsMzIgQEAKKyMgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzOgorIyBleHBlY3RlZCBpbiAvV0VCLUlORi8uCisKKyMjIEdlbmVyYWwgcHJvcGVydGllczoKK0dTX1dvcmtpbmdQYXRoID0gL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvd29yay1saXZlCisKKyMgR2xlbW1EQiBwcm9wZXJ0aWVzOgorIyBEZXJieUFyY2hpdkRCID0gZGF0YWJhc2UgZm9yIHRoZSB3Zm9ybSBsaXN0IG9mIGEgd2hvbGUgQzItQXJjaGl2ZToKK2ZuYW1lREIgCQk9IC9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieUFyY2hpdmVEQgorI2ZuYW1lREIgCQk9IC9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQjIKK3NlcnZlckhvc3QJPSAvL2xvY2FsaG9zdDoxNTI3LworCisjIyBHbGVtbTogcHJvcGVydGllcyBmb3IgbGVtbWF0aXppbmc6CisKKyMgZm5hbWVTY3JpcHQgPSBHU19Xb3JraW5nUGF0aCArIGRvR2xlbW0KK2ZuYW1lU2NyaXB0ID0gZG9HbGVtbQorIyBmbmFtZVdmcyA9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKK2ZuYW1lV2ZzID0gZ2xfd2ZzX2luLnR4dAorIyBmbmFtZVNjcmlwdAk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKK2ZuYW1lU2NyaXB0CT0gZG9HbGVtbQorIyBmbmFtZUxlbWF0YQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKyMgbGVtMyBleHBlY3RlZCB0byBiZSBJU084ODU5LTEgZW5jb2RlZC4KK2ZuYW1lTGVtYXRhCT0gdG1wL2xlbTMKKworIyMgTG9naW5nOgorCisjIGZuYW1lT3V0ID0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKyNmbmFtZU91dCA9IEdsZW1tU2VydmljZXMtdC5sb2cKK2ZuYW1lT3V0ID0gR2xlbW1TZXJ2aWNlcy5sb2cKKyMgZm5hbWVFcnIgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisjZm5hbWVFcnIgPSBHbGVtbVNlcnZpY2VzLXQuZXJyCitmbmFtZUVyciA9IEdsZW1tU2VydmljZXMuZXJyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2JlLzgwYmRhZDU2YTUyYTAwMWMxYzQxY2U1NTllYTVlMTZiIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9iZS84MGJkYWQ1NmE1MmEwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTcxM2ZlCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9iZS84MGJkYWQ1NmE1MmEwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpAQCAtMCwwICsxLDY2MiBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDYuMTAuMjEiOyAvLyIxNy4wNi4yMCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4xIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkKKwkKKwl7CisJCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJCVN0cmluZworCQkJc3RhdHVzOworCQlVdGlscworCQkJdSA9IG5ldyBVdGlscygpOworCQlQcm9wZXJ0aWVzCisJCQlwcm9wczsKKwkJCisJCS8vIHRlc3QKKwkJcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworCQlwcm9wcy5zZXRQcm9wZXJ0eSgicCIsICJ0ZXN0Iik7CisJCUZpbGVPdXRwdXRTdHJlYW0KKwkJCW91dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKCJnbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiKTsKKwkJcHJvcHMuc3RvcmUob3V0LCAgInRlc3QgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIik7OworCQkKKwkJLy8gZW5kIG90ZXN0CisJCQorCQkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwkJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisJCVN5c3RlbS5vdXQucHJpbnRmKCJBUEk6ICVzOiAvaW5kZXgvc3RhdHVzLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisKKwkJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogUE9TVDogL2luZGV4L2FkZC86IHRleHQvcGxhaW4KKwkgKiBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZS4KKwkgKiBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZAorCSAqIGludG8gdGhlIGRhdGFiYXNlLgorCSAqIElucHV0OiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKi8KKwlAUGF0aCgiYWRkIikgQFBPU1QgQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGltcG9ydExlbW1hRGF0YShTdHJpbmcgbGlzdCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIGFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJCisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9hZGQvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNm77+9aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJfQorCisJLyogdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gdmlld0RCSW5mbworCisKKwkvKiB2aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIiAtIFN0YXR1czogPGk+V29yayBpbiBwcm9ncmVzcy4uLiE8L2k+KTwvaDQ+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCAhb3B0aW9ucy5lcXVhbHMoInVuZGVmIikpCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxL3Byb3AyL3NwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBHbGVtbVNlcnZpY2VzICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb25EYXRlLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJLy9TeXN0ZW0ub3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYmUvYjAwZDY1ZDM4NjJiMDAxYzFjNDFjZTU1OWVhNWUxNmIgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2JlL2IwMGQ2NWQzODYyYjAwMWMxYzQxY2U1NTllYTVlMTZiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYTdlY2MKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2JlL2IwMGQ2NWQzODYyYjAwMWMxYzQxY2U1NTllYTVlMTZiCkBAIC0wLDAgKzEsNzA5IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNi4xMC4yMSI7IC8vIjE3LjA2LjIwIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjEiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJCVN0cmluZworCQkJc3RhdHVzOworCQlVdGlscworCQkJdSA9IG5ldyBVdGlscygpOworCQlQcm9wZXJ0aWVzCisJCQlwcm9wczsKKwkJCisJCS8vIHJlYWQgdGVzdAorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCS8vSHR0cFNlcnZsZXRDb250ZXh0CisJCQorCQkvLyBodHRwU2VydmxldFJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW52KTsKKwkJSW5wdXRTdHJlYW0KKwkJCWluUHJvcCA9IEdsZW1tU2VydmljZXMuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKCJHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiKTsKKwkJCisJCXRyeSB7CisJCQlwcm9wcy5sb2FkKGluUHJvcCk7CisJCQlTZXQ8RW50cnk8T2JqZWN0LE9iamVjdD4+CisJCQkJcHJvcHNTZXQgPSBwcm9wcy5lbnRyeVNldCgpOworCQkJCisJCQlmb3IoRW50cnk8T2JqZWN0LCBPYmplY3Q+IHByb3BFbnRyeSA6IHByb3BzU2V0KQorCQkJCXsKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wICVzID0gJyVzJy5cbiIsIGZ1bmMsIHByb3BFbnRyeS5nZXRLZXkoKSwgcHJvcEVudHJ5LmdldFZhbHVlKCkpOworCQkJCX0KKwkJCQl9IAorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGxvYWQgcHJvcHMgJ0dsZW1tU2VydmljZXMucHJvcGVydGllcychIiwgIGZ1bmMpOworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQkKKwkJLy8gZW5kIG9mIHJlYWQgdGVzdAorCQkKKwkJLy8gdGVzdAorCQkvKgorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCQorCQkgKiBwcm9wcy5zZXRQcm9wZXJ0eSgicCIsICJ0ZXN0Iik7CisJCSAqCisJCUZpbGVPdXRwdXRTdHJlYW0gb3V0OworCQl0cnkgeworCQkJb3V0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oImdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOworCQkJcHJvcHMuc3RvcmUob3V0LCAgInRlc3QgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIik7CisJCQl9IAorCQljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfTsKKwkJKi8KKwkJCisJCS8vIGVuZCBvdGVzdAorCQkKKwkJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiQVBJOiAlczogL2luZGV4L3N0YXR1cy8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCisJCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCQlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIFBPU1Q6IC9pbmRleC9hZGQvOiB0ZXh0L3BsYWluCisJICogYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UuCisJICogVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQKKwkgKiBpbnRvIHRoZSBkYXRhYmFzZS4KKwkgKiBJbnB1dDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICovCisJQFBhdGgoImFkZCIpIEBQT1NUIEBDb25zdW1lcygidGV4dC9wbGFpbiIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBpbXBvcnRMZW1tYURhdGEoU3RyaW5nIGxpc3QpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSBhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCQorCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvYWRkLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZu+/vWhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCX0KKworCS8qIHZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIHZpZXdEQkluZm8KKworCisJLyogdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgLSBTdGF0dXM6IDxpPldvcmsgaW4gcHJvZ3Jlc3MuLi4hPC9pPik8L2g0PlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggIW9wdGlvbnMuZXF1YWxzKCJ1bmRlZiIpKQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMS9wcm9wMi9zcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogR2xlbW1TZXJ2aWNlcyAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uRGF0ZSwgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCS8vU3lzdGVtLm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2JmL2MwOTg3NjFjODIyYjAwMWMxYzQxY2U1NTllYTVlMTZiIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9iZi9jMDk4NzYxYzgyMmIwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2QwODIyCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9iZi9jMDk4NzYxYzgyMmIwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpAQCAtMCwwICsxLDY5MyBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNi4xMC4yMSI7IC8vIjE3LjA2LjIwIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjEiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJCVN0cmluZworCQkJc3RhdHVzOworCQlVdGlscworCQkJdSA9IG5ldyBVdGlscygpOworCQlQcm9wZXJ0aWVzCisJCQlwcm9wczsKKwkJCisJCS8vIHJlYWQgdGVzdAorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCS8vSHR0cFNlcnZsZXRDb250ZXh0CisJCQorCQkvLyBodHRwU2VydmxldFJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW52KTsKKwkJSW5wdXRTdHJlYW0KKwkJCWluUHJvcCA9IEdsZW1tU2VydmljZXMuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKCJHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiKTsKKwkJCisJCXByb3BzLmxvYWQoaW5Qcm9wKTsKKwkJCisJCS8vIGVuZCBvZiByZWFkIHRlc3QKKwkJCisJCS8vIHRlc3QKKwkJLyoKKwkJcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworCQkKKwkJICogcHJvcHMuc2V0UHJvcGVydHkoInAiLCAidGVzdCIpOworCQkgKgorCQlGaWxlT3V0cHV0U3RyZWFtIG91dDsKKwkJdHJ5IHsKKwkJCW91dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKCJnbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiKTsKKwkJCXByb3BzLnN0b3JlKG91dCwgICJ0ZXN0IEdsZW1tU2VydmljZXMgcHJvcGVydGllcyIpOworCQkJfSAKKwkJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX07CisJCSovCisJCQorCQkvLyBlbmQgb3Rlc3QKKwkJCisJCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCQlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIkFQSTogJXM6IC9pbmRleC9zdGF0dXMvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKworCQlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkpOworCisJCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwkJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiBQT1NUOiAvaW5kZXgvYWRkLzogdGV4dC9wbGFpbgorCSAqIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlLgorCSAqIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkCisJICogaW50byB0aGUgZGF0YWJhc2UuCisJICogSW5wdXQ6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqLworCUBQYXRoKCJhZGQiKSBAUE9TVCBAQ29uc3VtZXMoInRleHQvcGxhaW4iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgaW1wb3J0TGVtbWFEYXRhKFN0cmluZyBsaXN0KSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gYXJMaXN0ID0gbGlzdC5zcGxpdCgiXG4iKTsKKwkKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IGZzLmdldFBhdGgoZm5hbWVXZnMpOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2FkZC8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQorCS8vIFdyaXRlIHN1Ym1pdHRlZCBsaXN0IG9mIHdvcmRmb3JtcyB0byBmaWxlOgorCXRyeQorCQl7CisJCW9zID0gRmlsZXMubmV3T3V0cHV0U3RyZWFtKHApOworCQlvcy53cml0ZShsaXN0LmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSkpOworCSAgICBvcy5jbG9zZSgpOworCSAgICBiRG9uZSA9IHRydWU7CisJICAgIFN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGZpbGUgJyVzJyBiZXNjaHJpZWJlbi5cbiIsIGZ1bmMsIGZuYW1lV2ZzKTsKKwkgICAgfQorCWNhdGNoKElPRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisJCX0KKyAgICAKKwlpZiggYkRvbmUgKQorCQltc2cgPSAiPHA+TGlzdCB3cml0dGVuIHRvIGZpbGU6ICIgKyBwLnRvU3RyaW5nKCkgKyAiPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+PGI+RmlsZSBFcnJvcjogPC9iPiBjYW5ub3Qgd3JpdGUgdG8gIiArIHAudG9TdHJpbmcoKSArICIhPC9wPiI7CisJCisJLyoKKwkgKiAgZXhlY3V0ZSBHbGVtbSBzaGVsbCBzY3JpcHQ6CisJICovCisJU3RyaW5nCisJCW1zZ0dsZW1tU2NyaXB0LCBtc2dJbXBvcnQ7CisJaW50IAorCQlyID0gVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0KGZuYW1lU2NyaXB0LCBmbmFtZVdmcyk7CisJCisJaWYoIHIgPT0gMCApCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEF1c2bvv71ocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBpbXBvcnRHbGVtbUxlbW1hdGEgcmV0dXJucyByPSVkLlxuIiwgZnVuYywgcik7CisJaWYoIG5FcnJvcnMgPT0gMCApCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiAiICsgbkVycm9ycyArICIgZXJyb3JzITwvcD4iOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGVuZGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJLy8gUmV0dXJuIEluZm9zOgorCXJldHVybiAKKwkJCSAgICI8aHRtbD4iICsKKwkJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwl9CisKKwkvKiB2aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyB2aWV3REJJbmZvCisKKworCS8qIHZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIC0gU3RhdHVzOiA8aT5Xb3JrIGluIHByb2dyZXNzLi4uITwvaT4pPC9oND5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoICFvcHRpb25zLmVxdWFscygidW5kZWYiKSkKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEvcHJvcDIvc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEdsZW1tU2VydmljZXMgJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbkRhdGUsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9jMS82MDhlNWFiYjQzM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYzEvNjA4ZTVhYmI0MzNkMDAxYzEwYjFiMTdkZGQzMDllNmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE1NmM1MAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYzEvNjA4ZTVhYmI0MzNkMDAxYzEwYjFiMTdkZGQzMDllNmYKQEAgLTAsMCArMSwzMiBAQAorIyBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXM6CisjIGV4cGVjdGVkIGluIC9XRUItSU5GLy4KKworIyMgR2VuZXJhbCBwcm9wZXJ0aWVzOgorR1NfV29ya2luZ1BhdGggPSAvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy93b3JrLWxpdmUKKworIyBHbGVtbURCIHByb3BlcnRpZXM6CisjIERlcmJ5QXJjaGl2REIgPSBkYXRhYmFzZSBmb3IgdGhlIHdmb3JtIGxpc3Qgb2YgYSB3aG9sZSBDMi1BcmNoaXZlOgorZm5hbWVEQiAJCT0gL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5QXJjaGl2REIKKyNmbmFtZURCIAkJPSAvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIyCitzZXJ2ZXJIb3N0CT0gLy9sb2NhbGhvc3Q6MTUyNy8KKworIyMgR2xlbW06IHByb3BlcnRpZXMgZm9yIGxlbW1hdGl6aW5nOgorCisjIGZuYW1lU2NyaXB0ID0gR1NfV29ya2luZ1BhdGggKyBkb0dsZW1tCitmbmFtZVNjcmlwdCA9IGRvR2xlbW0KKyMgZm5hbWVXZnMgPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CitmbmFtZVdmcyA9IGdsX3dmc19pbi50eHQKKyMgZm5hbWVTY3JpcHQJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CitmbmFtZVNjcmlwdAk9IGRvR2xlbW0KKyMgZm5hbWVMZW1hdGEJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisjIGxlbTMgZXhwZWN0ZWQgdG8gYmUgSVNPODg1OS0xIGVuY29kZWQuCitmbmFtZUxlbWF0YQk9IHRtcC9sZW0zCisKKyMjIExvZ2luZzoKKworIyBmbmFtZU91dCA9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisjZm5hbWVPdXQgPSBHbGVtbVNlcnZpY2VzLXQubG9nCitmbmFtZU91dCA9IEdsZW1tU2VydmljZXMubG9nCisjIGZuYW1lRXJyIAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworI2ZuYW1lRXJyID0gR2xlbW1TZXJ2aWNlcy10LmVycgorZm5hbWVFcnIgPSBHbGVtbVNlcnZpY2VzLmVycgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9jMi9jMDA2ZTkwYTEyMmMwMDFjMWM0MWNlNTU5ZWE1ZTE2YiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYzIvYzAwNmU5MGExMjJjMDAxYzFjNDFjZTU1OWVhNWUxNmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVmY2Y5MwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYzIvYzAwNmU5MGExMjJjMDAxYzFjNDFjZTU1OWVhNWUxNmIKQEAgLTAsMCArMSw3MTkgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA2LjEwLjIxIjsgLy8iMTcuMDYuMjAiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMSI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwkJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwkJU3RyaW5nCisJCQlzdGF0dXM7CisJCVV0aWxzCisJCQl1ID0gbmV3IFV0aWxzKCk7CisJCVByb3BlcnRpZXMKKwkJCXByb3BzOworCQlTdHJpbmcKKwkJCXByb3BOYW1lID0gIkdsZW1tU2VydmljZXMucHJvcGVydGllcyI7CisJCS8vIHJlYWQgdGVzdAorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCQorCQkJCQorCQkvL2dldFNlcnZsZXRDb250ZXh0KC4pCisJCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCisJCUlucHV0U3RyZWFtCisJCQkvL2luUHJvcCA9IEdsZW1tU2VydmljZXMuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKHByb3BOYW1lKTsKKwkJCWluUHJvcCA9IEh0dHBTZXJ2bGV0UmVxdWVzdC5jbGFzcy5nZXRSZXNvdXJjZUFzU3RyZWFtKHByb3BOYW1lKTsKKworCQlpZiggaW5Qcm9wID09IG51bGwgKQorCQkJeworCQkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGxvYWQgJyVzJyFcbiIsIGZ1bmMsIHByb3BOYW1lKTsKKwkJCXJldHVybiBudWxsOworCQkJfQorCQkKKwkJdHJ5IHsKKwkJCXByb3BzLmxvYWQoaW5Qcm9wKTsKKwkJCVNldDxFbnRyeTxPYmplY3QsT2JqZWN0Pj4KKwkJCQlwcm9wc1NldCA9IHByb3BzLmVudHJ5U2V0KCk7CisJCQkKKwkJCWZvcihFbnRyeTxPYmplY3QsIE9iamVjdD4gcHJvcEVudHJ5IDogcHJvcHNTZXQpCisJCQkJeworCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AgJXMgPSAnJXMnLlxuIiwgZnVuYywgcHJvcEVudHJ5LmdldEtleSgpLCBwcm9wRW50cnkuZ2V0VmFsdWUoKSk7CisJCQkJfQorCQkJfSAKKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBsb2FkIHByb3BzICdHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMnISIsICBmdW5jKTsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkJCisJCS8vIGVuZCBvZiByZWFkIHRlc3QKKwkJCisJCS8vIHRlc3QKKwkJLyoqLworCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCQorCQkgKiBwcm9wcy5zZXRQcm9wZXJ0eSgicCIsICJ0ZXN0Iik7CisJCSAqCisJCUZpbGVPdXRwdXRTdHJlYW0gb3V0OworCQl0cnkgeworCQkJb3V0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oImdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOworCQkJcHJvcHMuc3RvcmUob3V0LCAgInRlc3QgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIik7CisJCQl9IAorCQljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfTsKKwkJLyoqLworCQkKKwkJLy8gZW5kIG90ZXN0CisJCQorCQkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwkJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisJCVN5c3RlbS5vdXQucHJpbnRmKCJBUEk6ICVzOiAvaW5kZXgvc3RhdHVzLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisKKwkJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogUE9TVDogL2luZGV4L2FkZC86IHRleHQvcGxhaW4KKwkgKiBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZS4KKwkgKiBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZAorCSAqIGludG8gdGhlIGRhdGFiYXNlLgorCSAqIElucHV0OiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKi8KKwlAUGF0aCgiYWRkIikgQFBPU1QgQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGltcG9ydExlbW1hRGF0YShTdHJpbmcgbGlzdCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIGFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJCisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9hZGQvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNm77+9aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJfQorCisJLyogdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gdmlld0RCSW5mbworCisKKwkvKiB2aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIiAtIFN0YXR1czogPGk+V29yayBpbiBwcm9ncmVzcy4uLiE8L2k+KTwvaDQ+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCAhb3B0aW9ucy5lcXVhbHMoInVuZGVmIikpCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxL3Byb3AyL3NwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBHbGVtbVNlcnZpY2VzICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb25EYXRlLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJLy9TeXN0ZW0ub3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYzMvYzBhYzZiNTExMTJjMDAxYzFjNDFjZTU1OWVhNWUxNmIgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2MzL2MwYWM2YjUxMTEyYzAwMWMxYzQxY2U1NTllYTVlMTZiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMmFjZTgKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2MzL2MwYWM2YjUxMTEyYzAwMWMxYzQxY2U1NTllYTVlMTZiCkBAIC0wLDAgKzEsNzE2IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNi4xMC4yMSI7IC8vIjE3LjA2LjIwIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjEiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJCVN0cmluZworCQkJc3RhdHVzOworCQlVdGlscworCQkJdSA9IG5ldyBVdGlscygpOworCQlQcm9wZXJ0aWVzCisJCQlwcm9wczsKKwkJU3RyaW5nCisJCQlwcm9wTmFtZSA9ICIvR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIjsKKwkJLy8gcmVhZCB0ZXN0CisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJLy9IdHRwU2VydmxldENvbnRleHQKKwkJCisJCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCQlJbnB1dFN0cmVhbQorCQkJaW5Qcm9wID0gR2xlbW1TZXJ2aWNlcy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpLmdldFJlc291cmNlQXNTdHJlYW0ocHJvcE5hbWUpOworCQkKKwkJaWYoIGluUHJvcCA9PSBudWxsICkKKwkJCXsKKwkJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBsb2FkICclcychXG4iLCBmdW5jLCBwcm9wTmFtZSk7CisJCQlyZXR1cm4gbnVsbDsKKwkJCX0KKwkJCisJCXRyeSB7CisJCQlwcm9wcy5sb2FkKGluUHJvcCk7CisJCQlTZXQ8RW50cnk8T2JqZWN0LE9iamVjdD4+CisJCQkJcHJvcHNTZXQgPSBwcm9wcy5lbnRyeVNldCgpOworCQkJCisJCQlmb3IoRW50cnk8T2JqZWN0LCBPYmplY3Q+IHByb3BFbnRyeSA6IHByb3BzU2V0KQorCQkJCXsKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wICVzID0gJyVzJy5cbiIsIGZ1bmMsIHByb3BFbnRyeS5nZXRLZXkoKSwgcHJvcEVudHJ5LmdldFZhbHVlKCkpOworCQkJCX0KKwkJCX0gCisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgbG9hZCBwcm9wcyAnR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzJyEiLCAgZnVuYyk7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCQorCQkvLyBlbmQgb2YgcmVhZCB0ZXN0CisJCQorCQkvLyB0ZXN0CisJCS8qCisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJCisJCSAqIHByb3BzLnNldFByb3BlcnR5KCJwIiwgInRlc3QiKTsKKwkJICoKKwkJRmlsZU91dHB1dFN0cmVhbSBvdXQ7CisJCXRyeSB7CisJCQlvdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbSgiZ2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIik7CisJCQlwcm9wcy5zdG9yZShvdXQsICAidGVzdCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMiKTsKKwkJCX0gCisJCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9OworCQkqLworCQkKKwkJLy8gZW5kIG90ZXN0CisJCQorCQkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwkJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisJCVN5c3RlbS5vdXQucHJpbnRmKCJBUEk6ICVzOiAvaW5kZXgvc3RhdHVzLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisKKwkJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogUE9TVDogL2luZGV4L2FkZC86IHRleHQvcGxhaW4KKwkgKiBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZS4KKwkgKiBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZAorCSAqIGludG8gdGhlIGRhdGFiYXNlLgorCSAqIElucHV0OiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKi8KKwlAUGF0aCgiYWRkIikgQFBPU1QgQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGltcG9ydExlbW1hRGF0YShTdHJpbmcgbGlzdCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIGFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJCisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9hZGQvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNm77+9aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJfQorCisJLyogdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gdmlld0RCSW5mbworCisKKwkvKiB2aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIiAtIFN0YXR1czogPGk+V29yayBpbiBwcm9ncmVzcy4uLiE8L2k+KTwvaDQ+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCAhb3B0aW9ucy5lcXVhbHMoInVuZGVmIikpCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxL3Byb3AyL3NwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBHbGVtbVNlcnZpY2VzICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb25EYXRlLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJLy9TeXN0ZW0ub3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYzQvMDAzNmI4ODc1ZDNlMDAxYzEwMzVjMWVhZjM4YWY1OTAgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2M0LzAwMzZiODg3NWQzZTAwMWMxMDM1YzFlYWYzOGFmNTkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZTdkZTkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2M0LzAwMzZiODg3NWQzZTAwMWMxMDM1YzFlYWYzOGFmNTkwCkBAIC0wLDAgKzEsODEwIEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKK2ltcG9ydCBqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7CitpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitwdWJsaWMgY2xhc3MgR2xlbW1EQgorCit7CisJc3RhdGljIHB1YmxpYyBTdHJpbmcgZGJUYWJsZSAJPSAiR2xlbW1MZW1tYXRhIjsKKwlzdGF0aWMgU3RyaW5nIGRiTGVtbWEgCQkgCT0gImxlbW1hIjsKKwlzdGF0aWMgU3RyaW5nIGRiV2YJIAkJCT0gIndmIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDEgCQkJPSAicHJvcDEiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMiAJCQk9ICJwcm9wMiI7CisKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKG92ZXJ3cml0dGVuIGJ5IEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZuYW1lREIgPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgc2VydmVySG9zdCA9ICIvL2xvY2FsaG9zdDoxNTI3LyI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChmaW5hbCBhc3NpZ25tZW50cyk6CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyRW1iID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZERyaXZlciI7CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyQ2xpZW50ID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREcml2ZXIiOworCisJZmluYWwgc3RhdGljIGJvb2xlYW4KKwkJdXNlUHJlcGFyZWRTdG10ID0gdHJ1ZTsgLy8gMT11c2UgUHJlcGFyZWRTdGF0ZW1lbnQgYW5kIG5vdCBTdGF0ZW1lbnQuCisJCisJLy8gdmFsdWVzIHRvIGJlIGluc2VydGVkOiBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYy4KKwlzdGF0aWMgU3RyaW5nIGluc2VydFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKCclcycsICclcycsICclcycsICclcycsICclcycpIjsKKwlzdGF0aWMgU3RyaW5nIGluc2VydFByZXBhcmVkUXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoPywgPywgPywgPywgPykiOworCQorCS8vIENvbnN0YW50cyBvZiB0YWJsZSBHbGVtbUxlbW1hdGE6CisJc3RhdGljIGZpbmFsIGludCBtYXhMZW1tYVNpemUJPSA2NDsgCS8vIG1heC4gbm8uIG9mIGNoYXJzLCBhcyBkZWNsYXJlZCBpbiB0YWJsZSBHbGVtbUxlbW1hdGEuCisJc3RhdGljIGZpbmFsIGludCBtYXhXZlNpemUJCT0gNjQ7CS8vIG1heC4gbm8uIG9mIGNoYXJzLCBhcyBkZWNsYXJlZCBpbiB0YWJsZSBHbGVtbUxlbW1hdGEuCisJCisJLyogdmFyaWFibGVzICovCisJc3RhdGljIGludCBuRXhjZXB0U3RtdAkJCT0gMDsJLy8gY291bnQgbm8uIG9mIGV4Y2VwdGlvbnMgZm9yIHByZXBhcmVkU3RtdC4KKwlzdGF0aWMgaW50IG5FeGNlcHRJbnNlcnQJCT0gMDsJLy8gY291bnQgbm8uIG9mIGV4Y2VwdGlvbnMgZm9yIEluc2VydHMuCisJCisJLyoKKwkgKiBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkgKiAKKwkgKiBBcmd1bWVudHM6CisJICogcHJvcHMJOiBQcm9wZXJ0aWVzIGxvYWRlZCBieSB0aGUgR2xlbW1TZXJ2aWNlcy4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgZnVuY3Rpb24gbG9hZHMgb25seSB0aG9zZSBDb25zdGFudHMgbmVlZGVkIGluIHRoaXMgY2xhc3MuCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzCXByb3BzKQorCQorCXsKKwlmbmFtZURCCQkgCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAJIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCXNlcnZlckhvc3QJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgInNlcnZlckhvc3QiLAkiLy9sb2NhbGhvc3Q6MTUyNy8iKTsKKwlkZXJieURCVVJMIAkJPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJCQkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qICAgIGNoZWNrRGVyYnlDb25uZWN0aW9uOgorCSAqIAorCSAqIGNoZWNrIGlmIERlcmJ5IE5ldHdvcmsgU2VydmVyIGlzIGF2YWlsYWJsZS4KKwkgKiBSZXR1cm5zOiAwICg9T0spIG9yIC0xIChvbiBlcnJvcikuCisJICogMDUuMTEuMjEvRkIKKwkgKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBjaGVja0RlcmJ5Q29ubmVjdGlvbigpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJjaGVja0RlcmJ5Q29ubmVjdGlvbiI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2UsCisJLy8gc2V0IEF1dG9jb21taXQgPSBmYWxzZSB0byBhY2NlbGVyYXRlIGluc2VydGlvbnM6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nIHRvICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3RpbmcgZmFpbGVkIVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCWZpbmFsbHkgCisJCXsgCisJCXRyeSB7IC8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGNoZWNrX0RlcmJ5Q29ubmVjdGlvbgorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIHdoZW4gaW5kZXhpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSwgc2VsZWN0IHRoZSBzdWJtaXR0ZWQgZGJwYXRoLAorCS8vIChub3QgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZGJwYXRoOworCQorCS8vIG9wZW4gcmVhZGVyIG9uIEdsZW1tIExlbW1hdGE6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJCisJCW5FcnJvcnMgPSB3cml0ZURCTGVtbWF0YShpbik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIGZyb20gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwkvLyBjbG9zZSBSZWFkZXI6CisJdHJ5IHsKKwkJaW4uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQluRXJyb3JzID0gLTE7CisJCX0KKwkKKwlpZiggbkVycm9ycyA9PSAtMiApCisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBlcnJvciB0byBEZXJieSBTZXJ2ZXIhXG4iLCBmdW5jKTsKKwllbHNlIGlmKCBuRXJyb3JzID09IDAgKQorIAkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQgZG9uZSBzdWNjZXNzZnVsbHkuXG4iLCBmdW5jKTsKKyAJZWxzZQorIAkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQ6ICVkIEVycm9ycyFcbiIsIGZ1bmMsIG5FcnJvcnMpOworIAkKKwlyZXR1cm4gbkVycm9yczsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YQorCQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVEQkxlbW1hdGEoKQorCSAqICAgICAgICAgICAgICAgICAgICAgICAKKwkgKiBzdG9yZXMgbGlzdCBvZiBsZW1tYXRhICsgaW5mb3MgaW50byBEZXJieSBkYi4KKwkgKiBGaWxlIGZvcm1hdDogIkxlbW1hIERlY29tcG9zaXRpb24gV2YiLAorCSAqICAgICAgICAgICAgICBlLmcuOiAiSMOkdXNlciArLSBIYXVzIi4KKwkgKiBSZXR1cm5zOiAwID0gT0sgb3IgCisJICogCQkJLTE6IFNRTCBpbnNlcnQgZXJyb3IsIG9yCisJICogCQkJLTI6IGNvbm5lY3Rpb24gZXJyb3IgdG8gRGVyYnkgU2VydmVyLCBvcgorCSAqIAkJICAgPiAwOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIDA5LjAxLjIwL0ZCCisJICogMDQuMTEuMjEvRkIgdHVybiBhdXRvY29tbWl0IG9mZiB0byBhY2NlbGVyYXRlIGh1Z2UgYW1vdW50IG9mIGluc2VydGlvbnMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYXRhKEJ1ZmZlcmVkUmVhZGVyIGluKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hdGEiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJUHJlcGFyZWRTdGF0ZW1lbnQKKwkJc3RtdFByZXAgPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10IAkgPSBudWxsOworCVN0cmluZworCQlsaW5lOwkKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQluSW5zZXJ0ZWQgPSAwLAkvLyBuby4gb2YgbGVtbWEvd2YgcGFpcnMgaW1wb3J0ZWQuCisJCXJldCA9IDA7IC8vIE9LLgorCWJvb2xlYW4KKwkJY29udGFpbnNTcGVjOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZSwKKwkvLyBzZXQgQXV0b2NvbW1pdCA9IGZhbHNlIHRvIGFjY2VsZXJhdGUgaW5zZXJ0aW9uczoKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJY29uLnNldEF1dG9Db21taXQoZmFsc2UpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZCAoYXV0b0NvbW1pdD1vZmYpLlxuIiwgZnVuYyk7CisJCQorCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCXN0bXRQcmVwID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0UHJlcGFyZWRRdWVyeSk7CisJCWVsc2UKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisKKwkJd2hpbGUoIChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoICE9IDMgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6ICclcycgaGFzICVkIGNvbXBvbmVudHMhIEV4cGVjdGVkID0gMyEgQ2Fubm90IGJlIHN0b3JlZCFcbiIsIGZ1bmMsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJCW5FcnJvcnMrKzsKKwkJCQljb250aW51ZTsKKwkJCQl9CisJCQkKKwkJCS8vIEdldCBJbmZvLCBpZiB3b3JkZm9ybSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgJy0nLCBpbnRlcnB1bmN0aW9uIGV0Yy46CisJCQkvLyBsZW1tYUluZm9bMl0gPSB3b3JkZm9ybS4KKwkJCWNvbnRhaW5zU3BlYyA9IExlbW1hSW5mby5pc1dmU3BlY2lhbENhc2UobGVtbWFJbmZvWzJdKTsKKwkJCS8vIHN0b3JlIGludG8gREI6CisJCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZChzdG10UHJlcCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvcyhzdG10LCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJCisJCQlpZiggcmV0ICE9IDAgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBzdG9yZSBsZW1tYSAnJXMnIGludG8gREIhIChyZXQ9JWQpXG4iLCBmdW5jLCBsaW5lLCByZXQpOworCQkJCW5FcnJvcnMrKzsgCisJCQkJfQorCQkJZWxzZQorCQkJCW5JbnNlcnRlZCsrOworCQkJfSAvLyB3aGlsZQorCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBHbGVtbSBsZW1tYXRhK2luZm9zIGZyb20gZmlsZSEgRXhpdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTI7IAorCQl9CQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IAorCQl7IAorCQl0cnkgeworCQkJLy8gaW1wb3J0YW50OiBub3cgY29tbWl0LCBhcyBhdXRvQ29tbWl0IGlzIGRlYWN0aXZhdGVkLAorCQkJLy8gdGhpcyBhbHNvIHJlbW92ZXMgZGF0YWJhc2UgbG9ja3M6CisJCQljb24uY29tbWl0KCk7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbW1pdCBzdWNjZXNzZnVsbC5cbiIsIGZ1bmMpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbW1pdCBhdCB0aGUgZW5kIG9mIHRoZSB3ZnMgbGlzdCBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJCisJCXRyeSB7IC8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIAorCQkJCXN0bXQuY2xvc2UoKTsKKwkJCWlmKCBzdG10UHJlcCAhPSBudWxsICkgCisJCQkJc3RtdFByZXAuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiSW5mbyA6ICVzOiBuby4gb2YgbGVtbWF0YS93ZiBwYWlycyBpbnNlcnRlZCA9ICVkLlxuIiwgZnVuYywgbkluc2VydGVkKTsKKwkKKwlyZXR1cm4gbkVycm9yczsgLy8gMD1PSywgPjAgPSBuby4gb2YgZXJyb3JzLgorCX0gLy8gd3JpdGVEQkxlbW1hdGEKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQ6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gcnVsZXMgaW50byBEZXJieSBEQi4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgaXMgdGhlIHZlcnNpb24gd2l0aCBhIFByZXBhcmVkUXVlcnkuCisJICogUGFyYW1ldGVyczoKKwkgKiBzcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTcuMDEuMjAvRkIKKwkgKiAwNS4xLjIxL0ZCIHJlamVjdCBsZW1tYS93ZiA+IDY0IGNoYXJzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCgKKwkJCVByZXBhcmVkU3RhdGVtZW50IHN0bXQsIAorCQkJU3RyaW5nIGxlbW1hLCAKKwkJCVN0cmluZyB3ZiwgCisJCQlTdHJpbmcgZGVjb21wb3NpdGlvbiwgCisJCQlib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCI7CisJZmluYWwgYm9vbGVhbgorCQliTG9nID0gZmFsc2U7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJYm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJLy8gY2hlY2sgc2l6ZSBvZiB3ZiBhbmQgbGVtbWEgYWdhaW5zdCBmaWVsZCBzaXplIGluIHRhYmxlIEdsZW1tTGVtbWF0YToKKwlpZiggbGVtbWEubGVuZ3RoKCkgPj0gR2xlbW1EQi5tYXhMZW1tYVNpemUgKSAKKwkJeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGxlbW1hIHJlamVjdGVkICg+ICVkKTogJyVzJyFcbiIsCisJCQkJZnVuYywgbWF4TGVtbWFTaXplLCBsZW1tYSk7CisJCXJldHVybiA0OworCQl9CisJaWYoIHdmLmxlbmd0aCgpID49IEdsZW1tREIubWF4V2ZTaXplICkgCisJCXsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3ZiByZWplY3RlZCAoPiAlZCk6ICclcychXG4iLAorCQkJCWZ1bmMsIG1heFdmU2l6ZSwgd2YpOworCQlyZXR1cm4gNTsKKwkJfQorCSAKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgCisJLy8gZm9yIGxvZ2luZyBvbmx5OgorCXNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwlpZiggYkxvZyApCisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorICAgIC8vIG5vdyBpbnNlcnQgbmV3IHZhbHVlcyBpbnRvIFByZXBhcmVkU3RhdGVtZW50OgorICAgIHRyeSB7CisgICAgCXN0bXQuc2V0U3RyaW5nKCAxLCBsZW1tYSk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKCAyLCB3Zik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbigzLCBwcm9wMSk7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig0LCBwcm9wMik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig1LCBzcGVjKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcmVwYXJlZCBzdG10ID0gJyVzJy5cbiIsICBmdW5jLCBzdG10LnRvU3RyaW5nKCkpOworICAgICAgICB9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlMSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKAkiRXJyb3I6ICVzOiB3aGlsZSBmaWxsaW5nIHByZXBhcmVkIHN0YXRlbWVudCB3aXRoIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0nJWInIHByb3AyPSclYicgc3BlYz0nJWInIVxuIiwgIAorCQkJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJaWYoICsrbkV4Y2VwdFN0bXQgPD0gMSApCisJCQllMS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKyAgICAKKyAgICB0cnkgeworCQkvLyBleGVjdXRlIHRoZSBmaWxsZWQgcHJlcGFyZWQgc3RhdGVtZW50OgorCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhIChuPSVkKVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYywgbik7CisgCQkJcmV0dXJuIDI7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQlpZiggKytuRXhjZXB0SW5zZXJ0IDw9IDEgKQorCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDM7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZAorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3M6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gaW50byBEZXJieSBEQi4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGNvbnRhaW5zU3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDEwLjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zKFN0YXRlbWVudCBzdG10LCBTdHJpbmcgbGVtbWEsIFN0cmluZyB3ZiwgU3RyaW5nIGRlY29tcG9zaXRpb24sIGJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zIjsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlCb29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworICAgIAorICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorCXRyeSB7CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoc3FsSW5zZXJ0KTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYURhdGEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBmcm9tIHRoZSBHbGVtbURCLgorCSAqIElucHV0OiBsZW1tYSArIEdMRU1NX09QVFNfeHh4IChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWFEYXRhKExlbW1hSW5mbyBsZW1tYUluZm8sIFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYURhdGEiOworCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJbGVtbWFJbmZvLmNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJbGVtbWFJbmZvLnN0bXQgPSBsZW1tYUluZm8uY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlpbnQgciA9IHJlYWREQkxlbW1hKGxlbW1hSW5mby5zdG10LCBsZW1tYUluZm8pOworCQkJCisJCWlmKCByICE9IDAgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZ2V0IGRhdGEgZm9yIGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIVxuIiwgCisJCQkJCWZ1bmMsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwkJCXJldHVybiAxOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggbGVtbWFJbmZvLmNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hRGF0YQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGJ5IGFjY2Vzc2luZyB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dCA6IGxlbW1hICsgcHJvcDErMiAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogT3V0cHV0OiAKKwkgKiAgLSBjb250YWlucyBhIFJlc3VsdFNldCBmb3IgZmV0Y2hpbmcgdGhlIHdvcmRmb3Jtcy4KKwkgKiAJICBUaGlzIFJlc3VsdFNldCB3aWxsIGhhdmUgYmUgYmUgY2xvc2VkIHdpdGggTGVtbWFJbmZvLmNsb3NlKCkuCisJICogCSAgVGhlIG5vLiBvZiBmb3VuZCB3b3JkZm9ybXMgaXMgbm90IGtub3duIHRpbGwgd2UKKwkgKiAJICBmZXRjaCBhbGwgb2YgdGhlbSBmcm9tIFJlc3VsdFNldCEgCisJICogCS0gZHVlIHRvIFNFTEVDVCBESVNUSU5DVCBvbmx5IHVuaXEgd2YgYXJlIHJldHVybmVkLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYShTdGF0ZW1lbnQgc3RtdCwgTGVtbWFJbmZvIGxlbW1hSW5mbykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hIjsKKwlTdHJpbmcKKwkJc3FsOworCQkKKwlzcWwgPSBTdHJpbmcuZm9ybWF0KCJTRUxFQ1QgRElTVElOQ1Qgd2YgZnJvbSAlcyBXSEVSRSBsZW1tYT0nJXMnICVzICVzICVzIiwgCisJCQlkYlRhYmxlLAorCQkJbGVtbWFJbmZvLmxlbW1hLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiQU5EIHByb3AxPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAxID8gIkFORCBwcm9wMT0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiQU5EIHByb3AyPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAxID8gIkFORCBwcm9wMj0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiQU5EIHNwZWM9J3RydWUnIiAgIDogCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICJBTkQgc3BlYz0nZmFsc2UnIiAgOiAiIik7CisJCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgZnVuYywgbGVtbWFJbmZvLnByb3AxLCBsZW1tYUluZm8ucHJvcDIsIGxlbW1hSW5mby5zcGVjKTsKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbCA9ICclcycuXG4iLCBmdW5jLCBzcWwpOworCisJdHJ5IHsKKwkJbGVtbWFJbmZvLnJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoZW4gZXhlY3V0aW5nIHNxbD0nJXMnIVxuIiwgZnVuYywgc3FsKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gYWxsIHNxbCBzdHVmZiBhcmUgY2xvc2VkIG91dHNpZGUgdGhpcyBmdW5jdGlvbiwgc28gZG9uJ3QgY2xvc2UgdGhlbSBoZXJlIQorCQl9CQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3MKKwkgKiBSZXR1cm5zIEdlbmVyYWwgSW5mb3MgYWJvdXQgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIHJlYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJJbmZvcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJZGJJbmZvID0gcmVhZERiTGVtbWF0YUluZm9zKHN0bXQpOworCQkJCisJCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCByZWFkIEdlbmVyYWwgSW5mb3MgZnJvbSBHbGVtbSBEYXRhYmFzZSFcbiIsIGZ1bmMpOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSBjb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSBzdG10LmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIG1heSBiZSBudWxsLgorCQkKKwl9IC8vIHJlYWREYkluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiTGVtbWF0YUluZm9zOgorCSAqIHJlYWRzIGFuZCByZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGNvbnRlbnQgCisJICogb2YgdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIFJldHVybnMgMD1PSyBvciBlcnJvciBjb2RlID4gMC4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkxlbW1hdGFJbmZvcyhTdGF0ZW1lbnQgc3RtdCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAicmVhZERiTGVtbWFJbmZvcyI7CisJU3RyaW5nW10KKwkJc3FsID0gewkiU0VMRUNUIENPVU5UKGRpc3RpbmN0IGxlbW1hKSBmcm9tICIgKyBkYlRhYmxlICwJLy8gY291bnRzIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSwJCQkJCS8vIGNvdW50cyB0b3RhbCBuby4gb2Ygc3RvcmVkIHdvcmRmb3Jtcy4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPXRydWUiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPXRydWUifTsKKwlSZXN1bHRTZXQKKwkJcmVzID0gbnVsbDsgCisJaW50W10KKwkJbkNvdW50cyA9IG5ldyBpbnRbc3FsLmxlbmd0aF07CisJaW50CQkKKwkJaSA9IDAsIAorCQluRGlzdExlbW1hdGEgPSAtMSwJLy8gbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEgaW4gREIuCisJCW5XZnMJCSA9IC0xOwkvLyBuby4gb2Ygd29yZGZvcm1zIGluIERCLgorCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBleHRyYWN0aW5nIGFncmVnYXRlZCBpbmZvcyBhYm91dCBEYXRhYmFzZSBjb250ZW50cy4uLlxuIiwgZnVuYyk7CisJCisJZGJJbmZvID0gbmV3IEdsZW1tREJJbmZvKCk7CisKKwkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwl0cnkgeworCQlmb3IoaT0wOyBpPHNxbC5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCXJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbFtpXSk7CisJCQlpZiggcmVzLm5leHQoKSApCisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IHJlcy5nZXRJbnQoMSk7IC8vIGNvdW50IGlzIGluIGNvbHVtbiAxLgorCQkJZWxzZQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBleHRyYWN0IGNvdW50IGZyb20gJyVzJyFcbiIsIGZ1bmMsIHNxbFtpXSk7CisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IC0xOworCQkJCX0KKwkJCX0KKyAgICAgICAKKyAgICAgICAgfQorICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgIAl7CisgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogc3FsPSclcycgZmFpbGVkIVxuIiwgZnVuYywgc3FsW2ldKTsKKyAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAJfQorCWZpbmFsbHkgeworCQl0cnkgeworCQkJcmVzLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBPSworCX0gLy8gcmVhZERiTGVtbWF0YUluZm9zCisJCisJLyoqKioqKioqKioqKioqKioqKioqIFRlc3QgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zX3Rlc3QKKwkgKiBUaGlzIGlzIGRlYnVnIGNvZGUgd3JpdHRlbiB0byB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIERlcmJ5CisJICogRGF0YWJhc2UgZnJvbSBhbiBleHRlcm5hbCBKYXZhIFByb2dyYW1tLgorCSAqIDA4LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCByZWFkRGJJbmZvc190ZXN0KCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlTdHJpbmcKKwkJaW5zZXJ0U3RtdCA9ICIiOworCQorCS8vIENvbm5lY3QgdG8gRGVyYnkgZGF0YWJhc2U6CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCQorCQkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwkJdHJ5CisJCQl7CisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIAorICAgICAgICAgICAgCXNxbCA9ICJTRUxFQ1QgKiBGUk9NICIgKyBkYlRhYmxlOworICAgICAgICAgICAgUmVzdWx0U2V0IAorICAgICAgICAgICAgCXJlc3VsdCA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CisgCisgICAgICAgICAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHRhYmxlICclcyc6XG4iLCAgZnVuYywgZGJUYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQubmV4dCgpKSB7CisgICAgICAgICAgICAJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiJyVzJyA6ICclcycgOiAnJXMnIDogJyVzJyAuXG4iLCByZXN1bHQuZ2V0U3RyaW5nKDEpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygyKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMyksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDQpKTsKKyAgICAgICAgCQlpbnNlcnRTdG10ID0gaW5zZXJ0U3RtdCArICI8cD4iICsgcmVzdWx0LmdldFN0cmluZygxKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZygyKSArICIgOiAiICsKKyAgICAgICAgICAgICAgICAJCSAgICAgcmVzdWx0LmdldFN0cmluZygzKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZyg0KSArICI8L3A+IjsKKyAgICAgICAgICAgIAl9CisJCQl9CisJICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgICAgICAJeworCSAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBpbnNlcnRTdG10PSclcycgZmFpbGVkIS5cbiIsIGZ1bmMsIHN0bXQpOworICAgICAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICAgICAgY29uLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nICclcyBmYWlsZWQhXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJdHJ5IHsKKwkJY29uLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkJCisJfSAvLyByZWFkRGJJbmZvc190ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogaW1wb3J0R2xlbW1MZW1hdGFfdGVzdAorCSAqIFRlc3QgVmVyc2lvbi4KKwkgKiAxMi4xMi4xOS9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QoU3RyaW5nIGZuKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdCI7CisJSW5wdXRTdHJlYW0gCisJCWluOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluMiA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQlyOworCQorCS8qCisJICogUmVhZCBMZW1tYXRhICsgSW5mbyBmcm9tIGZpbGU6IAorCSAqLworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCQorCXRyeSB7CisJCS8vaW4gPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSggbmV3IEZpbGVJbnB1dFN0cmVhbShmbikgKTsKKwkJaW4yID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlcihmbikpOworCQl3aGlsZSggKGxpbmUgPSBpbjIucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoID09IDMgKQorCQkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBJbXBvcnQ6IGxlbT0nJXMnIERlY29tcD0nJXMnIFdmPSclcycuXG4iLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1sxXSwgbGVtbWFJbmZvWzJdKTsKKwkJCWVsc2UKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogaW1wb3J0R2xlbW1MYW1hdGE6ICclcycgaGFzICVkIGNvbXBvbmVudHMhXG4iLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IG9wZW4gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJcmV0dXJuIDE7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKworCXRyeSB7CisJCWluMi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCS8qIENoZWNrIGNvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJICovIAorCXIgPSByZWFkRGJJbmZvc190ZXN0KCk7CisJaWYoIHIgIT0gMCApCisJCXJldHVybiByOworCQkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2M0LzQwNGE3Mjk2ODUyYjAwMWMxYzQxY2U1NTllYTVlMTZiIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9jNC80MDRhNzI5Njg1MmIwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmVlYWRlCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9jNC80MDRhNzI5Njg1MmIwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpAQCAtMCwwICsxLDcwNyBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA2LjEwLjIxIjsgLy8iMTcuMDYuMjAiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMSI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwkJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwkJU3RyaW5nCisJCQlzdGF0dXM7CisJCVV0aWxzCisJCQl1ID0gbmV3IFV0aWxzKCk7CisJCVByb3BlcnRpZXMKKwkJCXByb3BzOworCQkKKwkJLy8gcmVhZCB0ZXN0CisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJLy9IdHRwU2VydmxldENvbnRleHQKKwkJCisJCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCQlJbnB1dFN0cmVhbQorCQkJaW5Qcm9wID0gR2xlbW1TZXJ2aWNlcy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpLmdldFJlc291cmNlQXNTdHJlYW0oIkdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOworCQkKKwkJdHJ5IHsKKwkJCXByb3BzLmxvYWQoaW5Qcm9wKTsKKwkJCVNldDxFbnRyeSg8T2JqZWN0Piw8T2JqZWN0PikKKwkJCQlwcm9wc1NldCA9IHByb3BzLmVudHJ5U2V0KCk7CisJCQlmb3IoU3RyaW5nIHByb3Agc2V0UHJvcHMpCisJCQkJeworCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AgJXMgPSAnJXMnLlxuIiwgZnVuYywgcHJvcCwgc2V0UHJvcHMuZ2V0UCkKKwkJCQl9CisJCQkJfSAKKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBsb2FkIHByb3BzICdHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMnISIsICBmdW5jKTsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkJCisJCS8vIGVuZCBvZiByZWFkIHRlc3QKKwkJCisJCS8vIHRlc3QKKwkJLyoKKwkJcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworCQkKKwkJICogcHJvcHMuc2V0UHJvcGVydHkoInAiLCAidGVzdCIpOworCQkgKgorCQlGaWxlT3V0cHV0U3RyZWFtIG91dDsKKwkJdHJ5IHsKKwkJCW91dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKCJnbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiKTsKKwkJCXByb3BzLnN0b3JlKG91dCwgICJ0ZXN0IEdsZW1tU2VydmljZXMgcHJvcGVydGllcyIpOworCQkJfSAKKwkJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX07CisJCSovCisJCQorCQkvLyBlbmQgb3Rlc3QKKwkJCisJCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCQlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIkFQSTogJXM6IC9pbmRleC9zdGF0dXMvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKworCQlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkpOworCisJCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwkJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiBQT1NUOiAvaW5kZXgvYWRkLzogdGV4dC9wbGFpbgorCSAqIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlLgorCSAqIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkCisJICogaW50byB0aGUgZGF0YWJhc2UuCisJICogSW5wdXQ6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqLworCUBQYXRoKCJhZGQiKSBAUE9TVCBAQ29uc3VtZXMoInRleHQvcGxhaW4iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgaW1wb3J0TGVtbWFEYXRhKFN0cmluZyBsaXN0KSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gYXJMaXN0ID0gbGlzdC5zcGxpdCgiXG4iKTsKKwkKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IGZzLmdldFBhdGgoZm5hbWVXZnMpOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2FkZC8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQorCS8vIFdyaXRlIHN1Ym1pdHRlZCBsaXN0IG9mIHdvcmRmb3JtcyB0byBmaWxlOgorCXRyeQorCQl7CisJCW9zID0gRmlsZXMubmV3T3V0cHV0U3RyZWFtKHApOworCQlvcy53cml0ZShsaXN0LmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSkpOworCSAgICBvcy5jbG9zZSgpOworCSAgICBiRG9uZSA9IHRydWU7CisJICAgIFN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGZpbGUgJyVzJyBiZXNjaHJpZWJlbi5cbiIsIGZ1bmMsIGZuYW1lV2ZzKTsKKwkgICAgfQorCWNhdGNoKElPRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisJCX0KKyAgICAKKwlpZiggYkRvbmUgKQorCQltc2cgPSAiPHA+TGlzdCB3cml0dGVuIHRvIGZpbGU6ICIgKyBwLnRvU3RyaW5nKCkgKyAiPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+PGI+RmlsZSBFcnJvcjogPC9iPiBjYW5ub3Qgd3JpdGUgdG8gIiArIHAudG9TdHJpbmcoKSArICIhPC9wPiI7CisJCisJLyoKKwkgKiAgZXhlY3V0ZSBHbGVtbSBzaGVsbCBzY3JpcHQ6CisJICovCisJU3RyaW5nCisJCW1zZ0dsZW1tU2NyaXB0LCBtc2dJbXBvcnQ7CisJaW50IAorCQlyID0gVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0KGZuYW1lU2NyaXB0LCBmbmFtZVdmcyk7CisJCisJaWYoIHIgPT0gMCApCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEF1c2bvv71ocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBpbXBvcnRHbGVtbUxlbW1hdGEgcmV0dXJucyByPSVkLlxuIiwgZnVuYywgcik7CisJaWYoIG5FcnJvcnMgPT0gMCApCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiAiICsgbkVycm9ycyArICIgZXJyb3JzITwvcD4iOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGVuZGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJLy8gUmV0dXJuIEluZm9zOgorCXJldHVybiAKKwkJCSAgICI8aHRtbD4iICsKKwkJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwl9CisKKwkvKiB2aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyB2aWV3REJJbmZvCisKKworCS8qIHZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIC0gU3RhdHVzOiA8aT5Xb3JrIGluIHByb2dyZXNzLi4uITwvaT4pPC9oND5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoICFvcHRpb25zLmVxdWFscygidW5kZWYiKSkKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEvcHJvcDIvc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEdsZW1tU2VydmljZXMgJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbkRhdGUsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9jNC9lMGE3MDJlZjQxM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYzQvZTBhNzAyZWY0MTNkMDAxYzEwYjFiMTdkZGQzMDllNmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI3MjhlNAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYzQvZTBhNzAyZWY0MTNkMDAxYzEwYjFiMTdkZGQzMDllNmYKQEAgLTAsMCArMSw5NTggQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworLyogMC4xIDogMTcuMDYuMjAvRkIgCisgKiAwLjIgOiAyNS4xMC4yMS9GQgorICogICAgICAgbG9naW5nIG9mIHRoZSBBUEkgUmVxdWVzdHMuCisgKiAgICAgICBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKyAqICAgICAgIGNvcnJlY3RpbmcgY2FsbGluZyBvZiBsZW1tYSArIHByb3AxL3Byb3AyL3NwZWMuCisgKiAgICAgICBoYW5kbGluZyBvZiBsZW1tYXRhIHdpdGggJ8OfJy4KKyAqIAorICogR2VuZXJhbCBjb21tZW50cyB0byB0aGUgZW5jb2Rpbmcgb2YgZGVyaXZhdGlvbnMgZnJvbSBsZW1tYSB0byB3ZnMgYW5kIGhvdyB0aGV5IGFyZSBlbmNvZGVkCisgKiBpbiB0aGUgRGVyYnkgZGF0YWJhc2U6CisgKiAKKyAqIEdMRU1NIGVuY29kaW5nOiAgCisgKiAgIF8gXyA6ICtGbGV4ICAgICAgIMOWbGUgLT4gw5ZsICAgICAgCisgKiAgICsgXyA6ICtDb21wICAgICAgIMOWbGxhbXBlIC0+IMOWbCBvciBMYW1wZSAoY29tcG91bmQpLgorICogICBfICsgOiArb3RoZXIgICAgICBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybnNjaHVoIChubyBjb21wb3VuZCBmb3IgJ1R1cm5zY2h1aCcsIG9ubHkgcHJlZml4KS4KKyAqICAgKyArIDogK0NvbXArb3RoZXIgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm4gKyBTY2h1aCAoY29tcG91bmQgZm9yICdTY2h1aCcgKyBQcmVmaXgpLgorICogQzIgbGVtbWF0aXphdGlvbiBvcHRpb25zOgorICogICBGbGV4ICAoaWRlbnRpY2FsIHRvIEdsZW1tKQorICogICBDb21wICAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpCisgKiAgIE90aGVyIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykuCisgKiAgIFNwZWMgIChvbmx5IEMyOiBpbmNsdWRlcyBhbGwgd2ZzIHdpdGggaGlwaGVuIGFuZC9vciBzb21lIG5vbi1hbHBoYWJldGljIElTTzg4NTktMSBjaGFycykKKyAqICAgICAgICAgRS5nLiDDlmwtRXhwb3J0ZSwgIk1hcmtlbiItw5ZsZS4KKyAqIERlcmJ5IEVuY29kaW5nOgorICogIHByb3AxIAlwcm9wMglzcGVjICAgCW1lYW5pbmcgaW4gQzI6CisgKiAgMAkJMAkJLQkJRmxleAorICogIDEJCTAJCS0JCUNvbXAKKyAqICAwCQkxCQktCQlPdGhlciAocHJlZml4KQorICogIDEJCTEJCS0JCUNvbXAgKyBPdGhlcgorICogIC0JCS0JCTAJCS1TcGVjCisgKiAgLQkJLQkJMQkJK1NwZWMKKyAqIAorICogRXhhbXBsZXM6CisgKiAmU2NodWgJCQk6IFNjaHVoLCBTY2h1aGUsIC4uLiBvbmx5IGZsZXhpb25zCisgKiAmU2NodWgrY29tcAkJOiBTY2h1aGUsIFR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtvdGhlcgkJOiBTY2h1aGUsIEFudGlzY2h1aGUuLi4gZmxleGlvbnMgYW5kIHByZWZpeGVkIHdmcyAobm8gY29tcG91bmRzKS4KKyAqICZTY2h1aCtjb21wK290aGVyOiBTY2h1aGUsIEFudGlzY2h1aGUsIFR1cm5zY2h1aGUsIEFudGl0dXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMgYW5kIAorICogCQkJCQkgIHByZWZpeGVkIHNpbmdsZSB3ZnMgKEFudGlzY2h1aGUpIGFuZCBwcmVmaXhlZCBjb21wb3VuZHMuCisgKiAmU2NodWgrc3BlYwkJOiAiQW50aSItU2NodWhlLCA2OGdlci1TY2h1aGUuLi4gbWF5IGJlIGNvbWJpbmVkIHdpdGggZXZlcnkgb3B0aW9uczogYWRkcworICogICAgICAgICAgICAgICAgICAgIHdmcyB3aXRoIGh5cGhlbiBhbmQvb3Igbm9uLWFscGhhYmV0aWMgY2hhcnMuCisgKiAKKyAqIENvbnZlcnNpb24gcnVsZXM6CisgKiAKKyAqICAmc2NobGllw59lbiAtPiBpbnRlcm5hbCBzZWFyY2ggZm9yICdzY2hsaWVzc2VuJywKKyAqICBiZWNhdXNlIEdsZW1tIG91dHB1dHMgJ3NzJyBmb3IgJ8OfJy4KKyAqICAKKyAqIENoYXJhY3RlciBFbmNvZGluZzoKKyAqIAorICogLSBXaGVuIGltcG9ydGluZyB3ZnMgdG8gdGhlIERlcmJ5IERhdGFiYXNlIHdpdGggZG9DdXJsR2xlbW1TZXJ2aWNlcy9pbmRleExlbW1hdGE6CisgKiAKKyAqICAgSU5QVVQ6IHdvcmRmb3JtIGxpc3QgaW4gW1VURi04XSA6IFVURi04IGlzIHRoZW4gY29udmVydGVkIHRvIExhdDEgZm9yIEdsZW1tLAorICogICAgICAgICAgdGhlIG91dHB1dCBvZiBHbGVtbSBbTGF0MV0gaXMgcmV0dXJuZWQgdG8gdGhlIEdsZW1tU2VydmljZXMgd2l0aG91dCByZWNvbnZlcnNpb24KKyAqICAgICAgICAgIHRvIFVURjggYW5kIGltcG9ydGVkIGludG8gRGVyYnkgRGF0YWJhc2UgdW5jaGFuZ2VkLgorICoJCQorICovCisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDQuMTEuMjEiOyAKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjIiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lUHJvcHMJCT0gIi9XRUItSU5GL0dsZW1tU2VydmljZXMucHJvcGVydGllcyI7CisJCisJLy8gdGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHJlYWQgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgKHRoZXNlIGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMpOgorCXByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoIAkJPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCUBDb250ZXh0CisJcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBzZXJ2bGV0Q29udGV4dDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZvdXQJPSBudWxsOworCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZmVycgk9IG51bGw7CQkKKwkJCisJLyogCisgCSAqIAorCSAqIC0gYWZ0ZXIgbG9hZFByb3BlcnRpZXMsIHNldHMgdGhlIGNsYXNzIHZhcmlhYmxlIHdpdGggbG9hZGVkIHByb3BlcnR5IHZhbHVlcy4KKwkgKiAKKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJR1NfV29ya2luZ1BhdGggCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgIkdTX1dvcmtpbmdQYXRoIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIik7CisJZm5hbWVXZnMJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lV2ZzIiwgCSAgICJnbF93ZnNfaW4udHh0Iik7CisJZm5hbWVXZnMJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVdmczsKKwlmbmFtZU91dAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVPdXQiLCAJICAgIkdsZW1tU2VydmljZXMubG9nIik7CisJZm5hbWVPdXQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZU91dDsKKwlmbmFtZUVycgkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVFcnIiLCAJICAgIkdsZW1tU2VydmljZXMuZXJyIik7CisJZm5hbWVFcnIJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUVycjsKKwlmbmFtZVNjcmlwdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVTY3JpcHQiLAkgICAiZG9HbGVtbSIpOworCWZuYW1lU2NyaXB0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVTY3JpcHQ7CisJZm5hbWVMZW1hdGEJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lTGVtYXRhIiwgICAgInRtcC9sZW0zIik7CisJZm5hbWVMZW1hdGEJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUxlbWF0YTsKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qCisJICogIGxvZ19SZXF1ZXN0OgorCSAqICAKKwkgKiAgLSB3cml0ZSBpbmZvIGFib3V0IEFQSSBSZXF1ZXN0LgorCSAqICBQYXJhbWV0ZXJzOgorCSAqICByZXF1ZXN0UGF0aAk6IHBhdGggb2Ygd2ViYXBwIGFkZHJlc3NlZCBieSB0aGUgcmVxdWVzdC4KKwkgKiAgZnVuYwkJOiBuYW1lIG9mIHRoZSBmdW5jdGlvbiB3aGljaCBpbXBsZW1lbnRzIHRoZSByZXF1ZXN0LgorCSAqICAKKwkgKiAgMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgbG9nX1JlcXVlc3QoU3RyaW5nIHJlcXVlc3RQYXRoLCBTdHJpbmcgZnVuYykKKwkKKwl7CisJLy8gdHJhbnNmb3JtICJkYXRlVHRpbWUiIC0+ICJkYXRlIHRpbWUiOgorCQorCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCWZvdXQucHJpbnRmKCIjIyMgJXM6ICVzIDogdmVycz0nJXMnLCB2ZGF0ZT0nJXMnIHJlcXVlc3Q9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RQYXRoLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgCisJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwl9IC8vIGxvZ19SZXF1ZXN0CisJCQorCS8qIGZvcm1hdERiTmFtZQorCSAqIAorCSAqIC0gZ2V0cyBuYW1lIG9mIERhdGFiYXNlIHVzZWQgYnkgRGVyYnkgZnJvbSBwcm9wcyAKKwkgKiAgIGFuZCBmb3JtYXQgaXQgdG8gSFRNTC4KKwkgKiAgCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFN0cmluZyBmb3JtYXREYk5hbWUoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJU3RyaW5nCisJCWRiTmFtZTsKKwlTdHJpbmcKKwkJZGJQYXRoID0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJaW50CisJCWogPSBkYlBhdGgubGFzdEluZGV4T2YoJy8nKTsKKwkKKwlpZiggaiA+IDAgKQorCQlkYk5hbWUgPSBkYlBhdGguc3Vic3RyaW5nKGorMSk7CisJZWxzZQorCQlkYk5hbWUgPSBkYlBhdGg7CisJCisJcmV0dXJuIGRiTmFtZTsgLy8gIjxwPjxiPkRhdGFiYXNlOiAiICsgZGJOYW1lICsgIjwvYj48L3A+XG4iOworCX0gLy8gZm9ybWF0RGJOYW1lCisKKwkvKgorCSAqIGNsb3NlTG9nU3RyZWFtczoKKwkgKiAKKwkgKiAtIGNsb3NlIHRoZSBmb3V0L2ZlcnIgbG9nIHN0cmVhbXMuCisJICogCisJICogMjYuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgY2xvc2VMb2dTdHJlYW1zKCkKKwkKKwl7CisJaWYoIGZvdXQgIT0gbnVsbCkKKwkJZm91dC5jbG9zZSgpOworCWZvdXQgPSBudWxsOworCQorCWlmKCBmZXJyICE9IG51bGwgKQorCQlmZXJyLmNsb3NlKCk7CisJZmVyciA9IG51bGw7CisJfSAvLyBjbG9zZUxvZ1N0cmVhbXMKKwkKKwkvKiBpbml0X2FuZF9sb2dfUmVxdWVzdAorCSAqIAorCSAqIC0gbG9hZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMsIHNldHMgR2xlbW1TZXJ2aWNlcyBjb25zdGFudHMKKwkgKiAgIGFuZCBsb2dzIHRoZSByZXF1ZXN0LgorCSAqIC0gbG9hZCBwcm9wZXJ0aWVzIGFuZCBzZXQgY29uc3RhbnRzIGJlZm9yZSBsb2dnaW5nIGFueXRoaW5nLCBiZWNhdXNlCisJICogICBsb2dnaW5nIHdpbGwgYmUgZG9uZSBpbnRvIHRoZSBsYXN0IHN0ZG91dC9zdGRlcnIgb3BlbmVkIGluIGdsYXNzZmlzaCdzIEpWTSwKKwkgKiAgIGUuZy4gaW4gdGhlIGxvZyBvZiBhbm90aGVyIFNlcnZpY2UuCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFByb3BlcnRpZXMgaW5pdF9hbmRfbG9nX1JlcXVlc3QoU3RyaW5nIGZ1bmMsIFN0cmluZyByZXF1ZXN0UGF0aCkKKwkKKwl7CisJU3RyaW5nCisJCXJlYWxQYXRoID0gc2VydmxldENvbnRleHQuZ2V0UmVhbFBhdGgoZm5hbWVQcm9wcyk7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtIChpZiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJUHJvcGVydGllcworCQlwcm9wcyA9IFV0aWxzLmxvYWRQcm9wZXJ0aWVzKHNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcyksIGZuYW1lUHJvcHMsIHJlYWxQYXRoLCBmYWxzZSk7CisJCisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIGZvdXQgYW5kIGZlcnIgYXMgcmVwbGFjZW1lbnQgZm9yIHN0ZG91dC9zdGRlcnIgZm9yIHVzZSBpbiBHbGVtbVNlcnZpY2VzLgorCS8vIGRvIG5vdCB1c2Ugb3IgcmVkaXJlY3QgU3lzdGVtLm91dCBhbmQgU3lzdGVtLmVyciwgYXMgdGhleSB3aWxsIGJlIHJlZGlyZWN0ZWQKKwkvLyBieSBvdGhlciBTZXJ2aWNlcyBpbiB0aGUgc2FtZSBnbGFzc2Zpc2ggSlZNLCBlLmcuIGJ5IHRoZSBXZm9ybVNlcnZpY2VzLgorCWZvdXQgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVPdXQpOworCWZlcnIgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVFcnIpOworCQorCS8vVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkKKwlsb2dfUmVxdWVzdChyZXF1ZXN0UGF0aCwgZnVuYyk7CisJCisJcmV0dXJuIHByb3BzOworCX0gLy8gaW5pdF9hbmRfbG9nX1JlcXVlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwlTdHJpbmcKKwkJc3RhdHVzOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3N0YXR1cy8iKTsKKwkKKwkvLyBodHRwU2VydmxldFJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW52KTsKKwkKKwlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+cHJvcGVydGllczwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPmRhdGFiYXNlPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIiksCisJCQkJCQkJc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSA9PSBudWxsID8gIm5vdCBmb3VuZCIgOgorCQkJCQkJCQlwcm9wcy5pc0VtcHR5KCkgPyAiZW1wdHkiIDogImxvYWRlZCIsCisJCQkJCQkJZm9ybWF0RGJOYW1lKHByb3BzKQorCQkJCQkJCSk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJY2xvc2VMb2dTdHJlYW1zKCk7CisJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiAKKwkgKiBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhOgorCSAqIAorCSAqIFBPU1Q6IC9pbmRleC9hZGQvOiB0ZXh0L3BsYWluCisJICogYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UuCisJICogVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQKKwkgKiBpbnRvIHRoZSBkYXRhYmFzZS4KKwkgKiBJbnB1dDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICovCisJQFBhdGgoImFkZC97ZGF0YWJhc2VuYW1lIikgQFBPU1QgQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvUE9TVF9pbXBvcnRMZW1tYURhdGEoU3RyaW5nIGxpc3QpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9QT1NUX2ltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gYXJMaXN0ID0gbGlzdC5zcGxpdCgiXG4iKTsKKwkKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IGZzLmdldFBhdGgoZm5hbWVXZnMpOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvYWRkLyIpOworCQorCS8vIFdyaXRlIHN1Ym1pdHRlZCBsaXN0IG9mIHdvcmRmb3JtcyB0byBmaWxlOgorCXRyeQorCQl7CisJCW9zID0gRmlsZXMubmV3T3V0cHV0U3RyZWFtKHApOworCQlvcy53cml0ZShsaXN0LmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSkpOworCSAgICBvcy5jbG9zZSgpOworCSAgICBiRG9uZSA9IHRydWU7CisJICAgIGZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGZpbGUgJyVzJyBiZXNjaHJpZWJlbi5cbiIsIGZ1bmMsIGZuYW1lV2ZzKTsKKwkgICAgfQorCWNhdGNoKElPRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoZmVycik7CisJCX0KKyAgICAKKwlpZiggYkRvbmUgKQorCQltc2cgPSAiPHA+TGlzdCB3cml0dGVuIHRvIGZpbGU6ICIgKyBwLnRvU3RyaW5nKCkgKyAiPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+PGI+RmlsZSBFcnJvcjogPC9iPiBjYW5ub3Qgd3JpdGUgdG8gIiArIHAudG9TdHJpbmcoKSArICIhPC9wPiI7CisJCisJLyoKKwkgKiAgZXhlY3V0ZSBHbGVtbSBzaGVsbCBzY3JpcHQ6CisJICovCisJU3RyaW5nCisJCW1zZ0dsZW1tU2NyaXB0LCBtc2dJbXBvcnQ7CisJaW50IAorCQlyID0gVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0KGZuYW1lU2NyaXB0LCBmbmFtZVdmcywgZm91dCwgZmVycik7CisJCisJaWYoIHIgPT0gMCApCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEF1c2bDvGhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhLCBwcm9wcyk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJCisJfSAvLyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisKKwkvKiBkb0dFVF92aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzID0gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby8iKTsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCWZpbmFsIFN0cmluZworCQlkYk5hbWUgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5kYXRhYmFzZTwvYj46ICVzPC9wPiIsIGZvcm1hdERiTmFtZShwcm9wcykpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBkYk5hbWUgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIGRvR0VUX3ZpZXdEQkluZm8KKworCisJLyogZG9HRVRfdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+dmVyc2lvbiAiICsgdmVyc2lvbiArICIgdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgcmVxdWVzdCA9ICciICsgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSArICInPC9pPjwvaDQ+XG4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMTo8L2I+IChDMiBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX08L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT57bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKTwvY29kZT48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsPC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+w5ZsP29wdHM9ZmxleCtjb21wK290aGVyK3NwZWM8L2NvZGU+PC9wPiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAyOjwvYj4gKGludGVybmFsIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfT9wcm9wMT1bMDEyXSZhbXA7cHJvcDI9WzAxMl0mYW1wO3NwZWM9WzAxMl08L2NvZGU+ICh3aGVyZSBlYWNoIHByb3AxLCBwcm9wMiwgc3BlYyBpcyBvcHRpb25hbCkuPC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbD9wcm9wMT0wJmFtcDtwcm9wMj0xJmFtcDtzcGVjPTI8L2NvZGU+PC9wPiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Iik7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JyVkJyBwcm9wMj0nJWQnIHNwZWM9JyVkJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCS8qIAorCWZvcihpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwkJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwkJfQkKKwkgKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggbGVtbWFJbmZvLm9wdHNTZXR0aW5nID09IExlbW1hSW5mby5PUFRTX1NFVFRJTkdfQzIgKSAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZywgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxLHByb3AyLHNwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpbnQKKwkJbldmcyA9IGxlbW1hSW5mby5uV2ZzOworCQorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCS8vIGxvZyBvdXRjb21lOgorCWlmKCBuV2ZzIDwgMCApCisJCWZvdXQucHJpbnRmKCJFcnJvcjogJXM6IHJldHVybmluZyAwIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYyk7CisJZWxzZQorCQlmb3V0LnByaW50ZigiRGVidWcuICVzOiByZXR1cm5pbmcgJWQgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jLCBuV2ZzKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogbm90ZToKKwkgKiAtIGlmIEJyb3dzZXIgcmVxdWVzdDogSFRUUFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICd0ZXh0L2h0bWwsLi4ueG1sLi4uJworCSAqIC0gaWYgV2Zvcm1TZXJ2aWNlcyByZXF1ZXN0OiBIdHRwU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ2FwcGxpY2F0aW9uL2pzb24nLgorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICogCisJICogLSBzdWJtaXR0ZWQgVVJMLCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWEsIGlzIGludGVycHJldGVkIGJ5IGdsYXNzZmlzaCBhcworCSAqICAgYmVpbmcgSVNPLTg4NTktMSBlbmNvZGVkLiBXaGVuIHRoZSByZXF1ZXN0IGlzIFVURi04IGVuY29kZWQsIFVtbGF1dHMgYW5kCisJICogICAnw58nIGFyZSBtaXMtaW50ZXJwcmVkZWQsIGxlYWRpbmcgdG8gYW4gZXJyb25lcm91cyByZXF1ZXN0IHRvIHRoZSBEZXJieQorCSAqICAgZGF0YWJhc2UuCisJICogLSBSZXF1ZXN0ZWQgbGVtbWEgJ2xlbW1hJyBoYXMgdG8gYmUgdHJhbnNmb3JtZWQgdG8gVVRGLTggZmlyc3QuCisJICogLSBub3RlOiBldmVuIHdoZW4gc3VibWl0dGluZyB0aGUgR0VUIHJlcXVlc3QgYnkgc3BlY2lmeWluZyAnY2hhcmVuY29kZT1VVEYtOCcsCisJICogICBnbGFzc2Zpc2ggZG9lcyBub3QgY29udmVydCBpdCBhdXRvbWF0aWNhbGx5IGFzIGV4cGVjdGVkLgorCSAqICAgCisJICogIDIyLjEwLjIxL0ZCCisJICogCisJICogLSBpZiBhY2NlcHQ9YXBwbGljYXRpb24vanNvbiByZXR1cm4gVVRGLTggKFdmb3JtU2VydmljZXMpLgorCSAqIC0gZWxzZSBpZiBhY2NlcHQ9dGV4dC9odG1sIGRvIG5vdCB0cmFuc2Zvcm0gY2hhcmFjdGVyIGVuY29kaW5nIChCcm93c2VyKS4KKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQENvbnN1bWVzKCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2h0bWwiKQorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm87CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJZmluYWwgYm9vbGVhbgorCQliRW5jb2RlTGVtbWEgPSBmYWxzZTsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsKKwkKKwkvKiB0ZXN0OgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlpZiggYkVuY29kZUxlbW1hICkKKwkJeworCQkvLyB3aGVuIGFjY2VwdGluZyBKU09OLCB1cmwgaGFzIHRvIGJlIGNvbnZlcnRlZCB0byBVVEYtOCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hOgorCQl0cnkgeworCQkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhuZXcgU3RyaW5nKGxlbW1hLmdldEJ5dGVzKCJJU08tODg1OS0xIiksICJ1dGYtOCIpKTsKKwkJCX0gCisJCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCUxlbW1hUmVzcG9uc2UKKwkJCQlsZW1yZXNwID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtcmVzcCkuYnVpbGQoKTsKKwkJCX0KKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbVVRGLThdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisJZWxzZQorCQl7CisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFt1bmNoYW5nZWRdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisKKwkvKiBkb2VzIG5vdCBoZWxwOgorCSBTdHJpbmcKKwkgCXJlcXVlc3RDaGFyRW5jb2RpbmcgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0Q2hhcmFjdGVyRW5jb2RpbmcoKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlcXVlc3QgY2hhcmFjdGVyIGVuY29kaW5nID0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdENoYXJFbmNvZGluZyk7CisJKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJeworCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCS8vcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQl9CisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOwkKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJLyoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3Rlc3QvaW5mby8iKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vZm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQlmb3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYzYvZTBjZTExNDg5OTNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2M2L2UwY2UxMTQ4OTkzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNTg0MjgKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2M2L2UwY2UxMTQ4OTkzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsNzI5IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKK2ltcG9ydCBqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7CitpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAob3ZlcndyaXR0ZW4gYnkgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKGZpbmFsIGFzc2lnbm1lbnRzKToKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJFbWIgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIjsKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLyoKKwkgKiBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkgKiAKKwkgKiBBcmd1bWVudHM6CisJICogcHJvcHMJOiBQcm9wZXJ0aWVzIGxvYWRlZCBieSB0aGUgR2xlbW1TZXJ2aWNlcy4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgZnVuY3Rpb24gbG9hZHMgb25seSB0aG9zZSBDb25zdGFudHMgbmVlZGVkIGluIHRoaXMgY2xhc3MuCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzCXByb3BzKQorCQorCXsKKwlmbmFtZURCCQkgCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAJIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCXNlcnZlckhvc3QJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgInNlcnZlckhvc3QiLAkiLy9sb2NhbGhvc3Q6MTUyNy8iKTsKKwlkZXJieURCVVJMIAkJPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJCQkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIHdoZW4gaW5kZXhpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSwgc2VsZWN0IHRoZSBzdWJtaXR0ZWQgZGJwYXRoLAorCS8vIChub3QgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZGJwYXRoOworCQorCS8vIG9wZW4gcmVhZGVyIG9uIEdsZW1tIExlbW1hdGE6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJCisJCW5FcnJvcnMgPSB3cml0ZURCTGVtbWF0YShpbik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIGZyb20gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwkvLyBjbG9zZSBSZWFkZXI6CisJdHJ5IHsKKwkJaW4uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQluRXJyb3JzID0gLTE7CisJCX0KKwkKKyAJaWYoIG5FcnJvcnMgPT0gMCApCisgCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydCBkb25lIHN1Y2Nlc3NmdWxseS5cbiIsIGZ1bmMpOworIAllbHNlCisgCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydDogJWQgRXJyb3JzIVxuIiwgZnVuYywgbkVycm9ycyk7CisgCQorCXJldHVybiBuRXJyb3JzOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhCisJCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAorCSAqICAgICAgICAgICAgICAgICAgICAgICB3cml0ZURCTGVtbWF0YSgpCisJICogICAgICAgICAgICAgICAgICAgICAgIAorCSAqIHN0b3JlcyBsaXN0IG9mIGxlbW1hdGEgKyBpbmZvcyBpbnRvIERlcmJ5IGRiLgorCSAqIEZpbGUgZm9ybWF0OiAiTGVtbWEgRGVjb21wb3NpdGlvbiBXZiIsCisJICogICAgICAgICAgICAgIGUuZy46ICJIw6R1c2VyICstIEhhdXMiLgorCSAqIFJldHVybnM6IDAgPSBPSyBvciAtMTogZ2VuZXJhbCBlcnJvciBvciA+IDA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogMDkuMDEuMjAvRkIKKwkgKiAwNC4xMS4yMS9GQiB0dXJuIGF1dG9jb21taXQgb2ZmIHRvIGFjY2VsZXJhdGUgaHVnZSBhbW91bnQgb2YgaW5zZXJ0aW9ucy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hdGEoQnVmZmVyZWRSZWFkZXIgaW4pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWF0YSI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlQcmVwYXJlZFN0YXRlbWVudAorCQlzdG10UHJlcCA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgCSA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CQorCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCW5JbnNlcnRlZCA9IDAsCS8vIG5vLiBvZiBsZW1tYS93ZiBwYWlycyBpbXBvcnRlZC4KKwkJcmV0ID0gMDsgLy8gT0suCisJYm9vbGVhbgorCQljb250YWluc1NwZWM7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlLAorCS8vIHNldCBBdXRvY29tbWl0ID0gZmFsc2UgdG8gYWNjZWxlcmF0ZSBpbnNlcnRpb25zOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQljb24uc2V0QXV0b0NvbW1pdChmYWxzZSk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkIChhdXRvQ29tbWl0PW9mZikuXG4iLCBmdW5jKTsKKworCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCXN0bXRQcmVwID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0UHJlcGFyZWRRdWVyeSk7CisJCWVsc2UKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisKKwkJd2hpbGUoIChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoICE9IDMgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6ICclcycgaGFzICVkIGNvbXBvbmVudHMhIEV4cGVjdGVkID0gMyEgQ2Fubm90IGJlIHN0b3JlZCFcbiIsIGZ1bmMsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJCW5FcnJvcnMrKzsKKwkJCQljb250aW51ZTsKKwkJCQl9CisJCQkKKwkJCS8vIEdldCBJbmZvLCBpZiB3b3JkZm9ybSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgJy0nLCBpbnRlcnB1bmN0aW9uIGV0Yy46CisJCQkvLyBsZW1tYUluZm9bMl0gPSB3b3JkZm9ybS4KKwkJCWNvbnRhaW5zU3BlYyA9IExlbW1hSW5mby5pc1dmU3BlY2lhbENhc2UobGVtbWFJbmZvWzJdKTsKKwkJCS8vIHN0b3JlIGludG8gREI6CisJCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZChzdG10UHJlcCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvcyhzdG10LCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJCisJCQlpZiggcmV0ICE9IDAgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBzdG9yZSBsZW1tYSAnJXMnIGludG8gREIhXG4iLCBmdW5jLCBsaW5lKTsKKwkJCQluRXJyb3JzKys7IAorCQkJCX0KKwkJCWVsc2UKKwkJCQluSW5zZXJ0ZWQrKzsKKwkJCX0gLy8gd2hpbGUKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgR2xlbW0gbGVtbWF0YStpbmZvcyBmcm9tIGZpbGUhIEV4aXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOyAKKwkJfQkKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIAorCQkJCXN0bXQuY2xvc2UoKTsKKwkJCWlmKCBzdG10UHJlcCAhPSBudWxsICkgCisJCQkJc3RtdFByZXAuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiSW5mbyA6ICVzOiBuby4gb2YgbGVtbWF0YS93ZiBwYWlycyBpbnNlcnRlZCA9ICVkLlxuIiwgZnVuYywgbkluc2VydGVkKTsKKwkKKwlyZXR1cm4gbkVycm9yczsgLy8gMD1PSywgPjAgPSBuby4gb2YgZXJyb3JzLgorCX0gLy8gd3JpdGVEQkxlbW1hdGEKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQ6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gcnVsZXMgaW50byBEZXJieSBEQi4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgaXMgdGhlIHZlcnNpb24gd2l0aCBhIFByZXBhcmVkUXVlcnkuCisJICogUGFyYW1ldGVyczoKKwkgKiBzcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTcuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoCisJCQlQcmVwYXJlZFN0YXRlbWVudCBzdG10LCAKKwkJCVN0cmluZyBsZW1tYSwgCisJCQlTdHJpbmcgd2YsIAorCQkJU3RyaW5nIGRlY29tcG9zaXRpb24sIAorCQkJYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQiOworCWZpbmFsIGJvb2xlYW4KKwkJYkxvZyA9IGZhbHNlOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCWJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICAKKwkvLyBmb3IgbG9naW5nIG9ubHk6CisJc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCWlmKCBiTG9nICkKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisgICAgLy8gbm93IGluc2VydCBuZXcgdmFsdWVzIGludG8gUHJlcGFyZWRTdGF0ZW1lbnQ6CisgICAgdHJ5IHsKKyAgICAJc3RtdC5zZXRTdHJpbmcoIDEsIGxlbW1hKTsKKyAgICAgICAgc3RtdC5zZXRTdHJpbmcoIDIsIHdmKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDMsIHByb3AxKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDQsIHByb3AyKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDUsIHNwZWMpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByZXBhcmVkIHN0bXQgPSAnJXMnLlxuIiwgIGZ1bmMsIHN0bXQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUxKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoCSJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JyViJyBwcm9wMj0nJWInIHNwZWM9JyViJyFcbiIsICAKKwkJCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUxLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorICAgIAorICAgIHRyeSB7CisJCS8vIGV4ZWN1dGUgdGhlIGZpbGxlZCBwcmVwYXJlZCBzdGF0ZW1lbnQ6CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAyOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDM7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZAorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3M6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gaW50byBEZXJieSBEQi4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGNvbnRhaW5zU3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDEwLjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zKFN0YXRlbWVudCBzdG10LCBTdHJpbmcgbGVtbWEsIFN0cmluZyB3ZiwgU3RyaW5nIGRlY29tcG9zaXRpb24sIGJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zIjsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlCb29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworICAgIAorICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorCXRyeSB7CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoc3FsSW5zZXJ0KTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYURhdGEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBmcm9tIHRoZSBHbGVtbURCLgorCSAqIElucHV0OiBsZW1tYSArIEdMRU1NX09QVFNfeHh4IChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWFEYXRhKExlbW1hSW5mbyBsZW1tYUluZm8sIFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYURhdGEiOworCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJbGVtbWFJbmZvLmNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJbGVtbWFJbmZvLnN0bXQgPSBsZW1tYUluZm8uY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlpbnQgciA9IHJlYWREQkxlbW1hKGxlbW1hSW5mby5zdG10LCBsZW1tYUluZm8pOworCQkJCisJCWlmKCByICE9IDAgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZ2V0IGRhdGEgZm9yIGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIVxuIiwgCisJCQkJCWZ1bmMsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwkJCXJldHVybiAxOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggbGVtbWFJbmZvLmNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hRGF0YQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGJ5IGFjY2Vzc2luZyB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dCA6IGxlbW1hICsgcHJvcDErMiAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogT3V0cHV0OiAKKwkgKiAgLSBjb250YWlucyBhIFJlc3VsdFNldCBmb3IgZmV0Y2hpbmcgdGhlIHdvcmRmb3Jtcy4KKwkgKiAJICBUaGlzIFJlc3VsdFNldCB3aWxsIGhhdmUgYmUgYmUgY2xvc2VkIHdpdGggTGVtbWFJbmZvLmNsb3NlKCkuCisJICogCSAgVGhlIG5vLiBvZiBmb3VuZCB3b3JkZm9ybXMgaXMgbm90IGtub3duIHRpbGwgd2UKKwkgKiAJICBmZXRjaCBhbGwgb2YgdGhlbSBmcm9tIFJlc3VsdFNldCEgCisJICogCS0gZHVlIHRvIFNFTEVDVCBESVNUSU5DVCBvbmx5IHVuaXEgd2YgYXJlIHJldHVybmVkLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYShTdGF0ZW1lbnQgc3RtdCwgTGVtbWFJbmZvIGxlbW1hSW5mbykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hIjsKKwlTdHJpbmcKKwkJc3FsOworCQkKKwlzcWwgPSBTdHJpbmcuZm9ybWF0KCJTRUxFQ1QgRElTVElOQ1Qgd2YgZnJvbSAlcyBXSEVSRSBsZW1tYT0nJXMnICVzICVzICVzIiwgCisJCQlkYlRhYmxlLAorCQkJbGVtbWFJbmZvLmxlbW1hLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiQU5EIHByb3AxPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAxID8gIkFORCBwcm9wMT0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiQU5EIHByb3AyPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAxID8gIkFORCBwcm9wMj0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiQU5EIHNwZWM9J3RydWUnIiAgIDogCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICJBTkQgc3BlYz0nZmFsc2UnIiAgOiAiIik7CisJCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgZnVuYywgbGVtbWFJbmZvLnByb3AxLCBsZW1tYUluZm8ucHJvcDIsIGxlbW1hSW5mby5zcGVjKTsKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbCA9ICclcycuXG4iLCBmdW5jLCBzcWwpOworCisJdHJ5IHsKKwkJbGVtbWFJbmZvLnJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoZW4gZXhlY3V0aW5nIHNxbD0nJXMnIVxuIiwgZnVuYywgc3FsKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gYWxsIHNxbCBzdHVmZiBhcmUgY2xvc2VkIG91dHNpZGUgdGhpcyBmdW5jdGlvbiwgc28gZG9uJ3QgY2xvc2UgdGhlbSBoZXJlIQorCQl9CQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3MKKwkgKiBSZXR1cm5zIEdlbmVyYWwgSW5mb3MgYWJvdXQgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIHJlYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJJbmZvcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJZGJJbmZvID0gcmVhZERiTGVtbWF0YUluZm9zKHN0bXQpOworCQkJCisJCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCByZWFkIEdlbmVyYWwgSW5mb3MgZnJvbSBHbGVtbSBEYXRhYmFzZSFcbiIsIGZ1bmMpOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSBjb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSBzdG10LmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIG1heSBiZSBudWxsLgorCQkKKwl9IC8vIHJlYWREYkluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiTGVtbWF0YUluZm9zOgorCSAqIHJlYWRzIGFuZCByZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGNvbnRlbnQgCisJICogb2YgdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIFJldHVybnMgMD1PSyBvciBlcnJvciBjb2RlID4gMC4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkxlbW1hdGFJbmZvcyhTdGF0ZW1lbnQgc3RtdCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAicmVhZERiTGVtbWFJbmZvcyI7CisJU3RyaW5nW10KKwkJc3FsID0gewkiU0VMRUNUIENPVU5UKGRpc3RpbmN0IGxlbW1hKSBmcm9tICIgKyBkYlRhYmxlICwJLy8gY291bnRzIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSwJCQkJCS8vIGNvdW50cyB0b3RhbCBuby4gb2Ygc3RvcmVkIHdvcmRmb3Jtcy4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPXRydWUiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPXRydWUifTsKKwlSZXN1bHRTZXQKKwkJcmVzID0gbnVsbDsgCisJaW50W10KKwkJbkNvdW50cyA9IG5ldyBpbnRbc3FsLmxlbmd0aF07CisJaW50CQkKKwkJaSA9IDAsIAorCQluRGlzdExlbW1hdGEgPSAtMSwJLy8gbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEgaW4gREIuCisJCW5XZnMJCSA9IC0xOwkvLyBuby4gb2Ygd29yZGZvcm1zIGluIERCLgorCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBleHRyYWN0aW5nIGFncmVnYXRlZCBpbmZvcyBhYm91dCBEYXRhYmFzZSBjb250ZW50cy4uLlxuIiwgZnVuYyk7CisJCisJZGJJbmZvID0gbmV3IEdsZW1tREJJbmZvKCk7CisKKwkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwl0cnkgeworCQlmb3IoaT0wOyBpPHNxbC5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCXJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbFtpXSk7CisJCQlpZiggcmVzLm5leHQoKSApCisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IHJlcy5nZXRJbnQoMSk7IC8vIGNvdW50IGlzIGluIGNvbHVtbiAxLgorCQkJZWxzZQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBleHRyYWN0IGNvdW50IGZyb20gJyVzJyFcbiIsIGZ1bmMsIHNxbFtpXSk7CisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IC0xOworCQkJCX0KKwkJCX0KKyAgICAgICAKKyAgICAgICAgfQorICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgIAl7CisgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogc3FsPSclcycgZmFpbGVkIVxuIiwgZnVuYywgc3FsW2ldKTsKKyAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAJfQorCWZpbmFsbHkgeworCQl0cnkgeworCQkJcmVzLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBPSworCX0gLy8gcmVhZERiTGVtbWF0YUluZm9zCisJCisJLyoqKioqKioqKioqKioqKioqKioqIFRlc3QgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zX3Rlc3QKKwkgKiBUaGlzIGlzIGRlYnVnIGNvZGUgd3JpdHRlbiB0byB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIERlcmJ5CisJICogRGF0YWJhc2UgZnJvbSBhbiBleHRlcm5hbCBKYXZhIFByb2dyYW1tLgorCSAqIDA4LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCByZWFkRGJJbmZvc190ZXN0KCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlTdHJpbmcKKwkJaW5zZXJ0U3RtdCA9ICIiOworCQorCS8vIENvbm5lY3QgdG8gRGVyYnkgZGF0YWJhc2U6CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCQorCQkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwkJdHJ5CisJCQl7CisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIAorICAgICAgICAgICAgCXNxbCA9ICJTRUxFQ1QgKiBGUk9NICIgKyBkYlRhYmxlOworICAgICAgICAgICAgUmVzdWx0U2V0IAorICAgICAgICAgICAgCXJlc3VsdCA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CisgCisgICAgICAgICAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHRhYmxlICclcyc6XG4iLCAgZnVuYywgZGJUYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQubmV4dCgpKSB7CisgICAgICAgICAgICAJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiJyVzJyA6ICclcycgOiAnJXMnIDogJyVzJyAuXG4iLCByZXN1bHQuZ2V0U3RyaW5nKDEpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygyKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMyksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDQpKTsKKyAgICAgICAgCQlpbnNlcnRTdG10ID0gaW5zZXJ0U3RtdCArICI8cD4iICsgcmVzdWx0LmdldFN0cmluZygxKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZygyKSArICIgOiAiICsKKyAgICAgICAgICAgICAgICAJCSAgICAgcmVzdWx0LmdldFN0cmluZygzKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZyg0KSArICI8L3A+IjsKKyAgICAgICAgICAgIAl9CisJCQl9CisJICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgICAgICAJeworCSAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBpbnNlcnRTdG10PSclcycgZmFpbGVkIS5cbiIsIGZ1bmMsIHN0bXQpOworICAgICAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICAgICAgY29uLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nICclcyBmYWlsZWQhXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJdHJ5IHsKKwkJY29uLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkJCisJfSAvLyByZWFkRGJJbmZvc190ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogaW1wb3J0R2xlbW1MZW1hdGFfdGVzdAorCSAqIFRlc3QgVmVyc2lvbi4KKwkgKiAxMi4xMi4xOS9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QoU3RyaW5nIGZuKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdCI7CisJSW5wdXRTdHJlYW0gCisJCWluOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluMiA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQlyOworCQorCS8qCisJICogUmVhZCBMZW1tYXRhICsgSW5mbyBmcm9tIGZpbGU6IAorCSAqLworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCQorCXRyeSB7CisJCS8vaW4gPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSggbmV3IEZpbGVJbnB1dFN0cmVhbShmbikgKTsKKwkJaW4yID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlcihmbikpOworCQl3aGlsZSggKGxpbmUgPSBpbjIucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoID09IDMgKQorCQkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBJbXBvcnQ6IGxlbT0nJXMnIERlY29tcD0nJXMnIFdmPSclcycuXG4iLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1sxXSwgbGVtbWFJbmZvWzJdKTsKKwkJCWVsc2UKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogaW1wb3J0R2xlbW1MYW1hdGE6ICclcycgaGFzICVkIGNvbXBvbmVudHMhXG4iLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IG9wZW4gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJcmV0dXJuIDE7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKworCXRyeSB7CisJCWluMi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCS8qIENoZWNrIGNvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJICovIAorCXIgPSByZWFkRGJJbmZvc190ZXN0KCk7CisJaWYoIHIgIT0gMCApCisJCXJldHVybiByOworCQkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2M5LzkwMjk4YTBkNGMzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9jOS85MDI5OGEwZDRjM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTg5MzIxCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9jOS85MDI5OGEwZDRjM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpAQCAtMCwwICsxLDk3NSBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCisvKiAwLjEgOiAxNy4wNi4yMC9GQiAKKyAqIDAuMiA6IDI1LjEwLjIxL0ZCCisgKiAgICAgICBsb2dpbmcgb2YgdGhlIEFQSSBSZXF1ZXN0cy4KKyAqICAgICAgIGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorICogICAgICAgY29ycmVjdGluZyBjYWxsaW5nIG9mIGxlbW1hICsgcHJvcDEvcHJvcDIvc3BlYy4KKyAqICAgICAgIGhhbmRsaW5nIG9mIGxlbW1hdGEgd2l0aCAnw58nLgorICogCisgKiBHZW5lcmFsIGNvbW1lbnRzIHRvIHRoZSBlbmNvZGluZyBvZiBkZXJpdmF0aW9ucyBmcm9tIGxlbW1hIHRvIHdmcyBhbmQgaG93IHRoZXkgYXJlIGVuY29kZWQKKyAqIGluIHRoZSBEZXJieSBkYXRhYmFzZToKKyAqIAorICogR0xFTU0gZW5jb2Rpbmc6ICAKKyAqICAgXyBfIDogK0ZsZXggICAgICAgw5ZsZSAtPiDDlmwgICAgICAKKyAqICAgKyBfIDogK0NvbXAgICAgICAgw5ZsbGFtcGUgLT4gw5ZsIG9yIExhbXBlIChjb21wb3VuZCkuCisgKiAgIF8gKyA6ICtvdGhlciAgICAgIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuc2NodWggKG5vIGNvbXBvdW5kIGZvciAnVHVybnNjaHVoJywgb25seSBwcmVmaXgpLgorICogICArICsgOiArQ29tcCtvdGhlciBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybiArIFNjaHVoIChjb21wb3VuZCBmb3IgJ1NjaHVoJyArIFByZWZpeCkuCisgKiBDMiBsZW1tYXRpemF0aW9uIG9wdGlvbnM6CisgKiAgIEZsZXggIChpZGVudGljYWwgdG8gR2xlbW0pCisgKiAgIENvbXAgIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykKKyAqICAgT3RoZXIgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKS4KKyAqICAgU3BlYyAgKG9ubHkgQzI6IGluY2x1ZGVzIGFsbCB3ZnMgd2l0aCBoaXBoZW4gYW5kL29yIHNvbWUgbm9uLWFscGhhYmV0aWMgSVNPODg1OS0xIGNoYXJzKQorICogICAgICAgICBFLmcuIMOWbC1FeHBvcnRlLCAiTWFya2VuIi3DlmxlLgorICogRGVyYnkgRW5jb2Rpbmc6CisgKiAgcHJvcDEgCXByb3AyCXNwZWMgICAJbWVhbmluZyBpbiBDMjoKKyAqICAwCQkwCQktCQlGbGV4CisgKiAgMQkJMAkJLQkJQ29tcAorICogIDAJCTEJCS0JCU90aGVyIChwcmVmaXgpCisgKiAgMQkJMQkJLQkJQ29tcCArIE90aGVyCisgKiAgLQkJLQkJMAkJLVNwZWMKKyAqICAtCQktCQkxCQkrU3BlYworICogCisgKiBFeGFtcGxlczoKKyAqICZTY2h1aAkJCTogU2NodWgsIFNjaHVoZSwgLi4uIG9ubHkgZmxleGlvbnMKKyAqICZTY2h1aCtjb21wCQk6IFNjaHVoZSwgVHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzLgorICogJlNjaHVoK290aGVyCQk6IFNjaHVoZSwgQW50aXNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgcHJlZml4ZWQgd2ZzIChubyBjb21wb3VuZHMpLgorICogJlNjaHVoK2NvbXArb3RoZXI6IFNjaHVoZSwgQW50aXNjaHVoZSwgVHVybnNjaHVoZSwgQW50aXR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcyBhbmQgCisgKiAJCQkJCSAgcHJlZml4ZWQgc2luZ2xlIHdmcyAoQW50aXNjaHVoZSkgYW5kIHByZWZpeGVkIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtzcGVjCQk6ICJBbnRpIi1TY2h1aGUsIDY4Z2VyLVNjaHVoZS4uLiBtYXkgYmUgY29tYmluZWQgd2l0aCBldmVyeSBvcHRpb25zOiBhZGRzCisgKiAgICAgICAgICAgICAgICAgICAgd2ZzIHdpdGggaHlwaGVuIGFuZC9vciBub24tYWxwaGFiZXRpYyBjaGFycy4KKyAqIAorICogQ29udmVyc2lvbiBydWxlczoKKyAqIAorICogICZzY2hsaWXDn2VuIC0+IGludGVybmFsIHNlYXJjaCBmb3IgJ3NjaGxpZXNzZW4nLAorICogIGJlY2F1c2UgR2xlbW0gb3V0cHV0cyAnc3MnIGZvciAnw58nLgorICogIAorICogQ2hhcmFjdGVyIEVuY29kaW5nOgorICogCisgKiAtIFdoZW4gaW1wb3J0aW5nIHdmcyB0byB0aGUgRGVyYnkgRGF0YWJhc2Ugd2l0aCBkb0N1cmxHbGVtbVNlcnZpY2VzL2luZGV4TGVtbWF0YToKKyAqIAorICogICBJTlBVVDogd29yZGZvcm0gbGlzdCBpbiBbVVRGLThdIDogVVRGLTggaXMgdGhlbiBjb252ZXJ0ZWQgdG8gTGF0MSBmb3IgR2xlbW0sCisgKiAgICAgICAgICB0aGUgb3V0cHV0IG9mIEdsZW1tIFtMYXQxXSBpcyByZXR1cm5lZCB0byB0aGUgR2xlbW1TZXJ2aWNlcyB3aXRob3V0IHJlY29udmVyc2lvbgorICogICAgICAgICAgdG8gVVRGOCBhbmQgaW1wb3J0ZWQgaW50byBEZXJieSBEYXRhYmFzZSB1bmNoYW5nZWQuCisgKgkJCisgKi8KKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNC4xMS4yMSI7IAorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMiI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVQcm9wcwkJPSAiL1dFQi1JTkYvR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIjsKKwkKKwkvLyB0aGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgcmVhZCBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyAodGhlc2UgYXJlIHRoZSBkZWZhdWx0IHZhbHVlcyk6CisJcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggCQk9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCXByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQkJCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJQENvbnRleHQKKwlwcml2YXRlIFNlcnZsZXRDb250ZXh0IHNlcnZsZXRDb250ZXh0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZm91dAk9IG51bGw7CisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmZXJyCT0gbnVsbDsJCQorCQkKKwkvKiAKKyAJICogCisJICogLSBhZnRlciBsb2FkUHJvcGVydGllcywgc2V0cyB0aGUgY2xhc3MgdmFyaWFibGUgd2l0aCBsb2FkZWQgcHJvcGVydHkgdmFsdWVzLgorCSAqIAorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlHU19Xb3JraW5nUGF0aCAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiR1NfV29ya2luZ1BhdGgiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiKTsKKwlmbmFtZVdmcwkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVXZnMiLCAJICAgImdsX3dmc19pbi50eHQiKTsKKwlmbmFtZVdmcwkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lV2ZzOworCWZuYW1lT3V0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZU91dCIsIAkgICAiR2xlbW1TZXJ2aWNlcy5sb2ciKTsKKwlmbmFtZU91dAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lT3V0OworCWZuYW1lRXJyCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUVyciIsIAkgICAiR2xlbW1TZXJ2aWNlcy5lcnIiKTsKKwlmbmFtZUVycgkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lRXJyOworCWZuYW1lU2NyaXB0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVNjcmlwdCIsCSAgICJkb0dsZW1tIik7CisJZm5hbWVTY3JpcHQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVNjcmlwdDsKKwlmbmFtZUxlbWF0YQkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVMZW1hdGEiLCAgICAidG1wL2xlbTMiKTsKKwlmbmFtZUxlbWF0YQkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lTGVtYXRhOworCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyoKKwkgKiAgbG9nX1JlcXVlc3Q6CisJICogIAorCSAqICAtIHdyaXRlIGluZm8gYWJvdXQgQVBJIFJlcXVlc3QuCisJICogIFBhcmFtZXRlcnM6CisJICogIHJlcXVlc3RQYXRoCTogcGF0aCBvZiB3ZWJhcHAgYWRkcmVzc2VkIGJ5IHRoZSByZXF1ZXN0LgorCSAqICBmdW5jCQk6IG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHdoaWNoIGltcGxlbWVudHMgdGhlIHJlcXVlc3QuCisJICogIAorCSAqICAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBsb2dfUmVxdWVzdChTdHJpbmcgcmVxdWVzdFBhdGgsIFN0cmluZyBmdW5jKQorCQorCXsKKwkvLyB0cmFuc2Zvcm0gImRhdGVUdGltZSIgLT4gImRhdGUgdGltZSI6CisJCisJZm91dC5wcmludGYoIiMjI1xuIik7CisJZm91dC5wcmludGYoIiMjIyAlczogJXMgOiB2ZXJzPSclcycsIHZkYXRlPSclcycgcmVxdWVzdD0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdFBhdGgsIHZlcnNpb24sIHZlcnNpb25EYXRlLCAKKwkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCX0gLy8gbG9nX1JlcXVlc3QKKwkJCisJLyogZm9ybWF0RGJOYW1lCisJICogCisJICogLSBnZXRzIG5hbWUgb2YgRGF0YWJhc2UgdXNlZCBieSBEZXJieSBmcm9tIHByb3BzIAorCSAqICAgYW5kIGZvcm1hdCBpdCB0byBIVE1MLgorCSAqICAKKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgU3RyaW5nIGZvcm1hdERiTmFtZShQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlTdHJpbmcKKwkJZGJOYW1lOworCVN0cmluZworCQlkYlBhdGggPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlpbnQKKwkJaiA9IGRiUGF0aC5sYXN0SW5kZXhPZignLycpOworCQorCWlmKCBqID4gMCApCisJCWRiTmFtZSA9IGRiUGF0aC5zdWJzdHJpbmcoaisxKTsKKwllbHNlCisJCWRiTmFtZSA9IGRiUGF0aDsKKwkKKwlyZXR1cm4gZGJOYW1lOyAvLyAiPHA+PGI+RGF0YWJhc2U6ICIgKyBkYk5hbWUgKyAiPC9iPjwvcD5cbiI7CisJfSAvLyBmb3JtYXREYk5hbWUKKworCS8qCisJICogY2xvc2VMb2dTdHJlYW1zOgorCSAqIAorCSAqIC0gY2xvc2UgdGhlIGZvdXQvZmVyciBsb2cgc3RyZWFtcy4KKwkgKiAKKwkgKiAyNi4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBjbG9zZUxvZ1N0cmVhbXMoKQorCQorCXsKKwlpZiggZm91dCAhPSBudWxsKQorCQlmb3V0LmNsb3NlKCk7CisJZm91dCA9IG51bGw7CisJCisJaWYoIGZlcnIgIT0gbnVsbCApCisJCWZlcnIuY2xvc2UoKTsKKwlmZXJyID0gbnVsbDsKKwl9IC8vIGNsb3NlTG9nU3RyZWFtcworCQorCS8qIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisJICogCisJICogLSBsb2FkIEdsZW1tU2VydmljZXMucHJvcGVydGllcywgc2V0cyBHbGVtbVNlcnZpY2VzIGNvbnN0YW50cworCSAqICAgYW5kIGxvZ3MgdGhlIHJlcXVlc3QuCisJICogLSBsb2FkIHByb3BlcnRpZXMgYW5kIHNldCBjb25zdGFudHMgYmVmb3JlIGxvZ2dpbmcgYW55dGhpbmcsIGJlY2F1c2UKKwkgKiAgIGxvZ2dpbmcgd2lsbCBiZSBkb25lIGludG8gdGhlIGxhc3Qgc3Rkb3V0L3N0ZGVyciBvcGVuZWQgaW4gZ2xhc3NmaXNoJ3MgSlZNLAorCSAqICAgZS5nLiBpbiB0aGUgbG9nIG9mIGFub3RoZXIgU2VydmljZS4KKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgUHJvcGVydGllcyBpbml0X2FuZF9sb2dfUmVxdWVzdChTdHJpbmcgZnVuYywgU3RyaW5nIHJlcXVlc3RQYXRoKQorCQorCXsKKwlTdHJpbmcKKwkJcmVhbFBhdGggPSBzZXJ2bGV0Q29udGV4dC5nZXRSZWFsUGF0aChmbmFtZVByb3BzKTsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKGlmIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlQcm9wZXJ0aWVzCisJCXByb3BzID0gVXRpbHMubG9hZFByb3BlcnRpZXMoc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSwgZm5hbWVQcm9wcywgcmVhbFBhdGgsIGZhbHNlKTsKKwkKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gZm91dCBhbmQgZmVyciBhcyByZXBsYWNlbWVudCBmb3Igc3Rkb3V0L3N0ZGVyciBmb3IgdXNlIGluIEdsZW1tU2VydmljZXMuCisJLy8gZG8gbm90IHVzZSBvciByZWRpcmVjdCBTeXN0ZW0ub3V0IGFuZCBTeXN0ZW0uZXJyLCBhcyB0aGV5IHdpbGwgYmUgcmVkaXJlY3RlZAorCS8vIGJ5IG90aGVyIFNlcnZpY2VzIGluIHRoZSBzYW1lIGdsYXNzZmlzaCBKVk0sIGUuZy4gYnkgdGhlIFdmb3JtU2VydmljZXMuCisJZm91dCA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZU91dCk7CisJZmVyciA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZUVycik7CisJCisJLy9VdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQorCWxvZ19SZXF1ZXN0KHJlcXVlc3RQYXRoLCBmdW5jKTsKKwkKKwlyZXR1cm4gcHJvcHM7CisJfSAvLyBpbml0X2FuZF9sb2dfUmVxdWVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCVN0cmluZworCQlzdGF0dXM7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvc3RhdHVzLyIpOworCQorCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCQorCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5wcm9wZXJ0aWVzPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+ZGF0YWJhc2U8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSwKKwkJCQkJCQlzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpID09IG51bGwgPyAibm90IGZvdW5kIiA6CisJCQkJCQkJCXByb3BzLmlzRW1wdHkoKSA/ICJlbXB0eSIgOiAibG9hZGVkIiwKKwkJCQkJCQlmb3JtYXREYk5hbWUocHJvcHMpCisJCQkJCQkJKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIAorCSAqIGRvUE9TVF9pbXBvcnRMZW1tYURhdGE6CisJICogCisJICogUE9TVDogL2luZGV4L2FkZC97ZGF0YWJhc2VuYW1lfTogdGV4dC9wbGFpbgorCSAqIAorCSAqIFBhcmFtZXRlcnM6CisJICogbGlzdAkJIDogdGhlIGxpc3Qgb2Ygd2ZzIHNlbnQgaW4gdGhlIGJvZHkgb2YgdGhlIFBPU1QgcmVxdWVzdC4KKwkgKiBkYnBhdGgJIDogdGhlIGxvY2F0aW9uIG9mIHRoZSBkYXRhYmFzZSB3aGVyZSB0aGUgbGVtbWErd2ZzIGFyZSB0byBiZSBzdG9yZWQuCisJICogTm90ZXMgICAgIDoKKwkgKiAtIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlIGxvY2F0ZWQgYXQgJ2RhdGFiYXNlbmFtZScuCisJICogLSBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZCBpbnRvIGEgRGVyYnkgZGF0YWJhc2UuCisJICogSW5wdXQJIDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICogMDQuMTEuMjEvRkIKKwkgKiAtIHN1Ym1pdHRlZCBkYXRhYmFzZSBwYXRoLgorCSAqLworCQorCUBQYXRoKCJhZGQve2RhdGFiYXNlcGF0aH0iKSAKKwlAUE9TVCAKKwlAQ29uc3VtZXMoInRleHQvcGxhaW4iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCQkJCQkJCSgKKwkJCQkJCQlTdHJpbmcgCQkJCQkJCQlsaXN0LAorCQkJCQkJCUBQYXRoUGFyYW0odmFsdWU9ImRhdGFiYXNlcGF0aCIpIAlmaW5hbCBTdHJpbmcgZGJwYXRoCisJCQkJCQkJKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvUE9TVF9pbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIGFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJCisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2FkZC8iKTsKKwkKKwlmb3V0LnByaW50ZigiSW5mbyA6ICVzOiBzZWxlY3RlZCBkYXRhYmFzZSBwYXRoID0gJyVzJy5cbiIsIGZ1bmMsIGRicGF0aCk7CisJZm91dC5wcmludGYoIkRlYnVnOiAlczogcG9zdGVkIGxpc3QgPSAnJXMnLlxuIiwgZnVuYywgbGlzdCk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgZm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShmZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzLCBmb3V0LCBmZXJyKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZsO8aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEsIHByb3BzLCBkYnBhdGgpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCQorCX0gLy8gZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCisJLyogZG9HRVRfdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVycyA9ICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vIik7CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlmaW5hbCBTdHJpbmcKKwkJZGJOYW1lID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+ZGF0YWJhc2U8L2I+OiAlczwvcD4iLCBmb3JtYXREYk5hbWUocHJvcHMpKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgZGJOYW1lICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyBkb0dFVF92aWV3REJJbmZvCisKKworCS8qIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0PnZlcnNpb24gIiArIHZlcnNpb24gKyAiIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIHJlcXVlc3QgPSAnIiArIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikgKyAiJzwvaT48L2g0PlxuIiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDE6PC9iPiAoQzIgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9PC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+e2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYyk8L2NvZGU+PC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbDwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPsOWbD9vcHRzPWZsZXgrY29tcCtvdGhlcitzcGVjPC9jb2RlPjwvcD4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMjo8L2I+IChpbnRlcm5hbCBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX0/cHJvcDE9WzAxMl0mYW1wO3Byb3AyPVswMTJdJmFtcDtzcGVjPVswMTJdPC9jb2RlPiAod2hlcmUgZWFjaCBwcm9wMSwgcHJvcDIsIHNwZWMgaXMgb3B0aW9uYWwpLjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw/cHJvcDE9MCZhbXA7cHJvcDI9MSZhbXA7c3BlYz0yPC9jb2RlPjwvcD4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfSIpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSclZCcgcHJvcDI9JyVkJyBzcGVjPSclZCcuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwkvKiAKKwlmb3IoaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJCX0JCisJICovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoIGxlbW1hSW5mby5vcHRzU2V0dGluZyA9PSBMZW1tYUluZm8uT1BUU19TRVRUSU5HX0MyICkgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMSxwcm9wMixzcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaW50CisJCW5XZnMgPSBsZW1tYUluZm8ubldmczsKKwkKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwkvLyBsb2cgb3V0Y29tZToKKwlpZiggbldmcyA8IDAgKQorCQlmb3V0LnByaW50ZigiRXJyb3I6ICVzOiByZXR1cm5pbmcgMCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMpOworCWVsc2UKKwkJZm91dC5wcmludGYoIkRlYnVnLiAlczogcmV0dXJuaW5nICVkIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYywgbldmcyk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIG5vdGU6CisJICogLSBpZiBCcm93c2VyIHJlcXVlc3Q6IEhUVFBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAndGV4dC9odG1sLC4uLnhtbC4uLicKKwkgKiAtIGlmIFdmb3JtU2VydmljZXMgcmVxdWVzdDogSHR0cFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICdhcHBsaWNhdGlvbi9qc29uJy4KKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqIAorCSAqIC0gc3VibWl0dGVkIFVSTCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hLCBpcyBpbnRlcnByZXRlZCBieSBnbGFzc2Zpc2ggYXMKKwkgKiAgIGJlaW5nIElTTy04ODU5LTEgZW5jb2RlZC4gV2hlbiB0aGUgcmVxdWVzdCBpcyBVVEYtOCBlbmNvZGVkLCBVbWxhdXRzIGFuZAorCSAqICAgJ8OfJyBhcmUgbWlzLWludGVycHJlZGVkLCBsZWFkaW5nIHRvIGFuIGVycm9uZXJvdXMgcmVxdWVzdCB0byB0aGUgRGVyYnkKKwkgKiAgIGRhdGFiYXNlLgorCSAqIC0gUmVxdWVzdGVkIGxlbW1hICdsZW1tYScgaGFzIHRvIGJlIHRyYW5zZm9ybWVkIHRvIFVURi04IGZpcnN0LgorCSAqIC0gbm90ZTogZXZlbiB3aGVuIHN1Ym1pdHRpbmcgdGhlIEdFVCByZXF1ZXN0IGJ5IHNwZWNpZnlpbmcgJ2NoYXJlbmNvZGU9VVRGLTgnLAorCSAqICAgZ2xhc3NmaXNoIGRvZXMgbm90IGNvbnZlcnQgaXQgYXV0b21hdGljYWxseSBhcyBleHBlY3RlZC4KKwkgKiAgIAorCSAqICAyMi4xMC4yMS9GQgorCSAqIAorCSAqIC0gaWYgYWNjZXB0PWFwcGxpY2F0aW9uL2pzb24gcmV0dXJuIFVURi04IChXZm9ybVNlcnZpY2VzKS4KKwkgKiAtIGVsc2UgaWYgYWNjZXB0PXRleHQvaHRtbCBkbyBub3QgdHJhbnNmb3JtIGNoYXJhY3RlciBlbmNvZGluZyAoQnJvd3NlcikuCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBDb25zdW1lcygiYXBwbGljYXRpb24vanNvbiwgdGV4dC9odG1sIikKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCQorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCWZpbmFsIGJvb2xlYW4KKwkJYkVuY29kZUxlbW1hID0gZmFsc2U7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CisJCisJLyogdGVzdDoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJaWYoIGJFbmNvZGVMZW1tYSApCisJCXsKKwkJLy8gd2hlbiBhY2NlcHRpbmcgSlNPTiwgdXJsIGhhcyB0byBiZSBjb252ZXJ0ZWQgdG8gVVRGLTgsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYToKKwkJdHJ5IHsKKwkJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obmV3IFN0cmluZyhsZW1tYS5nZXRCeXRlcygiSVNPLTg4NTktMSIpLCAidXRmLTgiKSk7CisJCQl9IAorCQljYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlMSkgeworCQkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCQlMZW1tYVJlc3BvbnNlCisJCQkJbGVtcmVzcCA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbXJlc3ApLmJ1aWxkKCk7CisJCQl9CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW1VURi04XSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCWVsc2UKKwkJeworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbdW5jaGFuZ2VkXSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCisJLyogZG9lcyBub3QgaGVscDoKKwkgU3RyaW5nCisJIAlyZXF1ZXN0Q2hhckVuY29kaW5nID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldENoYXJhY3RlckVuY29kaW5nKCk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiByZXF1ZXN0IGNoYXJhY3RlciBlbmNvZGluZyA9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RDaGFyRW5jb2RpbmcpOworCSovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXsKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQkvL3JldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJfQorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsJCisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCS8qCisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC90ZXN0L2luZm8vIik7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL2ZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJZm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2M5L2QwYWZmN2YyNDEzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9jOS9kMGFmZjdmMjQxM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDNiYWZkCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9jOS9kMGFmZjdmMjQxM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpAQCAtMCwwICsxLDk2MSBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCisvKiAwLjEgOiAxNy4wNi4yMC9GQiAKKyAqIDAuMiA6IDI1LjEwLjIxL0ZCCisgKiAgICAgICBsb2dpbmcgb2YgdGhlIEFQSSBSZXF1ZXN0cy4KKyAqICAgICAgIGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorICogICAgICAgY29ycmVjdGluZyBjYWxsaW5nIG9mIGxlbW1hICsgcHJvcDEvcHJvcDIvc3BlYy4KKyAqICAgICAgIGhhbmRsaW5nIG9mIGxlbW1hdGEgd2l0aCAnw58nLgorICogCisgKiBHZW5lcmFsIGNvbW1lbnRzIHRvIHRoZSBlbmNvZGluZyBvZiBkZXJpdmF0aW9ucyBmcm9tIGxlbW1hIHRvIHdmcyBhbmQgaG93IHRoZXkgYXJlIGVuY29kZWQKKyAqIGluIHRoZSBEZXJieSBkYXRhYmFzZToKKyAqIAorICogR0xFTU0gZW5jb2Rpbmc6ICAKKyAqICAgXyBfIDogK0ZsZXggICAgICAgw5ZsZSAtPiDDlmwgICAgICAKKyAqICAgKyBfIDogK0NvbXAgICAgICAgw5ZsbGFtcGUgLT4gw5ZsIG9yIExhbXBlIChjb21wb3VuZCkuCisgKiAgIF8gKyA6ICtvdGhlciAgICAgIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuc2NodWggKG5vIGNvbXBvdW5kIGZvciAnVHVybnNjaHVoJywgb25seSBwcmVmaXgpLgorICogICArICsgOiArQ29tcCtvdGhlciBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybiArIFNjaHVoIChjb21wb3VuZCBmb3IgJ1NjaHVoJyArIFByZWZpeCkuCisgKiBDMiBsZW1tYXRpemF0aW9uIG9wdGlvbnM6CisgKiAgIEZsZXggIChpZGVudGljYWwgdG8gR2xlbW0pCisgKiAgIENvbXAgIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykKKyAqICAgT3RoZXIgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKS4KKyAqICAgU3BlYyAgKG9ubHkgQzI6IGluY2x1ZGVzIGFsbCB3ZnMgd2l0aCBoaXBoZW4gYW5kL29yIHNvbWUgbm9uLWFscGhhYmV0aWMgSVNPODg1OS0xIGNoYXJzKQorICogICAgICAgICBFLmcuIMOWbC1FeHBvcnRlLCAiTWFya2VuIi3DlmxlLgorICogRGVyYnkgRW5jb2Rpbmc6CisgKiAgcHJvcDEgCXByb3AyCXNwZWMgICAJbWVhbmluZyBpbiBDMjoKKyAqICAwCQkwCQktCQlGbGV4CisgKiAgMQkJMAkJLQkJQ29tcAorICogIDAJCTEJCS0JCU90aGVyIChwcmVmaXgpCisgKiAgMQkJMQkJLQkJQ29tcCArIE90aGVyCisgKiAgLQkJLQkJMAkJLVNwZWMKKyAqICAtCQktCQkxCQkrU3BlYworICogCisgKiBFeGFtcGxlczoKKyAqICZTY2h1aAkJCTogU2NodWgsIFNjaHVoZSwgLi4uIG9ubHkgZmxleGlvbnMKKyAqICZTY2h1aCtjb21wCQk6IFNjaHVoZSwgVHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzLgorICogJlNjaHVoK290aGVyCQk6IFNjaHVoZSwgQW50aXNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgcHJlZml4ZWQgd2ZzIChubyBjb21wb3VuZHMpLgorICogJlNjaHVoK2NvbXArb3RoZXI6IFNjaHVoZSwgQW50aXNjaHVoZSwgVHVybnNjaHVoZSwgQW50aXR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcyBhbmQgCisgKiAJCQkJCSAgcHJlZml4ZWQgc2luZ2xlIHdmcyAoQW50aXNjaHVoZSkgYW5kIHByZWZpeGVkIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtzcGVjCQk6ICJBbnRpIi1TY2h1aGUsIDY4Z2VyLVNjaHVoZS4uLiBtYXkgYmUgY29tYmluZWQgd2l0aCBldmVyeSBvcHRpb25zOiBhZGRzCisgKiAgICAgICAgICAgICAgICAgICAgd2ZzIHdpdGggaHlwaGVuIGFuZC9vciBub24tYWxwaGFiZXRpYyBjaGFycy4KKyAqIAorICogQ29udmVyc2lvbiBydWxlczoKKyAqIAorICogICZzY2hsaWXDn2VuIC0+IGludGVybmFsIHNlYXJjaCBmb3IgJ3NjaGxpZXNzZW4nLAorICogIGJlY2F1c2UgR2xlbW0gb3V0cHV0cyAnc3MnIGZvciAnw58nLgorICogIAorICogQ2hhcmFjdGVyIEVuY29kaW5nOgorICogCisgKiAtIFdoZW4gaW1wb3J0aW5nIHdmcyB0byB0aGUgRGVyYnkgRGF0YWJhc2Ugd2l0aCBkb0N1cmxHbGVtbVNlcnZpY2VzL2luZGV4TGVtbWF0YToKKyAqIAorICogICBJTlBVVDogd29yZGZvcm0gbGlzdCBpbiBbVVRGLThdIDogVVRGLTggaXMgdGhlbiBjb252ZXJ0ZWQgdG8gTGF0MSBmb3IgR2xlbW0sCisgKiAgICAgICAgICB0aGUgb3V0cHV0IG9mIEdsZW1tIFtMYXQxXSBpcyByZXR1cm5lZCB0byB0aGUgR2xlbW1TZXJ2aWNlcyB3aXRob3V0IHJlY29udmVyc2lvbgorICogICAgICAgICAgdG8gVVRGOCBhbmQgaW1wb3J0ZWQgaW50byBEZXJieSBEYXRhYmFzZSB1bmNoYW5nZWQuCisgKgkJCisgKi8KKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNC4xMS4yMSI7IAorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMiI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVQcm9wcwkJPSAiL1dFQi1JTkYvR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIjsKKwkKKwkvLyB0aGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgcmVhZCBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyAodGhlc2UgYXJlIHRoZSBkZWZhdWx0IHZhbHVlcyk6CisJcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggCQk9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCXByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQkJCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJQENvbnRleHQKKwlwcml2YXRlIFNlcnZsZXRDb250ZXh0IHNlcnZsZXRDb250ZXh0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZm91dAk9IG51bGw7CisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmZXJyCT0gbnVsbDsJCQorCQkKKwkvKiAKKyAJICogCisJICogLSBhZnRlciBsb2FkUHJvcGVydGllcywgc2V0cyB0aGUgY2xhc3MgdmFyaWFibGUgd2l0aCBsb2FkZWQgcHJvcGVydHkgdmFsdWVzLgorCSAqIAorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlHU19Xb3JraW5nUGF0aCAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiR1NfV29ya2luZ1BhdGgiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiKTsKKwlmbmFtZVdmcwkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVXZnMiLCAJICAgImdsX3dmc19pbi50eHQiKTsKKwlmbmFtZVdmcwkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lV2ZzOworCWZuYW1lT3V0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZU91dCIsIAkgICAiR2xlbW1TZXJ2aWNlcy5sb2ciKTsKKwlmbmFtZU91dAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lT3V0OworCWZuYW1lRXJyCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUVyciIsIAkgICAiR2xlbW1TZXJ2aWNlcy5lcnIiKTsKKwlmbmFtZUVycgkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lRXJyOworCWZuYW1lU2NyaXB0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVNjcmlwdCIsCSAgICJkb0dsZW1tIik7CisJZm5hbWVTY3JpcHQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVNjcmlwdDsKKwlmbmFtZUxlbWF0YQkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVMZW1hdGEiLCAgICAidG1wL2xlbTMiKTsKKwlmbmFtZUxlbWF0YQkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lTGVtYXRhOworCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyoKKwkgKiAgbG9nX1JlcXVlc3Q6CisJICogIAorCSAqICAtIHdyaXRlIGluZm8gYWJvdXQgQVBJIFJlcXVlc3QuCisJICogIFBhcmFtZXRlcnM6CisJICogIHJlcXVlc3RQYXRoCTogcGF0aCBvZiB3ZWJhcHAgYWRkcmVzc2VkIGJ5IHRoZSByZXF1ZXN0LgorCSAqICBmdW5jCQk6IG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHdoaWNoIGltcGxlbWVudHMgdGhlIHJlcXVlc3QuCisJICogIAorCSAqICAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBsb2dfUmVxdWVzdChTdHJpbmcgcmVxdWVzdFBhdGgsIFN0cmluZyBmdW5jKQorCQorCXsKKwkvLyB0cmFuc2Zvcm0gImRhdGVUdGltZSIgLT4gImRhdGUgdGltZSI6CisJCisJZm91dC5wcmludGYoIiMjI1xuIik7CisJZm91dC5wcmludGYoIiMjIyAlczogJXMgOiB2ZXJzPSclcycsIHZkYXRlPSclcycgcmVxdWVzdD0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdFBhdGgsIHZlcnNpb24sIHZlcnNpb25EYXRlLCAKKwkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCX0gLy8gbG9nX1JlcXVlc3QKKwkJCisJLyogZm9ybWF0RGJOYW1lCisJICogCisJICogLSBnZXRzIG5hbWUgb2YgRGF0YWJhc2UgdXNlZCBieSBEZXJieSBmcm9tIHByb3BzIAorCSAqICAgYW5kIGZvcm1hdCBpdCB0byBIVE1MLgorCSAqICAKKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgU3RyaW5nIGZvcm1hdERiTmFtZShQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlTdHJpbmcKKwkJZGJOYW1lOworCVN0cmluZworCQlkYlBhdGggPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlpbnQKKwkJaiA9IGRiUGF0aC5sYXN0SW5kZXhPZignLycpOworCQorCWlmKCBqID4gMCApCisJCWRiTmFtZSA9IGRiUGF0aC5zdWJzdHJpbmcoaisxKTsKKwllbHNlCisJCWRiTmFtZSA9IGRiUGF0aDsKKwkKKwlyZXR1cm4gZGJOYW1lOyAvLyAiPHA+PGI+RGF0YWJhc2U6ICIgKyBkYk5hbWUgKyAiPC9iPjwvcD5cbiI7CisJfSAvLyBmb3JtYXREYk5hbWUKKworCS8qCisJICogY2xvc2VMb2dTdHJlYW1zOgorCSAqIAorCSAqIC0gY2xvc2UgdGhlIGZvdXQvZmVyciBsb2cgc3RyZWFtcy4KKwkgKiAKKwkgKiAyNi4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBjbG9zZUxvZ1N0cmVhbXMoKQorCQorCXsKKwlpZiggZm91dCAhPSBudWxsKQorCQlmb3V0LmNsb3NlKCk7CisJZm91dCA9IG51bGw7CisJCisJaWYoIGZlcnIgIT0gbnVsbCApCisJCWZlcnIuY2xvc2UoKTsKKwlmZXJyID0gbnVsbDsKKwl9IC8vIGNsb3NlTG9nU3RyZWFtcworCQorCS8qIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisJICogCisJICogLSBsb2FkIEdsZW1tU2VydmljZXMucHJvcGVydGllcywgc2V0cyBHbGVtbVNlcnZpY2VzIGNvbnN0YW50cworCSAqICAgYW5kIGxvZ3MgdGhlIHJlcXVlc3QuCisJICogLSBsb2FkIHByb3BlcnRpZXMgYW5kIHNldCBjb25zdGFudHMgYmVmb3JlIGxvZ2dpbmcgYW55dGhpbmcsIGJlY2F1c2UKKwkgKiAgIGxvZ2dpbmcgd2lsbCBiZSBkb25lIGludG8gdGhlIGxhc3Qgc3Rkb3V0L3N0ZGVyciBvcGVuZWQgaW4gZ2xhc3NmaXNoJ3MgSlZNLAorCSAqICAgZS5nLiBpbiB0aGUgbG9nIG9mIGFub3RoZXIgU2VydmljZS4KKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgUHJvcGVydGllcyBpbml0X2FuZF9sb2dfUmVxdWVzdChTdHJpbmcgZnVuYywgU3RyaW5nIHJlcXVlc3RQYXRoKQorCQorCXsKKwlTdHJpbmcKKwkJcmVhbFBhdGggPSBzZXJ2bGV0Q29udGV4dC5nZXRSZWFsUGF0aChmbmFtZVByb3BzKTsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKGlmIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlQcm9wZXJ0aWVzCisJCXByb3BzID0gVXRpbHMubG9hZFByb3BlcnRpZXMoc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSwgZm5hbWVQcm9wcywgcmVhbFBhdGgsIGZhbHNlKTsKKwkKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gZm91dCBhbmQgZmVyciBhcyByZXBsYWNlbWVudCBmb3Igc3Rkb3V0L3N0ZGVyciBmb3IgdXNlIGluIEdsZW1tU2VydmljZXMuCisJLy8gZG8gbm90IHVzZSBvciByZWRpcmVjdCBTeXN0ZW0ub3V0IGFuZCBTeXN0ZW0uZXJyLCBhcyB0aGV5IHdpbGwgYmUgcmVkaXJlY3RlZAorCS8vIGJ5IG90aGVyIFNlcnZpY2VzIGluIHRoZSBzYW1lIGdsYXNzZmlzaCBKVk0sIGUuZy4gYnkgdGhlIFdmb3JtU2VydmljZXMuCisJZm91dCA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZU91dCk7CisJZmVyciA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZUVycik7CisJCisJLy9VdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQorCWxvZ19SZXF1ZXN0KHJlcXVlc3RQYXRoLCBmdW5jKTsKKwkKKwlyZXR1cm4gcHJvcHM7CisJfSAvLyBpbml0X2FuZF9sb2dfUmVxdWVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCVN0cmluZworCQlzdGF0dXM7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvc3RhdHVzLyIpOworCQorCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCQorCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5wcm9wZXJ0aWVzPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+ZGF0YWJhc2U8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSwKKwkJCQkJCQlzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpID09IG51bGwgPyAibm90IGZvdW5kIiA6CisJCQkJCQkJCXByb3BzLmlzRW1wdHkoKSA/ICJlbXB0eSIgOiAibG9hZGVkIiwKKwkJCQkJCQlmb3JtYXREYk5hbWUocHJvcHMpCisJCQkJCQkJKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIAorCSAqIGRvUE9TVF9pbXBvcnRMZW1tYURhdGE6CisJICogCisJICogUE9TVDogL2luZGV4L2FkZC86IHRleHQvcGxhaW4KKwkgKiBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZS4KKwkgKiBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZAorCSAqIGludG8gdGhlIGRhdGFiYXNlLgorCSAqIElucHV0OiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKi8KKwkKKwlAUGF0aCgiYWRkL3tkYXRhYmFzZW5hbWUiKSAKKwlAUE9TVCBAQ29uc3VtZXMoInRleHQvcGxhaW4iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9QT1NUX2ltcG9ydExlbW1hRGF0YShTdHJpbmcgbGlzdCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb1BPU1RfaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSBhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCQorCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9hZGQvIik7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgZm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShmZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzLCBmb3V0LCBmZXJyKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZsO8aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEsIHByb3BzKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBpbXBvcnRHbGVtbUxlbW1hdGEgcmV0dXJucyByPSVkLlxuIiwgZnVuYywgcik7CisJaWYoIG5FcnJvcnMgPT0gMCApCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiAiICsgbkVycm9ycyArICIgZXJyb3JzITwvcD4iOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGVuZGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJLy8gUmV0dXJuIEluZm9zOgorCXJldHVybiAKKwkJCSAgICI8aHRtbD4iICsKKwkJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwkKKwl9IC8vIGRvUE9TVF9pbXBvcnRMZW1tYURhdGEKKworCS8qIGRvR0VUX3ZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnMgPSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvLyIpOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJZmluYWwgU3RyaW5nCisJCWRiTmFtZSA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPmRhdGFiYXNlPC9iPjogJXM8L3A+IiwgZm9ybWF0RGJOYW1lKHByb3BzKSk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIGRiTmFtZSArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gZG9HRVRfdmlld0RCSW5mbworCisKKwkvKiBkb0dFVF92aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND52ZXJzaW9uICIgKyB2ZXJzaW9uICsgIiB2b20gIiArIHZlcnNpb25EYXRlICsgIiByZXF1ZXN0ID0gJyIgKyBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpICsgIic8L2k+PC9oND5cbiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAxOjwvYj4gKEMyIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfTwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPntsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpPC9jb2RlPjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw8L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT7Dlmw/b3B0cz1mbGV4K2NvbXArb3RoZXIrc3BlYzwvY29kZT48L3A+IiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDI6PC9iPiAoaW50ZXJuYWwgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9P3Byb3AxPVswMTJdJmFtcDtwcm9wMj1bMDEyXSZhbXA7c3BlYz1bMDEyXTwvY29kZT4gKHdoZXJlIGVhY2ggcHJvcDEsIHByb3AyLCBzcGVjIGlzIG9wdGlvbmFsKS48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsP3Byb3AxPTAmYW1wO3Byb3AyPTEmYW1wO3NwZWM9MjwvY29kZT48L3A+IjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0iKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0nJWQnIHByb3AyPSclZCcgc3BlYz0nJWQnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJLyogCisJZm9yKGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCQl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCQl9CQorCSAqLworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCBsZW1tYUluZm8ub3B0c1NldHRpbmcgPT0gTGVtbWFJbmZvLk9QVFNfU0VUVElOR19DMiApIAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEscHJvcDIsc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZyk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWludAorCQluV2ZzID0gbGVtbWFJbmZvLm5XZnM7CisJCisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJLy8gbG9nIG91dGNvbWU6CisJaWYoIG5XZnMgPCAwICkKKwkJZm91dC5wcmludGYoIkVycm9yOiAlczogcmV0dXJuaW5nIDAgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jKTsKKwllbHNlCisJCWZvdXQucHJpbnRmKCJEZWJ1Zy4gJXM6IHJldHVybmluZyAlZCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMsIG5XZnMpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiBub3RlOgorCSAqIC0gaWYgQnJvd3NlciByZXF1ZXN0OiBIVFRQU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ3RleHQvaHRtbCwuLi54bWwuLi4nCisJICogLSBpZiBXZm9ybVNlcnZpY2VzIHJlcXVlc3Q6IEh0dHBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAnYXBwbGljYXRpb24vanNvbicuCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKiAKKwkgKiAtIHN1Ym1pdHRlZCBVUkwsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYSwgaXMgaW50ZXJwcmV0ZWQgYnkgZ2xhc3NmaXNoIGFzCisJICogICBiZWluZyBJU08tODg1OS0xIGVuY29kZWQuIFdoZW4gdGhlIHJlcXVlc3QgaXMgVVRGLTggZW5jb2RlZCwgVW1sYXV0cyBhbmQKKwkgKiAgICfDnycgYXJlIG1pcy1pbnRlcnByZWRlZCwgbGVhZGluZyB0byBhbiBlcnJvbmVyb3VzIHJlcXVlc3QgdG8gdGhlIERlcmJ5CisJICogICBkYXRhYmFzZS4KKwkgKiAtIFJlcXVlc3RlZCBsZW1tYSAnbGVtbWEnIGhhcyB0byBiZSB0cmFuc2Zvcm1lZCB0byBVVEYtOCBmaXJzdC4KKwkgKiAtIG5vdGU6IGV2ZW4gd2hlbiBzdWJtaXR0aW5nIHRoZSBHRVQgcmVxdWVzdCBieSBzcGVjaWZ5aW5nICdjaGFyZW5jb2RlPVVURi04JywKKwkgKiAgIGdsYXNzZmlzaCBkb2VzIG5vdCBjb252ZXJ0IGl0IGF1dG9tYXRpY2FsbHkgYXMgZXhwZWN0ZWQuCisJICogICAKKwkgKiAgMjIuMTAuMjEvRkIKKwkgKiAKKwkgKiAtIGlmIGFjY2VwdD1hcHBsaWNhdGlvbi9qc29uIHJldHVybiBVVEYtOCAoV2Zvcm1TZXJ2aWNlcykuCisJICogLSBlbHNlIGlmIGFjY2VwdD10ZXh0L2h0bWwgZG8gbm90IHRyYW5zZm9ybSBjaGFyYWN0ZXIgZW5jb2RpbmcgKEJyb3dzZXIpLgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAQ29uc3VtZXMoImFwcGxpY2F0aW9uL2pzb24sIHRleHQvaHRtbCIpCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbzsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwlmaW5hbCBib29sZWFuCisJCWJFbmNvZGVMZW1tYSA9IGZhbHNlOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOworCQorCS8qIHRlc3Q6CisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWlmKCBiRW5jb2RlTGVtbWEgKQorCQl7CisJCS8vIHdoZW4gYWNjZXB0aW5nIEpTT04sIHVybCBoYXMgdG8gYmUgY29udmVydGVkIHRvIFVURi04LCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWE6CisJCXRyeSB7CisJCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKG5ldyBTdHJpbmcobGVtbWEuZ2V0Qnl0ZXMoIklTTy04ODU5LTEiKSwgInV0Zi04IikpOworCQkJfSAKKwkJY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZTEpIHsKKwkJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQkJTGVtbWFSZXNwb25zZQorCQkJCWxlbXJlc3AgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1yZXNwKS5idWlsZCgpOworCQkJfQorCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFtVVEYtOF0gb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWFJbmZvLmxlbW1hT3JpZywgb3B0aW9ucyk7CisJCX0KKwllbHNlCisJCXsKKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW3VuY2hhbmdlZF0gb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWFJbmZvLmxlbW1hT3JpZywgb3B0aW9ucyk7CisJCX0KKworCS8qIGRvZXMgbm90IGhlbHA6CisJIFN0cmluZworCSAJcmVxdWVzdENoYXJFbmNvZGluZyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRDaGFyYWN0ZXJFbmNvZGluZygpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVxdWVzdCBjaGFyYWN0ZXIgZW5jb2RpbmcgPSclcycuXG4iLCBmdW5jLCByZXF1ZXN0Q2hhckVuY29kaW5nKTsKKwkqLworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQl7CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJLy9yZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCX0KKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CQorCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwkvKgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvdGVzdC9pbmZvLyIpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9mb3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCWZvdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9jYi9iMGQ1MGU3OGJlOGUwMDFhMWNiOGExZWEwODM0MzhhZSBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvY2IvYjBkNTBlNzhiZThlMDAxYTFjYjhhMWVhMDgzNDM4YWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM0ZTE3MwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvY2IvYjBkNTBlNzhiZThlMDAxYTFjYjhhMWVhMDgzNDM4YWUKQEAgLTAsMCArMSw2NyBAQAorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgCisJeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisJeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgPGdyb3VwSWQ+ZGUua29yYXAuc2VydmljZXM8L2dyb3VwSWQ+CisgIDxhcnRpZmFjdElkPnRlc3RzPC9hcnRpZmFjdElkPgorICA8dmVyc2lvbj4wLjE8L3ZlcnNpb24+CisgIDwhLS0gID5wYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmctLT4KKyAgPG5hbWU+SnNvbiBUZXN0IE1ldGhvZHM8L25hbWU+CisgIAorICA8ZGVzY3JpcHRpb24+VGVzdHMgZm9yIEpzb24gUGFyc2luZzwvZGVzY3JpcHRpb24+CisgIAorICA8ZGVwZW5kZW5jaWVzPgorICAgIDxkZXBlbmRlbmN5PgorICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+CisgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KKyAgICAgIDx2ZXJzaW9uPjMuOC4xPC92ZXJzaW9uPgorICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgIDwvZGVwZW5kZW5jeT4KKyAgIDxkZXBlbmRlbmN5PgorICAgIDxncm91cElkPmNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlPC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPmphY2tzb24tY29yZTwvYXJ0aWZhY3RJZD4KKyAgICA8dmVyc2lvbj4yLjkuNjwvdmVyc2lvbj4KKyAgICA8c2NvcGU+Y29tcGlsZTwvc2NvcGU+CisgICA8L2RlcGVuZGVuY3k+CisJPGRlcGVuZGVuY3k+CisJICA8Z3JvdXBJZD5jb20uZmFzdGVyeG1sLmphY2tzb24uY29yZTwvZ3JvdXBJZD4KKwkgIDxhcnRpZmFjdElkPmphY2tzb24tYW5ub3RhdGlvbnM8L2FydGlmYWN0SWQ+CisJICA8dmVyc2lvbj4yLjkuNjwvdmVyc2lvbj4KKwk8L2RlcGVuZGVuY3k+CisJPGRlcGVuZGVuY3k+CisJICA8Z3JvdXBJZD5jb20uZmFzdGVyeG1sLmphY2tzb24uY29yZTwvZ3JvdXBJZD4KKwkgIDxhcnRpZmFjdElkPmphY2tzb24tZGF0YWJpbmQ8L2FydGlmYWN0SWQ+CisJICA8dmVyc2lvbj4yLjkuNjwvdmVyc2lvbj4KKwkgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+CisJPC9kZXBlbmRlbmN5PgorCTxkZXBlbmRlbmN5PgorCQk8Z3JvdXBJZD5kZS5rb3JhcC5qc29uPC9ncm91cElkPgorCQk8YXJ0aWZhY3RJZD5Kc29uVHJhdmVyc2U8L2FydGlmYWN0SWQ+CisJCTx2ZXJzaW9uPjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKwk8L2RlcGVuZGVuY3k+CisgIDwvZGVwZW5kZW5jaWVzPgorICAKKyAgPGJ1aWxkPgorICAgIDxzb3VyY2VEaXJlY3Rvcnk+c3JjPC9zb3VyY2VEaXJlY3Rvcnk+CisgICAgPHBsdWdpbnM+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1jb21waWxlci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjMuNy4wPC92ZXJzaW9uPgorICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8c291cmNlPjEuODwvc291cmNlPgorICAgICAgICAgIDx0YXJnZXQ+MS44PC90YXJnZXQ+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvcGx1Z2luPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4td2FyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+My4yLjE8L3ZlcnNpb24+CisgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgIDxmYWlsT25NaXNzaW5nV2ViWG1sPmZhbHNlPC9mYWlsT25NaXNzaW5nV2ViWG1sPgorICAgICAgICAgIDx3YXJTb3VyY2VEaXJlY3Rvcnk+V2ViQ29udGVudDwvd2FyU291cmNlRGlyZWN0b3J5PgorICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICA8L3BsdWdpbj4KKyAgICA8L3BsdWdpbnM+CisgICAgPGZpbmFsTmFtZT5UZXN0R2xlbW1TZXJ2aWNlczwvZmluYWxOYW1lPgorICA8L2J1aWxkPgorICAKKzwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2NiL2UwNzAxMmUzOTQxYTAwMWExOWIyODc1ZGUwMjcyYzZjIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9jYi9lMDcwMTJlMzk0MWEwMDFhMTliMjg3NWRlMDI3MmM2YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDlkMGUwCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9jYi9lMDcwMTJlMzk0MWEwMDFhMTliMjg3NWRlMDI3MmM2YwpAQCAtMCwwICsxLDYyIEBACis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiAKKwl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKwl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICA8Z3JvdXBJZD5kZS5rb3JhcC5zZXJ2aWNlczwvZ3JvdXBJZD4KKyAgPGFydGlmYWN0SWQ+R2xlbW1TZXJ2aWNlczI8L2FydGlmYWN0SWQ+CisgIDx2ZXJzaW9uPjAuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgorICA8bmFtZT5HbGVtbVNlcnZpY2VzPC9uYW1lPgorICAKKyAgPGRlc2NyaXB0aW9uPlJFU1RmdWxsIEdsZW1tU2VydmljZXMgZsO8ciBLb3JBUDwvZGVzY3JpcHRpb24+CisgIAorICA8ZGVwZW5kZW5jaWVzPgorICAgIDxkZXBlbmRlbmN5PgorICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+CisgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KKyAgICAgIDx2ZXJzaW9uPjMuOC4xPC92ZXJzaW9uPgorICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgIDwvZGVwZW5kZW5jeT4KKyAgIDxkZXBlbmRlbmN5PgorICAgIDxncm91cElkPmphdmF4LnNlcnZsZXQ8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+c2VydmxldC1hcGk8L2FydGlmYWN0SWQ+CisgICAgPHZlcnNpb24+Mi41PC92ZXJzaW9uPgorICAgPC9kZXBlbmRlbmN5PgorICAgPCEtLSBodHRwczovL212bnJlcG9zaXRvcnkuY29tL2FydGlmYWN0L2phdmF4LndzLnJzL2phdmF4LndzLnJzLWFwaSAtLT4KKyAgIDxkZXBlbmRlbmN5PgorICAgIDxncm91cElkPmphdmF4LndzLnJzPC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPmphdmF4LndzLnJzLWFwaTwvYXJ0aWZhY3RJZD4KKyAgICA8dmVyc2lvbj4yLjA8L3ZlcnNpb24+CisgICA8L2RlcGVuZGVuY3k+CisgIDwvZGVwZW5kZW5jaWVzPgorICAKKyAgPGJ1aWxkPgorICAgIDxzb3VyY2VEaXJlY3Rvcnk+c3JjPC9zb3VyY2VEaXJlY3Rvcnk+CisgICAgPHBsdWdpbnM+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1jb21waWxlci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjMuNy4wPC92ZXJzaW9uPgorICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8c291cmNlPjEuODwvc291cmNlPgorICAgICAgICAgIDx0YXJnZXQ+MS44PC90YXJnZXQ+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvcGx1Z2luPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4td2FyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+My4yLjE8L3ZlcnNpb24+CisgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgIDx3YXJTb3VyY2VEaXJlY3Rvcnk+V2ViQ29udGVudDwvd2FyU291cmNlRGlyZWN0b3J5PgorICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICA8L3BsdWdpbj4KKyAgICAgIDxwbHVnaW4+CisgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi13YXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgIDx3ZWJYbWw+V2ViQ29udGVudFxXRUItSU5GXHdlYi54bWw8L3dlYlhtbD4KKyAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICA8L3BsdWdpbj4KKyAgICA8L3BsdWdpbnM+CisgICAgPGZpbmFsTmFtZT5HbGVtbVNlcnZpY2VzPC9maW5hbE5hbWU+CisgIDwvYnVpbGQ+CisgIAorPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZC8zMDY0YjQwMzEyMmMwMDFjMWM0MWNlNTU5ZWE1ZTE2YiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZC8zMDY0YjQwMzEyMmMwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTk1NzJmCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9kLzMwNjRiNDAzMTIyYzAwMWMxYzQxY2U1NTllYTVlMTZiCkBAIC0wLDAgKzEsNzE5IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNi4xMC4yMSI7IC8vIjE3LjA2LjIwIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjEiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJCVN0cmluZworCQkJc3RhdHVzOworCQlVdGlscworCQkJdSA9IG5ldyBVdGlscygpOworCQlQcm9wZXJ0aWVzCisJCQlwcm9wczsKKwkJU3RyaW5nCisJCQlwcm9wTmFtZSA9ICJHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiOworCQkvLyByZWFkIHRlc3QKKwkJcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworCQkKKwkJCQkKKwkJLy9nZXRTZXJ2bGV0Q29udGV4dCguKQorCQkvLyBodHRwU2VydmxldFJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW52KTsKKworCQlJbnB1dFN0cmVhbQorCQkJLy9pblByb3AgPSBHbGVtbVNlcnZpY2VzLmNsYXNzLmdldENsYXNzTG9hZGVyKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShwcm9wTmFtZSk7CisJCQlpblByb3AgPSBIdHRwU2VydmxldFJlcXVlc3QuY2xhc3MuZ2V0UmVzb3VyY2VBc1N0cmVhbShwcm9wTmFtZSk7CisKKwkJaWYoIGluUHJvcCA9PSBudWxsICkKKwkJCXsKKwkJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBsb2FkICclcychXG4iLCBmdW5jLCBwcm9wTmFtZSk7CisJCQlyZXR1cm4gbnVsbDsKKwkJCX0KKwkJCisJCXRyeSB7CisJCQlwcm9wcy5sb2FkKGluUHJvcCk7CisJCQlTZXQ8RW50cnk8T2JqZWN0LE9iamVjdD4+CisJCQkJcHJvcHNTZXQgPSBwcm9wcy5lbnRyeVNldCgpOworCQkJCisJCQlmb3IoRW50cnk8T2JqZWN0LCBPYmplY3Q+IHByb3BFbnRyeSA6IHByb3BzU2V0KQorCQkJCXsKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wICVzID0gJyVzJy5cbiIsIGZ1bmMsIHByb3BFbnRyeS5nZXRLZXkoKSwgcHJvcEVudHJ5LmdldFZhbHVlKCkpOworCQkJCX0KKwkJCX0gCisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgbG9hZCBwcm9wcyAnR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzJyEiLCAgZnVuYyk7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCQorCQkvLyBlbmQgb2YgcmVhZCB0ZXN0CisJCQorCQkvLyB0ZXN0CisJCS8qCisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJCisJCSAqIHByb3BzLnNldFByb3BlcnR5KCJwIiwgInRlc3QiKTsKKwkJICoKKwkJRmlsZU91dHB1dFN0cmVhbSBvdXQ7CisJCXRyeSB7CisJCQlvdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbSgiZ2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIik7CisJCQlwcm9wcy5zdG9yZShvdXQsICAidGVzdCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMiKTsKKwkJCX0gCisJCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9OworCQkqLworCQkKKwkJLy8gZW5kIG90ZXN0CisJCQorCQkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwkJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisJCVN5c3RlbS5vdXQucHJpbnRmKCJBUEk6ICVzOiAvaW5kZXgvc3RhdHVzLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisKKwkJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogUE9TVDogL2luZGV4L2FkZC86IHRleHQvcGxhaW4KKwkgKiBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZS4KKwkgKiBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZAorCSAqIGludG8gdGhlIGRhdGFiYXNlLgorCSAqIElucHV0OiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKi8KKwlAUGF0aCgiYWRkIikgQFBPU1QgQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGltcG9ydExlbW1hRGF0YShTdHJpbmcgbGlzdCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIGFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJCisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9hZGQvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNm77+9aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJfQorCisJLyogdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gdmlld0RCSW5mbworCisKKwkvKiB2aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIiAtIFN0YXR1czogPGk+V29yayBpbiBwcm9ncmVzcy4uLiE8L2k+KTwvaDQ+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCAhb3B0aW9ucy5lcXVhbHMoInVuZGVmIikpCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxL3Byb3AyL3NwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBHbGVtbVNlcnZpY2VzICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb25EYXRlLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJLy9TeXN0ZW0ub3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZDAvNTA1NDQwYzM0YTNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2QwLzUwNTQ0MGMzNGEzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkM2M0MjAKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2QwLzUwNTQ0MGMzNGEzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsNzIwIEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKK2ltcG9ydCBqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7CitpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAob3ZlcndyaXR0ZW4gYnkgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKGZpbmFsIGFzc2lnbm1lbnRzKToKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJFbWIgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIjsKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLyoKKwkgKiBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkgKiAKKwkgKiBBcmd1bWVudHM6CisJICogcHJvcHMJOiBQcm9wZXJ0aWVzIGxvYWRlZCBieSB0aGUgR2xlbW1TZXJ2aWNlcy4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgZnVuY3Rpb24gbG9hZHMgb25seSB0aG9zZSBDb25zdGFudHMgbmVlZGVkIGluIHRoaXMgY2xhc3MuCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzCXByb3BzKQorCQorCXsKKwlmbmFtZURCCQkgCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAJIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCXNlcnZlckhvc3QJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgInNlcnZlckhvc3QiLAkiLy9sb2NhbGhvc3Q6MTUyNy8iKTsKKwlkZXJieURCVVJMIAkJPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJCQkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIHdoZW4gaW5kZXhpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSwgc2VsZWN0IHRoZSBzdWJtaXR0ZWQgZGJwYXRoLAorCS8vIChub3QgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZGJwYXRoOworCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogZGVyYnlEQlVSTD0nJXMnLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCisJLy8gb3BlbiByZWFkZXIgb24gR2xlbW0gTGVtbWF0YToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQlpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmbikpOworCQkKKwkJbkVycm9ycyA9IHdyaXRlREJMZW1tYXRhKGluKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgZnJvbSAnJXMnIVxuIiwgZnVuYywgZm4pOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gLTE7CisJCX0KKworCS8vIGNsb3NlIFJlYWRlcjoKKwl0cnkgeworCQlpbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCW5FcnJvcnMgPSAtMTsKKwkJfQorCQorIAlpZiggbkVycm9ycyA9PSAwICkKKyAJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0IGRvbmUgc3VjY2Vzc2Z1bGx5LlxuIiwgZnVuYyk7CisgCWVsc2UKKyAJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0OiAlZCBFcnJvcnMhXG4iLCBmdW5jLCBuRXJyb3JzKTsKKyAJCisJcmV0dXJuIG5FcnJvcnM7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGEKKwkKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogd3JpdGVEQkxlbW1hdGEoKQorCSAqIHN0b3JlcyBsaXN0IG9mIGxlbW1hdGEgKyBpbmZvcyBpbnRvIERlcmJ5IGRiLgorCSAqIEZpbGUgZm9ybWF0OiAiTGVtbWEgRGVjb21wb3NpdGlvbiBXZiIsCisJICogICAgICAgICAgICAgIGUuZy46ICJI77+9dXNlciArLSBIYXVzIi4KKwkgKiBSZXR1cm5zOiAwID0gT0sgb3IgLTE6IGdlbmVyYWwgZXJyb3Igb3IgPiAwOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIDA5LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWF0YShCdWZmZXJlZFJlYWRlciBpbikKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYXRhIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVByZXBhcmVkU3RhdGVtZW50CisJCXN0bXRQcmVwID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCAJID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsJCisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQluRXJyb3JzID0gMCwKKwkJcmV0ID0gMDsgLy8gT0suCisJYm9vbGVhbgorCQljb250YWluc1NwZWM7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCisJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJc3RtdFByZXAgPSBjb24ucHJlcGFyZVN0YXRlbWVudChpbnNlcnRQcmVwYXJlZFF1ZXJ5KTsKKwkJZWxzZQorCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKworCQl3aGlsZSggKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggIT0gMyApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogJyVzJyBoYXMgJWQgY29tcG9uZW50cyEgRXhwZWN0ZWQgPSAzISBDYW5ub3QgYmUgc3RvcmVkIVxuIiwgZnVuYywgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQkJbkVycm9ycysrOworCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQorCQkJLy8gR2V0IEluZm8sIGlmIHdvcmRmb3JtIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSAnLScsIGludGVycHVuY3Rpb24gZXRjLjoKKwkJCS8vIGxlbW1hSW5mb1syXSA9IHdvcmRmb3JtLgorCQkJY29udGFpbnNTcGVjID0gTGVtbWFJbmZvLmlzV2ZTcGVjaWFsQ2FzZShsZW1tYUluZm9bMl0pOworCQkJLy8gc3RvcmUgaW50byBEQjoKKwkJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKHN0bXRQcmVwLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJZWxzZQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zKHN0bXQsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQkKKwkJCWlmKCByZXQgIT0gMCApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHN0b3JlIGxlbW1hICclcycgaW50byBEQiFcbiIsIGZ1bmMsIGxpbmUpOworCQkJCW5FcnJvcnMrKzsgCisJCQkJfQorCQkJfSAvLyB3aGlsZQorCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBHbGVtbSBsZW1tYXRhK2luZm9zIGZyb20gZmlsZSEgRXhpdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gLTE7IAorCQl9CQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgCisJCQkJY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgCisJCQkJc3RtdC5jbG9zZSgpOworCQkJaWYoIHN0bXRQcmVwICE9IG51bGwgKSAKKwkJCQlzdG10UHJlcC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gbkVycm9yczsgLy8gMD1PSywgPjAgPSBuby4gb2YgZXJyb3JzLgorCX0gLy8gd3JpdGVEQkxlbW1hdGEKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQ6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gcnVsZXMgaW50byBEZXJieSBEQi4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgaXMgdGhlIHZlcnNpb24gd2l0aCBhIFByZXBhcmVkUXVlcnkuCisJICogUGFyYW1ldGVyczoKKwkgKiBzcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTcuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoCisJCQlQcmVwYXJlZFN0YXRlbWVudCBzdG10LCAKKwkJCVN0cmluZyBsZW1tYSwgCisJCQlTdHJpbmcgd2YsIAorCQkJU3RyaW5nIGRlY29tcG9zaXRpb24sIAorCQkJYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQiOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCWJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICAKKwkvLyBmb3IgbG9naW5nIG9ubHk6CisJc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorICAgIC8vIG5vdyBpbnNlcnQgbmV3IHZhbHVlcyBpbnRvIFByZXBhcmVkU3RhdGVtZW50OgorICAgIHRyeSB7CisgICAgCXN0bXQuc2V0U3RyaW5nKCAxLCBsZW1tYSk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKCAyLCB3Zik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbigzLCBwcm9wMSk7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig0LCBwcm9wMik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig1LCBzcGVjKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcmVwYXJlZCBzdG10ID0gJyVzJy5cbiIsICBmdW5jLCBzdG10LnRvU3RyaW5nKCkpOworICAgICAgICB9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlMSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKAkiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSclYicgcHJvcDI9JyViJyBzcGVjPSclYichXG4iLCAgCisJCQkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKyAgICAKKyAgICB0cnkgeworCQkvLyBleGVjdXRlIHRoZSBmaWxsZWQgcHJlcGFyZWQgc3RhdGVtZW50OgorCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9OworCQorICAgIAorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIGludG8gRGVyYnkgREIuCisJICogUGFyYW1ldGVyczoKKwkgKiBjb250YWluc1NwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxMC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvcyhTdGF0ZW1lbnQgc3RtdCwgU3RyaW5nIGxlbW1hLCBTdHJpbmcgd2YsIFN0cmluZyBkZWNvbXBvc2l0aW9uLCBib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvcyI7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJQm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIHNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAgICAKKyAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKwl0cnkgeworCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKHNxbEluc2VydCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWFEYXRhCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgZnJvbSB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dDogbGVtbWEgKyBHTEVNTV9PUFRTX3h4eCAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hRGF0YShMZW1tYUluZm8gbGVtbWFJbmZvLCBQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWFEYXRhIjsKKworCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWxlbW1hSW5mby5jb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCWxlbW1hSW5mby5zdG10ID0gbGVtbWFJbmZvLmNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJaW50IHIgPSByZWFkREJMZW1tYShsZW1tYUluZm8uc3RtdCwgbGVtbWFJbmZvKTsKKwkJCQorCQlpZiggciAhPSAwICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGdldCBkYXRhIGZvciBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyFcbiIsIAorCQkJCQlmdW5jLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGxlbW1hSW5mby5jb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYURhdGEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBieSBhY2Nlc3NpbmcgdGhlIEdsZW1tREIuCisJICogSW5wdXQgOiBsZW1tYSArIHByb3AxKzIgKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqIE91dHB1dDogCisJICogIC0gY29udGFpbnMgYSBSZXN1bHRTZXQgZm9yIGZldGNoaW5nIHRoZSB3b3JkZm9ybXMuCisJICogCSAgVGhpcyBSZXN1bHRTZXQgd2lsbCBoYXZlIGJlIGJlIGNsb3NlZCB3aXRoIExlbW1hSW5mby5jbG9zZSgpLgorCSAqIAkgIFRoZSBuby4gb2YgZm91bmQgd29yZGZvcm1zIGlzIG5vdCBrbm93biB0aWxsIHdlCisJICogCSAgZmV0Y2ggYWxsIG9mIHRoZW0gZnJvbSBSZXN1bHRTZXQhIAorCSAqIAktIGR1ZSB0byBTRUxFQ1QgRElTVElOQ1Qgb25seSB1bmlxIHdmIGFyZSByZXR1cm5lZC4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWEoU3RhdGVtZW50IHN0bXQsIExlbW1hSW5mbyBsZW1tYUluZm8pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYSI7CisJU3RyaW5nCisJCXNxbDsKKwkJCisJc3FsID0gU3RyaW5nLmZvcm1hdCgiU0VMRUNUIERJU1RJTkNUIHdmIGZyb20gJXMgV0hFUkUgbGVtbWE9JyVzJyAlcyAlcyAlcyIsIAorCQkJZGJUYWJsZSwKKwkJCWxlbW1hSW5mby5sZW1tYSwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIkFORCBwcm9wMT0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICJBTkQgcHJvcDE9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIkFORCBwcm9wMj0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICJBTkQgcHJvcDI9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAxID8gIkFORCBzcGVjPSd0cnVlJyIgICA6IAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiQU5EIHNwZWM9J2ZhbHNlJyIgIDogIiIpOworCQorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIGZ1bmMsIGxlbW1hSW5mby5wcm9wMSwgbGVtbWFJbmZvLnByb3AyLCBsZW1tYUluZm8uc3BlYyk7CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWwgPSAnJXMnLlxuIiwgZnVuYywgc3FsKTsKKworCXRyeSB7CisJCWxlbW1hSW5mby5yZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOwkKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGVuIGV4ZWN1dGluZyBzcWw9JyVzJyFcbiIsIGZ1bmMsIHNxbCk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisJZmluYWxseSB7CisJCS8vIGFsbCBzcWwgc3R1ZmYgYXJlIGNsb3NlZCBvdXRzaWRlIHRoaXMgZnVuY3Rpb24sIHNvIGRvbid0IGNsb3NlIHRoZW0gaGVyZSEKKwkJfQkKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zCisJICogUmV0dXJucyBHZW5lcmFsIEluZm9zIGFib3V0IHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiByZWFkIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiSW5mb3MoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWRiSW5mbyA9IHJlYWREYkxlbW1hdGFJbmZvcyhzdG10KTsKKwkJCQorCQlpZiggZGJJbmZvID09IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgcmVhZCBHZW5lcmFsIEluZm9zIGZyb20gR2xlbW0gRGF0YWJhc2UhXG4iLCBmdW5jKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIG51bGw7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgc3RtdC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBtYXkgYmUgbnVsbC4KKwkJCisJfSAvLyByZWFkRGJJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkxlbW1hdGFJbmZvczoKKwkgKiByZWFkcyBhbmQgcmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjb250ZW50IAorCSAqIG9mIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiBSZXR1cm5zIDA9T0sgb3IgZXJyb3IgY29kZSA+IDAuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJMZW1tYXRhSW5mb3MoU3RhdGVtZW50IHN0bXQpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInJlYWREYkxlbW1hSW5mb3MiOworCVN0cmluZ1tdCisJCXNxbCA9IHsJIlNFTEVDVCBDT1VOVChkaXN0aW5jdCBsZW1tYSkgZnJvbSAiICsgZGJUYWJsZSAsCS8vIGNvdW50cyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YS4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUsCQkJCQkvLyBjb3VudHMgdG90YWwgbm8uIG9mIHN0b3JlZCB3b3JkZm9ybXMuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj10cnVlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj10cnVlIn07CisJUmVzdWx0U2V0CisJCXJlcyA9IG51bGw7IAorCWludFtdCisJCW5Db3VudHMgPSBuZXcgaW50W3NxbC5sZW5ndGhdOworCWludAkJCisJCWkgPSAwLCAKKwkJbkRpc3RMZW1tYXRhID0gLTEsCS8vIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhIGluIERCLgorCQluV2ZzCQkgPSAtMTsJLy8gbm8uIG9mIHdvcmRmb3JtcyBpbiBEQi4KKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogZXh0cmFjdGluZyBhZ3JlZ2F0ZWQgaW5mb3MgYWJvdXQgRGF0YWJhc2UgY29udGVudHMuLi5cbiIsIGZ1bmMpOworCQorCWRiSW5mbyA9IG5ldyBHbGVtbURCSW5mbygpOworCisJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJdHJ5IHsKKwkJZm9yKGk9MDsgaTxzcWwubGVuZ3RoOyBpKyspCisJCQl7CisJCQlyZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWxbaV0pOworCQkJaWYoIHJlcy5uZXh0KCkgKQorCQkJCWRiSW5mby5jb3VudHNbaV0gPSByZXMuZ2V0SW50KDEpOyAvLyBjb3VudCBpcyBpbiBjb2x1bW4gMS4KKwkJCWVsc2UKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZXh0cmFjdCBjb3VudCBmcm9tICclcychXG4iLCBmdW5jLCBzcWxbaV0pOworCQkJCWRiSW5mby5jb3VudHNbaV0gPSAtMTsKKwkJCQl9CisJCQl9CisgICAgICAgCisgICAgICAgIH0KKyAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAJeworICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHNxbD0nJXMnIGZhaWxlZCFcbiIsIGZ1bmMsIHNxbFtpXSk7CisgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgCX0KKwlmaW5hbGx5IHsKKwkJdHJ5IHsKKwkJCXJlcy5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gT0sKKwl9IC8vIHJlYWREYkxlbW1hdGFJbmZvcworCQorCS8qKioqKioqKioqKioqKioqKioqKiBUZXN0IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQorCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvc190ZXN0CisJICogVGhpcyBpcyBkZWJ1ZyBjb2RlIHdyaXR0ZW4gdG8gdGVzdCBpZiB3ZSBjYW4gYWNjZXNzIHRoZSBEZXJieQorCSAqIERhdGFiYXNlIGZyb20gYW4gZXh0ZXJuYWwgSmF2YSBQcm9ncmFtbS4KKwkgKiAwOC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgcmVhZERiSW5mb3NfdGVzdCgpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJU3RyaW5nCisJCWluc2VydFN0bXQgPSAiIjsKKwkKKwkvLyBDb25uZWN0IHRvIERlcmJ5IGRhdGFiYXNlOgorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQkKKwkJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJCXRyeQorCQkJeworCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIFN0cmluZyAKKyAgICAgICAgICAgIAlzcWwgPSAiU0VMRUNUICogRlJPTSAiICsgZGJUYWJsZTsKKyAgICAgICAgICAgIFJlc3VsdFNldCAKKyAgICAgICAgICAgIAlyZXN1bHQgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOworIAorICAgICAgICAgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiB0YWJsZSAnJXMnOlxuIiwgIGZ1bmMsIGRiVGFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAocmVzdWx0Lm5leHQoKSkgeworICAgICAgICAgICAgCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIiclcycgOiAnJXMnIDogJyVzJyA6ICclcycgLlxuIiwgcmVzdWx0LmdldFN0cmluZygxKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMiksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDMpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZyg0KSk7CisgICAgICAgIAkJaW5zZXJ0U3RtdCA9IGluc2VydFN0bXQgKyAiPHA+IiArIHJlc3VsdC5nZXRTdHJpbmcoMSkgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoMikgKyAiIDogIiArCisgICAgICAgICAgICAgICAgCQkgICAgIHJlc3VsdC5nZXRTdHJpbmcoMykgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoNCkgKyAiPC9wPiI7CisgICAgICAgICAgICAJfQorCQkJfQorCSAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAgICAgCXsKKwkgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogaW5zZXJ0U3RtdD0nJXMnIGZhaWxlZCEuXG4iLCBmdW5jLCBzdG10KTsKKyAgICAgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIAl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGluZyAnJXMgZmFpbGVkIVxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCXJldHVybiAxOworCQl9CisJCisJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCXRyeSB7CisJCWNvbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCQorCX0gLy8gcmVhZERiSW5mb3NfdGVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIGltcG9ydEdsZW1tTGVtYXRhX3Rlc3QKKwkgKiBUZXN0IFZlcnNpb24uCisJICogMTIuMTIuMTkvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0KFN0cmluZyBmbikKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QiOworCUlucHV0U3RyZWFtIAorCQlpbjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbjIgPSBudWxsOworCVN0cmluZworCQlsaW5lOworCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJcjsKKwkKKwkvKgorCSAqIFJlYWQgTGVtbWF0YSArIEluZm8gZnJvbSBmaWxlOiAKKwkgKi8KKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQkKKwl0cnkgeworCQkvL2luID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oIG5ldyBGaWxlSW5wdXRTdHJlYW0oZm4pICk7CisJCWluMiA9IG5ldyBCdWZmZXJlZFJlYWRlciggbmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJd2hpbGUoIChsaW5lID0gaW4yLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCA9PSAzICkKKwkJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogSW1wb3J0OiBsZW09JyVzJyBEZWNvbXA9JyVzJyBXZj0nJXMnLlxuIiwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMV0sIGxlbW1hSW5mb1syXSk7CisJCQllbHNlCisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6IGltcG9ydEdsZW1tTGFtYXRhOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzIVxuIiwgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQl9CisJCX0gCisJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBvcGVuICclcychXG4iLCBmdW5jLCBmbik7CisJCXJldHVybiAxOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisKKwl0cnkgeworCQlpbjIuY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkKKwkvKiBDaGVjayBjb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCSAqLyAKKwlyID0gcmVhZERiSW5mb3NfdGVzdCgpOworCWlmKCByICE9IDAgKQorCQlyZXR1cm4gcjsKKwkJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdAorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9kMS8zMGJlYWEwZDdlM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZDEvMzBiZWFhMGQ3ZTNkMDAxYzEwYjFiMTdkZGQzMDllNmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVhZTBiZgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZDEvMzBiZWFhMGQ3ZTNkMDAxYzEwYjFiMTdkZGQzMDllNmYKQEAgLTAsMCArMSw3MjYgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5zcWwuQ29ubmVjdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5Ecml2ZXJNYW5hZ2VyOworaW1wb3J0IGphdmEuc3FsLlByZXBhcmVkU3RhdGVtZW50OworaW1wb3J0IGphdmEuc3FsLlJlc3VsdFNldDsKK2ltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CitpbXBvcnQgamF2YS5zcWwuU3RhdGVtZW50OworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworcHVibGljIGNsYXNzIEdsZW1tREIKKworeworCXN0YXRpYyBwdWJsaWMgU3RyaW5nIGRiVGFibGUgCT0gIkdsZW1tTGVtbWF0YSI7CisJc3RhdGljIFN0cmluZyBkYkxlbW1hIAkJIAk9ICJsZW1tYSI7CisJc3RhdGljIFN0cmluZyBkYldmCSAJCQk9ICJ3ZiI7CisJc3RhdGljIFN0cmluZyBkYlByb3AxIAkJCT0gInByb3AxIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDIgCQkJPSAicHJvcDIiOworCisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChvdmVyd3JpdHRlbiBieSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCXByaXZhdGUgc3RhdGljIFN0cmluZyBmbmFtZURCID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNlcnZlckhvc3QgPSAiLy9sb2NhbGhvc3Q6MTUyNy8iOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAoZmluYWwgYXNzaWdubWVudHMpOgorCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckVtYiA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuRW1iZWRkZWREcml2ZXIiOworCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckNsaWVudCA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50RHJpdmVyIjsKKworCWZpbmFsIHN0YXRpYyBib29sZWFuCisJCXVzZVByZXBhcmVkU3RtdCA9IHRydWU7IC8vIDE9dXNlIFByZXBhcmVkU3RhdGVtZW50IGFuZCBub3QgU3RhdGVtZW50LgorCQorCS8vIHZhbHVlcyB0byBiZSBpbnNlcnRlZDogbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMuCisJc3RhdGljIFN0cmluZyBpbnNlcnRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICgnJXMnLCAnJXMnLCAnJXMnLCAnJXMnLCAnJXMnKSI7CisJc3RhdGljIFN0cmluZyBpbnNlcnRQcmVwYXJlZFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKD8sID8sID8sID8sID8pIjsKKwkKKwkvKgorCSAqIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCSAqIAorCSAqIEFyZ3VtZW50czoKKwkgKiBwcm9wcwk6IFByb3BlcnRpZXMgbG9hZGVkIGJ5IHRoZSBHbGVtbVNlcnZpY2VzLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBmdW5jdGlvbiBsb2FkcyBvbmx5IHRob3NlIENvbnN0YW50cyBuZWVkZWQgaW4gdGhpcyBjbGFzcy4KKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMJcHJvcHMpCisJCisJeworCWZuYW1lREIJCSAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsIAkiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJc2VydmVySG9zdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAic2VydmVySG9zdCIsCSIvL2xvY2FsaG9zdDoxNTI3LyIpOworCWRlcmJ5REJVUkwgCQk9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkJCQorCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAkJCQkJaW1wb3J0R2xlbW1MZW1hdGEKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGZuCQkgOiBhYnNvbHV0ZSBmaWxlIG5hbWUgb2YgR0xFTU0gb3V0cHV0IFtJU084ODU5LTFdIGV4cGVjdGVkLCBub3QgVVRGLTghCisJICogcHJvcHMJIDogUHJvcGVydGllcyB2b20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIHRvIHNldCBjb25zdGFudHMgbmVlZGVkCisJICogCQkJICAgaW4gdGhpcyBjbGFzcy4KKwkgKiBkYnBhdGgJIDogbG9jYXRpb24gKyBuYW1lIG9mIGRhdGFiYXNlIHdoZXJlIHRvIHN0b3JlIGxlbW1hdGErd2ZzLgorCSAqIFJldHVybnMJIDogMD1PSywgLTE6IGdlbmVyYWwgZXJyb3I7ID4gMCA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiBkeW5hbWljYWxseSBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAwNC4xMS4yMS9GQiBkYnBhdGguCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGEoU3RyaW5nIGZuLCBQcm9wZXJ0aWVzIHByb3BzLCBmaW5hbCBTdHJpbmcgZGJwYXRoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGEiOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluID0gbnVsbDsKKwlpbnQKKwkJbkVycm9yczsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gd2hlbiBpbmRleGluZyBkYXRhIGludG8gdGhlIGRhdGFiYXNlLCBzZWxlY3QgdGhlIHN1Ym1pdHRlZCBkYnBhdGgsCisJLy8gKG5vdCB0aGUgb25lIHN0b3JlZCBpbiB0aGUgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBkYnBhdGg7CisJCisJLy8gb3BlbiByZWFkZXIgb24gR2xlbW0gTGVtbWF0YToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQlpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmbikpOworCQkKKwkJbkVycm9ycyA9IHdyaXRlREJMZW1tYXRhKGluKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgZnJvbSAnJXMnIVxuIiwgZnVuYywgZm4pOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gLTE7CisJCX0KKworCS8vIGNsb3NlIFJlYWRlcjoKKwl0cnkgeworCQlpbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCW5FcnJvcnMgPSAtMTsKKwkJfQorCQorIAlpZiggbkVycm9ycyA9PSAwICkKKyAJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0IGRvbmUgc3VjY2Vzc2Z1bGx5LlxuIiwgZnVuYyk7CisgCWVsc2UKKyAJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0OiAlZCBFcnJvcnMhXG4iLCBmdW5jLCBuRXJyb3JzKTsKKyAJCisJcmV0dXJuIG5FcnJvcnM7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGEKKwkKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogd3JpdGVEQkxlbW1hdGEoKQorCSAqIHN0b3JlcyBsaXN0IG9mIGxlbW1hdGEgKyBpbmZvcyBpbnRvIERlcmJ5IGRiLgorCSAqIEZpbGUgZm9ybWF0OiAiTGVtbWEgRGVjb21wb3NpdGlvbiBXZiIsCisJICogICAgICAgICAgICAgIGUuZy46ICJI77+9dXNlciArLSBIYXVzIi4KKwkgKiBSZXR1cm5zOiAwID0gT0sgb3IgLTE6IGdlbmVyYWwgZXJyb3Igb3IgPiAwOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIDA5LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWF0YShCdWZmZXJlZFJlYWRlciBpbikKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYXRhIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVByZXBhcmVkU3RhdGVtZW50CisJCXN0bXRQcmVwID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCAJID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsJCisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQluRXJyb3JzID0gMCwKKwkJbkluc2VydGVkID0gMCwJLy8gbm8uIG9mIGxlbW1hL3dmIHBhaXJzIGltcG9ydGVkLgorCQlyZXQgPSAwOyAvLyBPSy4KKwlib29sZWFuCisJCWNvbnRhaW5zU3BlYzsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisKKwkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQlzdG10UHJlcCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KGluc2VydFByZXBhcmVkUXVlcnkpOworCQllbHNlCisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCisJCXdoaWxlKCAobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCAhPSAzICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzISBFeHBlY3RlZCA9IDMhIENhbm5vdCBiZSBzdG9yZWQhXG4iLCBmdW5jLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCQluRXJyb3JzKys7CisJCQkJY29udGludWU7CisJCQkJfQorCQkJCisJCQkvLyBHZXQgSW5mbywgaWYgd29yZGZvcm0gY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlICctJywgaW50ZXJwdW5jdGlvbiBldGMuOgorCQkJLy8gbGVtbWFJbmZvWzJdID0gd29yZGZvcm0uCisJCQljb250YWluc1NwZWMgPSBMZW1tYUluZm8uaXNXZlNwZWNpYWxDYXNlKGxlbW1hSW5mb1syXSk7CisJCQkvLyBzdG9yZSBpbnRvIERCOgorCQkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoc3RtdFByZXAsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQllbHNlCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3Moc3RtdCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCQorCQkJaWYoIHJldCAhPSAwICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgc3RvcmUgbGVtbWEgJyVzJyBpbnRvIERCIVxuIiwgZnVuYywgbGluZSk7CisJCQkJbkVycm9ycysrOyAKKwkJCQl9CisJCQllbHNlCisJCQkJbkluc2VydGVkKys7CisJCQl9IC8vIHdoaWxlCisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIEdsZW1tIGxlbW1hdGEraW5mb3MgZnJvbSBmaWxlISBFeGl0IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAtMTsgCisJCX0JCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAtMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSAKKwkJCQlzdG10LmNsb3NlKCk7CisJCQlpZiggc3RtdFByZXAgIT0gbnVsbCApIAorCQkJCXN0bXRQcmVwLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CQkKKwkJfQorCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkluZm8gOiAlczogbm8uIG9mIGxlbW1hdGEvd2YgcGFpcnMgaW5zZXJ0ZWQgPSAlZC5cbiIsIGZ1bmMsIG5JbnNlcnRlZCk7CisJCisJcmV0dXJuIG5FcnJvcnM7IC8vIDA9T0ssID4wID0gbm8uIG9mIGVycm9ycy4KKwl9IC8vIHdyaXRlREJMZW1tYXRhCisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIHJ1bGVzIGludG8gRGVyYnkgREIuCisJICogTm90ZXM6CisJICogLSB0aGlzIGlzIHRoZSB2ZXJzaW9uIHdpdGggYSBQcmVwYXJlZFF1ZXJ5LgorCSAqIFBhcmFtZXRlcnM6CisJICogc3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDE3LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKAorCQkJUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCwgCisJCQlTdHJpbmcgbGVtbWEsIAorCQkJU3RyaW5nIHdmLCAKKwkJCVN0cmluZyBkZWNvbXBvc2l0aW9uLCAKKwkJCWJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkIjsKKwlmaW5hbCBib29sZWFuCisJCWJMb2cgPSBmYWxzZTsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlib29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgCisJLy8gZm9yIGxvZ2luZyBvbmx5OgorCXNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwlpZiggYkxvZyApCisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorICAgIC8vIG5vdyBpbnNlcnQgbmV3IHZhbHVlcyBpbnRvIFByZXBhcmVkU3RhdGVtZW50OgorICAgIHRyeSB7CisgICAgCXN0bXQuc2V0U3RyaW5nKCAxLCBsZW1tYSk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKCAyLCB3Zik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbigzLCBwcm9wMSk7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig0LCBwcm9wMik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig1LCBzcGVjKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcmVwYXJlZCBzdG10ID0gJyVzJy5cbiIsICBmdW5jLCBzdG10LnRvU3RyaW5nKCkpOworICAgICAgICB9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlMSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKAkiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSclYicgcHJvcDI9JyViJyBzcGVjPSclYichXG4iLCAgCisJCQkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKyAgICAKKyAgICB0cnkgeworCQkvLyBleGVjdXRlIHRoZSBmaWxsZWQgcHJlcGFyZWQgc3RhdGVtZW50OgorCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9OworCQorICAgIAorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIGludG8gRGVyYnkgREIuCisJICogUGFyYW1ldGVyczoKKwkgKiBjb250YWluc1NwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxMC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvcyhTdGF0ZW1lbnQgc3RtdCwgU3RyaW5nIGxlbW1hLCBTdHJpbmcgd2YsIFN0cmluZyBkZWNvbXBvc2l0aW9uLCBib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvcyI7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJQm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIHNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAgICAKKyAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKwl0cnkgeworCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKHNxbEluc2VydCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWFEYXRhCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgZnJvbSB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dDogbGVtbWEgKyBHTEVNTV9PUFRTX3h4eCAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hRGF0YShMZW1tYUluZm8gbGVtbWFJbmZvLCBQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWFEYXRhIjsKKworCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWxlbW1hSW5mby5jb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCWxlbW1hSW5mby5zdG10ID0gbGVtbWFJbmZvLmNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJaW50IHIgPSByZWFkREJMZW1tYShsZW1tYUluZm8uc3RtdCwgbGVtbWFJbmZvKTsKKwkJCQorCQlpZiggciAhPSAwICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGdldCBkYXRhIGZvciBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyFcbiIsIAorCQkJCQlmdW5jLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGxlbW1hSW5mby5jb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYURhdGEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBieSBhY2Nlc3NpbmcgdGhlIEdsZW1tREIuCisJICogSW5wdXQgOiBsZW1tYSArIHByb3AxKzIgKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqIE91dHB1dDogCisJICogIC0gY29udGFpbnMgYSBSZXN1bHRTZXQgZm9yIGZldGNoaW5nIHRoZSB3b3JkZm9ybXMuCisJICogCSAgVGhpcyBSZXN1bHRTZXQgd2lsbCBoYXZlIGJlIGJlIGNsb3NlZCB3aXRoIExlbW1hSW5mby5jbG9zZSgpLgorCSAqIAkgIFRoZSBuby4gb2YgZm91bmQgd29yZGZvcm1zIGlzIG5vdCBrbm93biB0aWxsIHdlCisJICogCSAgZmV0Y2ggYWxsIG9mIHRoZW0gZnJvbSBSZXN1bHRTZXQhIAorCSAqIAktIGR1ZSB0byBTRUxFQ1QgRElTVElOQ1Qgb25seSB1bmlxIHdmIGFyZSByZXR1cm5lZC4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWEoU3RhdGVtZW50IHN0bXQsIExlbW1hSW5mbyBsZW1tYUluZm8pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYSI7CisJU3RyaW5nCisJCXNxbDsKKwkJCisJc3FsID0gU3RyaW5nLmZvcm1hdCgiU0VMRUNUIERJU1RJTkNUIHdmIGZyb20gJXMgV0hFUkUgbGVtbWE9JyVzJyAlcyAlcyAlcyIsIAorCQkJZGJUYWJsZSwKKwkJCWxlbW1hSW5mby5sZW1tYSwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIkFORCBwcm9wMT0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICJBTkQgcHJvcDE9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIkFORCBwcm9wMj0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICJBTkQgcHJvcDI9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAxID8gIkFORCBzcGVjPSd0cnVlJyIgICA6IAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiQU5EIHNwZWM9J2ZhbHNlJyIgIDogIiIpOworCQorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIGZ1bmMsIGxlbW1hSW5mby5wcm9wMSwgbGVtbWFJbmZvLnByb3AyLCBsZW1tYUluZm8uc3BlYyk7CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWwgPSAnJXMnLlxuIiwgZnVuYywgc3FsKTsKKworCXRyeSB7CisJCWxlbW1hSW5mby5yZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOwkKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGVuIGV4ZWN1dGluZyBzcWw9JyVzJyFcbiIsIGZ1bmMsIHNxbCk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisJZmluYWxseSB7CisJCS8vIGFsbCBzcWwgc3R1ZmYgYXJlIGNsb3NlZCBvdXRzaWRlIHRoaXMgZnVuY3Rpb24sIHNvIGRvbid0IGNsb3NlIHRoZW0gaGVyZSEKKwkJfQkKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zCisJICogUmV0dXJucyBHZW5lcmFsIEluZm9zIGFib3V0IHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiByZWFkIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiSW5mb3MoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWRiSW5mbyA9IHJlYWREYkxlbW1hdGFJbmZvcyhzdG10KTsKKwkJCQorCQlpZiggZGJJbmZvID09IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgcmVhZCBHZW5lcmFsIEluZm9zIGZyb20gR2xlbW0gRGF0YWJhc2UhXG4iLCBmdW5jKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIG51bGw7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgc3RtdC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBtYXkgYmUgbnVsbC4KKwkJCisJfSAvLyByZWFkRGJJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkxlbW1hdGFJbmZvczoKKwkgKiByZWFkcyBhbmQgcmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjb250ZW50IAorCSAqIG9mIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiBSZXR1cm5zIDA9T0sgb3IgZXJyb3IgY29kZSA+IDAuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJMZW1tYXRhSW5mb3MoU3RhdGVtZW50IHN0bXQpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInJlYWREYkxlbW1hSW5mb3MiOworCVN0cmluZ1tdCisJCXNxbCA9IHsJIlNFTEVDVCBDT1VOVChkaXN0aW5jdCBsZW1tYSkgZnJvbSAiICsgZGJUYWJsZSAsCS8vIGNvdW50cyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YS4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUsCQkJCQkvLyBjb3VudHMgdG90YWwgbm8uIG9mIHN0b3JlZCB3b3JkZm9ybXMuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj10cnVlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj10cnVlIn07CisJUmVzdWx0U2V0CisJCXJlcyA9IG51bGw7IAorCWludFtdCisJCW5Db3VudHMgPSBuZXcgaW50W3NxbC5sZW5ndGhdOworCWludAkJCisJCWkgPSAwLCAKKwkJbkRpc3RMZW1tYXRhID0gLTEsCS8vIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhIGluIERCLgorCQluV2ZzCQkgPSAtMTsJLy8gbm8uIG9mIHdvcmRmb3JtcyBpbiBEQi4KKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogZXh0cmFjdGluZyBhZ3JlZ2F0ZWQgaW5mb3MgYWJvdXQgRGF0YWJhc2UgY29udGVudHMuLi5cbiIsIGZ1bmMpOworCQorCWRiSW5mbyA9IG5ldyBHbGVtbURCSW5mbygpOworCisJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJdHJ5IHsKKwkJZm9yKGk9MDsgaTxzcWwubGVuZ3RoOyBpKyspCisJCQl7CisJCQlyZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWxbaV0pOworCQkJaWYoIHJlcy5uZXh0KCkgKQorCQkJCWRiSW5mby5jb3VudHNbaV0gPSByZXMuZ2V0SW50KDEpOyAvLyBjb3VudCBpcyBpbiBjb2x1bW4gMS4KKwkJCWVsc2UKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZXh0cmFjdCBjb3VudCBmcm9tICclcychXG4iLCBmdW5jLCBzcWxbaV0pOworCQkJCWRiSW5mby5jb3VudHNbaV0gPSAtMTsKKwkJCQl9CisJCQl9CisgICAgICAgCisgICAgICAgIH0KKyAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAJeworICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHNxbD0nJXMnIGZhaWxlZCFcbiIsIGZ1bmMsIHNxbFtpXSk7CisgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgCX0KKwlmaW5hbGx5IHsKKwkJdHJ5IHsKKwkJCXJlcy5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gT0sKKwl9IC8vIHJlYWREYkxlbW1hdGFJbmZvcworCQorCS8qKioqKioqKioqKioqKioqKioqKiBUZXN0IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQorCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvc190ZXN0CisJICogVGhpcyBpcyBkZWJ1ZyBjb2RlIHdyaXR0ZW4gdG8gdGVzdCBpZiB3ZSBjYW4gYWNjZXNzIHRoZSBEZXJieQorCSAqIERhdGFiYXNlIGZyb20gYW4gZXh0ZXJuYWwgSmF2YSBQcm9ncmFtbS4KKwkgKiAwOC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgcmVhZERiSW5mb3NfdGVzdCgpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJU3RyaW5nCisJCWluc2VydFN0bXQgPSAiIjsKKwkKKwkvLyBDb25uZWN0IHRvIERlcmJ5IGRhdGFiYXNlOgorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQkKKwkJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJCXRyeQorCQkJeworCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIFN0cmluZyAKKyAgICAgICAgICAgIAlzcWwgPSAiU0VMRUNUICogRlJPTSAiICsgZGJUYWJsZTsKKyAgICAgICAgICAgIFJlc3VsdFNldCAKKyAgICAgICAgICAgIAlyZXN1bHQgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOworIAorICAgICAgICAgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiB0YWJsZSAnJXMnOlxuIiwgIGZ1bmMsIGRiVGFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAocmVzdWx0Lm5leHQoKSkgeworICAgICAgICAgICAgCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIiclcycgOiAnJXMnIDogJyVzJyA6ICclcycgLlxuIiwgcmVzdWx0LmdldFN0cmluZygxKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMiksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDMpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZyg0KSk7CisgICAgICAgIAkJaW5zZXJ0U3RtdCA9IGluc2VydFN0bXQgKyAiPHA+IiArIHJlc3VsdC5nZXRTdHJpbmcoMSkgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoMikgKyAiIDogIiArCisgICAgICAgICAgICAgICAgCQkgICAgIHJlc3VsdC5nZXRTdHJpbmcoMykgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoNCkgKyAiPC9wPiI7CisgICAgICAgICAgICAJfQorCQkJfQorCSAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAgICAgCXsKKwkgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogaW5zZXJ0U3RtdD0nJXMnIGZhaWxlZCEuXG4iLCBmdW5jLCBzdG10KTsKKyAgICAgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIAl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGluZyAnJXMgZmFpbGVkIVxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCXJldHVybiAxOworCQl9CisJCisJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCXRyeSB7CisJCWNvbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCQorCX0gLy8gcmVhZERiSW5mb3NfdGVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIGltcG9ydEdsZW1tTGVtYXRhX3Rlc3QKKwkgKiBUZXN0IFZlcnNpb24uCisJICogMTIuMTIuMTkvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0KFN0cmluZyBmbikKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QiOworCUlucHV0U3RyZWFtIAorCQlpbjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbjIgPSBudWxsOworCVN0cmluZworCQlsaW5lOworCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJcjsKKwkKKwkvKgorCSAqIFJlYWQgTGVtbWF0YSArIEluZm8gZnJvbSBmaWxlOiAKKwkgKi8KKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQkKKwl0cnkgeworCQkvL2luID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oIG5ldyBGaWxlSW5wdXRTdHJlYW0oZm4pICk7CisJCWluMiA9IG5ldyBCdWZmZXJlZFJlYWRlciggbmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJd2hpbGUoIChsaW5lID0gaW4yLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCA9PSAzICkKKwkJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogSW1wb3J0OiBsZW09JyVzJyBEZWNvbXA9JyVzJyBXZj0nJXMnLlxuIiwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMV0sIGxlbW1hSW5mb1syXSk7CisJCQllbHNlCisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6IGltcG9ydEdsZW1tTGFtYXRhOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzIVxuIiwgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQl9CisJCX0gCisJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBvcGVuICclcychXG4iLCBmdW5jLCBmbik7CisJCXJldHVybiAxOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisKKwl0cnkgeworCQlpbjIuY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkKKwkvKiBDaGVjayBjb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCSAqLyAKKwlyID0gcmVhZERiSW5mb3NfdGVzdCgpOworCWlmKCByICE9IDAgKQorCQlyZXR1cm4gcjsKKwkJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdAorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9kNC8wMDU0NDVhYzUyM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZDQvMDA1NDQ1YWM1MjNkMDAxYzEwYjFiMTdkZGQzMDllNmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc2MGU0OAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZDQvMDA1NDQ1YWM1MjNkMDAxYzEwYjFiMTdkZGQzMDllNmYKQEAgLTAsMCArMSw5ODMgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworLyogMC4xIDogMTcuMDYuMjAvRkIgCisgKiAwLjIgOiAyNS4xMC4yMS9GQgorICogICAgICAgbG9naW5nIG9mIHRoZSBBUEkgUmVxdWVzdHMuCisgKiAgICAgICBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKyAqICAgICAgIGNvcnJlY3RpbmcgY2FsbGluZyBvZiBsZW1tYSArIHByb3AxL3Byb3AyL3NwZWMuCisgKiAgICAgICBoYW5kbGluZyBvZiBsZW1tYXRhIHdpdGggJ8OfJy4KKyAqIAorICogR2VuZXJhbCBjb21tZW50cyB0byB0aGUgZW5jb2Rpbmcgb2YgZGVyaXZhdGlvbnMgZnJvbSBsZW1tYSB0byB3ZnMgYW5kIGhvdyB0aGV5IGFyZSBlbmNvZGVkCisgKiBpbiB0aGUgRGVyYnkgZGF0YWJhc2U6CisgKiAKKyAqIEdMRU1NIGVuY29kaW5nOiAgCisgKiAgIF8gXyA6ICtGbGV4ICAgICAgIMOWbGUgLT4gw5ZsICAgICAgCisgKiAgICsgXyA6ICtDb21wICAgICAgIMOWbGxhbXBlIC0+IMOWbCBvciBMYW1wZSAoY29tcG91bmQpLgorICogICBfICsgOiArb3RoZXIgICAgICBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybnNjaHVoIChubyBjb21wb3VuZCBmb3IgJ1R1cm5zY2h1aCcsIG9ubHkgcHJlZml4KS4KKyAqICAgKyArIDogK0NvbXArb3RoZXIgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm4gKyBTY2h1aCAoY29tcG91bmQgZm9yICdTY2h1aCcgKyBQcmVmaXgpLgorICogQzIgbGVtbWF0aXphdGlvbiBvcHRpb25zOgorICogICBGbGV4ICAoaWRlbnRpY2FsIHRvIEdsZW1tKQorICogICBDb21wICAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpCisgKiAgIE90aGVyIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykuCisgKiAgIFNwZWMgIChvbmx5IEMyOiBpbmNsdWRlcyBhbGwgd2ZzIHdpdGggaGlwaGVuIGFuZC9vciBzb21lIG5vbi1hbHBoYWJldGljIElTTzg4NTktMSBjaGFycykKKyAqICAgICAgICAgRS5nLiDDlmwtRXhwb3J0ZSwgIk1hcmtlbiItw5ZsZS4KKyAqIERlcmJ5IEVuY29kaW5nOgorICogIHByb3AxIAlwcm9wMglzcGVjICAgCW1lYW5pbmcgaW4gQzI6CisgKiAgMAkJMAkJLQkJRmxleAorICogIDEJCTAJCS0JCUNvbXAKKyAqICAwCQkxCQktCQlPdGhlciAocHJlZml4KQorICogIDEJCTEJCS0JCUNvbXAgKyBPdGhlcgorICogIC0JCS0JCTAJCS1TcGVjCisgKiAgLQkJLQkJMQkJK1NwZWMKKyAqIAorICogRXhhbXBsZXM6CisgKiAmU2NodWgJCQk6IFNjaHVoLCBTY2h1aGUsIC4uLiBvbmx5IGZsZXhpb25zCisgKiAmU2NodWgrY29tcAkJOiBTY2h1aGUsIFR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtvdGhlcgkJOiBTY2h1aGUsIEFudGlzY2h1aGUuLi4gZmxleGlvbnMgYW5kIHByZWZpeGVkIHdmcyAobm8gY29tcG91bmRzKS4KKyAqICZTY2h1aCtjb21wK290aGVyOiBTY2h1aGUsIEFudGlzY2h1aGUsIFR1cm5zY2h1aGUsIEFudGl0dXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMgYW5kIAorICogCQkJCQkgIHByZWZpeGVkIHNpbmdsZSB3ZnMgKEFudGlzY2h1aGUpIGFuZCBwcmVmaXhlZCBjb21wb3VuZHMuCisgKiAmU2NodWgrc3BlYwkJOiAiQW50aSItU2NodWhlLCA2OGdlci1TY2h1aGUuLi4gbWF5IGJlIGNvbWJpbmVkIHdpdGggZXZlcnkgb3B0aW9uczogYWRkcworICogICAgICAgICAgICAgICAgICAgIHdmcyB3aXRoIGh5cGhlbiBhbmQvb3Igbm9uLWFscGhhYmV0aWMgY2hhcnMuCisgKiAKKyAqIENvbnZlcnNpb24gcnVsZXM6CisgKiAKKyAqICAmc2NobGllw59lbiAtPiBpbnRlcm5hbCBzZWFyY2ggZm9yICdzY2hsaWVzc2VuJywKKyAqICBiZWNhdXNlIEdsZW1tIG91dHB1dHMgJ3NzJyBmb3IgJ8OfJy4KKyAqICAKKyAqIENoYXJhY3RlciBFbmNvZGluZzoKKyAqIAorICogLSBXaGVuIGltcG9ydGluZyB3ZnMgdG8gdGhlIERlcmJ5IERhdGFiYXNlIHdpdGggZG9DdXJsR2xlbW1TZXJ2aWNlcy9pbmRleExlbW1hdGE6CisgKiAKKyAqICAgSU5QVVQ6IHdvcmRmb3JtIGxpc3QgaW4gW1VURi04XSA6IFVURi04IGlzIHRoZW4gY29udmVydGVkIHRvIExhdDEgZm9yIEdsZW1tLAorICogICAgICAgICAgdGhlIG91dHB1dCBvZiBHbGVtbSBbTGF0MV0gaXMgcmV0dXJuZWQgdG8gdGhlIEdsZW1tU2VydmljZXMgd2l0aG91dCByZWNvbnZlcnNpb24KKyAqICAgICAgICAgIHRvIFVURjggYW5kIGltcG9ydGVkIGludG8gRGVyYnkgRGF0YWJhc2UgdW5jaGFuZ2VkLgorICoJCQorICovCisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDQuMTEuMjEiOyAKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjIiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lUHJvcHMJCT0gIi9XRUItSU5GL0dsZW1tU2VydmljZXMucHJvcGVydGllcyI7CisJCisJLy8gdGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHJlYWQgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgKHRoZXNlIGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMpOgorCXByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoIAkJPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCUBDb250ZXh0CisJcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBzZXJ2bGV0Q29udGV4dDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZvdXQJPSBudWxsOworCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZmVycgk9IG51bGw7CQkKKwkJCisJLyogCisgCSAqIAorCSAqIC0gYWZ0ZXIgbG9hZFByb3BlcnRpZXMsIHNldHMgdGhlIGNsYXNzIHZhcmlhYmxlIHdpdGggbG9hZGVkIHByb3BlcnR5IHZhbHVlcy4KKwkgKiAKKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJR1NfV29ya2luZ1BhdGggCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgIkdTX1dvcmtpbmdQYXRoIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIik7CisJZm5hbWVXZnMJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lV2ZzIiwgCSAgICJnbF93ZnNfaW4udHh0Iik7CisJZm5hbWVXZnMJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVdmczsKKwlmbmFtZU91dAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVPdXQiLCAJICAgIkdsZW1tU2VydmljZXMubG9nIik7CisJZm5hbWVPdXQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZU91dDsKKwlmbmFtZUVycgkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVFcnIiLCAJICAgIkdsZW1tU2VydmljZXMuZXJyIik7CisJZm5hbWVFcnIJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUVycjsKKwlmbmFtZVNjcmlwdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVTY3JpcHQiLAkgICAiZG9HbGVtbSIpOworCWZuYW1lU2NyaXB0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVTY3JpcHQ7CisJZm5hbWVMZW1hdGEJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lTGVtYXRhIiwgICAgInRtcC9sZW0zIik7CisJZm5hbWVMZW1hdGEJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUxlbWF0YTsKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qCisJICogIGxvZ19SZXF1ZXN0OgorCSAqICAKKwkgKiAgLSB3cml0ZSBpbmZvIGFib3V0IEFQSSBSZXF1ZXN0LgorCSAqICBQYXJhbWV0ZXJzOgorCSAqICByZXF1ZXN0UGF0aAk6IHBhdGggb2Ygd2ViYXBwIGFkZHJlc3NlZCBieSB0aGUgcmVxdWVzdC4KKwkgKiAgZnVuYwkJOiBuYW1lIG9mIHRoZSBmdW5jdGlvbiB3aGljaCBpbXBsZW1lbnRzIHRoZSByZXF1ZXN0LgorCSAqICAKKwkgKiAgMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgbG9nX1JlcXVlc3QoU3RyaW5nIHJlcXVlc3RQYXRoLCBTdHJpbmcgZnVuYykKKwkKKwl7CisJLy8gdHJhbnNmb3JtICJkYXRlVHRpbWUiIC0+ICJkYXRlIHRpbWUiOgorCQorCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCWZvdXQucHJpbnRmKCIjIyMgJXM6ICVzIDogdmVycz0nJXMnLCB2ZGF0ZT0nJXMnIHJlcXVlc3Q9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RQYXRoLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgCisJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwl9IC8vIGxvZ19SZXF1ZXN0CisJCQorCS8qIGZvcm1hdERiTmFtZQorCSAqIAorCSAqIC0gZ2V0cyBuYW1lIG9mIERhdGFiYXNlIHVzZWQgYnkgRGVyYnkgZnJvbSBwcm9wcyAKKwkgKiAgIGFuZCBmb3JtYXQgaXQgdG8gSFRNTC4KKwkgKiAgCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFN0cmluZyBmb3JtYXREYk5hbWUoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJU3RyaW5nCisJCWRiTmFtZTsKKwlTdHJpbmcKKwkJZGJQYXRoID0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJaW50CisJCWogPSBkYlBhdGgubGFzdEluZGV4T2YoJy8nKTsKKwkKKwlpZiggaiA+IDAgKQorCQlkYk5hbWUgPSBkYlBhdGguc3Vic3RyaW5nKGorMSk7CisJZWxzZQorCQlkYk5hbWUgPSBkYlBhdGg7CisJCisJcmV0dXJuIGRiTmFtZTsgLy8gIjxwPjxiPkRhdGFiYXNlOiAiICsgZGJOYW1lICsgIjwvYj48L3A+XG4iOworCX0gLy8gZm9ybWF0RGJOYW1lCisKKwkvKgorCSAqIGNsb3NlTG9nU3RyZWFtczoKKwkgKiAKKwkgKiAtIGNsb3NlIHRoZSBmb3V0L2ZlcnIgbG9nIHN0cmVhbXMuCisJICogCisJICogMjYuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgY2xvc2VMb2dTdHJlYW1zKCkKKwkKKwl7CisJaWYoIGZvdXQgIT0gbnVsbCkKKwkJZm91dC5jbG9zZSgpOworCWZvdXQgPSBudWxsOworCQorCWlmKCBmZXJyICE9IG51bGwgKQorCQlmZXJyLmNsb3NlKCk7CisJZmVyciA9IG51bGw7CisJfSAvLyBjbG9zZUxvZ1N0cmVhbXMKKwkKKwkvKiBpbml0X2FuZF9sb2dfUmVxdWVzdAorCSAqIAorCSAqIC0gbG9hZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMsIHNldHMgR2xlbW1TZXJ2aWNlcyBjb25zdGFudHMKKwkgKiAgIGFuZCBsb2dzIHRoZSByZXF1ZXN0LgorCSAqIC0gbG9hZCBwcm9wZXJ0aWVzIGFuZCBzZXQgY29uc3RhbnRzIGJlZm9yZSBsb2dnaW5nIGFueXRoaW5nLCBiZWNhdXNlCisJICogICBsb2dnaW5nIHdpbGwgYmUgZG9uZSBpbnRvIHRoZSBsYXN0IHN0ZG91dC9zdGRlcnIgb3BlbmVkIGluIGdsYXNzZmlzaCdzIEpWTSwKKwkgKiAgIGUuZy4gaW4gdGhlIGxvZyBvZiBhbm90aGVyIFNlcnZpY2UuCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFByb3BlcnRpZXMgaW5pdF9hbmRfbG9nX1JlcXVlc3QoU3RyaW5nIGZ1bmMsIFN0cmluZyByZXF1ZXN0UGF0aCkKKwkKKwl7CisJU3RyaW5nCisJCXJlYWxQYXRoID0gc2VydmxldENvbnRleHQuZ2V0UmVhbFBhdGgoZm5hbWVQcm9wcyk7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtIChpZiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJUHJvcGVydGllcworCQlwcm9wcyA9IFV0aWxzLmxvYWRQcm9wZXJ0aWVzKHNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcyksIGZuYW1lUHJvcHMsIHJlYWxQYXRoLCBmYWxzZSk7CisJCisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIGZvdXQgYW5kIGZlcnIgYXMgcmVwbGFjZW1lbnQgZm9yIHN0ZG91dC9zdGRlcnIgZm9yIHVzZSBpbiBHbGVtbVNlcnZpY2VzLgorCS8vIGRvIG5vdCB1c2Ugb3IgcmVkaXJlY3QgU3lzdGVtLm91dCBhbmQgU3lzdGVtLmVyciwgYXMgdGhleSB3aWxsIGJlIHJlZGlyZWN0ZWQKKwkvLyBieSBvdGhlciBTZXJ2aWNlcyBpbiB0aGUgc2FtZSBnbGFzc2Zpc2ggSlZNLCBlLmcuIGJ5IHRoZSBXZm9ybVNlcnZpY2VzLgorCWZvdXQgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVPdXQpOworCWZlcnIgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVFcnIpOworCQorCS8vVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkKKwlsb2dfUmVxdWVzdChyZXF1ZXN0UGF0aCwgZnVuYyk7CisJCisJcmV0dXJuIHByb3BzOworCX0gLy8gaW5pdF9hbmRfbG9nX1JlcXVlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwlTdHJpbmcKKwkJc3RhdHVzOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3N0YXR1cy8iKTsKKwkKKwkvLyBodHRwU2VydmxldFJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW52KTsKKwkKKwlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+cHJvcGVydGllczwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPmRhdGFiYXNlPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIiksCisJCQkJCQkJc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSA9PSBudWxsID8gIm5vdCBmb3VuZCIgOgorCQkJCQkJCQlwcm9wcy5pc0VtcHR5KCkgPyAiZW1wdHkiIDogImxvYWRlZCIsCisJCQkJCQkJZm9ybWF0RGJOYW1lKHByb3BzKQorCQkJCQkJCSk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJY2xvc2VMb2dTdHJlYW1zKCk7CisJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiAKKwkgKiBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhOgorCSAqIAorCSAqIFBPU1Q6IC9pbmRleC9hZGQve2RhdGFiYXNlbmFtZX06IHRleHQvcGxhaW4KKwkgKiAKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGxpc3QJCSA6IHRoZSBsaXN0IG9mIHdmcyBzZW50IGluIHRoZSBib2R5IG9mIHRoZSBQT1NUIHJlcXVlc3QuCisJICogZGJwYXRoCSA6IHRoZSBsb2NhdGlvbiBvZiB0aGUgZGF0YWJhc2Ugd2hlcmUgdGhlIGxlbW1hK3dmcyBhcmUgdG8gYmUgc3RvcmVkLgorCSAqICAgICAgICAgICAgIGVuY29kZWQgYXMgIi5ob21lLnVzZXIuS29yQVAuLi4uIiwgbXVzdCBiZSBjb252ZXJ0ZWQgdG8KKwkgKiAgICAgICAgICAgICAiL2hvbWUvdXNlci9Lb3JBUC8uLi4iCisJICogICAgICAgICAgICAgSU1QT1JUQU5UOiBkbyBub3QgdXNlIGEgJy4nIGZvciBlbmNvZGluZyBhbnl0aGluZyBlbHNlIHRoYW4gYSAnLycuCisJICogTm90ZXMgICAgIDoKKwkgKiAtIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlIGxvY2F0ZWQgYXQgJ2RhdGFiYXNlbmFtZScuCisJICogLSBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZCBpbnRvIGEgRGVyYnkgZGF0YWJhc2UuCisJICogSW5wdXQJIDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICogMDQuMTEuMjEvRkIKKwkgKiAtIHN1Ym1pdHRlZCBkYXRhYmFzZSBwYXRoLgorCSAqLworCQorCUBQYXRoKCJhZGQve2RhdGFiYXNlcGF0aH0iKSAKKwlAUE9TVCAKKwlAQ29uc3VtZXMoInRleHQvcGxhaW4iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCQkJCQkJCSgKKwkJCQkJCQlTdHJpbmcgCQkJCQkJCQlsaXN0LAorCQkJCQkJCUBQYXRoUGFyYW0odmFsdWU9ImRhdGFiYXNlcGF0aCIpIAlmaW5hbCBTdHJpbmcgZGJwYXRoCisJCQkJCQkJKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvUE9TVF9pbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIAorCQlhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gbnVsbDsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2FkZC97ZGJwYXRofSIpOworCQorCWRicGF0aC5yZXBsYWNlKCcuJywgJy8nKTsKKwkKKwlmb3V0LnByaW50ZigiSW5mbyA6ICVzOiBzZWxlY3RlZCBkYXRhYmFzZSBwYXRoID0gJyVzJy5cbiIsIGZ1bmMsIGRicGF0aCk7CisJZm91dC5wcmludGYoIkluZm8gOiAlczogd29ya2luZyBkaXJlY3RvcnkgPSAnJXMnLlxuIiwgZnVuYywgR1NfV29ya2luZ1BhdGgpOworCQorCS8vIHNldCBmaWxlIGFuZCBwYXRocyBhZnRlciBHU19Xb3JraW5nUGF0aCBoYXMgYmVlbiBpbml0aWFsaXNlZDoKKwlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgZm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShmZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzLCBmb3V0LCBmZXJyKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZsO8aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEsIHByb3BzLCBkYnBhdGgpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCQorCX0gLy8gZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCisJLyogZG9HRVRfdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVycyA9ICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vIik7CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlmaW5hbCBTdHJpbmcKKwkJZGJOYW1lID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+ZGF0YWJhc2U8L2I+OiAlczwvcD4iLCBmb3JtYXREYk5hbWUocHJvcHMpKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgZGJOYW1lICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyBkb0dFVF92aWV3REJJbmZvCisKKworCS8qIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0PnZlcnNpb24gIiArIHZlcnNpb24gKyAiIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIHJlcXVlc3QgPSAnIiArIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikgKyAiJzwvaT48L2g0PlxuIiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDE6PC9iPiAoQzIgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9PC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+e2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYyk8L2NvZGU+PC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbDwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPsOWbD9vcHRzPWZsZXgrY29tcCtvdGhlcitzcGVjPC9jb2RlPjwvcD4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMjo8L2I+IChpbnRlcm5hbCBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX0/cHJvcDE9WzAxMl0mYW1wO3Byb3AyPVswMTJdJmFtcDtzcGVjPVswMTJdPC9jb2RlPiAod2hlcmUgZWFjaCBwcm9wMSwgcHJvcDIsIHNwZWMgaXMgb3B0aW9uYWwpLjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw/cHJvcDE9MCZhbXA7cHJvcDI9MSZhbXA7c3BlYz0yPC9jb2RlPjwvcD4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfSIpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSclZCcgcHJvcDI9JyVkJyBzcGVjPSclZCcuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwkvKiAKKwlmb3IoaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJCX0JCisJICovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoIGxlbW1hSW5mby5vcHRzU2V0dGluZyA9PSBMZW1tYUluZm8uT1BUU19TRVRUSU5HX0MyICkgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMSxwcm9wMixzcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaW50CisJCW5XZnMgPSBsZW1tYUluZm8ubldmczsKKwkKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwkvLyBsb2cgb3V0Y29tZToKKwlpZiggbldmcyA8IDAgKQorCQlmb3V0LnByaW50ZigiRXJyb3I6ICVzOiByZXR1cm5pbmcgMCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMpOworCWVsc2UKKwkJZm91dC5wcmludGYoIkRlYnVnLiAlczogcmV0dXJuaW5nICVkIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYywgbldmcyk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIG5vdGU6CisJICogLSBpZiBCcm93c2VyIHJlcXVlc3Q6IEhUVFBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAndGV4dC9odG1sLC4uLnhtbC4uLicKKwkgKiAtIGlmIFdmb3JtU2VydmljZXMgcmVxdWVzdDogSHR0cFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICdhcHBsaWNhdGlvbi9qc29uJy4KKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqIAorCSAqIC0gc3VibWl0dGVkIFVSTCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hLCBpcyBpbnRlcnByZXRlZCBieSBnbGFzc2Zpc2ggYXMKKwkgKiAgIGJlaW5nIElTTy04ODU5LTEgZW5jb2RlZC4gV2hlbiB0aGUgcmVxdWVzdCBpcyBVVEYtOCBlbmNvZGVkLCBVbWxhdXRzIGFuZAorCSAqICAgJ8OfJyBhcmUgbWlzLWludGVycHJlZGVkLCBsZWFkaW5nIHRvIGFuIGVycm9uZXJvdXMgcmVxdWVzdCB0byB0aGUgRGVyYnkKKwkgKiAgIGRhdGFiYXNlLgorCSAqIC0gUmVxdWVzdGVkIGxlbW1hICdsZW1tYScgaGFzIHRvIGJlIHRyYW5zZm9ybWVkIHRvIFVURi04IGZpcnN0LgorCSAqIC0gbm90ZTogZXZlbiB3aGVuIHN1Ym1pdHRpbmcgdGhlIEdFVCByZXF1ZXN0IGJ5IHNwZWNpZnlpbmcgJ2NoYXJlbmNvZGU9VVRGLTgnLAorCSAqICAgZ2xhc3NmaXNoIGRvZXMgbm90IGNvbnZlcnQgaXQgYXV0b21hdGljYWxseSBhcyBleHBlY3RlZC4KKwkgKiAgIAorCSAqICAyMi4xMC4yMS9GQgorCSAqIAorCSAqIC0gaWYgYWNjZXB0PWFwcGxpY2F0aW9uL2pzb24gcmV0dXJuIFVURi04IChXZm9ybVNlcnZpY2VzKS4KKwkgKiAtIGVsc2UgaWYgYWNjZXB0PXRleHQvaHRtbCBkbyBub3QgdHJhbnNmb3JtIGNoYXJhY3RlciBlbmNvZGluZyAoQnJvd3NlcikuCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBDb25zdW1lcygiYXBwbGljYXRpb24vanNvbiwgdGV4dC9odG1sIikKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCQorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCWZpbmFsIGJvb2xlYW4KKwkJYkVuY29kZUxlbW1hID0gZmFsc2U7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CisJCisJLyogdGVzdDoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJaWYoIGJFbmNvZGVMZW1tYSApCisJCXsKKwkJLy8gd2hlbiBhY2NlcHRpbmcgSlNPTiwgdXJsIGhhcyB0byBiZSBjb252ZXJ0ZWQgdG8gVVRGLTgsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYToKKwkJdHJ5IHsKKwkJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obmV3IFN0cmluZyhsZW1tYS5nZXRCeXRlcygiSVNPLTg4NTktMSIpLCAidXRmLTgiKSk7CisJCQl9IAorCQljYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlMSkgeworCQkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCQlMZW1tYVJlc3BvbnNlCisJCQkJbGVtcmVzcCA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbXJlc3ApLmJ1aWxkKCk7CisJCQl9CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW1VURi04XSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCWVsc2UKKwkJeworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbdW5jaGFuZ2VkXSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCisJLyogZG9lcyBub3QgaGVscDoKKwkgU3RyaW5nCisJIAlyZXF1ZXN0Q2hhckVuY29kaW5nID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldENoYXJhY3RlckVuY29kaW5nKCk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiByZXF1ZXN0IGNoYXJhY3RlciBlbmNvZGluZyA9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RDaGFyRW5jb2RpbmcpOworCSovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXsKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQkvL3JldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJfQorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsJCisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCS8qCisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC90ZXN0L2luZm8vIik7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL2ZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJZm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2Q3LzYwY2NmYjcwNTQzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9kNy82MGNjZmI3MDU0M2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjY2NDEzCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9kNy82MGNjZmI3MDU0M2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpAQCAtMCwwICsxLDcxOCBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnNxbC5Db25uZWN0aW9uOworaW1wb3J0IGphdmEuc3FsLkRyaXZlck1hbmFnZXI7CitpbXBvcnQgamF2YS5zcWwuUHJlcGFyZWRTdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS5zcWwuUmVzdWx0U2V0OworaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5TdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitwdWJsaWMgY2xhc3MgR2xlbW1EQgorCit7CisJc3RhdGljIHB1YmxpYyBTdHJpbmcgZGJUYWJsZSAJPSAiR2xlbW1MZW1tYXRhIjsKKwlzdGF0aWMgU3RyaW5nIGRiTGVtbWEgCQkgCT0gImxlbW1hIjsKKwlzdGF0aWMgU3RyaW5nIGRiV2YJIAkJCT0gIndmIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDEgCQkJPSAicHJvcDEiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMiAJCQk9ICJwcm9wMiI7CisKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKG92ZXJ3cml0dGVuIGJ5IEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZuYW1lREIgPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgc2VydmVySG9zdCA9ICIvL2xvY2FsaG9zdDoxNTI3LyI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChmaW5hbCBhc3NpZ25tZW50cyk6CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyRW1iID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZERyaXZlciI7CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyQ2xpZW50ID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREcml2ZXIiOworCisJZmluYWwgc3RhdGljIGJvb2xlYW4KKwkJdXNlUHJlcGFyZWRTdG10ID0gdHJ1ZTsgLy8gMT11c2UgUHJlcGFyZWRTdGF0ZW1lbnQgYW5kIG5vdCBTdGF0ZW1lbnQuCisJCisJLy8gdmFsdWVzIHRvIGJlIGluc2VydGVkOiBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYy4KKwlzdGF0aWMgU3RyaW5nIGluc2VydFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKCclcycsICclcycsICclcycsICclcycsICclcycpIjsKKwlzdGF0aWMgU3RyaW5nIGluc2VydFByZXBhcmVkUXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoPywgPywgPywgPywgPykiOworCQorCS8qCisJICogc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJICogCisJICogQXJndW1lbnRzOgorCSAqIHByb3BzCTogUHJvcGVydGllcyBsb2FkZWQgYnkgdGhlIEdsZW1tU2VydmljZXMuCisJICogTm90ZXM6CisJICogLSB0aGlzIGZ1bmN0aW9uIGxvYWRzIG9ubHkgdGhvc2UgQ29uc3RhbnRzIG5lZWRlZCBpbiB0aGlzIGNsYXNzLgorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcwlwcm9wcykKKwkKKwl7CisJZm5hbWVEQgkJIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgCSIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlzZXJ2ZXJIb3N0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJzZXJ2ZXJIb3N0IiwJIi8vbG9jYWxob3N0OjE1MjcvIik7CisJZGVyYnlEQlVSTCAJCT0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCQkJCisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCQkJCQlpbXBvcnRHbGVtbUxlbWF0YQorCSAqIFBhcmFtZXRlcnM6CisJICogZm4JCSA6IGFic29sdXRlIGZpbGUgbmFtZSBvZiBHTEVNTSBvdXRwdXQgW0lTTzg4NTktMV0gZXhwZWN0ZWQsIG5vdCBVVEYtOCEKKwkgKiBwcm9wcwkgOiBQcm9wZXJ0aWVzIHZvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgdG8gc2V0IGNvbnN0YW50cyBuZWVkZWQKKwkgKiAJCQkgICBpbiB0aGlzIGNsYXNzLgorCSAqIGRicGF0aAkgOiBsb2NhdGlvbiArIG5hbWUgb2YgZGF0YWJhc2Ugd2hlcmUgdG8gc3RvcmUgbGVtbWF0YSt3ZnMuCisJICogUmV0dXJucwkgOiAwPU9LLCAtMTogZ2VuZXJhbCBlcnJvcjsgPiAwIDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAKKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIGR5bmFtaWNhbGx5IGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqIDA0LjExLjIxL0ZCIGRicGF0aC4KKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YShTdHJpbmcgZm4sIFByb3BlcnRpZXMgcHJvcHMsIGZpbmFsIFN0cmluZyBkYnBhdGgpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YSI7CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4gPSBudWxsOworCWludAorCQluRXJyb3JzOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyB3aGVuIGluZGV4aW5nIGRhdGEgaW50byB0aGUgZGF0YWJhc2UsIHNlbGVjdCB0aGUgc3VibWl0dGVkIGRicGF0aCwKKwkvLyAobm90IHRoZSBvbmUgc3RvcmVkIGluIHRoZSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCWRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGRicGF0aDsKKwkKKwkvLyBvcGVuIHJlYWRlciBvbiBHbGVtbSBMZW1tYXRhOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCWluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCQorCQluRXJyb3JzID0gd3JpdGVEQkxlbW1hdGEoaW4pOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBmcm9tICclcychXG4iLCBmdW5jLCBmbik7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAtMTsKKwkJfQorCisJLy8gY2xvc2UgUmVhZGVyOgorCXRyeSB7CisJCWluLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJbkVycm9ycyA9IC0xOworCQl9CisJCisgCWlmKCBuRXJyb3JzID09IDAgKQorIAkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQgZG9uZSBzdWNjZXNzZnVsbHkuXG4iLCBmdW5jKTsKKyAJZWxzZQorIAkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQ6ICVkIEVycm9ycyFcbiIsIGZ1bmMsIG5FcnJvcnMpOworIAkKKwlyZXR1cm4gbkVycm9yczsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YQorCQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiB3cml0ZURCTGVtbWF0YSgpCisJICogc3RvcmVzIGxpc3Qgb2YgbGVtbWF0YSArIGluZm9zIGludG8gRGVyYnkgZGIuCisJICogRmlsZSBmb3JtYXQ6ICJMZW1tYSBEZWNvbXBvc2l0aW9uIFdmIiwKKwkgKiAgICAgICAgICAgICAgZS5nLjogIkjvv711c2VyICstIEhhdXMiLgorCSAqIFJldHVybnM6IDAgPSBPSyBvciAtMTogZ2VuZXJhbCBlcnJvciBvciA+IDA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogMDkuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYXRhKEJ1ZmZlcmVkUmVhZGVyIGluKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hdGEiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJUHJlcGFyZWRTdGF0ZW1lbnQKKwkJc3RtdFByZXAgPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10IAkgPSBudWxsOworCVN0cmluZworCQlsaW5lOwkKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlyZXQgPSAwOyAvLyBPSy4KKwlib29sZWFuCisJCWNvbnRhaW5zU3BlYzsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisKKwkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQlzdG10UHJlcCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KGluc2VydFByZXBhcmVkUXVlcnkpOworCQllbHNlCisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCisJCXdoaWxlKCAobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCAhPSAzICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzISBFeHBlY3RlZCA9IDMhIENhbm5vdCBiZSBzdG9yZWQhXG4iLCBmdW5jLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCQluRXJyb3JzKys7CisJCQkJY29udGludWU7CisJCQkJfQorCQkJCisJCQkvLyBHZXQgSW5mbywgaWYgd29yZGZvcm0gY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlICctJywgaW50ZXJwdW5jdGlvbiBldGMuOgorCQkJLy8gbGVtbWFJbmZvWzJdID0gd29yZGZvcm0uCisJCQljb250YWluc1NwZWMgPSBMZW1tYUluZm8uaXNXZlNwZWNpYWxDYXNlKGxlbW1hSW5mb1syXSk7CisJCQkvLyBzdG9yZSBpbnRvIERCOgorCQkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoc3RtdFByZXAsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQllbHNlCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3Moc3RtdCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCQorCQkJaWYoIHJldCAhPSAwICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgc3RvcmUgbGVtbWEgJyVzJyBpbnRvIERCIVxuIiwgZnVuYywgbGluZSk7CisJCQkJbkVycm9ycysrOyAKKwkJCQl9CisJCQl9IC8vIHdoaWxlCisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIEdsZW1tIGxlbW1hdGEraW5mb3MgZnJvbSBmaWxlISBFeGl0IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAtMTsgCisJCX0JCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAtMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSAKKwkJCQlzdG10LmNsb3NlKCk7CisJCQlpZiggc3RtdFByZXAgIT0gbnVsbCApIAorCQkJCXN0bXRQcmVwLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBuRXJyb3JzOyAvLyAwPU9LLCA+MCA9IG5vLiBvZiBlcnJvcnMuCisJfSAvLyB3cml0ZURCTGVtbWF0YQorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZDoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBydWxlcyBpbnRvIERlcmJ5IERCLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBpcyB0aGUgdmVyc2lvbiB3aXRoIGEgUHJlcGFyZWRRdWVyeS4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIHNwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxNy4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCgKKwkJCVByZXBhcmVkU3RhdGVtZW50IHN0bXQsIAorCQkJU3RyaW5nIGxlbW1hLCAKKwkJCVN0cmluZyB3ZiwgCisJCQlTdHJpbmcgZGVjb21wb3NpdGlvbiwgCisJCQlib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCI7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJYm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIAorCS8vIGZvciBsb2dpbmcgb25seToKKwlzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisgICAgLy8gbm93IGluc2VydCBuZXcgdmFsdWVzIGludG8gUHJlcGFyZWRTdGF0ZW1lbnQ6CisgICAgdHJ5IHsKKyAgICAJc3RtdC5zZXRTdHJpbmcoIDEsIGxlbW1hKTsKKyAgICAgICAgc3RtdC5zZXRTdHJpbmcoIDIsIHdmKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDMsIHByb3AxKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDQsIHByb3AyKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDUsIHNwZWMpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByZXBhcmVkIHN0bXQgPSAnJXMnLlxuIiwgIGZ1bmMsIHN0bXQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUxKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoCSJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JyViJyBwcm9wMj0nJWInIHNwZWM9JyViJyFcbiIsICAKKwkJCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfQorICAgIAorICAgIHRyeSB7CisJCS8vIGV4ZWN1dGUgdGhlIGZpbGxlZCBwcmVwYXJlZCBzdGF0ZW1lbnQ6CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisgICAgCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZAorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3M6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gaW50byBEZXJieSBEQi4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGNvbnRhaW5zU3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDEwLjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zKFN0YXRlbWVudCBzdG10LCBTdHJpbmcgbGVtbWEsIFN0cmluZyB3ZiwgU3RyaW5nIGRlY29tcG9zaXRpb24sIGJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zIjsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlCb29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworICAgIAorICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorCXRyeSB7CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoc3FsSW5zZXJ0KTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYURhdGEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBmcm9tIHRoZSBHbGVtbURCLgorCSAqIElucHV0OiBsZW1tYSArIEdMRU1NX09QVFNfeHh4IChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWFEYXRhKExlbW1hSW5mbyBsZW1tYUluZm8sIFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYURhdGEiOworCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJbGVtbWFJbmZvLmNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJbGVtbWFJbmZvLnN0bXQgPSBsZW1tYUluZm8uY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlpbnQgciA9IHJlYWREQkxlbW1hKGxlbW1hSW5mby5zdG10LCBsZW1tYUluZm8pOworCQkJCisJCWlmKCByICE9IDAgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZ2V0IGRhdGEgZm9yIGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIVxuIiwgCisJCQkJCWZ1bmMsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwkJCXJldHVybiAxOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggbGVtbWFJbmZvLmNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hRGF0YQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGJ5IGFjY2Vzc2luZyB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dCA6IGxlbW1hICsgcHJvcDErMiAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogT3V0cHV0OiAKKwkgKiAgLSBjb250YWlucyBhIFJlc3VsdFNldCBmb3IgZmV0Y2hpbmcgdGhlIHdvcmRmb3Jtcy4KKwkgKiAJICBUaGlzIFJlc3VsdFNldCB3aWxsIGhhdmUgYmUgYmUgY2xvc2VkIHdpdGggTGVtbWFJbmZvLmNsb3NlKCkuCisJICogCSAgVGhlIG5vLiBvZiBmb3VuZCB3b3JkZm9ybXMgaXMgbm90IGtub3duIHRpbGwgd2UKKwkgKiAJICBmZXRjaCBhbGwgb2YgdGhlbSBmcm9tIFJlc3VsdFNldCEgCisJICogCS0gZHVlIHRvIFNFTEVDVCBESVNUSU5DVCBvbmx5IHVuaXEgd2YgYXJlIHJldHVybmVkLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYShTdGF0ZW1lbnQgc3RtdCwgTGVtbWFJbmZvIGxlbW1hSW5mbykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hIjsKKwlTdHJpbmcKKwkJc3FsOworCQkKKwlzcWwgPSBTdHJpbmcuZm9ybWF0KCJTRUxFQ1QgRElTVElOQ1Qgd2YgZnJvbSAlcyBXSEVSRSBsZW1tYT0nJXMnICVzICVzICVzIiwgCisJCQlkYlRhYmxlLAorCQkJbGVtbWFJbmZvLmxlbW1hLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiQU5EIHByb3AxPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAxID8gIkFORCBwcm9wMT0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiQU5EIHByb3AyPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAxID8gIkFORCBwcm9wMj0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiQU5EIHNwZWM9J3RydWUnIiAgIDogCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICJBTkQgc3BlYz0nZmFsc2UnIiAgOiAiIik7CisJCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgZnVuYywgbGVtbWFJbmZvLnByb3AxLCBsZW1tYUluZm8ucHJvcDIsIGxlbW1hSW5mby5zcGVjKTsKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbCA9ICclcycuXG4iLCBmdW5jLCBzcWwpOworCisJdHJ5IHsKKwkJbGVtbWFJbmZvLnJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoZW4gZXhlY3V0aW5nIHNxbD0nJXMnIVxuIiwgZnVuYywgc3FsKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gYWxsIHNxbCBzdHVmZiBhcmUgY2xvc2VkIG91dHNpZGUgdGhpcyBmdW5jdGlvbiwgc28gZG9uJ3QgY2xvc2UgdGhlbSBoZXJlIQorCQl9CQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3MKKwkgKiBSZXR1cm5zIEdlbmVyYWwgSW5mb3MgYWJvdXQgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIHJlYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJJbmZvcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJZGJJbmZvID0gcmVhZERiTGVtbWF0YUluZm9zKHN0bXQpOworCQkJCisJCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCByZWFkIEdlbmVyYWwgSW5mb3MgZnJvbSBHbGVtbSBEYXRhYmFzZSFcbiIsIGZ1bmMpOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSBjb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSBzdG10LmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIG1heSBiZSBudWxsLgorCQkKKwl9IC8vIHJlYWREYkluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiTGVtbWF0YUluZm9zOgorCSAqIHJlYWRzIGFuZCByZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGNvbnRlbnQgCisJICogb2YgdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIFJldHVybnMgMD1PSyBvciBlcnJvciBjb2RlID4gMC4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkxlbW1hdGFJbmZvcyhTdGF0ZW1lbnQgc3RtdCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAicmVhZERiTGVtbWFJbmZvcyI7CisJU3RyaW5nW10KKwkJc3FsID0gewkiU0VMRUNUIENPVU5UKGRpc3RpbmN0IGxlbW1hKSBmcm9tICIgKyBkYlRhYmxlICwJLy8gY291bnRzIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSwJCQkJCS8vIGNvdW50cyB0b3RhbCBuby4gb2Ygc3RvcmVkIHdvcmRmb3Jtcy4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPXRydWUiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPXRydWUifTsKKwlSZXN1bHRTZXQKKwkJcmVzID0gbnVsbDsgCisJaW50W10KKwkJbkNvdW50cyA9IG5ldyBpbnRbc3FsLmxlbmd0aF07CisJaW50CQkKKwkJaSA9IDAsIAorCQluRGlzdExlbW1hdGEgPSAtMSwJLy8gbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEgaW4gREIuCisJCW5XZnMJCSA9IC0xOwkvLyBuby4gb2Ygd29yZGZvcm1zIGluIERCLgorCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBleHRyYWN0aW5nIGFncmVnYXRlZCBpbmZvcyBhYm91dCBEYXRhYmFzZSBjb250ZW50cy4uLlxuIiwgZnVuYyk7CisJCisJZGJJbmZvID0gbmV3IEdsZW1tREJJbmZvKCk7CisKKwkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwl0cnkgeworCQlmb3IoaT0wOyBpPHNxbC5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCXJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbFtpXSk7CisJCQlpZiggcmVzLm5leHQoKSApCisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IHJlcy5nZXRJbnQoMSk7IC8vIGNvdW50IGlzIGluIGNvbHVtbiAxLgorCQkJZWxzZQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBleHRyYWN0IGNvdW50IGZyb20gJyVzJyFcbiIsIGZ1bmMsIHNxbFtpXSk7CisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IC0xOworCQkJCX0KKwkJCX0KKyAgICAgICAKKyAgICAgICAgfQorICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgIAl7CisgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogc3FsPSclcycgZmFpbGVkIVxuIiwgZnVuYywgc3FsW2ldKTsKKyAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAJfQorCWZpbmFsbHkgeworCQl0cnkgeworCQkJcmVzLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBPSworCX0gLy8gcmVhZERiTGVtbWF0YUluZm9zCisJCisJLyoqKioqKioqKioqKioqKioqKioqIFRlc3QgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zX3Rlc3QKKwkgKiBUaGlzIGlzIGRlYnVnIGNvZGUgd3JpdHRlbiB0byB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIERlcmJ5CisJICogRGF0YWJhc2UgZnJvbSBhbiBleHRlcm5hbCBKYXZhIFByb2dyYW1tLgorCSAqIDA4LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCByZWFkRGJJbmZvc190ZXN0KCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlTdHJpbmcKKwkJaW5zZXJ0U3RtdCA9ICIiOworCQorCS8vIENvbm5lY3QgdG8gRGVyYnkgZGF0YWJhc2U6CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCQorCQkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwkJdHJ5CisJCQl7CisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIAorICAgICAgICAgICAgCXNxbCA9ICJTRUxFQ1QgKiBGUk9NICIgKyBkYlRhYmxlOworICAgICAgICAgICAgUmVzdWx0U2V0IAorICAgICAgICAgICAgCXJlc3VsdCA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CisgCisgICAgICAgICAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHRhYmxlICclcyc6XG4iLCAgZnVuYywgZGJUYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQubmV4dCgpKSB7CisgICAgICAgICAgICAJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiJyVzJyA6ICclcycgOiAnJXMnIDogJyVzJyAuXG4iLCByZXN1bHQuZ2V0U3RyaW5nKDEpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygyKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMyksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDQpKTsKKyAgICAgICAgCQlpbnNlcnRTdG10ID0gaW5zZXJ0U3RtdCArICI8cD4iICsgcmVzdWx0LmdldFN0cmluZygxKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZygyKSArICIgOiAiICsKKyAgICAgICAgICAgICAgICAJCSAgICAgcmVzdWx0LmdldFN0cmluZygzKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZyg0KSArICI8L3A+IjsKKyAgICAgICAgICAgIAl9CisJCQl9CisJICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgICAgICAJeworCSAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBpbnNlcnRTdG10PSclcycgZmFpbGVkIS5cbiIsIGZ1bmMsIHN0bXQpOworICAgICAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgY29uLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nICclcyBmYWlsZWQhXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJdHJ5IHsKKwkJY29uLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkJCisJfSAvLyByZWFkRGJJbmZvc190ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogaW1wb3J0R2xlbW1MZW1hdGFfdGVzdAorCSAqIFRlc3QgVmVyc2lvbi4KKwkgKiAxMi4xMi4xOS9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QoU3RyaW5nIGZuKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdCI7CisJSW5wdXRTdHJlYW0gCisJCWluOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluMiA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQlyOworCQorCS8qCisJICogUmVhZCBMZW1tYXRhICsgSW5mbyBmcm9tIGZpbGU6IAorCSAqLworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCQorCXRyeSB7CisJCS8vaW4gPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSggbmV3IEZpbGVJbnB1dFN0cmVhbShmbikgKTsKKwkJaW4yID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlcihmbikpOworCQl3aGlsZSggKGxpbmUgPSBpbjIucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoID09IDMgKQorCQkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBJbXBvcnQ6IGxlbT0nJXMnIERlY29tcD0nJXMnIFdmPSclcycuXG4iLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1sxXSwgbGVtbWFJbmZvWzJdKTsKKwkJCWVsc2UKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogaW1wb3J0R2xlbW1MYW1hdGE6ICclcycgaGFzICVkIGNvbXBvbmVudHMhXG4iLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IG9wZW4gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJcmV0dXJuIDE7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKworCXRyeSB7CisJCWluMi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQorCS8qIENoZWNrIGNvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJICovIAorCXIgPSByZWFkRGJJbmZvc190ZXN0KCk7CisJaWYoIHIgIT0gMCApCisJCXJldHVybiByOworCQkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2UwLzEwMzdiNWU3NGEzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9lMC8xMDM3YjVlNzRhM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjUyY2JjCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9lMC8xMDM3YjVlNzRhM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpAQCAtMCwwICsxLDk3NSBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCisvKiAwLjEgOiAxNy4wNi4yMC9GQiAKKyAqIDAuMiA6IDI1LjEwLjIxL0ZCCisgKiAgICAgICBsb2dpbmcgb2YgdGhlIEFQSSBSZXF1ZXN0cy4KKyAqICAgICAgIGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorICogICAgICAgY29ycmVjdGluZyBjYWxsaW5nIG9mIGxlbW1hICsgcHJvcDEvcHJvcDIvc3BlYy4KKyAqICAgICAgIGhhbmRsaW5nIG9mIGxlbW1hdGEgd2l0aCAnw58nLgorICogCisgKiBHZW5lcmFsIGNvbW1lbnRzIHRvIHRoZSBlbmNvZGluZyBvZiBkZXJpdmF0aW9ucyBmcm9tIGxlbW1hIHRvIHdmcyBhbmQgaG93IHRoZXkgYXJlIGVuY29kZWQKKyAqIGluIHRoZSBEZXJieSBkYXRhYmFzZToKKyAqIAorICogR0xFTU0gZW5jb2Rpbmc6ICAKKyAqICAgXyBfIDogK0ZsZXggICAgICAgw5ZsZSAtPiDDlmwgICAgICAKKyAqICAgKyBfIDogK0NvbXAgICAgICAgw5ZsbGFtcGUgLT4gw5ZsIG9yIExhbXBlIChjb21wb3VuZCkuCisgKiAgIF8gKyA6ICtvdGhlciAgICAgIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuc2NodWggKG5vIGNvbXBvdW5kIGZvciAnVHVybnNjaHVoJywgb25seSBwcmVmaXgpLgorICogICArICsgOiArQ29tcCtvdGhlciBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybiArIFNjaHVoIChjb21wb3VuZCBmb3IgJ1NjaHVoJyArIFByZWZpeCkuCisgKiBDMiBsZW1tYXRpemF0aW9uIG9wdGlvbnM6CisgKiAgIEZsZXggIChpZGVudGljYWwgdG8gR2xlbW0pCisgKiAgIENvbXAgIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykKKyAqICAgT3RoZXIgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKS4KKyAqICAgU3BlYyAgKG9ubHkgQzI6IGluY2x1ZGVzIGFsbCB3ZnMgd2l0aCBoaXBoZW4gYW5kL29yIHNvbWUgbm9uLWFscGhhYmV0aWMgSVNPODg1OS0xIGNoYXJzKQorICogICAgICAgICBFLmcuIMOWbC1FeHBvcnRlLCAiTWFya2VuIi3DlmxlLgorICogRGVyYnkgRW5jb2Rpbmc6CisgKiAgcHJvcDEgCXByb3AyCXNwZWMgICAJbWVhbmluZyBpbiBDMjoKKyAqICAwCQkwCQktCQlGbGV4CisgKiAgMQkJMAkJLQkJQ29tcAorICogIDAJCTEJCS0JCU90aGVyIChwcmVmaXgpCisgKiAgMQkJMQkJLQkJQ29tcCArIE90aGVyCisgKiAgLQkJLQkJMAkJLVNwZWMKKyAqICAtCQktCQkxCQkrU3BlYworICogCisgKiBFeGFtcGxlczoKKyAqICZTY2h1aAkJCTogU2NodWgsIFNjaHVoZSwgLi4uIG9ubHkgZmxleGlvbnMKKyAqICZTY2h1aCtjb21wCQk6IFNjaHVoZSwgVHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzLgorICogJlNjaHVoK290aGVyCQk6IFNjaHVoZSwgQW50aXNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgcHJlZml4ZWQgd2ZzIChubyBjb21wb3VuZHMpLgorICogJlNjaHVoK2NvbXArb3RoZXI6IFNjaHVoZSwgQW50aXNjaHVoZSwgVHVybnNjaHVoZSwgQW50aXR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcyBhbmQgCisgKiAJCQkJCSAgcHJlZml4ZWQgc2luZ2xlIHdmcyAoQW50aXNjaHVoZSkgYW5kIHByZWZpeGVkIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtzcGVjCQk6ICJBbnRpIi1TY2h1aGUsIDY4Z2VyLVNjaHVoZS4uLiBtYXkgYmUgY29tYmluZWQgd2l0aCBldmVyeSBvcHRpb25zOiBhZGRzCisgKiAgICAgICAgICAgICAgICAgICAgd2ZzIHdpdGggaHlwaGVuIGFuZC9vciBub24tYWxwaGFiZXRpYyBjaGFycy4KKyAqIAorICogQ29udmVyc2lvbiBydWxlczoKKyAqIAorICogICZzY2hsaWXDn2VuIC0+IGludGVybmFsIHNlYXJjaCBmb3IgJ3NjaGxpZXNzZW4nLAorICogIGJlY2F1c2UgR2xlbW0gb3V0cHV0cyAnc3MnIGZvciAnw58nLgorICogIAorICogQ2hhcmFjdGVyIEVuY29kaW5nOgorICogCisgKiAtIFdoZW4gaW1wb3J0aW5nIHdmcyB0byB0aGUgRGVyYnkgRGF0YWJhc2Ugd2l0aCBkb0N1cmxHbGVtbVNlcnZpY2VzL2luZGV4TGVtbWF0YToKKyAqIAorICogICBJTlBVVDogd29yZGZvcm0gbGlzdCBpbiBbVVRGLThdIDogVVRGLTggaXMgdGhlbiBjb252ZXJ0ZWQgdG8gTGF0MSBmb3IgR2xlbW0sCisgKiAgICAgICAgICB0aGUgb3V0cHV0IG9mIEdsZW1tIFtMYXQxXSBpcyByZXR1cm5lZCB0byB0aGUgR2xlbW1TZXJ2aWNlcyB3aXRob3V0IHJlY29udmVyc2lvbgorICogICAgICAgICAgdG8gVVRGOCBhbmQgaW1wb3J0ZWQgaW50byBEZXJieSBEYXRhYmFzZSB1bmNoYW5nZWQuCisgKgkJCisgKi8KKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNC4xMS4yMSI7IAorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMiI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVQcm9wcwkJPSAiL1dFQi1JTkYvR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIjsKKwkKKwkvLyB0aGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgcmVhZCBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyAodGhlc2UgYXJlIHRoZSBkZWZhdWx0IHZhbHVlcyk6CisJcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggCQk9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCXByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQkJCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJQENvbnRleHQKKwlwcml2YXRlIFNlcnZsZXRDb250ZXh0IHNlcnZsZXRDb250ZXh0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZm91dAk9IG51bGw7CisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmZXJyCT0gbnVsbDsJCQorCQkKKwkvKiAKKyAJICogCisJICogLSBhZnRlciBsb2FkUHJvcGVydGllcywgc2V0cyB0aGUgY2xhc3MgdmFyaWFibGUgd2l0aCBsb2FkZWQgcHJvcGVydHkgdmFsdWVzLgorCSAqIAorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlHU19Xb3JraW5nUGF0aCAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiR1NfV29ya2luZ1BhdGgiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiKTsKKwlmbmFtZVdmcwkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVXZnMiLCAJICAgImdsX3dmc19pbi50eHQiKTsKKwlmbmFtZVdmcwkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lV2ZzOworCWZuYW1lT3V0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZU91dCIsIAkgICAiR2xlbW1TZXJ2aWNlcy5sb2ciKTsKKwlmbmFtZU91dAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lT3V0OworCWZuYW1lRXJyCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUVyciIsIAkgICAiR2xlbW1TZXJ2aWNlcy5lcnIiKTsKKwlmbmFtZUVycgkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lRXJyOworCWZuYW1lU2NyaXB0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVNjcmlwdCIsCSAgICJkb0dsZW1tIik7CisJZm5hbWVTY3JpcHQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVNjcmlwdDsKKwlmbmFtZUxlbWF0YQkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVMZW1hdGEiLCAgICAidG1wL2xlbTMiKTsKKwlmbmFtZUxlbWF0YQkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lTGVtYXRhOworCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyoKKwkgKiAgbG9nX1JlcXVlc3Q6CisJICogIAorCSAqICAtIHdyaXRlIGluZm8gYWJvdXQgQVBJIFJlcXVlc3QuCisJICogIFBhcmFtZXRlcnM6CisJICogIHJlcXVlc3RQYXRoCTogcGF0aCBvZiB3ZWJhcHAgYWRkcmVzc2VkIGJ5IHRoZSByZXF1ZXN0LgorCSAqICBmdW5jCQk6IG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHdoaWNoIGltcGxlbWVudHMgdGhlIHJlcXVlc3QuCisJICogIAorCSAqICAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBsb2dfUmVxdWVzdChTdHJpbmcgcmVxdWVzdFBhdGgsIFN0cmluZyBmdW5jKQorCQorCXsKKwkvLyB0cmFuc2Zvcm0gImRhdGVUdGltZSIgLT4gImRhdGUgdGltZSI6CisJCisJZm91dC5wcmludGYoIiMjI1xuIik7CisJZm91dC5wcmludGYoIiMjIyAlczogJXMgOiB2ZXJzPSclcycsIHZkYXRlPSclcycgcmVxdWVzdD0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdFBhdGgsIHZlcnNpb24sIHZlcnNpb25EYXRlLCAKKwkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCX0gLy8gbG9nX1JlcXVlc3QKKwkJCisJLyogZm9ybWF0RGJOYW1lCisJICogCisJICogLSBnZXRzIG5hbWUgb2YgRGF0YWJhc2UgdXNlZCBieSBEZXJieSBmcm9tIHByb3BzIAorCSAqICAgYW5kIGZvcm1hdCBpdCB0byBIVE1MLgorCSAqICAKKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgU3RyaW5nIGZvcm1hdERiTmFtZShQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlTdHJpbmcKKwkJZGJOYW1lOworCVN0cmluZworCQlkYlBhdGggPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlpbnQKKwkJaiA9IGRiUGF0aC5sYXN0SW5kZXhPZignLycpOworCQorCWlmKCBqID4gMCApCisJCWRiTmFtZSA9IGRiUGF0aC5zdWJzdHJpbmcoaisxKTsKKwllbHNlCisJCWRiTmFtZSA9IGRiUGF0aDsKKwkKKwlyZXR1cm4gZGJOYW1lOyAvLyAiPHA+PGI+RGF0YWJhc2U6ICIgKyBkYk5hbWUgKyAiPC9iPjwvcD5cbiI7CisJfSAvLyBmb3JtYXREYk5hbWUKKworCS8qCisJICogY2xvc2VMb2dTdHJlYW1zOgorCSAqIAorCSAqIC0gY2xvc2UgdGhlIGZvdXQvZmVyciBsb2cgc3RyZWFtcy4KKwkgKiAKKwkgKiAyNi4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBjbG9zZUxvZ1N0cmVhbXMoKQorCQorCXsKKwlpZiggZm91dCAhPSBudWxsKQorCQlmb3V0LmNsb3NlKCk7CisJZm91dCA9IG51bGw7CisJCisJaWYoIGZlcnIgIT0gbnVsbCApCisJCWZlcnIuY2xvc2UoKTsKKwlmZXJyID0gbnVsbDsKKwl9IC8vIGNsb3NlTG9nU3RyZWFtcworCQorCS8qIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisJICogCisJICogLSBsb2FkIEdsZW1tU2VydmljZXMucHJvcGVydGllcywgc2V0cyBHbGVtbVNlcnZpY2VzIGNvbnN0YW50cworCSAqICAgYW5kIGxvZ3MgdGhlIHJlcXVlc3QuCisJICogLSBsb2FkIHByb3BlcnRpZXMgYW5kIHNldCBjb25zdGFudHMgYmVmb3JlIGxvZ2dpbmcgYW55dGhpbmcsIGJlY2F1c2UKKwkgKiAgIGxvZ2dpbmcgd2lsbCBiZSBkb25lIGludG8gdGhlIGxhc3Qgc3Rkb3V0L3N0ZGVyciBvcGVuZWQgaW4gZ2xhc3NmaXNoJ3MgSlZNLAorCSAqICAgZS5nLiBpbiB0aGUgbG9nIG9mIGFub3RoZXIgU2VydmljZS4KKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgUHJvcGVydGllcyBpbml0X2FuZF9sb2dfUmVxdWVzdChTdHJpbmcgZnVuYywgU3RyaW5nIHJlcXVlc3RQYXRoKQorCQorCXsKKwlTdHJpbmcKKwkJcmVhbFBhdGggPSBzZXJ2bGV0Q29udGV4dC5nZXRSZWFsUGF0aChmbmFtZVByb3BzKTsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKGlmIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlQcm9wZXJ0aWVzCisJCXByb3BzID0gVXRpbHMubG9hZFByb3BlcnRpZXMoc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSwgZm5hbWVQcm9wcywgcmVhbFBhdGgsIGZhbHNlKTsKKwkKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gZm91dCBhbmQgZmVyciBhcyByZXBsYWNlbWVudCBmb3Igc3Rkb3V0L3N0ZGVyciBmb3IgdXNlIGluIEdsZW1tU2VydmljZXMuCisJLy8gZG8gbm90IHVzZSBvciByZWRpcmVjdCBTeXN0ZW0ub3V0IGFuZCBTeXN0ZW0uZXJyLCBhcyB0aGV5IHdpbGwgYmUgcmVkaXJlY3RlZAorCS8vIGJ5IG90aGVyIFNlcnZpY2VzIGluIHRoZSBzYW1lIGdsYXNzZmlzaCBKVk0sIGUuZy4gYnkgdGhlIFdmb3JtU2VydmljZXMuCisJZm91dCA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZU91dCk7CisJZmVyciA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZUVycik7CisJCisJLy9VdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQorCWxvZ19SZXF1ZXN0KHJlcXVlc3RQYXRoLCBmdW5jKTsKKwkKKwlyZXR1cm4gcHJvcHM7CisJfSAvLyBpbml0X2FuZF9sb2dfUmVxdWVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCVN0cmluZworCQlzdGF0dXM7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvc3RhdHVzLyIpOworCQorCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCQorCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5wcm9wZXJ0aWVzPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+ZGF0YWJhc2U8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSwKKwkJCQkJCQlzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpID09IG51bGwgPyAibm90IGZvdW5kIiA6CisJCQkJCQkJCXByb3BzLmlzRW1wdHkoKSA/ICJlbXB0eSIgOiAibG9hZGVkIiwKKwkJCQkJCQlmb3JtYXREYk5hbWUocHJvcHMpCisJCQkJCQkJKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIAorCSAqIGRvUE9TVF9pbXBvcnRMZW1tYURhdGE6CisJICogCisJICogUE9TVDogL2luZGV4L2FkZC97ZGF0YWJhc2VuYW1lfTogdGV4dC9wbGFpbgorCSAqIAorCSAqIFBhcmFtZXRlcnM6CisJICogbGlzdAkJIDogdGhlIGxpc3Qgb2Ygd2ZzIHNlbnQgaW4gdGhlIGJvZHkgb2YgdGhlIFBPU1QgcmVxdWVzdC4KKwkgKiBkYnBhdGgJIDogdGhlIGxvY2F0aW9uIG9mIHRoZSBkYXRhYmFzZSB3aGVyZSB0aGUgbGVtbWErd2ZzIGFyZSB0byBiZSBzdG9yZWQuCisJICogTm90ZXMgICAgIDoKKwkgKiAtIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlIGxvY2F0ZWQgYXQgJ2RhdGFiYXNlbmFtZScuCisJICogLSBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZCBpbnRvIGEgRGVyYnkgZGF0YWJhc2UuCisJICogSW5wdXQJIDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICogMDQuMTEuMjEvRkIKKwkgKiAtIHN1Ym1pdHRlZCBkYXRhYmFzZSBwYXRoLgorCSAqLworCQorCUBQYXRoKCJhZGQve2RhdGFiYXNlcGF0aH0iKSAKKwlAUE9TVCAKKwlAQ29uc3VtZXMoInRleHQvcGxhaW4iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCQkJCQkJCSgKKwkJCQkJCQlTdHJpbmcgCQkJCQkJCQlsaXN0LAorCQkJCQkJCUBQYXRoUGFyYW0odmFsdWU9ImRhdGFiYXNlcGF0aCIpIAlmaW5hbCBTdHJpbmcgZGJwYXRoCisJCQkJCQkJKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvUE9TVF9pbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIGFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJCisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2FkZC8iKTsKKwkKKwlmb3V0LnByaW50ZigiSW5mbyA6ICVzOiBkYXRhYmFzZSBwYXRoID0nJXMnLlxuIiwgZnVuYywgZGJwYXRoKTsKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBwb3N0ZWQgbGlzdCA9ICclcycuXG4iLCBmdW5jLCBsaXN0KTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBmb3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKGZlcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMsIGZvdXQsIGZlcnIpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNmw7xocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSwgcHJvcHMsIGRicGF0aCk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJCisJfSAvLyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisKKwkvKiBkb0dFVF92aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzID0gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby8iKTsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCWZpbmFsIFN0cmluZworCQlkYk5hbWUgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5kYXRhYmFzZTwvYj46ICVzPC9wPiIsIGZvcm1hdERiTmFtZShwcm9wcykpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBkYk5hbWUgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIGRvR0VUX3ZpZXdEQkluZm8KKworCisJLyogZG9HRVRfdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+dmVyc2lvbiAiICsgdmVyc2lvbiArICIgdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgcmVxdWVzdCA9ICciICsgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSArICInPC9pPjwvaDQ+XG4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMTo8L2I+IChDMiBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX08L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT57bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKTwvY29kZT48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsPC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+w5ZsP29wdHM9ZmxleCtjb21wK290aGVyK3NwZWM8L2NvZGU+PC9wPiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAyOjwvYj4gKGludGVybmFsIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfT9wcm9wMT1bMDEyXSZhbXA7cHJvcDI9WzAxMl0mYW1wO3NwZWM9WzAxMl08L2NvZGU+ICh3aGVyZSBlYWNoIHByb3AxLCBwcm9wMiwgc3BlYyBpcyBvcHRpb25hbCkuPC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbD9wcm9wMT0wJmFtcDtwcm9wMj0xJmFtcDtzcGVjPTI8L2NvZGU+PC9wPiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Iik7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JyVkJyBwcm9wMj0nJWQnIHNwZWM9JyVkJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCS8qIAorCWZvcihpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwkJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwkJfQkKKwkgKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggbGVtbWFJbmZvLm9wdHNTZXR0aW5nID09IExlbW1hSW5mby5PUFRTX1NFVFRJTkdfQzIgKSAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZywgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxLHByb3AyLHNwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpbnQKKwkJbldmcyA9IGxlbW1hSW5mby5uV2ZzOworCQorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCS8vIGxvZyBvdXRjb21lOgorCWlmKCBuV2ZzIDwgMCApCisJCWZvdXQucHJpbnRmKCJFcnJvcjogJXM6IHJldHVybmluZyAwIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYyk7CisJZWxzZQorCQlmb3V0LnByaW50ZigiRGVidWcuICVzOiByZXR1cm5pbmcgJWQgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jLCBuV2ZzKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogbm90ZToKKwkgKiAtIGlmIEJyb3dzZXIgcmVxdWVzdDogSFRUUFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICd0ZXh0L2h0bWwsLi4ueG1sLi4uJworCSAqIC0gaWYgV2Zvcm1TZXJ2aWNlcyByZXF1ZXN0OiBIdHRwU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ2FwcGxpY2F0aW9uL2pzb24nLgorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICogCisJICogLSBzdWJtaXR0ZWQgVVJMLCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWEsIGlzIGludGVycHJldGVkIGJ5IGdsYXNzZmlzaCBhcworCSAqICAgYmVpbmcgSVNPLTg4NTktMSBlbmNvZGVkLiBXaGVuIHRoZSByZXF1ZXN0IGlzIFVURi04IGVuY29kZWQsIFVtbGF1dHMgYW5kCisJICogICAnw58nIGFyZSBtaXMtaW50ZXJwcmVkZWQsIGxlYWRpbmcgdG8gYW4gZXJyb25lcm91cyByZXF1ZXN0IHRvIHRoZSBEZXJieQorCSAqICAgZGF0YWJhc2UuCisJICogLSBSZXF1ZXN0ZWQgbGVtbWEgJ2xlbW1hJyBoYXMgdG8gYmUgdHJhbnNmb3JtZWQgdG8gVVRGLTggZmlyc3QuCisJICogLSBub3RlOiBldmVuIHdoZW4gc3VibWl0dGluZyB0aGUgR0VUIHJlcXVlc3QgYnkgc3BlY2lmeWluZyAnY2hhcmVuY29kZT1VVEYtOCcsCisJICogICBnbGFzc2Zpc2ggZG9lcyBub3QgY29udmVydCBpdCBhdXRvbWF0aWNhbGx5IGFzIGV4cGVjdGVkLgorCSAqICAgCisJICogIDIyLjEwLjIxL0ZCCisJICogCisJICogLSBpZiBhY2NlcHQ9YXBwbGljYXRpb24vanNvbiByZXR1cm4gVVRGLTggKFdmb3JtU2VydmljZXMpLgorCSAqIC0gZWxzZSBpZiBhY2NlcHQ9dGV4dC9odG1sIGRvIG5vdCB0cmFuc2Zvcm0gY2hhcmFjdGVyIGVuY29kaW5nIChCcm93c2VyKS4KKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQENvbnN1bWVzKCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2h0bWwiKQorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm87CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJZmluYWwgYm9vbGVhbgorCQliRW5jb2RlTGVtbWEgPSBmYWxzZTsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsKKwkKKwkvKiB0ZXN0OgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlpZiggYkVuY29kZUxlbW1hICkKKwkJeworCQkvLyB3aGVuIGFjY2VwdGluZyBKU09OLCB1cmwgaGFzIHRvIGJlIGNvbnZlcnRlZCB0byBVVEYtOCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hOgorCQl0cnkgeworCQkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhuZXcgU3RyaW5nKGxlbW1hLmdldEJ5dGVzKCJJU08tODg1OS0xIiksICJ1dGYtOCIpKTsKKwkJCX0gCisJCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCUxlbW1hUmVzcG9uc2UKKwkJCQlsZW1yZXNwID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtcmVzcCkuYnVpbGQoKTsKKwkJCX0KKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbVVRGLThdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisJZWxzZQorCQl7CisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFt1bmNoYW5nZWRdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisKKwkvKiBkb2VzIG5vdCBoZWxwOgorCSBTdHJpbmcKKwkgCXJlcXVlc3RDaGFyRW5jb2RpbmcgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0Q2hhcmFjdGVyRW5jb2RpbmcoKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlcXVlc3QgY2hhcmFjdGVyIGVuY29kaW5nID0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdENoYXJFbmNvZGluZyk7CisJKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJeworCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCS8vcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQl9CisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOwkKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJLyoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3Rlc3QvaW5mby8iKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vZm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQlmb3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZTEvNjA1YmE2MTY0ZDNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2UxLzYwNWJhNjE2NGQzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NzJhNzIKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2UxLzYwNWJhNjE2NGQzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsOTc0IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKKy8qIDAuMSA6IDE3LjA2LjIwL0ZCIAorICogMC4yIDogMjUuMTAuMjEvRkIKKyAqICAgICAgIGxvZ2luZyBvZiB0aGUgQVBJIFJlcXVlc3RzLgorICogICAgICAgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisgKiAgICAgICBjb3JyZWN0aW5nIGNhbGxpbmcgb2YgbGVtbWEgKyBwcm9wMS9wcm9wMi9zcGVjLgorICogICAgICAgaGFuZGxpbmcgb2YgbGVtbWF0YSB3aXRoICfDnycuCisgKiAKKyAqIEdlbmVyYWwgY29tbWVudHMgdG8gdGhlIGVuY29kaW5nIG9mIGRlcml2YXRpb25zIGZyb20gbGVtbWEgdG8gd2ZzIGFuZCBob3cgdGhleSBhcmUgZW5jb2RlZAorICogaW4gdGhlIERlcmJ5IGRhdGFiYXNlOgorICogCisgKiBHTEVNTSBlbmNvZGluZzogIAorICogICBfIF8gOiArRmxleCAgICAgICDDlmxlIC0+IMOWbCAgICAgIAorICogICArIF8gOiArQ29tcCAgICAgICDDlmxsYW1wZSAtPiDDlmwgb3IgTGFtcGUgKGNvbXBvdW5kKS4KKyAqICAgXyArIDogK290aGVyICAgICAgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm5zY2h1aCAobm8gY29tcG91bmQgZm9yICdUdXJuc2NodWgnLCBvbmx5IHByZWZpeCkuCisgKiAgICsgKyA6ICtDb21wK290aGVyIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuICsgU2NodWggKGNvbXBvdW5kIGZvciAnU2NodWgnICsgUHJlZml4KS4KKyAqIEMyIGxlbW1hdGl6YXRpb24gb3B0aW9uczoKKyAqICAgRmxleCAgKGlkZW50aWNhbCB0byBHbGVtbSkKKyAqICAgQ29tcCAgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKQorICogICBPdGhlciAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpLgorICogICBTcGVjICAob25seSBDMjogaW5jbHVkZXMgYWxsIHdmcyB3aXRoIGhpcGhlbiBhbmQvb3Igc29tZSBub24tYWxwaGFiZXRpYyBJU084ODU5LTEgY2hhcnMpCisgKiAgICAgICAgIEUuZy4gw5ZsLUV4cG9ydGUsICJNYXJrZW4iLcOWbGUuCisgKiBEZXJieSBFbmNvZGluZzoKKyAqICBwcm9wMSAJcHJvcDIJc3BlYyAgIAltZWFuaW5nIGluIEMyOgorICogIDAJCTAJCS0JCUZsZXgKKyAqICAxCQkwCQktCQlDb21wCisgKiAgMAkJMQkJLQkJT3RoZXIgKHByZWZpeCkKKyAqICAxCQkxCQktCQlDb21wICsgT3RoZXIKKyAqICAtCQktCQkwCQktU3BlYworICogIC0JCS0JCTEJCStTcGVjCisgKiAKKyAqIEV4YW1wbGVzOgorICogJlNjaHVoCQkJOiBTY2h1aCwgU2NodWhlLCAuLi4gb25seSBmbGV4aW9ucworICogJlNjaHVoK2NvbXAJCTogU2NodWhlLCBUdXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMuCisgKiAmU2NodWgrb3RoZXIJCTogU2NodWhlLCBBbnRpc2NodWhlLi4uIGZsZXhpb25zIGFuZCBwcmVmaXhlZCB3ZnMgKG5vIGNvbXBvdW5kcykuCisgKiAmU2NodWgrY29tcCtvdGhlcjogU2NodWhlLCBBbnRpc2NodWhlLCBUdXJuc2NodWhlLCBBbnRpdHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzIGFuZCAKKyAqIAkJCQkJICBwcmVmaXhlZCBzaW5nbGUgd2ZzIChBbnRpc2NodWhlKSBhbmQgcHJlZml4ZWQgY29tcG91bmRzLgorICogJlNjaHVoK3NwZWMJCTogIkFudGkiLVNjaHVoZSwgNjhnZXItU2NodWhlLi4uIG1heSBiZSBjb21iaW5lZCB3aXRoIGV2ZXJ5IG9wdGlvbnM6IGFkZHMKKyAqICAgICAgICAgICAgICAgICAgICB3ZnMgd2l0aCBoeXBoZW4gYW5kL29yIG5vbi1hbHBoYWJldGljIGNoYXJzLgorICogCisgKiBDb252ZXJzaW9uIHJ1bGVzOgorICogCisgKiAgJnNjaGxpZcOfZW4gLT4gaW50ZXJuYWwgc2VhcmNoIGZvciAnc2NobGllc3NlbicsCisgKiAgYmVjYXVzZSBHbGVtbSBvdXRwdXRzICdzcycgZm9yICfDnycuCisgKiAgCisgKiBDaGFyYWN0ZXIgRW5jb2Rpbmc6CisgKiAKKyAqIC0gV2hlbiBpbXBvcnRpbmcgd2ZzIHRvIHRoZSBEZXJieSBEYXRhYmFzZSB3aXRoIGRvQ3VybEdsZW1tU2VydmljZXMvaW5kZXhMZW1tYXRhOgorICogCisgKiAgIElOUFVUOiB3b3JkZm9ybSBsaXN0IGluIFtVVEYtOF0gOiBVVEYtOCBpcyB0aGVuIGNvbnZlcnRlZCB0byBMYXQxIGZvciBHbGVtbSwKKyAqICAgICAgICAgIHRoZSBvdXRwdXQgb2YgR2xlbW0gW0xhdDFdIGlzIHJldHVybmVkIHRvIHRoZSBHbGVtbVNlcnZpY2VzIHdpdGhvdXQgcmVjb252ZXJzaW9uCisgKiAgICAgICAgICB0byBVVEY4IGFuZCBpbXBvcnRlZCBpbnRvIERlcmJ5IERhdGFiYXNlIHVuY2hhbmdlZC4KKyAqCQkKKyAqLworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA0LjExLjIxIjsgCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4yIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVByb3BzCQk9ICIvV0VCLUlORi9HbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiOworCQorCS8vIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSByZWFkIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzICh0aGVzZSBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzKToKKwlwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCAJCT0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCXByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCQkJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwlAQ29udGV4dAorCXByaXZhdGUgU2VydmxldENvbnRleHQgc2VydmxldENvbnRleHQ7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmb3V0CT0gbnVsbDsKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZlcnIJPSBudWxsOwkJCisJCQorCS8qIAorIAkgKiAKKwkgKiAtIGFmdGVyIGxvYWRQcm9wZXJ0aWVzLCBzZXRzIHRoZSBjbGFzcyB2YXJpYWJsZSB3aXRoIGxvYWRlZCBwcm9wZXJ0eSB2YWx1ZXMuCisJICogCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCUdTX1dvcmtpbmdQYXRoIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJHU19Xb3JraW5nUGF0aCIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyIpOworCWZuYW1lV2ZzCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVdmcyIsIAkgICAiZ2xfd2ZzX2luLnR4dCIpOworCWZuYW1lV2ZzCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVXZnM7CisJZm5hbWVPdXQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lT3V0IiwgCSAgICJHbGVtbVNlcnZpY2VzLmxvZyIpOworCWZuYW1lT3V0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVPdXQ7CisJZm5hbWVFcnIJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lRXJyIiwgCSAgICJHbGVtbVNlcnZpY2VzLmVyciIpOworCWZuYW1lRXJyCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVFcnI7CisJZm5hbWVTY3JpcHQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lU2NyaXB0IiwJICAgImRvR2xlbW0iKTsKKwlmbmFtZVNjcmlwdAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lU2NyaXB0OworCWZuYW1lTGVtYXRhCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUxlbWF0YSIsICAgICJ0bXAvbGVtMyIpOworCWZuYW1lTGVtYXRhCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVMZW1hdGE7CisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKgorCSAqICBsb2dfUmVxdWVzdDoKKwkgKiAgCisJICogIC0gd3JpdGUgaW5mbyBhYm91dCBBUEkgUmVxdWVzdC4KKwkgKiAgUGFyYW1ldGVyczoKKwkgKiAgcmVxdWVzdFBhdGgJOiBwYXRoIG9mIHdlYmFwcCBhZGRyZXNzZWQgYnkgdGhlIHJlcXVlc3QuCisJICogIGZ1bmMJCTogbmFtZSBvZiB0aGUgZnVuY3Rpb24gd2hpY2ggaW1wbGVtZW50cyB0aGUgcmVxdWVzdC4KKwkgKiAgCisJICogIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGxvZ19SZXF1ZXN0KFN0cmluZyByZXF1ZXN0UGF0aCwgU3RyaW5nIGZ1bmMpCisJCisJeworCS8vIHRyYW5zZm9ybSAiZGF0ZVR0aW1lIiAtPiAiZGF0ZSB0aW1lIjoKKwkKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwlmb3V0LnByaW50ZigiIyMjICVzOiAlcyA6IHZlcnM9JyVzJywgdmRhdGU9JyVzJyByZXF1ZXN0PSclcycuXG4iLCBmdW5jLCByZXF1ZXN0UGF0aCwgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIAorCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisJZm91dC5wcmludGYoIiMjI1xuIik7CisJfSAvLyBsb2dfUmVxdWVzdAorCQkKKwkvKiBmb3JtYXREYk5hbWUKKwkgKiAKKwkgKiAtIGdldHMgbmFtZSBvZiBEYXRhYmFzZSB1c2VkIGJ5IERlcmJ5IGZyb20gcHJvcHMgCisJICogICBhbmQgZm9ybWF0IGl0IHRvIEhUTUwuCisJICogIAorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBTdHJpbmcgZm9ybWF0RGJOYW1lKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCVN0cmluZworCQlkYk5hbWU7CisJU3RyaW5nCisJCWRiUGF0aCA9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCWludAorCQlqID0gZGJQYXRoLmxhc3RJbmRleE9mKCcvJyk7CisJCisJaWYoIGogPiAwICkKKwkJZGJOYW1lID0gZGJQYXRoLnN1YnN0cmluZyhqKzEpOworCWVsc2UKKwkJZGJOYW1lID0gZGJQYXRoOworCQorCXJldHVybiBkYk5hbWU7IC8vICI8cD48Yj5EYXRhYmFzZTogIiArIGRiTmFtZSArICI8L2I+PC9wPlxuIjsKKwl9IC8vIGZvcm1hdERiTmFtZQorCisJLyoKKwkgKiBjbG9zZUxvZ1N0cmVhbXM6CisJICogCisJICogLSBjbG9zZSB0aGUgZm91dC9mZXJyIGxvZyBzdHJlYW1zLgorCSAqIAorCSAqIDI2LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGNsb3NlTG9nU3RyZWFtcygpCisJCisJeworCWlmKCBmb3V0ICE9IG51bGwpCisJCWZvdXQuY2xvc2UoKTsKKwlmb3V0ID0gbnVsbDsKKwkKKwlpZiggZmVyciAhPSBudWxsICkKKwkJZmVyci5jbG9zZSgpOworCWZlcnIgPSBudWxsOworCX0gLy8gY2xvc2VMb2dTdHJlYW1zCisJCisJLyogaW5pdF9hbmRfbG9nX1JlcXVlc3QKKwkgKiAKKwkgKiAtIGxvYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLCBzZXRzIEdsZW1tU2VydmljZXMgY29uc3RhbnRzCisJICogICBhbmQgbG9ncyB0aGUgcmVxdWVzdC4KKwkgKiAtIGxvYWQgcHJvcGVydGllcyBhbmQgc2V0IGNvbnN0YW50cyBiZWZvcmUgbG9nZ2luZyBhbnl0aGluZywgYmVjYXVzZQorCSAqICAgbG9nZ2luZyB3aWxsIGJlIGRvbmUgaW50byB0aGUgbGFzdCBzdGRvdXQvc3RkZXJyIG9wZW5lZCBpbiBnbGFzc2Zpc2gncyBKVk0sCisJICogICBlLmcuIGluIHRoZSBsb2cgb2YgYW5vdGhlciBTZXJ2aWNlLgorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBQcm9wZXJ0aWVzIGluaXRfYW5kX2xvZ19SZXF1ZXN0KFN0cmluZyBmdW5jLCBTdHJpbmcgcmVxdWVzdFBhdGgpCisJCisJeworCVN0cmluZworCQlyZWFsUGF0aCA9IHNlcnZsZXRDb250ZXh0LmdldFJlYWxQYXRoKGZuYW1lUHJvcHMpOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAoaWYgbGFzdCBwYXJhbSA9IHRydWUpOgorCVByb3BlcnRpZXMKKwkJcHJvcHMgPSBVdGlscy5sb2FkUHJvcGVydGllcyhzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpLCBmbmFtZVByb3BzLCByZWFsUGF0aCwgZmFsc2UpOworCQorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBmb3V0IGFuZCBmZXJyIGFzIHJlcGxhY2VtZW50IGZvciBzdGRvdXQvc3RkZXJyIGZvciB1c2UgaW4gR2xlbW1TZXJ2aWNlcy4KKwkvLyBkbyBub3QgdXNlIG9yIHJlZGlyZWN0IFN5c3RlbS5vdXQgYW5kIFN5c3RlbS5lcnIsIGFzIHRoZXkgd2lsbCBiZSByZWRpcmVjdGVkCisJLy8gYnkgb3RoZXIgU2VydmljZXMgaW4gdGhlIHNhbWUgZ2xhc3NmaXNoIEpWTSwgZS5nLiBieSB0aGUgV2Zvcm1TZXJ2aWNlcy4KKwlmb3V0ID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lT3V0KTsKKwlmZXJyID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lRXJyKTsKKwkKKwkvL1V0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCisJbG9nX1JlcXVlc3QocmVxdWVzdFBhdGgsIGZ1bmMpOworCQorCXJldHVybiBwcm9wczsKKwl9IC8vIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJU3RyaW5nCisJCXN0YXR1czsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9zdGF0dXMvIik7CisJCisJLy8gaHR0cFNlcnZsZXRSZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKGVudik7CisJCisJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnByb3BlcnRpZXM8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5kYXRhYmFzZTwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpLAorCQkJCQkJCXNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcykgPT0gbnVsbCA/ICJub3QgZm91bmQiIDoKKwkJCQkJCQkJcHJvcHMuaXNFbXB0eSgpID8gImVtcHR5IiA6ICJsb2FkZWQiLAorCQkJCQkJCWZvcm1hdERiTmFtZShwcm9wcykKKwkJCQkJCQkpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCWNsb3NlTG9nU3RyZWFtcygpOworCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogCisJICogZG9QT1NUX2ltcG9ydExlbW1hRGF0YToKKwkgKiAKKwkgKiBQT1NUOiAvaW5kZXgvYWRkL3tkYXRhYmFzZW5hbWV9OiB0ZXh0L3BsYWluCisJICogCisJICogUGFyYW1ldGVyczoKKwkgKiBsaXN0CQkgOiB0aGUgbGlzdCBvZiB3ZnMgc2VudCBpbiB0aGUgYm9keSBvZiB0aGUgUE9TVCByZXF1ZXN0LgorCSAqIGRicGF0aAkgOiB0aGUgbG9jYXRpb24gb2YgdGhlIGRhdGFiYXNlIHdoZXJlIHRoZSBsZW1tYSt3ZnMgYXJlIHRvIGJlIHN0b3JlZC4KKwkgKiBOb3RlcyAgICAgOgorCSAqIC0gYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UgbG9jYXRlZCBhdCAnZGF0YWJhc2VuYW1lJy4KKwkgKiAtIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkIGludG8gYSBEZXJieSBkYXRhYmFzZS4KKwkgKiBJbnB1dAkgOiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKiAwNC4xMS4yMS9GQgorCSAqIC0gc3VibWl0dGVkIGRhdGFiYXNlIHBhdGguCisJICovCisJCisJQFBhdGgoImFkZC97ZGF0YWJhc2VwYXRofSIpIAorCUBQT1NUIAorCUBDb25zdW1lcygidGV4dC9wbGFpbiIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisJCQkJCQkJKAorCQkJCQkJCVN0cmluZyAJCQkJCQkJCWxpc3QsCisJCQkJCQkJQFBhdGhQYXJhbSh2YWx1ZT0iZGF0YWJhc2VwYXRoIikgCWZpbmFsIFN0cmluZyBkYnBhdGgKKwkJCQkJCQkpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9QT1NUX2ltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gYXJMaXN0ID0gbGlzdC5zcGxpdCgiXG4iKTsKKwkKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IGZzLmdldFBhdGgoZm5hbWVXZnMpOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvYWRkL3tkYnBhdGh9Iik7CisJCisJZm91dC5wcmludGYoIkluZm8gOiAlczogc2VsZWN0ZWQgZGF0YWJhc2UgcGF0aCA9ICclcycuXG4iLCBmdW5jLCBkYnBhdGgpOworCQorCS8vIFdyaXRlIHN1Ym1pdHRlZCBsaXN0IG9mIHdvcmRmb3JtcyB0byBmaWxlOgorCXRyeQorCQl7CisJCW9zID0gRmlsZXMubmV3T3V0cHV0U3RyZWFtKHApOworCQlvcy53cml0ZShsaXN0LmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSkpOworCSAgICBvcy5jbG9zZSgpOworCSAgICBiRG9uZSA9IHRydWU7CisJICAgIGZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGZpbGUgJyVzJyBiZXNjaHJpZWJlbi5cbiIsIGZ1bmMsIGZuYW1lV2ZzKTsKKwkgICAgfQorCWNhdGNoKElPRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoZmVycik7CisJCX0KKyAgICAKKwlpZiggYkRvbmUgKQorCQltc2cgPSAiPHA+TGlzdCB3cml0dGVuIHRvIGZpbGU6ICIgKyBwLnRvU3RyaW5nKCkgKyAiPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+PGI+RmlsZSBFcnJvcjogPC9iPiBjYW5ub3Qgd3JpdGUgdG8gIiArIHAudG9TdHJpbmcoKSArICIhPC9wPiI7CisJCisJLyoKKwkgKiAgZXhlY3V0ZSBHbGVtbSBzaGVsbCBzY3JpcHQ6CisJICovCisJU3RyaW5nCisJCW1zZ0dsZW1tU2NyaXB0LCBtc2dJbXBvcnQ7CisJaW50IAorCQlyID0gVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0KGZuYW1lU2NyaXB0LCBmbmFtZVdmcywgZm91dCwgZmVycik7CisJCisJaWYoIHIgPT0gMCApCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEF1c2bDvGhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhLCBwcm9wcywgZGJwYXRoKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBpbXBvcnRHbGVtbUxlbW1hdGEgcmV0dXJucyByPSVkLlxuIiwgZnVuYywgcik7CisJaWYoIG5FcnJvcnMgPT0gMCApCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiAiICsgbkVycm9ycyArICIgZXJyb3JzITwvcD4iOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGVuZGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJLy8gUmV0dXJuIEluZm9zOgorCXJldHVybiAKKwkJCSAgICI8aHRtbD4iICsKKwkJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwkKKwl9IC8vIGRvUE9TVF9pbXBvcnRMZW1tYURhdGEKKworCS8qIGRvR0VUX3ZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnMgPSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvLyIpOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJZmluYWwgU3RyaW5nCisJCWRiTmFtZSA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPmRhdGFiYXNlPC9iPjogJXM8L3A+IiwgZm9ybWF0RGJOYW1lKHByb3BzKSk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIGRiTmFtZSArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gZG9HRVRfdmlld0RCSW5mbworCisKKwkvKiBkb0dFVF92aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND52ZXJzaW9uICIgKyB2ZXJzaW9uICsgIiB2b20gIiArIHZlcnNpb25EYXRlICsgIiByZXF1ZXN0ID0gJyIgKyBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpICsgIic8L2k+PC9oND5cbiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAxOjwvYj4gKEMyIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfTwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPntsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpPC9jb2RlPjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw8L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT7Dlmw/b3B0cz1mbGV4K2NvbXArb3RoZXIrc3BlYzwvY29kZT48L3A+IiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDI6PC9iPiAoaW50ZXJuYWwgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9P3Byb3AxPVswMTJdJmFtcDtwcm9wMj1bMDEyXSZhbXA7c3BlYz1bMDEyXTwvY29kZT4gKHdoZXJlIGVhY2ggcHJvcDEsIHByb3AyLCBzcGVjIGlzIG9wdGlvbmFsKS48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsP3Byb3AxPTAmYW1wO3Byb3AyPTEmYW1wO3NwZWM9MjwvY29kZT48L3A+IjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0iKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0nJWQnIHByb3AyPSclZCcgc3BlYz0nJWQnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJLyogCisJZm9yKGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCQl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCQl9CQorCSAqLworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCBsZW1tYUluZm8ub3B0c1NldHRpbmcgPT0gTGVtbWFJbmZvLk9QVFNfU0VUVElOR19DMiApIAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEscHJvcDIsc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZyk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWludAorCQluV2ZzID0gbGVtbWFJbmZvLm5XZnM7CisJCisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJLy8gbG9nIG91dGNvbWU6CisJaWYoIG5XZnMgPCAwICkKKwkJZm91dC5wcmludGYoIkVycm9yOiAlczogcmV0dXJuaW5nIDAgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jKTsKKwllbHNlCisJCWZvdXQucHJpbnRmKCJEZWJ1Zy4gJXM6IHJldHVybmluZyAlZCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMsIG5XZnMpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiBub3RlOgorCSAqIC0gaWYgQnJvd3NlciByZXF1ZXN0OiBIVFRQU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ3RleHQvaHRtbCwuLi54bWwuLi4nCisJICogLSBpZiBXZm9ybVNlcnZpY2VzIHJlcXVlc3Q6IEh0dHBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAnYXBwbGljYXRpb24vanNvbicuCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKiAKKwkgKiAtIHN1Ym1pdHRlZCBVUkwsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYSwgaXMgaW50ZXJwcmV0ZWQgYnkgZ2xhc3NmaXNoIGFzCisJICogICBiZWluZyBJU08tODg1OS0xIGVuY29kZWQuIFdoZW4gdGhlIHJlcXVlc3QgaXMgVVRGLTggZW5jb2RlZCwgVW1sYXV0cyBhbmQKKwkgKiAgICfDnycgYXJlIG1pcy1pbnRlcnByZWRlZCwgbGVhZGluZyB0byBhbiBlcnJvbmVyb3VzIHJlcXVlc3QgdG8gdGhlIERlcmJ5CisJICogICBkYXRhYmFzZS4KKwkgKiAtIFJlcXVlc3RlZCBsZW1tYSAnbGVtbWEnIGhhcyB0byBiZSB0cmFuc2Zvcm1lZCB0byBVVEYtOCBmaXJzdC4KKwkgKiAtIG5vdGU6IGV2ZW4gd2hlbiBzdWJtaXR0aW5nIHRoZSBHRVQgcmVxdWVzdCBieSBzcGVjaWZ5aW5nICdjaGFyZW5jb2RlPVVURi04JywKKwkgKiAgIGdsYXNzZmlzaCBkb2VzIG5vdCBjb252ZXJ0IGl0IGF1dG9tYXRpY2FsbHkgYXMgZXhwZWN0ZWQuCisJICogICAKKwkgKiAgMjIuMTAuMjEvRkIKKwkgKiAKKwkgKiAtIGlmIGFjY2VwdD1hcHBsaWNhdGlvbi9qc29uIHJldHVybiBVVEYtOCAoV2Zvcm1TZXJ2aWNlcykuCisJICogLSBlbHNlIGlmIGFjY2VwdD10ZXh0L2h0bWwgZG8gbm90IHRyYW5zZm9ybSBjaGFyYWN0ZXIgZW5jb2RpbmcgKEJyb3dzZXIpLgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAQ29uc3VtZXMoImFwcGxpY2F0aW9uL2pzb24sIHRleHQvaHRtbCIpCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbzsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwlmaW5hbCBib29sZWFuCisJCWJFbmNvZGVMZW1tYSA9IGZhbHNlOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOworCQorCS8qIHRlc3Q6CisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWlmKCBiRW5jb2RlTGVtbWEgKQorCQl7CisJCS8vIHdoZW4gYWNjZXB0aW5nIEpTT04sIHVybCBoYXMgdG8gYmUgY29udmVydGVkIHRvIFVURi04LCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWE6CisJCXRyeSB7CisJCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKG5ldyBTdHJpbmcobGVtbWEuZ2V0Qnl0ZXMoIklTTy04ODU5LTEiKSwgInV0Zi04IikpOworCQkJfSAKKwkJY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZTEpIHsKKwkJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQkJTGVtbWFSZXNwb25zZQorCQkJCWxlbXJlc3AgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1yZXNwKS5idWlsZCgpOworCQkJfQorCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFtVVEYtOF0gb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWFJbmZvLmxlbW1hT3JpZywgb3B0aW9ucyk7CisJCX0KKwllbHNlCisJCXsKKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW3VuY2hhbmdlZF0gb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWFJbmZvLmxlbW1hT3JpZywgb3B0aW9ucyk7CisJCX0KKworCS8qIGRvZXMgbm90IGhlbHA6CisJIFN0cmluZworCSAJcmVxdWVzdENoYXJFbmNvZGluZyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRDaGFyYWN0ZXJFbmNvZGluZygpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVxdWVzdCBjaGFyYWN0ZXIgZW5jb2RpbmcgPSclcycuXG4iLCBmdW5jLCByZXF1ZXN0Q2hhckVuY29kaW5nKTsKKwkqLworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQl7CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJLy9yZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCX0KKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CQorCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwkvKgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvdGVzdC9pbmZvLyIpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9mb3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCWZvdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9lNC80MDVlOGY4MzExMmMwMDFjMWM0MWNlNTU5ZWE1ZTE2YiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZTQvNDA1ZThmODMxMTJjMDAxYzFjNDFjZTU1OWVhNWUxNmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y4NDNmYwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZTQvNDA1ZThmODMxMTJjMDAxYzFjNDFjZTU1OWVhNWUxNmIKQEAgLTAsMCArMSw3MTkgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA2LjEwLjIxIjsgLy8iMTcuMDYuMjAiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMSI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwkJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwkJU3RyaW5nCisJCQlzdGF0dXM7CisJCVV0aWxzCisJCQl1ID0gbmV3IFV0aWxzKCk7CisJCVByb3BlcnRpZXMKKwkJCXByb3BzOworCQlTdHJpbmcKKwkJCXByb3BOYW1lID0gIi9HbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiOworCQkvLyByZWFkIHRlc3QKKwkJcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworCQkKKwkJCQkKKwkJLy9nZXRTZXJ2bGV0Q29udGV4dCguKQorCQkvLyBodHRwU2VydmxldFJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW52KTsKKworCQlJbnB1dFN0cmVhbQorCQkJLy9pblByb3AgPSBHbGVtbVNlcnZpY2VzLmNsYXNzLmdldENsYXNzTG9hZGVyKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShwcm9wTmFtZSk7CisJCQlpblByb3AgPSBIdHRwU2VydmxldFJlcXVlc3QuY2xhc3MuZ2V0UmVzb3VyY2VBc1N0cmVhbShwcm9wTmFtZSk7CisKKwkJaWYoIGluUHJvcCA9PSBudWxsICkKKwkJCXsKKwkJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBsb2FkICclcychXG4iLCBmdW5jLCBwcm9wTmFtZSk7CisJCQlyZXR1cm4gbnVsbDsKKwkJCX0KKwkJCisJCXRyeSB7CisJCQlwcm9wcy5sb2FkKGluUHJvcCk7CisJCQlTZXQ8RW50cnk8T2JqZWN0LE9iamVjdD4+CisJCQkJcHJvcHNTZXQgPSBwcm9wcy5lbnRyeVNldCgpOworCQkJCisJCQlmb3IoRW50cnk8T2JqZWN0LCBPYmplY3Q+IHByb3BFbnRyeSA6IHByb3BzU2V0KQorCQkJCXsKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wICVzID0gJyVzJy5cbiIsIGZ1bmMsIHByb3BFbnRyeS5nZXRLZXkoKSwgcHJvcEVudHJ5LmdldFZhbHVlKCkpOworCQkJCX0KKwkJCX0gCisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgbG9hZCBwcm9wcyAnR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzJyEiLCAgZnVuYyk7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCQorCQkvLyBlbmQgb2YgcmVhZCB0ZXN0CisJCQorCQkvLyB0ZXN0CisJCS8qCisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJCisJCSAqIHByb3BzLnNldFByb3BlcnR5KCJwIiwgInRlc3QiKTsKKwkJICoKKwkJRmlsZU91dHB1dFN0cmVhbSBvdXQ7CisJCXRyeSB7CisJCQlvdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbSgiZ2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIik7CisJCQlwcm9wcy5zdG9yZShvdXQsICAidGVzdCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMiKTsKKwkJCX0gCisJCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9OworCQkqLworCQkKKwkJLy8gZW5kIG90ZXN0CisJCQorCQkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwkJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisJCVN5c3RlbS5vdXQucHJpbnRmKCJBUEk6ICVzOiAvaW5kZXgvc3RhdHVzLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisKKwkJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogUE9TVDogL2luZGV4L2FkZC86IHRleHQvcGxhaW4KKwkgKiBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZS4KKwkgKiBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZAorCSAqIGludG8gdGhlIGRhdGFiYXNlLgorCSAqIElucHV0OiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKi8KKwlAUGF0aCgiYWRkIikgQFBPU1QgQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGltcG9ydExlbW1hRGF0YShTdHJpbmcgbGlzdCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIGFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJCisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9hZGQvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNm77+9aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJfQorCisJLyogdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gdmlld0RCSW5mbworCisKKwkvKiB2aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIiAtIFN0YXR1czogPGk+V29yayBpbiBwcm9ncmVzcy4uLiE8L2k+KTwvaDQ+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCAhb3B0aW9ucy5lcXVhbHMoInVuZGVmIikpCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxL3Byb3AyL3NwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBHbGVtbVNlcnZpY2VzICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb25EYXRlLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJLy9TeXN0ZW0ub3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZWEvMjA1YWNiNjg1MzNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2VhLzIwNWFjYjY4NTMzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3YzRlMzUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2VhLzIwNWFjYjY4NTMzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsOTg0IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKKy8qIDAuMSA6IDE3LjA2LjIwL0ZCIAorICogMC4yIDogMjUuMTAuMjEvRkIKKyAqICAgICAgIGxvZ2luZyBvZiB0aGUgQVBJIFJlcXVlc3RzLgorICogICAgICAgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisgKiAgICAgICBjb3JyZWN0aW5nIGNhbGxpbmcgb2YgbGVtbWEgKyBwcm9wMS9wcm9wMi9zcGVjLgorICogICAgICAgaGFuZGxpbmcgb2YgbGVtbWF0YSB3aXRoICfDnycuCisgKiAKKyAqIEdlbmVyYWwgY29tbWVudHMgdG8gdGhlIGVuY29kaW5nIG9mIGRlcml2YXRpb25zIGZyb20gbGVtbWEgdG8gd2ZzIGFuZCBob3cgdGhleSBhcmUgZW5jb2RlZAorICogaW4gdGhlIERlcmJ5IGRhdGFiYXNlOgorICogCisgKiBHTEVNTSBlbmNvZGluZzogIAorICogICBfIF8gOiArRmxleCAgICAgICDDlmxlIC0+IMOWbCAgICAgIAorICogICArIF8gOiArQ29tcCAgICAgICDDlmxsYW1wZSAtPiDDlmwgb3IgTGFtcGUgKGNvbXBvdW5kKS4KKyAqICAgXyArIDogK290aGVyICAgICAgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm5zY2h1aCAobm8gY29tcG91bmQgZm9yICdUdXJuc2NodWgnLCBvbmx5IHByZWZpeCkuCisgKiAgICsgKyA6ICtDb21wK290aGVyIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuICsgU2NodWggKGNvbXBvdW5kIGZvciAnU2NodWgnICsgUHJlZml4KS4KKyAqIEMyIGxlbW1hdGl6YXRpb24gb3B0aW9uczoKKyAqICAgRmxleCAgKGlkZW50aWNhbCB0byBHbGVtbSkKKyAqICAgQ29tcCAgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKQorICogICBPdGhlciAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpLgorICogICBTcGVjICAob25seSBDMjogaW5jbHVkZXMgYWxsIHdmcyB3aXRoIGhpcGhlbiBhbmQvb3Igc29tZSBub24tYWxwaGFiZXRpYyBJU084ODU5LTEgY2hhcnMpCisgKiAgICAgICAgIEUuZy4gw5ZsLUV4cG9ydGUsICJNYXJrZW4iLcOWbGUuCisgKiBEZXJieSBFbmNvZGluZzoKKyAqICBwcm9wMSAJcHJvcDIJc3BlYyAgIAltZWFuaW5nIGluIEMyOgorICogIDAJCTAJCS0JCUZsZXgKKyAqICAxCQkwCQktCQlDb21wCisgKiAgMAkJMQkJLQkJT3RoZXIgKHByZWZpeCkKKyAqICAxCQkxCQktCQlDb21wICsgT3RoZXIKKyAqICAtCQktCQkwCQktU3BlYworICogIC0JCS0JCTEJCStTcGVjCisgKiAKKyAqIEV4YW1wbGVzOgorICogJlNjaHVoCQkJOiBTY2h1aCwgU2NodWhlLCAuLi4gb25seSBmbGV4aW9ucworICogJlNjaHVoK2NvbXAJCTogU2NodWhlLCBUdXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMuCisgKiAmU2NodWgrb3RoZXIJCTogU2NodWhlLCBBbnRpc2NodWhlLi4uIGZsZXhpb25zIGFuZCBwcmVmaXhlZCB3ZnMgKG5vIGNvbXBvdW5kcykuCisgKiAmU2NodWgrY29tcCtvdGhlcjogU2NodWhlLCBBbnRpc2NodWhlLCBUdXJuc2NodWhlLCBBbnRpdHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzIGFuZCAKKyAqIAkJCQkJICBwcmVmaXhlZCBzaW5nbGUgd2ZzIChBbnRpc2NodWhlKSBhbmQgcHJlZml4ZWQgY29tcG91bmRzLgorICogJlNjaHVoK3NwZWMJCTogIkFudGkiLVNjaHVoZSwgNjhnZXItU2NodWhlLi4uIG1heSBiZSBjb21iaW5lZCB3aXRoIGV2ZXJ5IG9wdGlvbnM6IGFkZHMKKyAqICAgICAgICAgICAgICAgICAgICB3ZnMgd2l0aCBoeXBoZW4gYW5kL29yIG5vbi1hbHBoYWJldGljIGNoYXJzLgorICogCisgKiBDb252ZXJzaW9uIHJ1bGVzOgorICogCisgKiAgJnNjaGxpZcOfZW4gLT4gaW50ZXJuYWwgc2VhcmNoIGZvciAnc2NobGllc3NlbicsCisgKiAgYmVjYXVzZSBHbGVtbSBvdXRwdXRzICdzcycgZm9yICfDnycuCisgKiAgCisgKiBDaGFyYWN0ZXIgRW5jb2Rpbmc6CisgKiAKKyAqIC0gV2hlbiBpbXBvcnRpbmcgd2ZzIHRvIHRoZSBEZXJieSBEYXRhYmFzZSB3aXRoIGRvQ3VybEdsZW1tU2VydmljZXMvaW5kZXhMZW1tYXRhOgorICogCisgKiAgIElOUFVUOiB3b3JkZm9ybSBsaXN0IGluIFtVVEYtOF0gOiBVVEYtOCBpcyB0aGVuIGNvbnZlcnRlZCB0byBMYXQxIGZvciBHbGVtbSwKKyAqICAgICAgICAgIHRoZSBvdXRwdXQgb2YgR2xlbW0gW0xhdDFdIGlzIHJldHVybmVkIHRvIHRoZSBHbGVtbVNlcnZpY2VzIHdpdGhvdXQgcmVjb252ZXJzaW9uCisgKiAgICAgICAgICB0byBVVEY4IGFuZCBpbXBvcnRlZCBpbnRvIERlcmJ5IERhdGFiYXNlIHVuY2hhbmdlZC4KKyAqCQkKKyAqLworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA0LjExLjIxIjsgCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4yIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVByb3BzCQk9ICIvV0VCLUlORi9HbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiOworCQorCS8vIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSByZWFkIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzICh0aGVzZSBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzKToKKwlwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCAJCT0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCXByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCQkJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwlAQ29udGV4dAorCXByaXZhdGUgU2VydmxldENvbnRleHQgc2VydmxldENvbnRleHQ7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmb3V0CT0gbnVsbDsKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZlcnIJPSBudWxsOwkJCisJCQorCS8qIAorIAkgKiAKKwkgKiAtIGFmdGVyIGxvYWRQcm9wZXJ0aWVzLCBzZXRzIHRoZSBjbGFzcyB2YXJpYWJsZSB3aXRoIGxvYWRlZCBwcm9wZXJ0eSB2YWx1ZXMuCisJICogCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCUdTX1dvcmtpbmdQYXRoIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJHU19Xb3JraW5nUGF0aCIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyIpOworCWZuYW1lV2ZzCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVdmcyIsIAkgICAiZ2xfd2ZzX2luLnR4dCIpOworCWZuYW1lV2ZzCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVXZnM7CisJZm5hbWVPdXQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lT3V0IiwgCSAgICJHbGVtbVNlcnZpY2VzLmxvZyIpOworCWZuYW1lT3V0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVPdXQ7CisJZm5hbWVFcnIJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lRXJyIiwgCSAgICJHbGVtbVNlcnZpY2VzLmVyciIpOworCWZuYW1lRXJyCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVFcnI7CisJZm5hbWVTY3JpcHQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lU2NyaXB0IiwJICAgImRvR2xlbW0iKTsKKwlmbmFtZVNjcmlwdAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lU2NyaXB0OworCWZuYW1lTGVtYXRhCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUxlbWF0YSIsICAgICJ0bXAvbGVtMyIpOworCWZuYW1lTGVtYXRhCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVMZW1hdGE7CisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKgorCSAqICBsb2dfUmVxdWVzdDoKKwkgKiAgCisJICogIC0gd3JpdGUgaW5mbyBhYm91dCBBUEkgUmVxdWVzdC4KKwkgKiAgUGFyYW1ldGVyczoKKwkgKiAgcmVxdWVzdFBhdGgJOiBwYXRoIG9mIHdlYmFwcCBhZGRyZXNzZWQgYnkgdGhlIHJlcXVlc3QuCisJICogIGZ1bmMJCTogbmFtZSBvZiB0aGUgZnVuY3Rpb24gd2hpY2ggaW1wbGVtZW50cyB0aGUgcmVxdWVzdC4KKwkgKiAgCisJICogIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGxvZ19SZXF1ZXN0KFN0cmluZyByZXF1ZXN0UGF0aCwgU3RyaW5nIGZ1bmMpCisJCisJeworCS8vIHRyYW5zZm9ybSAiZGF0ZVR0aW1lIiAtPiAiZGF0ZSB0aW1lIjoKKwkKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwlmb3V0LnByaW50ZigiIyMjICVzOiAlcyA6IHZlcnM9JyVzJywgdmRhdGU9JyVzJyByZXF1ZXN0PSclcycuXG4iLCBmdW5jLCByZXF1ZXN0UGF0aCwgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIAorCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisJZm91dC5wcmludGYoIiMjI1xuIik7CisJfSAvLyBsb2dfUmVxdWVzdAorCQkKKwkvKiBmb3JtYXREYk5hbWUKKwkgKiAKKwkgKiAtIGdldHMgbmFtZSBvZiBEYXRhYmFzZSB1c2VkIGJ5IERlcmJ5IGZyb20gcHJvcHMgCisJICogICBhbmQgZm9ybWF0IGl0IHRvIEhUTUwuCisJICogIAorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBTdHJpbmcgZm9ybWF0RGJOYW1lKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCVN0cmluZworCQlkYk5hbWU7CisJU3RyaW5nCisJCWRiUGF0aCA9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCWludAorCQlqID0gZGJQYXRoLmxhc3RJbmRleE9mKCcvJyk7CisJCisJaWYoIGogPiAwICkKKwkJZGJOYW1lID0gZGJQYXRoLnN1YnN0cmluZyhqKzEpOworCWVsc2UKKwkJZGJOYW1lID0gZGJQYXRoOworCQorCXJldHVybiBkYk5hbWU7IC8vICI8cD48Yj5EYXRhYmFzZTogIiArIGRiTmFtZSArICI8L2I+PC9wPlxuIjsKKwl9IC8vIGZvcm1hdERiTmFtZQorCisJLyoKKwkgKiBjbG9zZUxvZ1N0cmVhbXM6CisJICogCisJICogLSBjbG9zZSB0aGUgZm91dC9mZXJyIGxvZyBzdHJlYW1zLgorCSAqIAorCSAqIDI2LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGNsb3NlTG9nU3RyZWFtcygpCisJCisJeworCWlmKCBmb3V0ICE9IG51bGwpCisJCWZvdXQuY2xvc2UoKTsKKwlmb3V0ID0gbnVsbDsKKwkKKwlpZiggZmVyciAhPSBudWxsICkKKwkJZmVyci5jbG9zZSgpOworCWZlcnIgPSBudWxsOworCX0gLy8gY2xvc2VMb2dTdHJlYW1zCisJCisJLyogaW5pdF9hbmRfbG9nX1JlcXVlc3QKKwkgKiAKKwkgKiAtIGxvYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLCBzZXRzIEdsZW1tU2VydmljZXMgY29uc3RhbnRzCisJICogICBhbmQgbG9ncyB0aGUgcmVxdWVzdC4KKwkgKiAtIGxvYWQgcHJvcGVydGllcyBhbmQgc2V0IGNvbnN0YW50cyBiZWZvcmUgbG9nZ2luZyBhbnl0aGluZywgYmVjYXVzZQorCSAqICAgbG9nZ2luZyB3aWxsIGJlIGRvbmUgaW50byB0aGUgbGFzdCBzdGRvdXQvc3RkZXJyIG9wZW5lZCBpbiBnbGFzc2Zpc2gncyBKVk0sCisJICogICBlLmcuIGluIHRoZSBsb2cgb2YgYW5vdGhlciBTZXJ2aWNlLgorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBQcm9wZXJ0aWVzIGluaXRfYW5kX2xvZ19SZXF1ZXN0KFN0cmluZyBmdW5jLCBTdHJpbmcgcmVxdWVzdFBhdGgpCisJCisJeworCVN0cmluZworCQlyZWFsUGF0aCA9IHNlcnZsZXRDb250ZXh0LmdldFJlYWxQYXRoKGZuYW1lUHJvcHMpOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAoaWYgbGFzdCBwYXJhbSA9IHRydWUpOgorCVByb3BlcnRpZXMKKwkJcHJvcHMgPSBVdGlscy5sb2FkUHJvcGVydGllcyhzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpLCBmbmFtZVByb3BzLCByZWFsUGF0aCwgZmFsc2UpOworCQorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBmb3V0IGFuZCBmZXJyIGFzIHJlcGxhY2VtZW50IGZvciBzdGRvdXQvc3RkZXJyIGZvciB1c2UgaW4gR2xlbW1TZXJ2aWNlcy4KKwkvLyBkbyBub3QgdXNlIG9yIHJlZGlyZWN0IFN5c3RlbS5vdXQgYW5kIFN5c3RlbS5lcnIsIGFzIHRoZXkgd2lsbCBiZSByZWRpcmVjdGVkCisJLy8gYnkgb3RoZXIgU2VydmljZXMgaW4gdGhlIHNhbWUgZ2xhc3NmaXNoIEpWTSwgZS5nLiBieSB0aGUgV2Zvcm1TZXJ2aWNlcy4KKwlmb3V0ID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lT3V0KTsKKwlmZXJyID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lRXJyKTsKKwkKKwkvL1V0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCisJbG9nX1JlcXVlc3QocmVxdWVzdFBhdGgsIGZ1bmMpOworCQorCXJldHVybiBwcm9wczsKKwl9IC8vIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJU3RyaW5nCisJCXN0YXR1czsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9zdGF0dXMvIik7CisJCisJLy8gaHR0cFNlcnZsZXRSZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKGVudik7CisJCisJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnByb3BlcnRpZXM8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5kYXRhYmFzZTwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpLAorCQkJCQkJCXNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcykgPT0gbnVsbCA/ICJub3QgZm91bmQiIDoKKwkJCQkJCQkJcHJvcHMuaXNFbXB0eSgpID8gImVtcHR5IiA6ICJsb2FkZWQiLAorCQkJCQkJCWZvcm1hdERiTmFtZShwcm9wcykKKwkJCQkJCQkpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCWNsb3NlTG9nU3RyZWFtcygpOworCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogCisJICogZG9QT1NUX2ltcG9ydExlbW1hRGF0YToKKwkgKiAKKwkgKiBQT1NUOiAvaW5kZXgvYWRkL3tkYXRhYmFzZW5hbWV9OiB0ZXh0L3BsYWluCisJICogCisJICogUGFyYW1ldGVyczoKKwkgKiBsaXN0CQkgCTogdGhlIGxpc3Qgb2Ygd2ZzIHNlbnQgaW4gdGhlIGJvZHkgb2YgdGhlIFBPU1QgcmVxdWVzdC4KKwkgKiBkYnBhdGhFbmNvZGVkOiB0aGUgbG9jYXRpb24gb2YgdGhlIGRhdGFiYXNlIHdoZXJlIHRoZSBsZW1tYSt3ZnMgYXJlIHRvIGJlIHN0b3JlZC4KKwkgKiAgICAgICAgICAgICAJICBlbmNvZGVkIGFzICIuaG9tZS51c2VyLktvckFQLi4uLiIsIG11c3QgYmUgY29udmVydGVkIHRvCisJICogICAgICAgICAgICAJICAiL2hvbWUvdXNlci9Lb3JBUC8uLi4iCisJICogICAgICAgICAJCSAgSU1QT1JUQU5UOiBkbyBub3QgdXNlIGEgJy4nIGZvciBlbmNvZGluZyBhbnl0aGluZyBlbHNlIHRoYW4gYSAnLycuCisJICogTm90ZXMgICAgIDoKKwkgKiAtIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlIGxvY2F0ZWQgYXQgJ2RhdGFiYXNlbmFtZScuCisJICogLSBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZCBpbnRvIGEgRGVyYnkgZGF0YWJhc2UuCisJICogSW5wdXQJIDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICogMDQuMTEuMjEvRkIKKwkgKiAtIHN1Ym1pdHRlZCBkYXRhYmFzZSBwYXRoLgorCSAqLworCQorCUBQYXRoKCJhZGQve2RhdGFiYXNlcGF0aH0iKSAKKwlAUE9TVCAKKwlAQ29uc3VtZXMoInRleHQvcGxhaW4iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCQkJCQkJCSgKKwkJCQkJCQlTdHJpbmcgCQkJCQkJCQkJbGlzdCwKKwkJCQkJCQlAUGF0aFBhcmFtKHZhbHVlPSJkYXRhYmFzZXBhdGgiKSBTdHJpbmcgZGJwYXRoRW5jb2RlZAorCQkJCQkJCSkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb1BPU1RfaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSAKKwkJYXJMaXN0ID0gbGlzdC5zcGxpdCgiXG4iKSwKKwkJZGJwYXRoOworCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gbnVsbDsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2FkZC97ZGJwYXRofSIpOworCQorCWRicGF0aCA9IGRicGF0aEVuY29kZWQucmVwbGFjZSgnLicsICcvJyk7CisJCisJZm91dC5wcmludGYoIkluZm8gOiAlczogc2VsZWN0ZWQgZGF0YWJhc2UgcGF0aCA9ICclcycuXG4iLCBmdW5jLCBkYnBhdGgpOworCWZvdXQucHJpbnRmKCJJbmZvIDogJXM6IHdvcmtpbmcgZGlyZWN0b3J5ID0gJyVzJy5cbiIsIGZ1bmMsIEdTX1dvcmtpbmdQYXRoKTsKKwkKKwkvLyBzZXQgZmlsZSBhbmQgcGF0aHMgYWZ0ZXIgR1NfV29ya2luZ1BhdGggaGFzIGJlZW4gaW5pdGlhbGlzZWQ6CisJcCA9IGZzLmdldFBhdGgoZm5hbWVXZnMpOworCQorCS8vIFdyaXRlIHN1Ym1pdHRlZCBsaXN0IG9mIHdvcmRmb3JtcyB0byBmaWxlOgorCXRyeQorCQl7CisJCW9zID0gRmlsZXMubmV3T3V0cHV0U3RyZWFtKHApOworCQlvcy53cml0ZShsaXN0LmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSkpOworCSAgICBvcy5jbG9zZSgpOworCSAgICBiRG9uZSA9IHRydWU7CisJICAgIGZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGZpbGUgJyVzJyBiZXNjaHJpZWJlbi5cbiIsIGZ1bmMsIGZuYW1lV2ZzKTsKKwkgICAgfQorCWNhdGNoKElPRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoZmVycik7CisJCX0KKyAgICAKKwlpZiggYkRvbmUgKQorCQltc2cgPSAiPHA+TGlzdCB3cml0dGVuIHRvIGZpbGU6ICIgKyBwLnRvU3RyaW5nKCkgKyAiPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+PGI+RmlsZSBFcnJvcjogPC9iPiBjYW5ub3Qgd3JpdGUgdG8gIiArIHAudG9TdHJpbmcoKSArICIhPC9wPiI7CisJCisJLyoKKwkgKiAgZXhlY3V0ZSBHbGVtbSBzaGVsbCBzY3JpcHQ6CisJICovCisJU3RyaW5nCisJCW1zZ0dsZW1tU2NyaXB0LCBtc2dJbXBvcnQ7CisJaW50IAorCQlyID0gVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0KGZuYW1lU2NyaXB0LCBmbmFtZVdmcywgZm91dCwgZmVycik7CisJCisJaWYoIHIgPT0gMCApCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEF1c2bDvGhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhLCBwcm9wcywgZGJwYXRoKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBpbXBvcnRHbGVtbUxlbW1hdGEgcmV0dXJucyByPSVkLlxuIiwgZnVuYywgcik7CisJaWYoIG5FcnJvcnMgPT0gMCApCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiAiICsgbkVycm9ycyArICIgZXJyb3JzITwvcD4iOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGVuZGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJLy8gUmV0dXJuIEluZm9zOgorCXJldHVybiAKKwkJCSAgICI8aHRtbD4iICsKKwkJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwkKKwl9IC8vIGRvUE9TVF9pbXBvcnRMZW1tYURhdGEKKworCS8qIGRvR0VUX3ZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnMgPSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvLyIpOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJZmluYWwgU3RyaW5nCisJCWRiTmFtZSA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPmRhdGFiYXNlPC9iPjogJXM8L3A+IiwgZm9ybWF0RGJOYW1lKHByb3BzKSk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIGRiTmFtZSArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gZG9HRVRfdmlld0RCSW5mbworCisKKwkvKiBkb0dFVF92aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND52ZXJzaW9uICIgKyB2ZXJzaW9uICsgIiB2b20gIiArIHZlcnNpb25EYXRlICsgIiByZXF1ZXN0ID0gJyIgKyBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpICsgIic8L2k+PC9oND5cbiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAxOjwvYj4gKEMyIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfTwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPntsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpPC9jb2RlPjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw8L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT7Dlmw/b3B0cz1mbGV4K2NvbXArb3RoZXIrc3BlYzwvY29kZT48L3A+IiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDI6PC9iPiAoaW50ZXJuYWwgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9P3Byb3AxPVswMTJdJmFtcDtwcm9wMj1bMDEyXSZhbXA7c3BlYz1bMDEyXTwvY29kZT4gKHdoZXJlIGVhY2ggcHJvcDEsIHByb3AyLCBzcGVjIGlzIG9wdGlvbmFsKS48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsP3Byb3AxPTAmYW1wO3Byb3AyPTEmYW1wO3NwZWM9MjwvY29kZT48L3A+IjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0iKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0nJWQnIHByb3AyPSclZCcgc3BlYz0nJWQnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJLyogCisJZm9yKGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCQl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCQl9CQorCSAqLworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCBsZW1tYUluZm8ub3B0c1NldHRpbmcgPT0gTGVtbWFJbmZvLk9QVFNfU0VUVElOR19DMiApIAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEscHJvcDIsc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZyk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWludAorCQluV2ZzID0gbGVtbWFJbmZvLm5XZnM7CisJCisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJLy8gbG9nIG91dGNvbWU6CisJaWYoIG5XZnMgPCAwICkKKwkJZm91dC5wcmludGYoIkVycm9yOiAlczogcmV0dXJuaW5nIDAgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jKTsKKwllbHNlCisJCWZvdXQucHJpbnRmKCJEZWJ1Zy4gJXM6IHJldHVybmluZyAlZCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMsIG5XZnMpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiBub3RlOgorCSAqIC0gaWYgQnJvd3NlciByZXF1ZXN0OiBIVFRQU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ3RleHQvaHRtbCwuLi54bWwuLi4nCisJICogLSBpZiBXZm9ybVNlcnZpY2VzIHJlcXVlc3Q6IEh0dHBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAnYXBwbGljYXRpb24vanNvbicuCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKiAKKwkgKiAtIHN1Ym1pdHRlZCBVUkwsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYSwgaXMgaW50ZXJwcmV0ZWQgYnkgZ2xhc3NmaXNoIGFzCisJICogICBiZWluZyBJU08tODg1OS0xIGVuY29kZWQuIFdoZW4gdGhlIHJlcXVlc3QgaXMgVVRGLTggZW5jb2RlZCwgVW1sYXV0cyBhbmQKKwkgKiAgICfDnycgYXJlIG1pcy1pbnRlcnByZWRlZCwgbGVhZGluZyB0byBhbiBlcnJvbmVyb3VzIHJlcXVlc3QgdG8gdGhlIERlcmJ5CisJICogICBkYXRhYmFzZS4KKwkgKiAtIFJlcXVlc3RlZCBsZW1tYSAnbGVtbWEnIGhhcyB0byBiZSB0cmFuc2Zvcm1lZCB0byBVVEYtOCBmaXJzdC4KKwkgKiAtIG5vdGU6IGV2ZW4gd2hlbiBzdWJtaXR0aW5nIHRoZSBHRVQgcmVxdWVzdCBieSBzcGVjaWZ5aW5nICdjaGFyZW5jb2RlPVVURi04JywKKwkgKiAgIGdsYXNzZmlzaCBkb2VzIG5vdCBjb252ZXJ0IGl0IGF1dG9tYXRpY2FsbHkgYXMgZXhwZWN0ZWQuCisJICogICAKKwkgKiAgMjIuMTAuMjEvRkIKKwkgKiAKKwkgKiAtIGlmIGFjY2VwdD1hcHBsaWNhdGlvbi9qc29uIHJldHVybiBVVEYtOCAoV2Zvcm1TZXJ2aWNlcykuCisJICogLSBlbHNlIGlmIGFjY2VwdD10ZXh0L2h0bWwgZG8gbm90IHRyYW5zZm9ybSBjaGFyYWN0ZXIgZW5jb2RpbmcgKEJyb3dzZXIpLgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAQ29uc3VtZXMoImFwcGxpY2F0aW9uL2pzb24sIHRleHQvaHRtbCIpCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbzsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwlmaW5hbCBib29sZWFuCisJCWJFbmNvZGVMZW1tYSA9IGZhbHNlOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOworCQorCS8qIHRlc3Q6CisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWlmKCBiRW5jb2RlTGVtbWEgKQorCQl7CisJCS8vIHdoZW4gYWNjZXB0aW5nIEpTT04sIHVybCBoYXMgdG8gYmUgY29udmVydGVkIHRvIFVURi04LCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWE6CisJCXRyeSB7CisJCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKG5ldyBTdHJpbmcobGVtbWEuZ2V0Qnl0ZXMoIklTTy04ODU5LTEiKSwgInV0Zi04IikpOworCQkJfSAKKwkJY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZTEpIHsKKwkJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQkJTGVtbWFSZXNwb25zZQorCQkJCWxlbXJlc3AgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1yZXNwKS5idWlsZCgpOworCQkJfQorCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFtVVEYtOF0gb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWFJbmZvLmxlbW1hT3JpZywgb3B0aW9ucyk7CisJCX0KKwllbHNlCisJCXsKKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW3VuY2hhbmdlZF0gb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWFJbmZvLmxlbW1hT3JpZywgb3B0aW9ucyk7CisJCX0KKworCS8qIGRvZXMgbm90IGhlbHA6CisJIFN0cmluZworCSAJcmVxdWVzdENoYXJFbmNvZGluZyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRDaGFyYWN0ZXJFbmNvZGluZygpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVxdWVzdCBjaGFyYWN0ZXIgZW5jb2RpbmcgPSclcycuXG4iLCBmdW5jLCByZXF1ZXN0Q2hhckVuY29kaW5nKTsKKwkqLworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQl7CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJLy9yZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCX0KKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CQorCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwkvKgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvdGVzdC9pbmZvLyIpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9mb3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCWZvdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9lYy8xMDQwZGZkOTgwM2MwMDFjMTVlNGM3YTc3ODkxNzczZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZWMvMTA0MGRmZDk4MDNjMDAxYzE1ZTRjN2E3Nzg5MTc3M2YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMyNGZjYwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZWMvMTA0MGRmZDk4MDNjMDAxYzE1ZTRjN2E3Nzg5MTc3M2YKQEAgLTAsMCArMSwzNyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKyA8aGVhZD4KKyAgPHRpdGxlPldvcmRmb3JtIFNlcnZpY2VzIChpbmNsdWRpbmcgR2xlbW0gU2VydmljZXMpPC90aXRsZT4KKyAgPCEtLSBsb2FkIGNsaWVudCBqYXZhc2NyaXB0IGxpYnJhcnkgLS0+CisgIDwhLS0gIGxpdmUtdmVyc2lvbjogc2NyaXB0IHNyYz0iaHR0cHM6Ly9rb3JhcC5pZHMtbWFubmhlaW0uZGUvanMva29yYXAtcGx1Z2luLTAuMi5qcyIKKyAgICAgICAgICBkYXRhLXNlcnZlcj0iaHR0cHM6Ly9rb3JhcC5pZHMtbWFubmhlaW0uZGUvIj48L3NjcmlwdCAtLT4KKyAgPCEtLSAgVGVzdHZlcnNpb246IC0tPgorICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9rb3JhcC5pZHMtbWFubmhlaW0uZGUvaW5zdGFuY2UvdGVzdC9qcy9rb3JhcC1wbHVnaW4tMC4yLmpzIgorICAgICAgICAgIGRhdGEtc2VydmVyPSJodHRwczovL2tvcmFwLmlkcy1tYW5uaGVpbS5kZS9pbnN0YW5jZS90ZXN0Ij48L3NjcmlwdD4KKyA8L2hlYWQ+CisgPGJvZHk+CisgIDxzY3JpcHQ+CisgICAgICAgbGV0IGRhdGEgPSB7CisgICAgICAgICAnYWN0aW9uJyA6ICdwaXBlJywKKyAgICAgICAgIDwhLS0gS29yYWxRdWVyeSBtaXQgUE9TVCBSZXF1ZXN0IGFuIGRpZXNlbiBzZXJ2aWNlIHNjaGlja2VuOyBkYWhpbnRlciBzdGVodCBkZXIgV29yZGZvcm0gU2VydmljZSwgZGFoaW50ZXIgZGVyIEdsZW1tIFNlcnZpY2UuIC0tPgorICAgICAgICAgPCEtLSBvaG5lIHByb3h5OiAnc2VydmljZScgOiAnaHR0cDovL2MwcjRmdC5pZHMtbWFubmhlaW0uZGU6NDA5MTMvd2Zvcm1TZXJ2aWNlcy0wLjEtU05BUFNIT1Qvd2Zvcm1TZXJ2aWNlcy9xdWVyeScgLS0+CisgICAgICAgICA8IS0tIG1pdCBwcm94eSA6ICdzZXJ2aWNlJyA6ICdodHRwczovL2tvcmFwLmlkcy1tYW5uaGVpbS5kZS9wcm94eS9jMHI0ZnQvd2Zvcm1TZXJ2aWNlcy0wLjEtU05BUFNIT1Qvd2Zvcm1TZXJ2aWNlcy9xdWVyeScgLS0+CisgICAgICAgICAnc2VydmljZScgOiAnaHR0cHM6Ly9rb3JhcC5pZHMtbWFubmhlaW0uZGUvcHJveHkvYzByNGZ0L3dmb3JtU2VydmljZXMvd2Zvcm1TZXJ2aWNlcy9xdWVyeScKKyAgICAgICB9OworCisgICAgICAgZnVuY3Rpb24gcGx1Z2luaXQgKHApIHsKKyAgICAgICAgIHAub25NZXNzYWdlID0gZnVuY3Rpb24obXNnKSB7CisgICAgICAgICAgIGlmIChtc2cua2V5ID09ICdnbGVtbScpIHsKKyAgICAgICAgICAgICBpZiAobXNnLnZhbHVlKSB7CisgICAgICAgICAgICAgICBkYXRhWydqb2InXSA9ICdhZGQnOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgIGRhdGFbJ2pvYiddID0gJ2RlbCc7CisgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICBLb3JBUGx1Z2luLnNlbmRNc2coZGF0YSk7CisgICAgICAgICAgIH07CisgICAgICAgICB9OworICAgICAgIH07CisgICAgIDwvc2NyaXB0PgorICAgPC9ib2R5PgorPC9odG1sPiAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2VlLzEwZDEwMjFkYWYyYTAwMWMxYzQxY2U1NTllYTVlMTZiIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9lZS8xMGQxMDIxZGFmMmEwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWMwNDQyCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9lZS8xMGQxMDIxZGFmMmEwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpAQCAtMCwwICsxLDY4NCBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA2LjEwLjIxIjsgLy8iMTcuMDYuMjAiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMSI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwkJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwkJU3RyaW5nCisJCQlzdGF0dXM7CisJCVV0aWxzCisJCQl1ID0gbmV3IFV0aWxzKCk7CisJCVByb3BlcnRpZXMKKwkJCXByb3BzOworCQkKKwkJLy8gcmVhZCB0ZXN0CisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJRmlsZUlucHV0U3RyZWFtCisJCQlpblByb3AgPSBTZXJ2bGV0LmdldFJlc291cmNlQXNTdHJlYW0oIkdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOyAvL25ldyBGaWxlSW5wdXQKKwkJLy8gZW5kIG9mIHJlYWQgdGVzdAorCQkKKwkJLy8gdGVzdAorCQkvKgorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCQorCQkgKiBwcm9wcy5zZXRQcm9wZXJ0eSgicCIsICJ0ZXN0Iik7CisJCSAqCisJCUZpbGVPdXRwdXRTdHJlYW0gb3V0OworCQl0cnkgeworCQkJb3V0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oImdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOworCQkJcHJvcHMuc3RvcmUob3V0LCAgInRlc3QgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIik7CisJCQl9IAorCQljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfTsKKwkJKi8KKwkJCisJCS8vIGVuZCBvdGVzdAorCQkKKwkJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiQVBJOiAlczogL2luZGV4L3N0YXR1cy8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCisJCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCQlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIFBPU1Q6IC9pbmRleC9hZGQvOiB0ZXh0L3BsYWluCisJICogYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UuCisJICogVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQKKwkgKiBpbnRvIHRoZSBkYXRhYmFzZS4KKwkgKiBJbnB1dDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICovCisJQFBhdGgoImFkZCIpIEBQT1NUIEBDb25zdW1lcygidGV4dC9wbGFpbiIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBpbXBvcnRMZW1tYURhdGEoU3RyaW5nIGxpc3QpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSBhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCQorCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvYWRkLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZu+/vWhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCX0KKworCS8qIHZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIHZpZXdEQkluZm8KKworCisJLyogdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgLSBTdGF0dXM6IDxpPldvcmsgaW4gcHJvZ3Jlc3MuLi4hPC9pPik8L2g0PlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggIW9wdGlvbnMuZXF1YWxzKCJ1bmRlZiIpKQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMS9wcm9wMi9zcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogR2xlbW1TZXJ2aWNlcyAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uRGF0ZSwgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCS8vU3lzdGVtLm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2VmLzkwZTM2ZWY0ODcyYjAwMWMxYzQxY2U1NTllYTVlMTZiIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9lZi85MGUzNmVmNDg3MmIwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmY1MDViCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9lZi85MGUzNmVmNDg3MmIwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpAQCAtMCwwICsxLDcxNCBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDYuMTAuMjEiOyAvLyIxNy4wNi4yMCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4xIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCQlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCQlTdHJpbmcKKwkJCXN0YXR1czsKKwkJVXRpbHMKKwkJCXUgPSBuZXcgVXRpbHMoKTsKKwkJUHJvcGVydGllcworCQkJcHJvcHM7CisJCVN0cmluZworCQkJcHJvcE5hbWUgPSAiR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIjsKKwkJLy8gcmVhZCB0ZXN0CisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJLy9IdHRwU2VydmxldENvbnRleHQKKwkJCisJCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCQlJbnB1dFN0cmVhbQorCQkJaW5Qcm9wID0gR2xlbW1TZXJ2aWNlcy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpLmdldFJlc291cmNlQXNTdHJlYW0ocHJvcE5hbWUpOworCQlpZiggaW5Qcm9wID09IG51bGwgKQorCQkJeworCQkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogZm9ybWF0LCBhcmdzKQorCQkJfQorCQkKKwkJdHJ5IHsKKwkJCXByb3BzLmxvYWQoaW5Qcm9wKTsKKwkJCVNldDxFbnRyeTxPYmplY3QsT2JqZWN0Pj4KKwkJCQlwcm9wc1NldCA9IHByb3BzLmVudHJ5U2V0KCk7CisJCQkKKwkJCWZvcihFbnRyeTxPYmplY3QsIE9iamVjdD4gcHJvcEVudHJ5IDogcHJvcHNTZXQpCisJCQkJeworCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AgJXMgPSAnJXMnLlxuIiwgZnVuYywgcHJvcEVudHJ5LmdldEtleSgpLCBwcm9wRW50cnkuZ2V0VmFsdWUoKSk7CisJCQkJfQorCQkJfSAKKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBsb2FkIHByb3BzICdHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMnISIsICBmdW5jKTsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkJCisJCS8vIGVuZCBvZiByZWFkIHRlc3QKKwkJCisJCS8vIHRlc3QKKwkJLyoKKwkJcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworCQkKKwkJICogcHJvcHMuc2V0UHJvcGVydHkoInAiLCAidGVzdCIpOworCQkgKgorCQlGaWxlT3V0cHV0U3RyZWFtIG91dDsKKwkJdHJ5IHsKKwkJCW91dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKCJnbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiKTsKKwkJCXByb3BzLnN0b3JlKG91dCwgICJ0ZXN0IEdsZW1tU2VydmljZXMgcHJvcGVydGllcyIpOworCQkJfSAKKwkJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX07CisJCSovCisJCQorCQkvLyBlbmQgb3Rlc3QKKwkJCisJCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCQlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIkFQSTogJXM6IC9pbmRleC9zdGF0dXMvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKworCQlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkpOworCisJCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwkJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiBQT1NUOiAvaW5kZXgvYWRkLzogdGV4dC9wbGFpbgorCSAqIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlLgorCSAqIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkCisJICogaW50byB0aGUgZGF0YWJhc2UuCisJICogSW5wdXQ6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqLworCUBQYXRoKCJhZGQiKSBAUE9TVCBAQ29uc3VtZXMoInRleHQvcGxhaW4iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgaW1wb3J0TGVtbWFEYXRhKFN0cmluZyBsaXN0KSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gYXJMaXN0ID0gbGlzdC5zcGxpdCgiXG4iKTsKKwkKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IGZzLmdldFBhdGgoZm5hbWVXZnMpOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2FkZC8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQorCS8vIFdyaXRlIHN1Ym1pdHRlZCBsaXN0IG9mIHdvcmRmb3JtcyB0byBmaWxlOgorCXRyeQorCQl7CisJCW9zID0gRmlsZXMubmV3T3V0cHV0U3RyZWFtKHApOworCQlvcy53cml0ZShsaXN0LmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSkpOworCSAgICBvcy5jbG9zZSgpOworCSAgICBiRG9uZSA9IHRydWU7CisJICAgIFN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGZpbGUgJyVzJyBiZXNjaHJpZWJlbi5cbiIsIGZ1bmMsIGZuYW1lV2ZzKTsKKwkgICAgfQorCWNhdGNoKElPRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisJCX0KKyAgICAKKwlpZiggYkRvbmUgKQorCQltc2cgPSAiPHA+TGlzdCB3cml0dGVuIHRvIGZpbGU6ICIgKyBwLnRvU3RyaW5nKCkgKyAiPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+PGI+RmlsZSBFcnJvcjogPC9iPiBjYW5ub3Qgd3JpdGUgdG8gIiArIHAudG9TdHJpbmcoKSArICIhPC9wPiI7CisJCisJLyoKKwkgKiAgZXhlY3V0ZSBHbGVtbSBzaGVsbCBzY3JpcHQ6CisJICovCisJU3RyaW5nCisJCW1zZ0dsZW1tU2NyaXB0LCBtc2dJbXBvcnQ7CisJaW50IAorCQlyID0gVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0KGZuYW1lU2NyaXB0LCBmbmFtZVdmcyk7CisJCisJaWYoIHIgPT0gMCApCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEF1c2bvv71ocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBpbXBvcnRHbGVtbUxlbW1hdGEgcmV0dXJucyByPSVkLlxuIiwgZnVuYywgcik7CisJaWYoIG5FcnJvcnMgPT0gMCApCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiAiICsgbkVycm9ycyArICIgZXJyb3JzITwvcD4iOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGVuZGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJLy8gUmV0dXJuIEluZm9zOgorCXJldHVybiAKKwkJCSAgICI8aHRtbD4iICsKKwkJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwl9CisKKwkvKiB2aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyB2aWV3REJJbmZvCisKKworCS8qIHZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIC0gU3RhdHVzOiA8aT5Xb3JrIGluIHByb2dyZXNzLi4uITwvaT4pPC9oND5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoICFvcHRpb25zLmVxdWFscygidW5kZWYiKSkKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEvcHJvcDIvc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEdsZW1tU2VydmljZXMgJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbkRhdGUsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9mLzgwMDA1YTBmNWQzZTAwMWMxMDM1YzFlYWYzOGFmNTkwIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9mLzgwMDA1YTBmNWQzZTAwMWMxMDM1YzFlYWYzOGFmNTkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZTExYjEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2YvODAwMDVhMGY1ZDNlMDAxYzEwMzVjMWVhZjM4YWY1OTAKQEAgLTAsMCArMSw4MDUgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5zcWwuQ29ubmVjdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5Ecml2ZXJNYW5hZ2VyOworaW1wb3J0IGphdmEuc3FsLlByZXBhcmVkU3RhdGVtZW50OworaW1wb3J0IGphdmEuc3FsLlJlc3VsdFNldDsKK2ltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CitpbXBvcnQgamF2YS5zcWwuU3RhdGVtZW50OworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAob3ZlcndyaXR0ZW4gYnkgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKGZpbmFsIGFzc2lnbm1lbnRzKToKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJFbWIgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIjsKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLy8gQ29uc3RhbnRzIG9mIHRhYmxlIEdsZW1tTGVtbWF0YToKKwlzdGF0aWMgZmluYWwgaW50IG1heExlbW1hU2l6ZQk9IDY0OyAJLy8gbWF4LiBuby4gb2YgY2hhcnMsIGFzIGRlY2xhcmVkIGluIHRhYmxlIEdsZW1tTGVtbWF0YS4KKwlzdGF0aWMgZmluYWwgaW50IG1heFdmU2l6ZQkJPSA2NDsJLy8gbWF4LiBuby4gb2YgY2hhcnMsIGFzIGRlY2xhcmVkIGluIHRhYmxlIEdsZW1tTGVtbWF0YS4KKwkKKwkvKiB2YXJpYWJsZXMgKi8KKwlzdGF0aWMgaW50IG5FeGNlcHRTdG10CQkJPSAwOwkvLyBjb3VudCBuby4gb2YgZXhjZXB0aW9ucyBmb3IgcHJlcGFyZWRTdG10LgorCXN0YXRpYyBpbnQgbkV4Y2VwdEluc2VydAkJPSAwOwkvLyBjb3VudCBuby4gb2YgZXhjZXB0aW9ucyBmb3IgSW5zZXJ0cy4KKwkKKwkvKgorCSAqIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCSAqIAorCSAqIEFyZ3VtZW50czoKKwkgKiBwcm9wcwk6IFByb3BlcnRpZXMgbG9hZGVkIGJ5IHRoZSBHbGVtbVNlcnZpY2VzLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBmdW5jdGlvbiBsb2FkcyBvbmx5IHRob3NlIENvbnN0YW50cyBuZWVkZWQgaW4gdGhpcyBjbGFzcy4KKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMJcHJvcHMpCisJCisJeworCWZuYW1lREIJCSAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsIAkiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJc2VydmVySG9zdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAic2VydmVySG9zdCIsCSIvL2xvY2FsaG9zdDoxNTI3LyIpOworCWRlcmJ5REJVUkwgCQk9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkJCQorCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyogICAgY2hlY2tEZXJieUNvbm5lY3Rpb246CisJICogCisJICogY2hlY2sgaWYgRGVyYnkgTmV0d29yayBTZXJ2ZXIgaXMgYXZhaWxhYmxlLgorCSAqIFJldHVybnM6IDAgKD1PSykgb3IgLTEgKG9uIGVycm9yKS4KKwkgKiAwNS4xMS4yMS9GQgorCSAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGNoZWNrRGVyYnlDb25uZWN0aW9uKCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gImNoZWNrRGVyYnlDb25uZWN0aW9uIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZSwKKwkvLyBzZXQgQXV0b2NvbW1pdCA9IGZhbHNlIHRvIGFjY2VsZXJhdGUgaW5zZXJ0aW9uczoKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgdG8gJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIAorCQl7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGluZyBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisJZmluYWxseSAKKwkJeyAKKwkJdHJ5IHsgLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQkJaWYoIGNvbiAhPSBudWxsICkgCisJCQkJY29uLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gY2hlY2tfRGVyYnlDb25uZWN0aW9uCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAkJCQkJaW1wb3J0R2xlbW1MZW1hdGEKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGZuCQkgOiBhYnNvbHV0ZSBmaWxlIG5hbWUgb2YgR0xFTU0gb3V0cHV0IFtJU084ODU5LTFdIGV4cGVjdGVkLCBub3QgVVRGLTghCisJICogcHJvcHMJIDogUHJvcGVydGllcyB2b20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIHRvIHNldCBjb25zdGFudHMgbmVlZGVkCisJICogCQkJICAgaW4gdGhpcyBjbGFzcy4KKwkgKiBkYnBhdGgJIDogbG9jYXRpb24gKyBuYW1lIG9mIGRhdGFiYXNlIHdoZXJlIHRvIHN0b3JlIGxlbW1hdGErd2ZzLgorCSAqIFJldHVybnMJIDogMD1PSywgLTE6IGdlbmVyYWwgZXJyb3I7ID4gMCA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiBkeW5hbWljYWxseSBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAwNC4xMS4yMS9GQiBkYnBhdGguCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGEoU3RyaW5nIGZuLCBQcm9wZXJ0aWVzIHByb3BzLCBmaW5hbCBTdHJpbmcgZGJwYXRoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGEiOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluID0gbnVsbDsKKwlpbnQKKwkJbkVycm9yczsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gd2hlbiBpbmRleGluZyBkYXRhIGludG8gdGhlIGRhdGFiYXNlLCBzZWxlY3QgdGhlIHN1Ym1pdHRlZCBkYnBhdGgsCisJLy8gKG5vdCB0aGUgb25lIHN0b3JlZCBpbiB0aGUgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBkYnBhdGg7CisJCisJLy8gb3BlbiByZWFkZXIgb24gR2xlbW0gTGVtbWF0YToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQlpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmbikpOworCQkKKwkJbkVycm9ycyA9IHdyaXRlREJMZW1tYXRhKGluKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgZnJvbSAnJXMnIVxuIiwgZnVuYywgZm4pOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKworCS8vIGNsb3NlIFJlYWRlcjoKKwl0cnkgeworCQlpbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCW5FcnJvcnMgPSAtMTsKKwkJfQorCQorIAlpZiggbkVycm9ycyA9PSAwICkKKyAJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0IGRvbmUgc3VjY2Vzc2Z1bGx5LlxuIiwgZnVuYyk7CisgCWVsc2UKKyAJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0OiAlZCBFcnJvcnMhXG4iLCBmdW5jLCBuRXJyb3JzKTsKKyAJCisJcmV0dXJuIG5FcnJvcnM7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGEKKwkKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCisJICogICAgICAgICAgICAgICAgICAgICAgIHdyaXRlREJMZW1tYXRhKCkKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgCisJICogc3RvcmVzIGxpc3Qgb2YgbGVtbWF0YSArIGluZm9zIGludG8gRGVyYnkgZGIuCisJICogRmlsZSBmb3JtYXQ6ICJMZW1tYSBEZWNvbXBvc2l0aW9uIFdmIiwKKwkgKiAgICAgICAgICAgICAgZS5nLjogIkjDpHVzZXIgKy0gSGF1cyIuCisJICogUmV0dXJuczogMCA9IE9LIG9yIC0xOiBnZW5lcmFsIGVycm9yIG9yID4gMDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAwOS4wMS4yMC9GQgorCSAqIDA0LjExLjIxL0ZCIHR1cm4gYXV0b2NvbW1pdCBvZmYgdG8gYWNjZWxlcmF0ZSBodWdlIGFtb3VudCBvZiBpbnNlcnRpb25zLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWF0YShCdWZmZXJlZFJlYWRlciBpbikKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYXRhIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVByZXBhcmVkU3RhdGVtZW50CisJCXN0bXRQcmVwID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCAJID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsJCisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQluRXJyb3JzID0gMCwKKwkJbkluc2VydGVkID0gMCwJLy8gbm8uIG9mIGxlbW1hL3dmIHBhaXJzIGltcG9ydGVkLgorCQlyZXQgPSAwOyAvLyBPSy4KKwlib29sZWFuCisJCWNvbnRhaW5zU3BlYzsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2UsCisJLy8gc2V0IEF1dG9jb21taXQgPSBmYWxzZSB0byBhY2NlbGVyYXRlIGluc2VydGlvbnM6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCWNvbi5zZXRBdXRvQ29tbWl0KGZhbHNlKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQgKGF1dG9Db21taXQ9b2ZmKS5cbiIsIGZ1bmMpOworCQkKKwkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQlzdG10UHJlcCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KGluc2VydFByZXBhcmVkUXVlcnkpOworCQllbHNlCisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCisJCXdoaWxlKCAobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCAhPSAzICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzISBFeHBlY3RlZCA9IDMhIENhbm5vdCBiZSBzdG9yZWQhXG4iLCBmdW5jLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCQluRXJyb3JzKys7CisJCQkJY29udGludWU7CisJCQkJfQorCQkJCisJCQkvLyBHZXQgSW5mbywgaWYgd29yZGZvcm0gY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlICctJywgaW50ZXJwdW5jdGlvbiBldGMuOgorCQkJLy8gbGVtbWFJbmZvWzJdID0gd29yZGZvcm0uCisJCQljb250YWluc1NwZWMgPSBMZW1tYUluZm8uaXNXZlNwZWNpYWxDYXNlKGxlbW1hSW5mb1syXSk7CisJCQkvLyBzdG9yZSBpbnRvIERCOgorCQkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoc3RtdFByZXAsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQllbHNlCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3Moc3RtdCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCQorCQkJaWYoIHJldCAhPSAwICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgc3RvcmUgbGVtbWEgJyVzJyBpbnRvIERCISAocmV0PSVkKVxuIiwgZnVuYywgbGluZSwgcmV0KTsKKwkJCQluRXJyb3JzKys7IAorCQkJCX0KKwkJCWVsc2UKKwkJCQluSW5zZXJ0ZWQrKzsKKwkJCX0gLy8gd2hpbGUKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgR2xlbW0gbGVtbWF0YStpbmZvcyBmcm9tIGZpbGUhIEV4aXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOyAKKwkJfQkKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisJZmluYWxseSAKKwkJeyAKKwkJdHJ5IHsKKwkJCS8vIGltcG9ydGFudDogbm93IGNvbW1pdCwgYXMgYXV0b0NvbW1pdCBpcyBkZWFjdGl2YXRlZCwKKwkJCS8vIHRoaXMgYWxzbyByZW1vdmVzIGRhdGFiYXNlIGxvY2tzOgorCQkJY29uLmNvbW1pdCgpOworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb21taXQgc3VjY2Vzc2Z1bGwuXG4iLCBmdW5jKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb21taXQgYXQgdGhlIGVuZCBvZiB0aGUgd2ZzIGxpc3QgZmFpbGVkIVxuIiwgZnVuYyk7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCQorCQl0cnkgeyAvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSAKKwkJCQlzdG10LmNsb3NlKCk7CisJCQlpZiggc3RtdFByZXAgIT0gbnVsbCApIAorCQkJCXN0bXRQcmVwLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkluZm8gOiAlczogbm8uIG9mIGxlbW1hdGEvd2YgcGFpcnMgaW5zZXJ0ZWQgPSAlZC5cbiIsIGZ1bmMsIG5JbnNlcnRlZCk7CisJCisJcmV0dXJuIG5FcnJvcnM7IC8vIDA9T0ssID4wID0gbm8uIG9mIGVycm9ycy4KKwl9IC8vIHdyaXRlREJMZW1tYXRhCisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIHJ1bGVzIGludG8gRGVyYnkgREIuCisJICogTm90ZXM6CisJICogLSB0aGlzIGlzIHRoZSB2ZXJzaW9uIHdpdGggYSBQcmVwYXJlZFF1ZXJ5LgorCSAqIFBhcmFtZXRlcnM6CisJICogc3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDE3LjAxLjIwL0ZCCisJICogMDUuMS4yMS9GQiByZWplY3QgbGVtbWEvd2YgPiA2NCBjaGFycy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoCisJCQlQcmVwYXJlZFN0YXRlbWVudCBzdG10LCAKKwkJCVN0cmluZyBsZW1tYSwgCisJCQlTdHJpbmcgd2YsIAorCQkJU3RyaW5nIGRlY29tcG9zaXRpb24sIAorCQkJYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQiOworCWZpbmFsIGJvb2xlYW4KKwkJYkxvZyA9IGZhbHNlOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCWJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCS8vIGNoZWNrIHNpemUgb2Ygd2YgYW5kIGxlbW1hIGFnYWluc3QgZmllbGQgc2l6ZSBpbiB0YWJsZSBHbGVtbUxlbW1hdGE6CisJaWYoIGxlbW1hLmxlbmd0aCgpID49IEdsZW1tREIubWF4TGVtbWFTaXplICkgCisJCXsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBsZW1tYSByZWplY3RlZCAoPiAlZCk6ICclcychXG4iLAorCQkJCWZ1bmMsIG1heExlbW1hU2l6ZSwgbGVtbWEpOworCQlyZXR1cm4gNDsKKwkJfQorCWlmKCB3Zi5sZW5ndGgoKSA+PSBHbGVtbURCLm1heFdmU2l6ZSApIAorCQl7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2YgcmVqZWN0ZWQgKD4gJWQpOiAnJXMnIVxuIiwKKwkJCQlmdW5jLCBtYXhXZlNpemUsIHdmKTsKKwkJcmV0dXJuIDU7CisJCX0KKwkgCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIAorCS8vIGZvciBsb2dpbmcgb25seToKKwlzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJaWYoIGJMb2cgKQorCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKyAgICAvLyBub3cgaW5zZXJ0IG5ldyB2YWx1ZXMgaW50byBQcmVwYXJlZFN0YXRlbWVudDoKKyAgICB0cnkgeworICAgIAlzdG10LnNldFN0cmluZyggMSwgbGVtbWEpOworICAgICAgICBzdG10LnNldFN0cmluZyggMiwgd2YpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oMywgcHJvcDEpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNCwgcHJvcDIpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNSwgc3BlYyk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJlcGFyZWQgc3RtdCA9ICclcycuXG4iLCAgZnVuYywgc3RtdC50b1N0cmluZygpKTsKKyAgICAgICAgfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZTEpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigJIkVycm9yOiAlczogd2hpbGUgZmlsbGluZyBwcmVwYXJlZCBzdGF0ZW1lbnQgd2l0aCBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JyViJyBwcm9wMj0nJWInIHNwZWM9JyViJyFcbiIsICAKKwkJCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWlmKCArK25FeGNlcHRTdG10IDw9IDEgKQorCQkJZTEucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisgICAgCisgICAgdHJ5IHsKKwkJLy8gZXhlY3V0ZSB0aGUgZmlsbGVkIHByZXBhcmVkIHN0YXRlbWVudDoKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZSgpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViISAobj0lZClcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMsIG4pOworIAkJCXJldHVybiAyOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJaWYoICsrbkV4Y2VwdEluc2VydCA8PSAxICkKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAzOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIGludG8gRGVyYnkgREIuCisJICogUGFyYW1ldGVyczoKKwkgKiBjb250YWluc1NwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxMC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvcyhTdGF0ZW1lbnQgc3RtdCwgU3RyaW5nIGxlbW1hLCBTdHJpbmcgd2YsIFN0cmluZyBkZWNvbXBvc2l0aW9uLCBib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvcyI7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJQm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIHNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAgICAKKyAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKwl0cnkgeworCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKHNxbEluc2VydCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWFEYXRhCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgZnJvbSB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dDogbGVtbWEgKyBHTEVNTV9PUFRTX3h4eCAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hRGF0YShMZW1tYUluZm8gbGVtbWFJbmZvLCBQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWFEYXRhIjsKKworCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWxlbW1hSW5mby5jb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCWxlbW1hSW5mby5zdG10ID0gbGVtbWFJbmZvLmNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJaW50IHIgPSByZWFkREJMZW1tYShsZW1tYUluZm8uc3RtdCwgbGVtbWFJbmZvKTsKKwkJCQorCQlpZiggciAhPSAwICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGdldCBkYXRhIGZvciBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyFcbiIsIAorCQkJCQlmdW5jLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGxlbW1hSW5mby5jb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYURhdGEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBieSBhY2Nlc3NpbmcgdGhlIEdsZW1tREIuCisJICogSW5wdXQgOiBsZW1tYSArIHByb3AxKzIgKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqIE91dHB1dDogCisJICogIC0gY29udGFpbnMgYSBSZXN1bHRTZXQgZm9yIGZldGNoaW5nIHRoZSB3b3JkZm9ybXMuCisJICogCSAgVGhpcyBSZXN1bHRTZXQgd2lsbCBoYXZlIGJlIGJlIGNsb3NlZCB3aXRoIExlbW1hSW5mby5jbG9zZSgpLgorCSAqIAkgIFRoZSBuby4gb2YgZm91bmQgd29yZGZvcm1zIGlzIG5vdCBrbm93biB0aWxsIHdlCisJICogCSAgZmV0Y2ggYWxsIG9mIHRoZW0gZnJvbSBSZXN1bHRTZXQhIAorCSAqIAktIGR1ZSB0byBTRUxFQ1QgRElTVElOQ1Qgb25seSB1bmlxIHdmIGFyZSByZXR1cm5lZC4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWEoU3RhdGVtZW50IHN0bXQsIExlbW1hSW5mbyBsZW1tYUluZm8pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYSI7CisJU3RyaW5nCisJCXNxbDsKKwkJCisJc3FsID0gU3RyaW5nLmZvcm1hdCgiU0VMRUNUIERJU1RJTkNUIHdmIGZyb20gJXMgV0hFUkUgbGVtbWE9JyVzJyAlcyAlcyAlcyIsIAorCQkJZGJUYWJsZSwKKwkJCWxlbW1hSW5mby5sZW1tYSwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIkFORCBwcm9wMT0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICJBTkQgcHJvcDE9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIkFORCBwcm9wMj0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICJBTkQgcHJvcDI9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAxID8gIkFORCBzcGVjPSd0cnVlJyIgICA6IAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiQU5EIHNwZWM9J2ZhbHNlJyIgIDogIiIpOworCQorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIGZ1bmMsIGxlbW1hSW5mby5wcm9wMSwgbGVtbWFJbmZvLnByb3AyLCBsZW1tYUluZm8uc3BlYyk7CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWwgPSAnJXMnLlxuIiwgZnVuYywgc3FsKTsKKworCXRyeSB7CisJCWxlbW1hSW5mby5yZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOwkKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGVuIGV4ZWN1dGluZyBzcWw9JyVzJyFcbiIsIGZ1bmMsIHNxbCk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisJZmluYWxseSB7CisJCS8vIGFsbCBzcWwgc3R1ZmYgYXJlIGNsb3NlZCBvdXRzaWRlIHRoaXMgZnVuY3Rpb24sIHNvIGRvbid0IGNsb3NlIHRoZW0gaGVyZSEKKwkJfQkKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zCisJICogUmV0dXJucyBHZW5lcmFsIEluZm9zIGFib3V0IHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiByZWFkIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiSW5mb3MoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWRiSW5mbyA9IHJlYWREYkxlbW1hdGFJbmZvcyhzdG10KTsKKwkJCQorCQlpZiggZGJJbmZvID09IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgcmVhZCBHZW5lcmFsIEluZm9zIGZyb20gR2xlbW0gRGF0YWJhc2UhXG4iLCBmdW5jKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIG51bGw7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgc3RtdC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBtYXkgYmUgbnVsbC4KKwkJCisJfSAvLyByZWFkRGJJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkxlbW1hdGFJbmZvczoKKwkgKiByZWFkcyBhbmQgcmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjb250ZW50IAorCSAqIG9mIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiBSZXR1cm5zIDA9T0sgb3IgZXJyb3IgY29kZSA+IDAuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJMZW1tYXRhSW5mb3MoU3RhdGVtZW50IHN0bXQpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInJlYWREYkxlbW1hSW5mb3MiOworCVN0cmluZ1tdCisJCXNxbCA9IHsJIlNFTEVDVCBDT1VOVChkaXN0aW5jdCBsZW1tYSkgZnJvbSAiICsgZGJUYWJsZSAsCS8vIGNvdW50cyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YS4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUsCQkJCQkvLyBjb3VudHMgdG90YWwgbm8uIG9mIHN0b3JlZCB3b3JkZm9ybXMuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj10cnVlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj10cnVlIn07CisJUmVzdWx0U2V0CisJCXJlcyA9IG51bGw7IAorCWludFtdCisJCW5Db3VudHMgPSBuZXcgaW50W3NxbC5sZW5ndGhdOworCWludAkJCisJCWkgPSAwLCAKKwkJbkRpc3RMZW1tYXRhID0gLTEsCS8vIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhIGluIERCLgorCQluV2ZzCQkgPSAtMTsJLy8gbm8uIG9mIHdvcmRmb3JtcyBpbiBEQi4KKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogZXh0cmFjdGluZyBhZ3JlZ2F0ZWQgaW5mb3MgYWJvdXQgRGF0YWJhc2UgY29udGVudHMuLi5cbiIsIGZ1bmMpOworCQorCWRiSW5mbyA9IG5ldyBHbGVtbURCSW5mbygpOworCisJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJdHJ5IHsKKwkJZm9yKGk9MDsgaTxzcWwubGVuZ3RoOyBpKyspCisJCQl7CisJCQlyZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWxbaV0pOworCQkJaWYoIHJlcy5uZXh0KCkgKQorCQkJCWRiSW5mby5jb3VudHNbaV0gPSByZXMuZ2V0SW50KDEpOyAvLyBjb3VudCBpcyBpbiBjb2x1bW4gMS4KKwkJCWVsc2UKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZXh0cmFjdCBjb3VudCBmcm9tICclcychXG4iLCBmdW5jLCBzcWxbaV0pOworCQkJCWRiSW5mby5jb3VudHNbaV0gPSAtMTsKKwkJCQl9CisJCQl9CisgICAgICAgCisgICAgICAgIH0KKyAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAJeworICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHNxbD0nJXMnIGZhaWxlZCFcbiIsIGZ1bmMsIHNxbFtpXSk7CisgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgCX0KKwlmaW5hbGx5IHsKKwkJdHJ5IHsKKwkJCXJlcy5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gT0sKKwl9IC8vIHJlYWREYkxlbW1hdGFJbmZvcworCQorCS8qKioqKioqKioqKioqKioqKioqKiBUZXN0IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQorCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvc190ZXN0CisJICogVGhpcyBpcyBkZWJ1ZyBjb2RlIHdyaXR0ZW4gdG8gdGVzdCBpZiB3ZSBjYW4gYWNjZXNzIHRoZSBEZXJieQorCSAqIERhdGFiYXNlIGZyb20gYW4gZXh0ZXJuYWwgSmF2YSBQcm9ncmFtbS4KKwkgKiAwOC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgcmVhZERiSW5mb3NfdGVzdCgpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJU3RyaW5nCisJCWluc2VydFN0bXQgPSAiIjsKKwkKKwkvLyBDb25uZWN0IHRvIERlcmJ5IGRhdGFiYXNlOgorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQkKKwkJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJCXRyeQorCQkJeworCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIFN0cmluZyAKKyAgICAgICAgICAgIAlzcWwgPSAiU0VMRUNUICogRlJPTSAiICsgZGJUYWJsZTsKKyAgICAgICAgICAgIFJlc3VsdFNldCAKKyAgICAgICAgICAgIAlyZXN1bHQgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOworIAorICAgICAgICAgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiB0YWJsZSAnJXMnOlxuIiwgIGZ1bmMsIGRiVGFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAocmVzdWx0Lm5leHQoKSkgeworICAgICAgICAgICAgCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIiclcycgOiAnJXMnIDogJyVzJyA6ICclcycgLlxuIiwgcmVzdWx0LmdldFN0cmluZygxKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMiksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDMpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZyg0KSk7CisgICAgICAgIAkJaW5zZXJ0U3RtdCA9IGluc2VydFN0bXQgKyAiPHA+IiArIHJlc3VsdC5nZXRTdHJpbmcoMSkgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoMikgKyAiIDogIiArCisgICAgICAgICAgICAgICAgCQkgICAgIHJlc3VsdC5nZXRTdHJpbmcoMykgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoNCkgKyAiPC9wPiI7CisgICAgICAgICAgICAJfQorCQkJfQorCSAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAgICAgCXsKKwkgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogaW5zZXJ0U3RtdD0nJXMnIGZhaWxlZCEuXG4iLCBmdW5jLCBzdG10KTsKKyAgICAgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIAl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGluZyAnJXMgZmFpbGVkIVxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCXJldHVybiAxOworCQl9CisJCisJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCXRyeSB7CisJCWNvbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCQorCX0gLy8gcmVhZERiSW5mb3NfdGVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIGltcG9ydEdsZW1tTGVtYXRhX3Rlc3QKKwkgKiBUZXN0IFZlcnNpb24uCisJICogMTIuMTIuMTkvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0KFN0cmluZyBmbikKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QiOworCUlucHV0U3RyZWFtIAorCQlpbjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbjIgPSBudWxsOworCVN0cmluZworCQlsaW5lOworCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJcjsKKwkKKwkvKgorCSAqIFJlYWQgTGVtbWF0YSArIEluZm8gZnJvbSBmaWxlOiAKKwkgKi8KKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQkKKwl0cnkgeworCQkvL2luID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oIG5ldyBGaWxlSW5wdXRTdHJlYW0oZm4pICk7CisJCWluMiA9IG5ldyBCdWZmZXJlZFJlYWRlciggbmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJd2hpbGUoIChsaW5lID0gaW4yLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCA9PSAzICkKKwkJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogSW1wb3J0OiBsZW09JyVzJyBEZWNvbXA9JyVzJyBXZj0nJXMnLlxuIiwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMV0sIGxlbW1hSW5mb1syXSk7CisJCQllbHNlCisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6IGltcG9ydEdsZW1tTGFtYXRhOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzIVxuIiwgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQl9CisJCX0gCisJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBvcGVuICclcychXG4iLCBmdW5jLCBmbik7CisJCXJldHVybiAxOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisKKwl0cnkgeworCQlpbjIuY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwkvKiBDaGVjayBjb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCSAqLyAKKwlyID0gcmVhZERiSW5mb3NfdGVzdCgpOworCWlmKCByICE9IDAgKQorCQlyZXR1cm4gcjsKKwkJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdAorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9mL2UwMGE5OWY5OTQxYTAwMWExOWIyODc1ZGUwMjcyYzZjIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9mL2UwMGE5OWY5OTQxYTAwMWExOWIyODc1ZGUwMjcyYzZjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3OTg4YjQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2YvZTAwYTk5Zjk5NDFhMDAxYTE5YjI4NzVkZTAyNzJjNmMKQEAgLTAsMCArMSw2MyBAQAorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgCisJeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisJeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgPGdyb3VwSWQ+ZGUua29yYXAuc2VydmljZXM8L2dyb3VwSWQ+CisgIDxhcnRpZmFjdElkPkdsZW1tU2VydmljZXMyPC9hcnRpZmFjdElkPgorICA8dmVyc2lvbj4wLjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KKyAgPG5hbWU+R2xlbW1TZXJ2aWNlczwvbmFtZT4KKyAgCisgIDxkZXNjcmlwdGlvbj5SRVNUZnVsbCBHbGVtbVNlcnZpY2VzIGbDvHIgS29yQVA8L2Rlc2NyaXB0aW9uPgorICAKKyAgPGRlcGVuZGVuY2llcz4KKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+CisgICAgICA8dmVyc2lvbj4zLjguMTwvdmVyc2lvbj4KKyAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICA8L2RlcGVuZGVuY3k+CisgICA8ZGVwZW5kZW5jeT4KKyAgICA8Z3JvdXBJZD5qYXZheC5zZXJ2bGV0PC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPnNlcnZsZXQtYXBpPC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjIuNTwvdmVyc2lvbj4KKyAgIDwvZGVwZW5kZW5jeT4KKyAgIDwhLS0gaHR0cHM6Ly9tdm5yZXBvc2l0b3J5LmNvbS9hcnRpZmFjdC9qYXZheC53cy5ycy9qYXZheC53cy5ycy1hcGkgLS0+CisgICA8ZGVwZW5kZW5jeT4KKyAgICA8Z3JvdXBJZD5qYXZheC53cy5yczwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5qYXZheC53cy5ycy1hcGk8L2FydGlmYWN0SWQ+CisgICAgPHZlcnNpb24+Mi4wPC92ZXJzaW9uPgorICAgPC9kZXBlbmRlbmN5PgorICA8L2RlcGVuZGVuY2llcz4KKyAgCisgIDxidWlsZD4KKyAgICA8c291cmNlRGlyZWN0b3J5PnNyYzwvc291cmNlRGlyZWN0b3J5PgorICAgIDxwbHVnaW5zPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tY29tcGlsZXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4zLjcuMDwvdmVyc2lvbj4KKyAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgPHNvdXJjZT4xLjg8L3NvdXJjZT4KKyAgICAgICAgICA8dGFyZ2V0PjEuODwvdGFyZ2V0PgorICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICA8L3BsdWdpbj4KKyAgICAgIDxwbHVnaW4+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXdhci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjMuMi4xPC92ZXJzaW9uPgorICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8ZmFpbE9uTWlzc2luZ1dlYlhtbD5mYWxzZTwvZmFpbE9uTWlzc2luZ1dlYlhtbD4KKyAgICAgICAgICA8d2FyU291cmNlRGlyZWN0b3J5PldlYkNvbnRlbnQ8L3dhclNvdXJjZURpcmVjdG9yeT4KKyAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgPC9wbHVnaW4+CisgICAgICA8cGx1Z2luPgorICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4td2FyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICA8d2ViWG1sPldlYkNvbnRlbnRcV0VCLUlORlx3ZWIueG1sPC93ZWJYbWw+CisgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgPC9wbHVnaW4+CisgICAgPC9wbHVnaW5zPgorICAgIDxmaW5hbE5hbWU+R2xlbW1TZXJ2aWNlczwvZmluYWxOYW1lPgorICA8L2J1aWxkPgorICAKKzwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2YzLzQwMmE1NmI1NGEzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9mMy80MDJhNTZiNTRhM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGYzMzk2Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9mMy80MDJhNTZiNTRhM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpAQCAtMCwwICsxLDcxNCBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnNxbC5Db25uZWN0aW9uOworaW1wb3J0IGphdmEuc3FsLkRyaXZlck1hbmFnZXI7CitpbXBvcnQgamF2YS5zcWwuUHJlcGFyZWRTdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS5zcWwuUmVzdWx0U2V0OworaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5TdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitwdWJsaWMgY2xhc3MgR2xlbW1EQgorCit7CisJc3RhdGljIHB1YmxpYyBTdHJpbmcgZGJUYWJsZSAJPSAiR2xlbW1MZW1tYXRhIjsKKwlzdGF0aWMgU3RyaW5nIGRiTGVtbWEgCQkgCT0gImxlbW1hIjsKKwlzdGF0aWMgU3RyaW5nIGRiV2YJIAkJCT0gIndmIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDEgCQkJPSAicHJvcDEiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMiAJCQk9ICJwcm9wMiI7CisKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKG92ZXJ3cml0dGVuIGJ5IEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZuYW1lREIgPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgc2VydmVySG9zdCA9ICIvL2xvY2FsaG9zdDoxNTI3LyI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChmaW5hbCBhc3NpZ25tZW50cyk6CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyRW1iID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZERyaXZlciI7CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyQ2xpZW50ID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREcml2ZXIiOworCisJZmluYWwgc3RhdGljIGJvb2xlYW4KKwkJdXNlUHJlcGFyZWRTdG10ID0gdHJ1ZTsgLy8gMT11c2UgUHJlcGFyZWRTdGF0ZW1lbnQgYW5kIG5vdCBTdGF0ZW1lbnQuCisJCisJLy8gdmFsdWVzIHRvIGJlIGluc2VydGVkOiBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYy4KKwlzdGF0aWMgU3RyaW5nIGluc2VydFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKCclcycsICclcycsICclcycsICclcycsICclcycpIjsKKwlzdGF0aWMgU3RyaW5nIGluc2VydFByZXBhcmVkUXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoPywgPywgPywgPywgPykiOworCQorCS8qCisJICogc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJICogCisJICogQXJndW1lbnRzOgorCSAqIHByb3BzCTogUHJvcGVydGllcyBsb2FkZWQgYnkgdGhlIEdsZW1tU2VydmljZXMuCisJICogTm90ZXM6CisJICogLSB0aGlzIGZ1bmN0aW9uIGxvYWRzIG9ubHkgdGhvc2UgQ29uc3RhbnRzIG5lZWRlZCBpbiB0aGlzIGNsYXNzLgorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcwlwcm9wcykKKwkKKwl7CisJZm5hbWVEQgkJIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgCSIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlzZXJ2ZXJIb3N0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJzZXJ2ZXJIb3N0IiwJIi8vbG9jYWxob3N0OjE1MjcvIik7CisJZGVyYnlEQlVSTCAJCT0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCQkJCisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCQkJCQlpbXBvcnRHbGVtbUxlbWF0YQorCSAqIFBhcmFtZXRlcnM6CisJICogZm4JCSA6IGFic29sdXRlIGZpbGUgbmFtZSBvZiBHTEVNTSBvdXRwdXQgW0lTTzg4NTktMV0gZXhwZWN0ZWQsIG5vdCBVVEYtOCEKKwkgKiBwcm9wcwkgOiBQcm9wZXJ0aWVzIHZvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgdG8gc2V0IGNvbnN0YW50cyBuZWVkZWQKKwkgKiAJCQkgICBpbiB0aGlzIGNsYXNzLgorCSAqIGRicGF0aAkgOiBsb2NhdGlvbiArIG5hbWUgb2YgZGF0YWJhc2Ugd2hlcmUgdG8gc3RvcmUgbGVtbWF0YSt3ZnMuCisJICogUmV0dXJucwkgOiAwPU9LLCAtMTogZ2VuZXJhbCBlcnJvcjsgPiAwIDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAKKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIGR5bmFtaWNhbGx5IGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqIDA0LjExLjIxL0ZCIGRicGF0aC4KKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YShTdHJpbmcgZm4sIFByb3BlcnRpZXMgcHJvcHMsIGZpbmFsIFN0cmluZyBkYnBhdGgpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YSI7CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4gPSBudWxsOworCWludAorCQluRXJyb3JzOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKworCS8vIG9wZW4gcmVhZGVyIG9uIEdsZW1tIExlbW1hdGE6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJCisJCW5FcnJvcnMgPSB3cml0ZURCTGVtbWF0YShpbik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIGZyb20gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwkvLyBjbG9zZSBSZWFkZXI6CisJdHJ5IHsKKwkJaW4uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQluRXJyb3JzID0gLTE7CisJCX0KKwkKKyAJaWYoIG5FcnJvcnMgPT0gMCApCisgCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydCBkb25lIHN1Y2Nlc3NmdWxseS5cbiIsIGZ1bmMpOworIAllbHNlCisgCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydDogJWQgRXJyb3JzIVxuIiwgZnVuYywgbkVycm9ycyk7CisgCQorCXJldHVybiBuRXJyb3JzOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhCisJCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIHdyaXRlREJMZW1tYXRhKCkKKwkgKiBzdG9yZXMgbGlzdCBvZiBsZW1tYXRhICsgaW5mb3MgaW50byBEZXJieSBkYi4KKwkgKiBGaWxlIGZvcm1hdDogIkxlbW1hIERlY29tcG9zaXRpb24gV2YiLAorCSAqICAgICAgICAgICAgICBlLmcuOiAiSO+/vXVzZXIgKy0gSGF1cyIuCisJICogUmV0dXJuczogMCA9IE9LIG9yIC0xOiBnZW5lcmFsIGVycm9yIG9yID4gMDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAwOS4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hdGEoQnVmZmVyZWRSZWFkZXIgaW4pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWF0YSI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlQcmVwYXJlZFN0YXRlbWVudAorCQlzdG10UHJlcCA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgCSA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CQorCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCXJldCA9IDA7IC8vIE9LLgorCWJvb2xlYW4KKwkJY29udGFpbnNTcGVjOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKworCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCXN0bXRQcmVwID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0UHJlcGFyZWRRdWVyeSk7CisJCWVsc2UKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisKKwkJd2hpbGUoIChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoICE9IDMgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6ICclcycgaGFzICVkIGNvbXBvbmVudHMhIEV4cGVjdGVkID0gMyEgQ2Fubm90IGJlIHN0b3JlZCFcbiIsIGZ1bmMsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJCW5FcnJvcnMrKzsKKwkJCQljb250aW51ZTsKKwkJCQl9CisJCQkKKwkJCS8vIEdldCBJbmZvLCBpZiB3b3JkZm9ybSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgJy0nLCBpbnRlcnB1bmN0aW9uIGV0Yy46CisJCQkvLyBsZW1tYUluZm9bMl0gPSB3b3JkZm9ybS4KKwkJCWNvbnRhaW5zU3BlYyA9IExlbW1hSW5mby5pc1dmU3BlY2lhbENhc2UobGVtbWFJbmZvWzJdKTsKKwkJCS8vIHN0b3JlIGludG8gREI6CisJCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZChzdG10UHJlcCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvcyhzdG10LCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJCisJCQlpZiggcmV0ICE9IDAgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBzdG9yZSBsZW1tYSAnJXMnIGludG8gREIhXG4iLCBmdW5jLCBsaW5lKTsKKwkJCQluRXJyb3JzKys7IAorCQkJCX0KKwkJCX0gLy8gd2hpbGUKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgR2xlbW0gbGVtbWF0YStpbmZvcyBmcm9tIGZpbGUhIEV4aXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIC0xOyAKKwkJfQkKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIC0xOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIAorCQkJCXN0bXQuY2xvc2UoKTsKKwkJCWlmKCBzdG10UHJlcCAhPSBudWxsICkgCisJCQkJc3RtdFByZXAuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIG5FcnJvcnM7IC8vIDA9T0ssID4wID0gbm8uIG9mIGVycm9ycy4KKwl9IC8vIHdyaXRlREJMZW1tYXRhCisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIHJ1bGVzIGludG8gRGVyYnkgREIuCisJICogTm90ZXM6CisJICogLSB0aGlzIGlzIHRoZSB2ZXJzaW9uIHdpdGggYSBQcmVwYXJlZFF1ZXJ5LgorCSAqIFBhcmFtZXRlcnM6CisJICogc3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDE3LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKAorCQkJUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCwgCisJCQlTdHJpbmcgbGVtbWEsIAorCQkJU3RyaW5nIHdmLCAKKwkJCVN0cmluZyBkZWNvbXBvc2l0aW9uLCAKKwkJCWJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkIjsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlib29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgCisJLy8gZm9yIGxvZ2luZyBvbmx5OgorCXNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKyAgICAvLyBub3cgaW5zZXJ0IG5ldyB2YWx1ZXMgaW50byBQcmVwYXJlZFN0YXRlbWVudDoKKyAgICB0cnkgeworICAgIAlzdG10LnNldFN0cmluZyggMSwgbGVtbWEpOworICAgICAgICBzdG10LnNldFN0cmluZyggMiwgd2YpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oMywgcHJvcDEpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNCwgcHJvcDIpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNSwgc3BlYyk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJlcGFyZWQgc3RtdCA9ICclcycuXG4iLCAgZnVuYywgc3RtdC50b1N0cmluZygpKTsKKyAgICAgICAgfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZTEpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigJIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0nJWInIHByb3AyPSclYicgc3BlYz0nJWInIVxuIiwgIAorCQkJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisgICAgCisgICAgdHJ5IHsKKwkJLy8gZXhlY3V0ZSB0aGUgZmlsbGVkIHByZXBhcmVkIHN0YXRlbWVudDoKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZSgpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDE7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfTsKKwkKKyAgICAKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvczoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBpbnRvIERlcmJ5IERCLgorCSAqIFBhcmFtZXRlcnM6CisJICogY29udGFpbnNTcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTAuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3MoU3RhdGVtZW50IHN0bXQsIFN0cmluZyBsZW1tYSwgU3RyaW5nIHdmLCBTdHJpbmcgZGVjb21wb3NpdGlvbiwgYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3MiOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCUJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICBzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgICAgCisgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisJdHJ5IHsKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZShzcWxJbnNlcnQpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDE7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hRGF0YQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGZyb20gdGhlIEdsZW1tREIuCisJICogSW5wdXQ6IGxlbW1hICsgR0xFTU1fT1BUU194eHggKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYURhdGEoTGVtbWFJbmZvIGxlbW1hSW5mbywgUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hRGF0YSI7CisKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlsZW1tYUluZm8uY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlsZW1tYUluZm8uc3RtdCA9IGxlbW1hSW5mby5jb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWludCByID0gcmVhZERCTGVtbWEobGVtbWFJbmZvLnN0bXQsIGxlbW1hSW5mbyk7CisJCQkKKwkJaWYoIHIgIT0gMCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBnZXQgZGF0YSBmb3IgbGVtbWE9JyVzJyBvcHRpb25zPSclcychXG4iLCAKKwkJCQkJZnVuYywgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCQkJcmV0dXJuIDE7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBsZW1tYUluZm8uY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWFEYXRhCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgYnkgYWNjZXNzaW5nIHRoZSBHbGVtbURCLgorCSAqIElucHV0IDogbGVtbWEgKyBwcm9wMSsyIChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiBPdXRwdXQ6IAorCSAqICAtIGNvbnRhaW5zIGEgUmVzdWx0U2V0IGZvciBmZXRjaGluZyB0aGUgd29yZGZvcm1zLgorCSAqIAkgIFRoaXMgUmVzdWx0U2V0IHdpbGwgaGF2ZSBiZSBiZSBjbG9zZWQgd2l0aCBMZW1tYUluZm8uY2xvc2UoKS4KKwkgKiAJICBUaGUgbm8uIG9mIGZvdW5kIHdvcmRmb3JtcyBpcyBub3Qga25vd24gdGlsbCB3ZQorCSAqIAkgIGZldGNoIGFsbCBvZiB0aGVtIGZyb20gUmVzdWx0U2V0ISAKKwkgKiAJLSBkdWUgdG8gU0VMRUNUIERJU1RJTkNUIG9ubHkgdW5pcSB3ZiBhcmUgcmV0dXJuZWQuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hKFN0YXRlbWVudCBzdG10LCBMZW1tYUluZm8gbGVtbWFJbmZvKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWEiOworCVN0cmluZworCQlzcWw7CisJCQorCXNxbCA9IFN0cmluZy5mb3JtYXQoIlNFTEVDVCBESVNUSU5DVCB3ZiBmcm9tICVzIFdIRVJFIGxlbW1hPSclcycgJXMgJXMgJXMiLCAKKwkJCWRiVGFibGUsCisJCQlsZW1tYUluZm8ubGVtbWEsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICJBTkQgcHJvcDE9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AxID09IDEgPyAiQU5EIHByb3AxPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICJBTkQgcHJvcDI9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AyID09IDEgPyAiQU5EIHByb3AyPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICJBTkQgc3BlYz0ndHJ1ZSciICAgOiAKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIkFORCBzcGVjPSdmYWxzZSciICA6ICIiKTsKKwkKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCBmdW5jLCBsZW1tYUluZm8ucHJvcDEsIGxlbW1hSW5mby5wcm9wMiwgbGVtbWFJbmZvLnNwZWMpOworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsID0gJyVzJy5cbiIsIGZ1bmMsIHNxbCk7CisKKwl0cnkgeworCQlsZW1tYUluZm8ucmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsJCisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hlbiBleGVjdXRpbmcgc3FsPSclcychXG4iLCBmdW5jLCBzcWwpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBhbGwgc3FsIHN0dWZmIGFyZSBjbG9zZWQgb3V0c2lkZSB0aGlzIGZ1bmN0aW9uLCBzbyBkb24ndCBjbG9zZSB0aGVtIGhlcmUhCisJCX0JCisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvcworCSAqIFJldHVybnMgR2VuZXJhbCBJbmZvcyBhYm91dCB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgcmVhZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkluZm9zKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlkYkluZm8gPSByZWFkRGJMZW1tYXRhSW5mb3Moc3RtdCk7CisJCQkKKwkJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHJlYWQgR2VuZXJhbCBJbmZvcyBmcm9tIEdsZW1tIERhdGFiYXNlIVxuIiwgZnVuYyk7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiBudWxsOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIGNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIHN0bXQuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gbWF5IGJlIG51bGwuCisJCQorCX0gLy8gcmVhZERiSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJMZW1tYXRhSW5mb3M6CisJICogcmVhZHMgYW5kIHJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY29udGVudCAKKwkgKiBvZiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogUmV0dXJucyAwPU9LIG9yIGVycm9yIGNvZGUgPiAwLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiTGVtbWF0YUluZm9zKFN0YXRlbWVudCBzdG10KQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJyZWFkRGJMZW1tYUluZm9zIjsKKwlTdHJpbmdbXQorCQlzcWwgPSB7CSJTRUxFQ1QgQ09VTlQoZGlzdGluY3QgbGVtbWEpIGZyb20gIiArIGRiVGFibGUgLAkvLyBjb3VudHMgbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlLAkJCQkJLy8gY291bnRzIHRvdGFsIG5vLiBvZiBzdG9yZWQgd29yZGZvcm1zLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9dHJ1ZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9dHJ1ZSJ9OworCVJlc3VsdFNldAorCQlyZXMgPSBudWxsOyAKKwlpbnRbXQorCQluQ291bnRzID0gbmV3IGludFtzcWwubGVuZ3RoXTsKKwlpbnQJCQorCQlpID0gMCwgCisJCW5EaXN0TGVtbWF0YSA9IC0xLAkvLyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YSBpbiBEQi4KKwkJbldmcwkJID0gLTE7CS8vIG5vLiBvZiB3b3JkZm9ybXMgaW4gREIuCisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGV4dHJhY3RpbmcgYWdyZWdhdGVkIGluZm9zIGFib3V0IERhdGFiYXNlIGNvbnRlbnRzLi4uXG4iLCBmdW5jKTsKKwkKKwlkYkluZm8gPSBuZXcgR2xlbW1EQkluZm8oKTsKKworCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCXRyeSB7CisJCWZvcihpPTA7IGk8c3FsLmxlbmd0aDsgaSsrKQorCQkJeworCQkJcmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsW2ldKTsKKwkJCWlmKCByZXMubmV4dCgpICkKKwkJCQlkYkluZm8uY291bnRzW2ldID0gcmVzLmdldEludCgxKTsgLy8gY291bnQgaXMgaW4gY29sdW1uIDEuCisJCQllbHNlCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGV4dHJhY3QgY291bnQgZnJvbSAnJXMnIVxuIiwgZnVuYywgc3FsW2ldKTsKKwkJCQlkYkluZm8uY291bnRzW2ldID0gLTE7CisJCQkJfQorCQkJfQorICAgICAgIAorICAgICAgICB9CisgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgCXsKKyAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBzcWw9JyVzJyBmYWlsZWQhXG4iLCBmdW5jLCBzcWxbaV0pOworICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBudWxsOworICAgIAl9CisJZmluYWxseSB7CisJCXRyeSB7CisJCQlyZXMuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIE9LCisJfSAvLyByZWFkRGJMZW1tYXRhSW5mb3MKKwkKKwkvKioqKioqKioqKioqKioqKioqKiogVGVzdCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3NfdGVzdAorCSAqIFRoaXMgaXMgZGVidWcgY29kZSB3cml0dGVuIHRvIHRlc3QgaWYgd2UgY2FuIGFjY2VzcyB0aGUgRGVyYnkKKwkgKiBEYXRhYmFzZSBmcm9tIGFuIGV4dGVybmFsIEphdmEgUHJvZ3JhbW0uCisJICogMDguMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IHJlYWREYkluZm9zX3Rlc3QoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCVN0cmluZworCQlpbnNlcnRTdG10ID0gIiI7CisJCisJLy8gQ29ubmVjdCB0byBEZXJieSBkYXRhYmFzZToKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkJCisJCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCQl0cnkKKwkJCXsKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBTdHJpbmcgCisgICAgICAgICAgICAJc3FsID0gIlNFTEVDVCAqIEZST00gIiArIGRiVGFibGU7CisgICAgICAgICAgICBSZXN1bHRTZXQgCisgICAgICAgICAgICAJcmVzdWx0ID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsKKyAKKyAgICAgICAgICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogdGFibGUgJyVzJzpcbiIsICBmdW5jLCBkYlRhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKHJlc3VsdC5uZXh0KCkpIHsKKyAgICAgICAgICAgIAlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCInJXMnIDogJyVzJyA6ICclcycgOiAnJXMnIC5cbiIsIHJlc3VsdC5nZXRTdHJpbmcoMSksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDIpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygzKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoNCkpOworICAgICAgICAJCWluc2VydFN0bXQgPSBpbnNlcnRTdG10ICsgIjxwPiIgKyByZXN1bHQuZ2V0U3RyaW5nKDEpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDIpICsgIiA6ICIgKworICAgICAgICAgICAgICAgIAkJICAgICByZXN1bHQuZ2V0U3RyaW5nKDMpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDQpICsgIjwvcD4iOworICAgICAgICAgICAgCX0KKwkJCX0KKwkgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgICAgIAl7CisJICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGluc2VydFN0bXQ9JyVzJyBmYWlsZWQhLlxuIiwgZnVuYywgc3RtdCk7CisgICAgICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICBjb24uY2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3RpbmcgJyVzIGZhaWxlZCFcbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwl0cnkgeworCQljb24uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQkKKwl9IC8vIHJlYWREYkluZm9zX3Rlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiBpbXBvcnRHbGVtbUxlbWF0YV90ZXN0CisJICogVGVzdCBWZXJzaW9uLgorCSAqIDEyLjEyLjE5L0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdChTdHJpbmcgZm4pCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YV90ZXN0IjsKKwlJbnB1dFN0cmVhbSAKKwkJaW47CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4yID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCXI7CisJCisJLyoKKwkgKiBSZWFkIExlbW1hdGEgKyBJbmZvIGZyb20gZmlsZTogCisJICovCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJCisJdHJ5IHsKKwkJLy9pbiA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKCBuZXcgRmlsZUlucHV0U3RyZWFtKGZuKSApOworCQlpbjIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCXdoaWxlKCAobGluZSA9IGluMi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggPT0gMyApCisJCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IEltcG9ydDogbGVtPSclcycgRGVjb21wPSclcycgV2Y9JyVzJy5cbiIsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzFdLCBsZW1tYUluZm9bMl0pOworCQkJZWxzZQorCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiBpbXBvcnRHbGVtbUxhbWF0YTogJyVzJyBoYXMgJWQgY29tcG9uZW50cyFcbiIsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJfQorCQl9IAorCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgb3BlbiAnJXMnIVxuIiwgZnVuYywgZm4pOworCQlyZXR1cm4gMTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfQorCisJdHJ5IHsKKwkJaW4yLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCisJLyogQ2hlY2sgY29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwkgKi8gCisJciA9IHJlYWREYkluZm9zX3Rlc3QoKTsKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIHI7CisJCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZjQvZDA4NzQ4ODY0OTNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2Y0L2QwODc0ODg2NDkzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYzdiYmQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2Y0L2QwODc0ODg2NDkzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsNzEyIEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKK2ltcG9ydCBqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7CitpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAob3ZlcndyaXR0ZW4gYnkgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKGZpbmFsIGFzc2lnbm1lbnRzKToKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJFbWIgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIjsKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLyoKKwkgKiBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkgKiAKKwkgKiBBcmd1bWVudHM6CisJICogcHJvcHMJOiBQcm9wZXJ0aWVzIGxvYWRlZCBieSB0aGUgR2xlbW1TZXJ2aWNlcy4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgZnVuY3Rpb24gbG9hZHMgb25seSB0aG9zZSBDb25zdGFudHMgbmVlZGVkIGluIHRoaXMgY2xhc3MuCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzCXByb3BzKQorCQorCXsKKwlmbmFtZURCCQkgCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAJIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCXNlcnZlckhvc3QJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgInNlcnZlckhvc3QiLAkiLy9sb2NhbGhvc3Q6MTUyNy8iKTsKKwlkZXJieURCVVJMIAkJPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJCQkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogUmV0dXJucwkgOiAwPU9LLCAtMTogZ2VuZXJhbCBlcnJvcjsgPiAwIDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAKKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIGR5bmFtaWNhbGx5IGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCisJLy8gb3BlbiByZWFkZXIgb24gR2xlbW0gTGVtbWF0YToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQlpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmbikpOworCQkKKwkJbkVycm9ycyA9IHdyaXRlREJMZW1tYXRhKGluKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgZnJvbSAnJXMnIVxuIiwgZnVuYywgZm4pOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gLTE7CisJCX0KKworCS8vIGNsb3NlIFJlYWRlcjoKKwl0cnkgeworCQlpbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCW5FcnJvcnMgPSAtMTsKKwkJfQorCQorIAlpZiggbkVycm9ycyA9PSAwICkKKyAJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0IGRvbmUgc3VjY2Vzc2Z1bGx5LlxuIiwgZnVuYyk7CisgCWVsc2UKKyAJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0OiAlZCBFcnJvcnMhXG4iLCBmdW5jLCBuRXJyb3JzKTsKKyAJCisJcmV0dXJuIG5FcnJvcnM7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGEKKwkKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogd3JpdGVEQkxlbW1hdGEoKQorCSAqIHN0b3JlcyBsaXN0IG9mIGxlbW1hdGEgKyBpbmZvcyBpbnRvIERlcmJ5IGRiLgorCSAqIEZpbGUgZm9ybWF0OiAiTGVtbWEgRGVjb21wb3NpdGlvbiBXZiIsCisJICogICAgICAgICAgICAgIGUuZy46ICJI77+9dXNlciArLSBIYXVzIi4KKwkgKiBSZXR1cm5zOiAwID0gT0sgb3IgLTE6IGdlbmVyYWwgZXJyb3Igb3IgPiAwOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIDA5LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWF0YShCdWZmZXJlZFJlYWRlciBpbikKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYXRhIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVByZXBhcmVkU3RhdGVtZW50CisJCXN0bXRQcmVwID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCAJID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsJCisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQluRXJyb3JzID0gMCwKKwkJcmV0ID0gMDsgLy8gT0suCisJYm9vbGVhbgorCQljb250YWluc1NwZWM7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCisJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJc3RtdFByZXAgPSBjb24ucHJlcGFyZVN0YXRlbWVudChpbnNlcnRQcmVwYXJlZFF1ZXJ5KTsKKwkJZWxzZQorCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKworCQl3aGlsZSggKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggIT0gMyApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogJyVzJyBoYXMgJWQgY29tcG9uZW50cyEgRXhwZWN0ZWQgPSAzISBDYW5ub3QgYmUgc3RvcmVkIVxuIiwgZnVuYywgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQkJbkVycm9ycysrOworCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQorCQkJLy8gR2V0IEluZm8sIGlmIHdvcmRmb3JtIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSAnLScsIGludGVycHVuY3Rpb24gZXRjLjoKKwkJCS8vIGxlbW1hSW5mb1syXSA9IHdvcmRmb3JtLgorCQkJY29udGFpbnNTcGVjID0gTGVtbWFJbmZvLmlzV2ZTcGVjaWFsQ2FzZShsZW1tYUluZm9bMl0pOworCQkJLy8gc3RvcmUgaW50byBEQjoKKwkJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKHN0bXRQcmVwLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJZWxzZQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zKHN0bXQsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQkKKwkJCWlmKCByZXQgIT0gMCApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHN0b3JlIGxlbW1hICclcycgaW50byBEQiFcbiIsIGZ1bmMsIGxpbmUpOworCQkJCW5FcnJvcnMrKzsgCisJCQkJfQorCQkJfSAvLyB3aGlsZQorCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBHbGVtbSBsZW1tYXRhK2luZm9zIGZyb20gZmlsZSEgRXhpdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gLTE7IAorCQl9CQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgCisJCQkJY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgCisJCQkJc3RtdC5jbG9zZSgpOworCQkJaWYoIHN0bXRQcmVwICE9IG51bGwgKSAKKwkJCQlzdG10UHJlcC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gbkVycm9yczsgLy8gMD1PSywgPjAgPSBuby4gb2YgZXJyb3JzLgorCX0gLy8gd3JpdGVEQkxlbW1hdGEKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQ6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gcnVsZXMgaW50byBEZXJieSBEQi4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgaXMgdGhlIHZlcnNpb24gd2l0aCBhIFByZXBhcmVkUXVlcnkuCisJICogUGFyYW1ldGVyczoKKwkgKiBzcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTcuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoCisJCQlQcmVwYXJlZFN0YXRlbWVudCBzdG10LCAKKwkJCVN0cmluZyBsZW1tYSwgCisJCQlTdHJpbmcgd2YsIAorCQkJU3RyaW5nIGRlY29tcG9zaXRpb24sIAorCQkJYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQiOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCWJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICAKKwkvLyBmb3IgbG9naW5nIG9ubHk6CisJc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorICAgIC8vIG5vdyBpbnNlcnQgbmV3IHZhbHVlcyBpbnRvIFByZXBhcmVkU3RhdGVtZW50OgorICAgIHRyeSB7CisgICAgCXN0bXQuc2V0U3RyaW5nKCAxLCBsZW1tYSk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKCAyLCB3Zik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbigzLCBwcm9wMSk7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig0LCBwcm9wMik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig1LCBzcGVjKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcmVwYXJlZCBzdG10ID0gJyVzJy5cbiIsICBmdW5jLCBzdG10LnRvU3RyaW5nKCkpOworICAgICAgICB9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlMSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKAkiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSclYicgcHJvcDI9JyViJyBzcGVjPSclYichXG4iLCAgCisJCQkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKyAgICAKKyAgICB0cnkgeworCQkvLyBleGVjdXRlIHRoZSBmaWxsZWQgcHJlcGFyZWQgc3RhdGVtZW50OgorCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9OworCQorICAgIAorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIGludG8gRGVyYnkgREIuCisJICogUGFyYW1ldGVyczoKKwkgKiBjb250YWluc1NwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxMC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvcyhTdGF0ZW1lbnQgc3RtdCwgU3RyaW5nIGxlbW1hLCBTdHJpbmcgd2YsIFN0cmluZyBkZWNvbXBvc2l0aW9uLCBib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvcyI7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJQm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIHNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAgICAKKyAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKwl0cnkgeworCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKHNxbEluc2VydCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWFEYXRhCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgZnJvbSB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dDogbGVtbWEgKyBHTEVNTV9PUFRTX3h4eCAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hRGF0YShMZW1tYUluZm8gbGVtbWFJbmZvLCBQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWFEYXRhIjsKKworCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWxlbW1hSW5mby5jb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCWxlbW1hSW5mby5zdG10ID0gbGVtbWFJbmZvLmNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJaW50IHIgPSByZWFkREJMZW1tYShsZW1tYUluZm8uc3RtdCwgbGVtbWFJbmZvKTsKKwkJCQorCQlpZiggciAhPSAwICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGdldCBkYXRhIGZvciBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyFcbiIsIAorCQkJCQlmdW5jLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGxlbW1hSW5mby5jb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYURhdGEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBieSBhY2Nlc3NpbmcgdGhlIEdsZW1tREIuCisJICogSW5wdXQgOiBsZW1tYSArIHByb3AxKzIgKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqIE91dHB1dDogCisJICogIC0gY29udGFpbnMgYSBSZXN1bHRTZXQgZm9yIGZldGNoaW5nIHRoZSB3b3JkZm9ybXMuCisJICogCSAgVGhpcyBSZXN1bHRTZXQgd2lsbCBoYXZlIGJlIGJlIGNsb3NlZCB3aXRoIExlbW1hSW5mby5jbG9zZSgpLgorCSAqIAkgIFRoZSBuby4gb2YgZm91bmQgd29yZGZvcm1zIGlzIG5vdCBrbm93biB0aWxsIHdlCisJICogCSAgZmV0Y2ggYWxsIG9mIHRoZW0gZnJvbSBSZXN1bHRTZXQhIAorCSAqIAktIGR1ZSB0byBTRUxFQ1QgRElTVElOQ1Qgb25seSB1bmlxIHdmIGFyZSByZXR1cm5lZC4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWEoU3RhdGVtZW50IHN0bXQsIExlbW1hSW5mbyBsZW1tYUluZm8pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYSI7CisJU3RyaW5nCisJCXNxbDsKKwkJCisJc3FsID0gU3RyaW5nLmZvcm1hdCgiU0VMRUNUIERJU1RJTkNUIHdmIGZyb20gJXMgV0hFUkUgbGVtbWE9JyVzJyAlcyAlcyAlcyIsIAorCQkJZGJUYWJsZSwKKwkJCWxlbW1hSW5mby5sZW1tYSwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIkFORCBwcm9wMT0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICJBTkQgcHJvcDE9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIkFORCBwcm9wMj0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICJBTkQgcHJvcDI9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAxID8gIkFORCBzcGVjPSd0cnVlJyIgICA6IAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiQU5EIHNwZWM9J2ZhbHNlJyIgIDogIiIpOworCQorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIGZ1bmMsIGxlbW1hSW5mby5wcm9wMSwgbGVtbWFJbmZvLnByb3AyLCBsZW1tYUluZm8uc3BlYyk7CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWwgPSAnJXMnLlxuIiwgZnVuYywgc3FsKTsKKworCXRyeSB7CisJCWxlbW1hSW5mby5yZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOwkKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGVuIGV4ZWN1dGluZyBzcWw9JyVzJyFcbiIsIGZ1bmMsIHNxbCk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisJZmluYWxseSB7CisJCS8vIGFsbCBzcWwgc3R1ZmYgYXJlIGNsb3NlZCBvdXRzaWRlIHRoaXMgZnVuY3Rpb24sIHNvIGRvbid0IGNsb3NlIHRoZW0gaGVyZSEKKwkJfQkKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zCisJICogUmV0dXJucyBHZW5lcmFsIEluZm9zIGFib3V0IHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiByZWFkIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiSW5mb3MoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWRiSW5mbyA9IHJlYWREYkxlbW1hdGFJbmZvcyhzdG10KTsKKwkJCQorCQlpZiggZGJJbmZvID09IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgcmVhZCBHZW5lcmFsIEluZm9zIGZyb20gR2xlbW0gRGF0YWJhc2UhXG4iLCBmdW5jKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIG51bGw7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgc3RtdC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBtYXkgYmUgbnVsbC4KKwkJCisJfSAvLyByZWFkRGJJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkxlbW1hdGFJbmZvczoKKwkgKiByZWFkcyBhbmQgcmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjb250ZW50IAorCSAqIG9mIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiBSZXR1cm5zIDA9T0sgb3IgZXJyb3IgY29kZSA+IDAuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJMZW1tYXRhSW5mb3MoU3RhdGVtZW50IHN0bXQpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInJlYWREYkxlbW1hSW5mb3MiOworCVN0cmluZ1tdCisJCXNxbCA9IHsJIlNFTEVDVCBDT1VOVChkaXN0aW5jdCBsZW1tYSkgZnJvbSAiICsgZGJUYWJsZSAsCS8vIGNvdW50cyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YS4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUsCQkJCQkvLyBjb3VudHMgdG90YWwgbm8uIG9mIHN0b3JlZCB3b3JkZm9ybXMuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj10cnVlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj10cnVlIn07CisJUmVzdWx0U2V0CisJCXJlcyA9IG51bGw7IAorCWludFtdCisJCW5Db3VudHMgPSBuZXcgaW50W3NxbC5sZW5ndGhdOworCWludAkJCisJCWkgPSAwLCAKKwkJbkRpc3RMZW1tYXRhID0gLTEsCS8vIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhIGluIERCLgorCQluV2ZzCQkgPSAtMTsJLy8gbm8uIG9mIHdvcmRmb3JtcyBpbiBEQi4KKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogZXh0cmFjdGluZyBhZ3JlZ2F0ZWQgaW5mb3MgYWJvdXQgRGF0YWJhc2UgY29udGVudHMuLi5cbiIsIGZ1bmMpOworCQorCWRiSW5mbyA9IG5ldyBHbGVtbURCSW5mbygpOworCisJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJdHJ5IHsKKwkJZm9yKGk9MDsgaTxzcWwubGVuZ3RoOyBpKyspCisJCQl7CisJCQlyZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWxbaV0pOworCQkJaWYoIHJlcy5uZXh0KCkgKQorCQkJCWRiSW5mby5jb3VudHNbaV0gPSByZXMuZ2V0SW50KDEpOyAvLyBjb3VudCBpcyBpbiBjb2x1bW4gMS4KKwkJCWVsc2UKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZXh0cmFjdCBjb3VudCBmcm9tICclcychXG4iLCBmdW5jLCBzcWxbaV0pOworCQkJCWRiSW5mby5jb3VudHNbaV0gPSAtMTsKKwkJCQl9CisJCQl9CisgICAgICAgCisgICAgICAgIH0KKyAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAJeworICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHNxbD0nJXMnIGZhaWxlZCFcbiIsIGZ1bmMsIHNxbFtpXSk7CisgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgCX0KKwlmaW5hbGx5IHsKKwkJdHJ5IHsKKwkJCXJlcy5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gT0sKKwl9IC8vIHJlYWREYkxlbW1hdGFJbmZvcworCQorCS8qKioqKioqKioqKioqKioqKioqKiBUZXN0IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQorCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvc190ZXN0CisJICogVGhpcyBpcyBkZWJ1ZyBjb2RlIHdyaXR0ZW4gdG8gdGVzdCBpZiB3ZSBjYW4gYWNjZXNzIHRoZSBEZXJieQorCSAqIERhdGFiYXNlIGZyb20gYW4gZXh0ZXJuYWwgSmF2YSBQcm9ncmFtbS4KKwkgKiAwOC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgcmVhZERiSW5mb3NfdGVzdCgpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJU3RyaW5nCisJCWluc2VydFN0bXQgPSAiIjsKKwkKKwkvLyBDb25uZWN0IHRvIERlcmJ5IGRhdGFiYXNlOgorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQkKKwkJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJCXRyeQorCQkJeworCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIFN0cmluZyAKKyAgICAgICAgICAgIAlzcWwgPSAiU0VMRUNUICogRlJPTSAiICsgZGJUYWJsZTsKKyAgICAgICAgICAgIFJlc3VsdFNldCAKKyAgICAgICAgICAgIAlyZXN1bHQgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOworIAorICAgICAgICAgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiB0YWJsZSAnJXMnOlxuIiwgIGZ1bmMsIGRiVGFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAocmVzdWx0Lm5leHQoKSkgeworICAgICAgICAgICAgCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIiclcycgOiAnJXMnIDogJyVzJyA6ICclcycgLlxuIiwgcmVzdWx0LmdldFN0cmluZygxKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMiksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDMpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZyg0KSk7CisgICAgICAgIAkJaW5zZXJ0U3RtdCA9IGluc2VydFN0bXQgKyAiPHA+IiArIHJlc3VsdC5nZXRTdHJpbmcoMSkgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoMikgKyAiIDogIiArCisgICAgICAgICAgICAgICAgCQkgICAgIHJlc3VsdC5nZXRTdHJpbmcoMykgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoNCkgKyAiPC9wPiI7CisgICAgICAgICAgICAJfQorCQkJfQorCSAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAgICAgCXsKKwkgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogaW5zZXJ0U3RtdD0nJXMnIGZhaWxlZCEuXG4iLCBmdW5jLCBzdG10KTsKKyAgICAgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIAl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGluZyAnJXMgZmFpbGVkIVxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCXJldHVybiAxOworCQl9CisJCisJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCXRyeSB7CisJCWNvbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCQorCX0gLy8gcmVhZERiSW5mb3NfdGVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIGltcG9ydEdsZW1tTGVtYXRhX3Rlc3QKKwkgKiBUZXN0IFZlcnNpb24uCisJICogMTIuMTIuMTkvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0KFN0cmluZyBmbikKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QiOworCUlucHV0U3RyZWFtIAorCQlpbjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbjIgPSBudWxsOworCVN0cmluZworCQlsaW5lOworCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJcjsKKwkKKwkvKgorCSAqIFJlYWQgTGVtbWF0YSArIEluZm8gZnJvbSBmaWxlOiAKKwkgKi8KKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQkKKwl0cnkgeworCQkvL2luID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oIG5ldyBGaWxlSW5wdXRTdHJlYW0oZm4pICk7CisJCWluMiA9IG5ldyBCdWZmZXJlZFJlYWRlciggbmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJd2hpbGUoIChsaW5lID0gaW4yLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCA9PSAzICkKKwkJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogSW1wb3J0OiBsZW09JyVzJyBEZWNvbXA9JyVzJyBXZj0nJXMnLlxuIiwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMV0sIGxlbW1hSW5mb1syXSk7CisJCQllbHNlCisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6IGltcG9ydEdsZW1tTGFtYXRhOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzIVxuIiwgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQl9CisJCX0gCisJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBvcGVuICclcychXG4iLCBmdW5jLCBmbik7CisJCXJldHVybiAxOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisKKwl0cnkgeworCQlpbjIuY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkKKwkvKiBDaGVjayBjb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCSAqLyAKKwlyID0gcmVhZERiSW5mb3NfdGVzdCgpOworCWlmKCByICE9IDAgKQorCQlyZXR1cm4gcjsKKwkJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdAorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9mNy9lMDMwNGQyOTUyM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZjcvZTAzMDRkMjk1MjNkMDAxYzEwYjFiMTdkZGQzMDllNmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ3ODc5MgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZjcvZTAzMDRkMjk1MjNkMDAxYzEwYjFiMTdkZGQzMDllNmYKQEAgLTAsMCArMSw5ODAgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworLyogMC4xIDogMTcuMDYuMjAvRkIgCisgKiAwLjIgOiAyNS4xMC4yMS9GQgorICogICAgICAgbG9naW5nIG9mIHRoZSBBUEkgUmVxdWVzdHMuCisgKiAgICAgICBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKyAqICAgICAgIGNvcnJlY3RpbmcgY2FsbGluZyBvZiBsZW1tYSArIHByb3AxL3Byb3AyL3NwZWMuCisgKiAgICAgICBoYW5kbGluZyBvZiBsZW1tYXRhIHdpdGggJ8OfJy4KKyAqIAorICogR2VuZXJhbCBjb21tZW50cyB0byB0aGUgZW5jb2Rpbmcgb2YgZGVyaXZhdGlvbnMgZnJvbSBsZW1tYSB0byB3ZnMgYW5kIGhvdyB0aGV5IGFyZSBlbmNvZGVkCisgKiBpbiB0aGUgRGVyYnkgZGF0YWJhc2U6CisgKiAKKyAqIEdMRU1NIGVuY29kaW5nOiAgCisgKiAgIF8gXyA6ICtGbGV4ICAgICAgIMOWbGUgLT4gw5ZsICAgICAgCisgKiAgICsgXyA6ICtDb21wICAgICAgIMOWbGxhbXBlIC0+IMOWbCBvciBMYW1wZSAoY29tcG91bmQpLgorICogICBfICsgOiArb3RoZXIgICAgICBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybnNjaHVoIChubyBjb21wb3VuZCBmb3IgJ1R1cm5zY2h1aCcsIG9ubHkgcHJlZml4KS4KKyAqICAgKyArIDogK0NvbXArb3RoZXIgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm4gKyBTY2h1aCAoY29tcG91bmQgZm9yICdTY2h1aCcgKyBQcmVmaXgpLgorICogQzIgbGVtbWF0aXphdGlvbiBvcHRpb25zOgorICogICBGbGV4ICAoaWRlbnRpY2FsIHRvIEdsZW1tKQorICogICBDb21wICAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpCisgKiAgIE90aGVyIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykuCisgKiAgIFNwZWMgIChvbmx5IEMyOiBpbmNsdWRlcyBhbGwgd2ZzIHdpdGggaGlwaGVuIGFuZC9vciBzb21lIG5vbi1hbHBoYWJldGljIElTTzg4NTktMSBjaGFycykKKyAqICAgICAgICAgRS5nLiDDlmwtRXhwb3J0ZSwgIk1hcmtlbiItw5ZsZS4KKyAqIERlcmJ5IEVuY29kaW5nOgorICogIHByb3AxIAlwcm9wMglzcGVjICAgCW1lYW5pbmcgaW4gQzI6CisgKiAgMAkJMAkJLQkJRmxleAorICogIDEJCTAJCS0JCUNvbXAKKyAqICAwCQkxCQktCQlPdGhlciAocHJlZml4KQorICogIDEJCTEJCS0JCUNvbXAgKyBPdGhlcgorICogIC0JCS0JCTAJCS1TcGVjCisgKiAgLQkJLQkJMQkJK1NwZWMKKyAqIAorICogRXhhbXBsZXM6CisgKiAmU2NodWgJCQk6IFNjaHVoLCBTY2h1aGUsIC4uLiBvbmx5IGZsZXhpb25zCisgKiAmU2NodWgrY29tcAkJOiBTY2h1aGUsIFR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtvdGhlcgkJOiBTY2h1aGUsIEFudGlzY2h1aGUuLi4gZmxleGlvbnMgYW5kIHByZWZpeGVkIHdmcyAobm8gY29tcG91bmRzKS4KKyAqICZTY2h1aCtjb21wK290aGVyOiBTY2h1aGUsIEFudGlzY2h1aGUsIFR1cm5zY2h1aGUsIEFudGl0dXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMgYW5kIAorICogCQkJCQkgIHByZWZpeGVkIHNpbmdsZSB3ZnMgKEFudGlzY2h1aGUpIGFuZCBwcmVmaXhlZCBjb21wb3VuZHMuCisgKiAmU2NodWgrc3BlYwkJOiAiQW50aSItU2NodWhlLCA2OGdlci1TY2h1aGUuLi4gbWF5IGJlIGNvbWJpbmVkIHdpdGggZXZlcnkgb3B0aW9uczogYWRkcworICogICAgICAgICAgICAgICAgICAgIHdmcyB3aXRoIGh5cGhlbiBhbmQvb3Igbm9uLWFscGhhYmV0aWMgY2hhcnMuCisgKiAKKyAqIENvbnZlcnNpb24gcnVsZXM6CisgKiAKKyAqICAmc2NobGllw59lbiAtPiBpbnRlcm5hbCBzZWFyY2ggZm9yICdzY2hsaWVzc2VuJywKKyAqICBiZWNhdXNlIEdsZW1tIG91dHB1dHMgJ3NzJyBmb3IgJ8OfJy4KKyAqICAKKyAqIENoYXJhY3RlciBFbmNvZGluZzoKKyAqIAorICogLSBXaGVuIGltcG9ydGluZyB3ZnMgdG8gdGhlIERlcmJ5IERhdGFiYXNlIHdpdGggZG9DdXJsR2xlbW1TZXJ2aWNlcy9pbmRleExlbW1hdGE6CisgKiAKKyAqICAgSU5QVVQ6IHdvcmRmb3JtIGxpc3QgaW4gW1VURi04XSA6IFVURi04IGlzIHRoZW4gY29udmVydGVkIHRvIExhdDEgZm9yIEdsZW1tLAorICogICAgICAgICAgdGhlIG91dHB1dCBvZiBHbGVtbSBbTGF0MV0gaXMgcmV0dXJuZWQgdG8gdGhlIEdsZW1tU2VydmljZXMgd2l0aG91dCByZWNvbnZlcnNpb24KKyAqICAgICAgICAgIHRvIFVURjggYW5kIGltcG9ydGVkIGludG8gRGVyYnkgRGF0YWJhc2UgdW5jaGFuZ2VkLgorICoJCQorICovCisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDQuMTEuMjEiOyAKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjIiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lUHJvcHMJCT0gIi9XRUItSU5GL0dsZW1tU2VydmljZXMucHJvcGVydGllcyI7CisJCisJLy8gdGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHJlYWQgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgKHRoZXNlIGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMpOgorCXByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoIAkJPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCUBDb250ZXh0CisJcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBzZXJ2bGV0Q29udGV4dDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZvdXQJPSBudWxsOworCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZmVycgk9IG51bGw7CQkKKwkJCisJLyogCisgCSAqIAorCSAqIC0gYWZ0ZXIgbG9hZFByb3BlcnRpZXMsIHNldHMgdGhlIGNsYXNzIHZhcmlhYmxlIHdpdGggbG9hZGVkIHByb3BlcnR5IHZhbHVlcy4KKwkgKiAKKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJR1NfV29ya2luZ1BhdGggCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgIkdTX1dvcmtpbmdQYXRoIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIik7CisJZm5hbWVXZnMJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lV2ZzIiwgCSAgICJnbF93ZnNfaW4udHh0Iik7CisJZm5hbWVXZnMJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVdmczsKKwlmbmFtZU91dAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVPdXQiLCAJICAgIkdsZW1tU2VydmljZXMubG9nIik7CisJZm5hbWVPdXQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZU91dDsKKwlmbmFtZUVycgkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVFcnIiLCAJICAgIkdsZW1tU2VydmljZXMuZXJyIik7CisJZm5hbWVFcnIJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUVycjsKKwlmbmFtZVNjcmlwdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVTY3JpcHQiLAkgICAiZG9HbGVtbSIpOworCWZuYW1lU2NyaXB0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVTY3JpcHQ7CisJZm5hbWVMZW1hdGEJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lTGVtYXRhIiwgICAgInRtcC9sZW0zIik7CisJZm5hbWVMZW1hdGEJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUxlbWF0YTsKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qCisJICogIGxvZ19SZXF1ZXN0OgorCSAqICAKKwkgKiAgLSB3cml0ZSBpbmZvIGFib3V0IEFQSSBSZXF1ZXN0LgorCSAqICBQYXJhbWV0ZXJzOgorCSAqICByZXF1ZXN0UGF0aAk6IHBhdGggb2Ygd2ViYXBwIGFkZHJlc3NlZCBieSB0aGUgcmVxdWVzdC4KKwkgKiAgZnVuYwkJOiBuYW1lIG9mIHRoZSBmdW5jdGlvbiB3aGljaCBpbXBsZW1lbnRzIHRoZSByZXF1ZXN0LgorCSAqICAKKwkgKiAgMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgbG9nX1JlcXVlc3QoU3RyaW5nIHJlcXVlc3RQYXRoLCBTdHJpbmcgZnVuYykKKwkKKwl7CisJLy8gdHJhbnNmb3JtICJkYXRlVHRpbWUiIC0+ICJkYXRlIHRpbWUiOgorCQorCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCWZvdXQucHJpbnRmKCIjIyMgJXM6ICVzIDogdmVycz0nJXMnLCB2ZGF0ZT0nJXMnIHJlcXVlc3Q9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RQYXRoLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgCisJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwl9IC8vIGxvZ19SZXF1ZXN0CisJCQorCS8qIGZvcm1hdERiTmFtZQorCSAqIAorCSAqIC0gZ2V0cyBuYW1lIG9mIERhdGFiYXNlIHVzZWQgYnkgRGVyYnkgZnJvbSBwcm9wcyAKKwkgKiAgIGFuZCBmb3JtYXQgaXQgdG8gSFRNTC4KKwkgKiAgCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFN0cmluZyBmb3JtYXREYk5hbWUoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJU3RyaW5nCisJCWRiTmFtZTsKKwlTdHJpbmcKKwkJZGJQYXRoID0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJaW50CisJCWogPSBkYlBhdGgubGFzdEluZGV4T2YoJy8nKTsKKwkKKwlpZiggaiA+IDAgKQorCQlkYk5hbWUgPSBkYlBhdGguc3Vic3RyaW5nKGorMSk7CisJZWxzZQorCQlkYk5hbWUgPSBkYlBhdGg7CisJCisJcmV0dXJuIGRiTmFtZTsgLy8gIjxwPjxiPkRhdGFiYXNlOiAiICsgZGJOYW1lICsgIjwvYj48L3A+XG4iOworCX0gLy8gZm9ybWF0RGJOYW1lCisKKwkvKgorCSAqIGNsb3NlTG9nU3RyZWFtczoKKwkgKiAKKwkgKiAtIGNsb3NlIHRoZSBmb3V0L2ZlcnIgbG9nIHN0cmVhbXMuCisJICogCisJICogMjYuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgY2xvc2VMb2dTdHJlYW1zKCkKKwkKKwl7CisJaWYoIGZvdXQgIT0gbnVsbCkKKwkJZm91dC5jbG9zZSgpOworCWZvdXQgPSBudWxsOworCQorCWlmKCBmZXJyICE9IG51bGwgKQorCQlmZXJyLmNsb3NlKCk7CisJZmVyciA9IG51bGw7CisJfSAvLyBjbG9zZUxvZ1N0cmVhbXMKKwkKKwkvKiBpbml0X2FuZF9sb2dfUmVxdWVzdAorCSAqIAorCSAqIC0gbG9hZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMsIHNldHMgR2xlbW1TZXJ2aWNlcyBjb25zdGFudHMKKwkgKiAgIGFuZCBsb2dzIHRoZSByZXF1ZXN0LgorCSAqIC0gbG9hZCBwcm9wZXJ0aWVzIGFuZCBzZXQgY29uc3RhbnRzIGJlZm9yZSBsb2dnaW5nIGFueXRoaW5nLCBiZWNhdXNlCisJICogICBsb2dnaW5nIHdpbGwgYmUgZG9uZSBpbnRvIHRoZSBsYXN0IHN0ZG91dC9zdGRlcnIgb3BlbmVkIGluIGdsYXNzZmlzaCdzIEpWTSwKKwkgKiAgIGUuZy4gaW4gdGhlIGxvZyBvZiBhbm90aGVyIFNlcnZpY2UuCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFByb3BlcnRpZXMgaW5pdF9hbmRfbG9nX1JlcXVlc3QoU3RyaW5nIGZ1bmMsIFN0cmluZyByZXF1ZXN0UGF0aCkKKwkKKwl7CisJU3RyaW5nCisJCXJlYWxQYXRoID0gc2VydmxldENvbnRleHQuZ2V0UmVhbFBhdGgoZm5hbWVQcm9wcyk7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtIChpZiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJUHJvcGVydGllcworCQlwcm9wcyA9IFV0aWxzLmxvYWRQcm9wZXJ0aWVzKHNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcyksIGZuYW1lUHJvcHMsIHJlYWxQYXRoLCBmYWxzZSk7CisJCisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIGZvdXQgYW5kIGZlcnIgYXMgcmVwbGFjZW1lbnQgZm9yIHN0ZG91dC9zdGRlcnIgZm9yIHVzZSBpbiBHbGVtbVNlcnZpY2VzLgorCS8vIGRvIG5vdCB1c2Ugb3IgcmVkaXJlY3QgU3lzdGVtLm91dCBhbmQgU3lzdGVtLmVyciwgYXMgdGhleSB3aWxsIGJlIHJlZGlyZWN0ZWQKKwkvLyBieSBvdGhlciBTZXJ2aWNlcyBpbiB0aGUgc2FtZSBnbGFzc2Zpc2ggSlZNLCBlLmcuIGJ5IHRoZSBXZm9ybVNlcnZpY2VzLgorCWZvdXQgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVPdXQpOworCWZlcnIgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVFcnIpOworCQorCS8vVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkKKwlsb2dfUmVxdWVzdChyZXF1ZXN0UGF0aCwgZnVuYyk7CisJCisJcmV0dXJuIHByb3BzOworCX0gLy8gaW5pdF9hbmRfbG9nX1JlcXVlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwlTdHJpbmcKKwkJc3RhdHVzOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3N0YXR1cy8iKTsKKwkKKwkvLyBodHRwU2VydmxldFJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW52KTsKKwkKKwlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+cHJvcGVydGllczwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPmRhdGFiYXNlPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIiksCisJCQkJCQkJc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSA9PSBudWxsID8gIm5vdCBmb3VuZCIgOgorCQkJCQkJCQlwcm9wcy5pc0VtcHR5KCkgPyAiZW1wdHkiIDogImxvYWRlZCIsCisJCQkJCQkJZm9ybWF0RGJOYW1lKHByb3BzKQorCQkJCQkJCSk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJY2xvc2VMb2dTdHJlYW1zKCk7CisJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiAKKwkgKiBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhOgorCSAqIAorCSAqIFBPU1Q6IC9pbmRleC9hZGQve2RhdGFiYXNlbmFtZX06IHRleHQvcGxhaW4KKwkgKiAKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGxpc3QJCSA6IHRoZSBsaXN0IG9mIHdmcyBzZW50IGluIHRoZSBib2R5IG9mIHRoZSBQT1NUIHJlcXVlc3QuCisJICogZGJwYXRoCSA6IHRoZSBsb2NhdGlvbiBvZiB0aGUgZGF0YWJhc2Ugd2hlcmUgdGhlIGxlbW1hK3dmcyBhcmUgdG8gYmUgc3RvcmVkLgorCSAqIE5vdGVzICAgICA6CisJICogLSBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZSBsb2NhdGVkIGF0ICdkYXRhYmFzZW5hbWUnLgorCSAqIC0gVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQgaW50byBhIERlcmJ5IGRhdGFiYXNlLgorCSAqIElucHV0CSA6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqIDA0LjExLjIxL0ZCCisJICogLSBzdWJtaXR0ZWQgZGF0YWJhc2UgcGF0aC4KKwkgKi8KKwkKKwlAUGF0aCgiYWRkL3tkYXRhYmFzZXBhdGh9IikgCisJQFBPU1QgCisJQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvUE9TVF9pbXBvcnRMZW1tYURhdGEKKwkJCQkJCQkoCisJCQkJCQkJU3RyaW5nIAkJCQkJCQkJbGlzdCwKKwkJCQkJCQlAUGF0aFBhcmFtKHZhbHVlPSJkYXRhYmFzZXBhdGgiKSAJZmluYWwgU3RyaW5nIGRicGF0aAorCQkJCQkJCSkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb1BPU1RfaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSAKKwkJYXJMaXN0ID0gbGlzdC5zcGxpdCgiXG4iKTsKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IG51bGw7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9hZGQve2RicGF0aH0iKTsKKwkKKwlkYnBhdGgucmVwbGFjZSgnLicsICcvJyk7CisJCisJZm91dC5wcmludGYoIkluZm8gOiAlczogc2VsZWN0ZWQgZGF0YWJhc2UgcGF0aCA9ICclcycuXG4iLCBmdW5jLCBkYnBhdGgpOworCWZvdXQucHJpbnRmKCJJbmZvIDogJXM6IHdvcmtpbmcgZGlyZWN0b3J5ID0gJyVzJy5cbiIsIGZ1bmMsIEdTX1dvcmtpbmdQYXRoKTsKKwkKKwkvLyBzZXQgZmlsZSBhbmQgcGF0aHMgYWZ0ZXIgR1NfV29ya2luZ1BhdGggaGFzIGJlZW4gaW5pdGlhbGlzZWQ6CisJcCA9IGZzLmdldFBhdGgoZm5hbWVXZnMpOworCQorCS8vIFdyaXRlIHN1Ym1pdHRlZCBsaXN0IG9mIHdvcmRmb3JtcyB0byBmaWxlOgorCXRyeQorCQl7CisJCW9zID0gRmlsZXMubmV3T3V0cHV0U3RyZWFtKHApOworCQlvcy53cml0ZShsaXN0LmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSkpOworCSAgICBvcy5jbG9zZSgpOworCSAgICBiRG9uZSA9IHRydWU7CisJICAgIGZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGZpbGUgJyVzJyBiZXNjaHJpZWJlbi5cbiIsIGZ1bmMsIGZuYW1lV2ZzKTsKKwkgICAgfQorCWNhdGNoKElPRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoZmVycik7CisJCX0KKyAgICAKKwlpZiggYkRvbmUgKQorCQltc2cgPSAiPHA+TGlzdCB3cml0dGVuIHRvIGZpbGU6ICIgKyBwLnRvU3RyaW5nKCkgKyAiPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+PGI+RmlsZSBFcnJvcjogPC9iPiBjYW5ub3Qgd3JpdGUgdG8gIiArIHAudG9TdHJpbmcoKSArICIhPC9wPiI7CisJCisJLyoKKwkgKiAgZXhlY3V0ZSBHbGVtbSBzaGVsbCBzY3JpcHQ6CisJICovCisJU3RyaW5nCisJCW1zZ0dsZW1tU2NyaXB0LCBtc2dJbXBvcnQ7CisJaW50IAorCQlyID0gVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0KGZuYW1lU2NyaXB0LCBmbmFtZVdmcywgZm91dCwgZmVycik7CisJCisJaWYoIHIgPT0gMCApCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEF1c2bDvGhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhLCBwcm9wcywgZGJwYXRoKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBpbXBvcnRHbGVtbUxlbW1hdGEgcmV0dXJucyByPSVkLlxuIiwgZnVuYywgcik7CisJaWYoIG5FcnJvcnMgPT0gMCApCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiAiICsgbkVycm9ycyArICIgZXJyb3JzITwvcD4iOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGVuZGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJLy8gUmV0dXJuIEluZm9zOgorCXJldHVybiAKKwkJCSAgICI8aHRtbD4iICsKKwkJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwkKKwl9IC8vIGRvUE9TVF9pbXBvcnRMZW1tYURhdGEKKworCS8qIGRvR0VUX3ZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnMgPSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvLyIpOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJZmluYWwgU3RyaW5nCisJCWRiTmFtZSA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPmRhdGFiYXNlPC9iPjogJXM8L3A+IiwgZm9ybWF0RGJOYW1lKHByb3BzKSk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIGRiTmFtZSArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gZG9HRVRfdmlld0RCSW5mbworCisKKwkvKiBkb0dFVF92aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND52ZXJzaW9uICIgKyB2ZXJzaW9uICsgIiB2b20gIiArIHZlcnNpb25EYXRlICsgIiByZXF1ZXN0ID0gJyIgKyBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpICsgIic8L2k+PC9oND5cbiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAxOjwvYj4gKEMyIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfTwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPntsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpPC9jb2RlPjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw8L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT7Dlmw/b3B0cz1mbGV4K2NvbXArb3RoZXIrc3BlYzwvY29kZT48L3A+IiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDI6PC9iPiAoaW50ZXJuYWwgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9P3Byb3AxPVswMTJdJmFtcDtwcm9wMj1bMDEyXSZhbXA7c3BlYz1bMDEyXTwvY29kZT4gKHdoZXJlIGVhY2ggcHJvcDEsIHByb3AyLCBzcGVjIGlzIG9wdGlvbmFsKS48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsP3Byb3AxPTAmYW1wO3Byb3AyPTEmYW1wO3NwZWM9MjwvY29kZT48L3A+IjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0iKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0nJWQnIHByb3AyPSclZCcgc3BlYz0nJWQnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJLyogCisJZm9yKGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCQl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCQl9CQorCSAqLworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCBsZW1tYUluZm8ub3B0c1NldHRpbmcgPT0gTGVtbWFJbmZvLk9QVFNfU0VUVElOR19DMiApIAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEscHJvcDIsc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZyk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWludAorCQluV2ZzID0gbGVtbWFJbmZvLm5XZnM7CisJCisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJLy8gbG9nIG91dGNvbWU6CisJaWYoIG5XZnMgPCAwICkKKwkJZm91dC5wcmludGYoIkVycm9yOiAlczogcmV0dXJuaW5nIDAgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jKTsKKwllbHNlCisJCWZvdXQucHJpbnRmKCJEZWJ1Zy4gJXM6IHJldHVybmluZyAlZCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMsIG5XZnMpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiBub3RlOgorCSAqIC0gaWYgQnJvd3NlciByZXF1ZXN0OiBIVFRQU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ3RleHQvaHRtbCwuLi54bWwuLi4nCisJICogLSBpZiBXZm9ybVNlcnZpY2VzIHJlcXVlc3Q6IEh0dHBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAnYXBwbGljYXRpb24vanNvbicuCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKiAKKwkgKiAtIHN1Ym1pdHRlZCBVUkwsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYSwgaXMgaW50ZXJwcmV0ZWQgYnkgZ2xhc3NmaXNoIGFzCisJICogICBiZWluZyBJU08tODg1OS0xIGVuY29kZWQuIFdoZW4gdGhlIHJlcXVlc3QgaXMgVVRGLTggZW5jb2RlZCwgVW1sYXV0cyBhbmQKKwkgKiAgICfDnycgYXJlIG1pcy1pbnRlcnByZWRlZCwgbGVhZGluZyB0byBhbiBlcnJvbmVyb3VzIHJlcXVlc3QgdG8gdGhlIERlcmJ5CisJICogICBkYXRhYmFzZS4KKwkgKiAtIFJlcXVlc3RlZCBsZW1tYSAnbGVtbWEnIGhhcyB0byBiZSB0cmFuc2Zvcm1lZCB0byBVVEYtOCBmaXJzdC4KKwkgKiAtIG5vdGU6IGV2ZW4gd2hlbiBzdWJtaXR0aW5nIHRoZSBHRVQgcmVxdWVzdCBieSBzcGVjaWZ5aW5nICdjaGFyZW5jb2RlPVVURi04JywKKwkgKiAgIGdsYXNzZmlzaCBkb2VzIG5vdCBjb252ZXJ0IGl0IGF1dG9tYXRpY2FsbHkgYXMgZXhwZWN0ZWQuCisJICogICAKKwkgKiAgMjIuMTAuMjEvRkIKKwkgKiAKKwkgKiAtIGlmIGFjY2VwdD1hcHBsaWNhdGlvbi9qc29uIHJldHVybiBVVEYtOCAoV2Zvcm1TZXJ2aWNlcykuCisJICogLSBlbHNlIGlmIGFjY2VwdD10ZXh0L2h0bWwgZG8gbm90IHRyYW5zZm9ybSBjaGFyYWN0ZXIgZW5jb2RpbmcgKEJyb3dzZXIpLgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAQ29uc3VtZXMoImFwcGxpY2F0aW9uL2pzb24sIHRleHQvaHRtbCIpCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbzsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwlmaW5hbCBib29sZWFuCisJCWJFbmNvZGVMZW1tYSA9IGZhbHNlOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOworCQorCS8qIHRlc3Q6CisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWlmKCBiRW5jb2RlTGVtbWEgKQorCQl7CisJCS8vIHdoZW4gYWNjZXB0aW5nIEpTT04sIHVybCBoYXMgdG8gYmUgY29udmVydGVkIHRvIFVURi04LCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWE6CisJCXRyeSB7CisJCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKG5ldyBTdHJpbmcobGVtbWEuZ2V0Qnl0ZXMoIklTTy04ODU5LTEiKSwgInV0Zi04IikpOworCQkJfSAKKwkJY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZTEpIHsKKwkJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQkJTGVtbWFSZXNwb25zZQorCQkJCWxlbXJlc3AgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1yZXNwKS5idWlsZCgpOworCQkJfQorCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFtVVEYtOF0gb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWFJbmZvLmxlbW1hT3JpZywgb3B0aW9ucyk7CisJCX0KKwllbHNlCisJCXsKKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW3VuY2hhbmdlZF0gb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWFJbmZvLmxlbW1hT3JpZywgb3B0aW9ucyk7CisJCX0KKworCS8qIGRvZXMgbm90IGhlbHA6CisJIFN0cmluZworCSAJcmVxdWVzdENoYXJFbmNvZGluZyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRDaGFyYWN0ZXJFbmNvZGluZygpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVxdWVzdCBjaGFyYWN0ZXIgZW5jb2RpbmcgPSclcycuXG4iLCBmdW5jLCByZXF1ZXN0Q2hhckVuY29kaW5nKTsKKwkqLworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQl7CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJLy9yZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCX0KKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CQorCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwkvKgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvdGVzdC9pbmZvLyIpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9mb3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCWZvdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9mOC8zMDIxMDk3Njg0MmIwMDFjMWM0MWNlNTU5ZWE1ZTE2YiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZjgvMzAyMTA5NzY4NDJiMDAxYzFjNDFjZTU1OWVhNWUxNmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYzNDVlNwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZjgvMzAyMTA5NzY4NDJiMDAxYzFjNDFjZTU1OWVhNWUxNmIKQEAgLTAsMCArMSw3MDAgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDYuMTAuMjEiOyAvLyIxNy4wNi4yMCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4xIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCQlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCQlTdHJpbmcKKwkJCXN0YXR1czsKKwkJVXRpbHMKKwkJCXUgPSBuZXcgVXRpbHMoKTsKKwkJUHJvcGVydGllcworCQkJcHJvcHM7CisJCQorCQkvLyByZWFkIHRlc3QKKwkJcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworCQkvL0h0dHBTZXJ2bGV0Q29udGV4dAorCQkKKwkJLy8gaHR0cFNlcnZsZXRSZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKGVudik7CisJCUlucHV0U3RyZWFtCisJCQlpblByb3AgPSBHbGVtbVNlcnZpY2VzLmNsYXNzLmdldENsYXNzTG9hZGVyKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbSgiR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIik7CisJCQorCQl0cnkgeworCQkJcHJvcHMubG9hZChpblByb3ApOworCQkJfSAKKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBsb2FkIHByb3BzICdHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMnISIsICBmdW5jKTsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkJCisJCS8vIGVuZCBvZiByZWFkIHRlc3QKKwkJCisJCS8vIHRlc3QKKwkJLyoKKwkJcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworCQkKKwkJICogcHJvcHMuc2V0UHJvcGVydHkoInAiLCAidGVzdCIpOworCQkgKgorCQlGaWxlT3V0cHV0U3RyZWFtIG91dDsKKwkJdHJ5IHsKKwkJCW91dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKCJnbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiKTsKKwkJCXByb3BzLnN0b3JlKG91dCwgICJ0ZXN0IEdsZW1tU2VydmljZXMgcHJvcGVydGllcyIpOworCQkJfSAKKwkJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX07CisJCSovCisJCQorCQkvLyBlbmQgb3Rlc3QKKwkJCisJCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCQlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIkFQSTogJXM6IC9pbmRleC9zdGF0dXMvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKworCQlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkpOworCisJCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwkJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiBQT1NUOiAvaW5kZXgvYWRkLzogdGV4dC9wbGFpbgorCSAqIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlLgorCSAqIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkCisJICogaW50byB0aGUgZGF0YWJhc2UuCisJICogSW5wdXQ6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqLworCUBQYXRoKCJhZGQiKSBAUE9TVCBAQ29uc3VtZXMoInRleHQvcGxhaW4iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgaW1wb3J0TGVtbWFEYXRhKFN0cmluZyBsaXN0KSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gYXJMaXN0ID0gbGlzdC5zcGxpdCgiXG4iKTsKKwkKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IGZzLmdldFBhdGgoZm5hbWVXZnMpOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2FkZC8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQorCS8vIFdyaXRlIHN1Ym1pdHRlZCBsaXN0IG9mIHdvcmRmb3JtcyB0byBmaWxlOgorCXRyeQorCQl7CisJCW9zID0gRmlsZXMubmV3T3V0cHV0U3RyZWFtKHApOworCQlvcy53cml0ZShsaXN0LmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSkpOworCSAgICBvcy5jbG9zZSgpOworCSAgICBiRG9uZSA9IHRydWU7CisJICAgIFN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGZpbGUgJyVzJyBiZXNjaHJpZWJlbi5cbiIsIGZ1bmMsIGZuYW1lV2ZzKTsKKwkgICAgfQorCWNhdGNoKElPRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisJCX0KKyAgICAKKwlpZiggYkRvbmUgKQorCQltc2cgPSAiPHA+TGlzdCB3cml0dGVuIHRvIGZpbGU6ICIgKyBwLnRvU3RyaW5nKCkgKyAiPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+PGI+RmlsZSBFcnJvcjogPC9iPiBjYW5ub3Qgd3JpdGUgdG8gIiArIHAudG9TdHJpbmcoKSArICIhPC9wPiI7CisJCisJLyoKKwkgKiAgZXhlY3V0ZSBHbGVtbSBzaGVsbCBzY3JpcHQ6CisJICovCisJU3RyaW5nCisJCW1zZ0dsZW1tU2NyaXB0LCBtc2dJbXBvcnQ7CisJaW50IAorCQlyID0gVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0KGZuYW1lU2NyaXB0LCBmbmFtZVdmcyk7CisJCisJaWYoIHIgPT0gMCApCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEF1c2bvv71ocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBpbXBvcnRHbGVtbUxlbW1hdGEgcmV0dXJucyByPSVkLlxuIiwgZnVuYywgcik7CisJaWYoIG5FcnJvcnMgPT0gMCApCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiAiICsgbkVycm9ycyArICIgZXJyb3JzITwvcD4iOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGVuZGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJLy8gUmV0dXJuIEluZm9zOgorCXJldHVybiAKKwkJCSAgICI8aHRtbD4iICsKKwkJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwl9CisKKwkvKiB2aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyB2aWV3REJJbmZvCisKKworCS8qIHZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIC0gU3RhdHVzOiA8aT5Xb3JrIGluIHByb2dyZXNzLi4uITwvaT4pPC9oND5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoICFvcHRpb25zLmVxdWFscygidW5kZWYiKSkKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEvcHJvcDIvc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEdsZW1tU2VydmljZXMgJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbkRhdGUsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9mOC80MGIyOGIxMDI3M2UwMDFjMTM2M2JlYjkzMmFlNjNhMSBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZjgvNDBiMjhiMTAyNzNlMDAxYzEzNjNiZWI5MzJhZTYzYTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThkN2YyMQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZjgvNDBiMjhiMTAyNzNlMDAxYzEzNjNiZWI5MzJhZTYzYTEKQEAgLTAsMCArMSw4MDYgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5zcWwuQ29ubmVjdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5Ecml2ZXJNYW5hZ2VyOworaW1wb3J0IGphdmEuc3FsLlByZXBhcmVkU3RhdGVtZW50OworaW1wb3J0IGphdmEuc3FsLlJlc3VsdFNldDsKK2ltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CitpbXBvcnQgamF2YS5zcWwuU3RhdGVtZW50OworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAob3ZlcndyaXR0ZW4gYnkgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKGZpbmFsIGFzc2lnbm1lbnRzKToKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJFbWIgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIjsKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLy8gQ29uc3RhbnRzIG9mIHRhYmxlIEdsZW1tTGVtbWF0YToKKwlzdGF0aWMgZmluYWwgaW50IG1heExlbW1hU2l6ZQk9IDY0OyAJLy8gbWF4LiBuby4gb2YgY2hhcnMsIGFzIGRlY2xhcmVkIGluIHRhYmxlIEdsZW1tTGVtbWF0YS4KKwlzdGF0aWMgZmluYWwgaW50IG1heFdmU2l6ZQkJPSA2NDsJLy8gbWF4LiBuby4gb2YgY2hhcnMsIGFzIGRlY2xhcmVkIGluIHRhYmxlIEdsZW1tTGVtbWF0YS4KKwkKKwkvKiB2YXJpYWJsZXMgKi8KKwlzdGF0aWMgaW50IG5FeGNlcHRTdG10CQkJPSAwOwkvLyBjb3VudCBuby4gb2YgZXhjZXB0aW9ucyBmb3IgcHJlcGFyZWRTdG10LgorCXN0YXRpYyBpbnQgbkV4Y2VwdEluc2VydAkJPSAwOwkvLyBjb3VudCBuby4gb2YgZXhjZXB0aW9ucyBmb3IgSW5zZXJ0cy4KKwkKKwkvKgorCSAqIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCSAqIAorCSAqIEFyZ3VtZW50czoKKwkgKiBwcm9wcwk6IFByb3BlcnRpZXMgbG9hZGVkIGJ5IHRoZSBHbGVtbVNlcnZpY2VzLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBmdW5jdGlvbiBsb2FkcyBvbmx5IHRob3NlIENvbnN0YW50cyBuZWVkZWQgaW4gdGhpcyBjbGFzcy4KKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMJcHJvcHMpCisJCisJeworCWZuYW1lREIJCSAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsIAkiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJc2VydmVySG9zdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAic2VydmVySG9zdCIsCSIvL2xvY2FsaG9zdDoxNTI3LyIpOworCWRlcmJ5REJVUkwgCQk9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkJCQorCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyogICAgY2hlY2tEZXJieUNvbm5lY3Rpb246CisJICogCisJICogY2hlY2sgaWYgRGVyYnkgTmV0d29yayBTZXJ2ZXIgaXMgYXZhaWxhYmxlLgorCSAqIFJldHVybnM6IDAgKD1PSykgb3IgLTEgKG9uIGVycm9yKS4KKwkgKiAwNS4xMS4yMS9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIGludCBjaGVja0RlcmJ5Q29ubmVjdGlvbigpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJjaGVja0RlcmJ5Q29ubmVjdGlvbiI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCW5JbnNlcnRlZCA9IDAsCS8vIG5vLiBvZiBsZW1tYS93ZiBwYWlycyBpbXBvcnRlZC4KKwkJcmV0ID0gMDsgLy8gT0suCisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlLAorCS8vIHNldCBBdXRvY29tbWl0ID0gZmFsc2UgdG8gYWNjZWxlcmF0ZSBpbnNlcnRpb25zOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IAorCQl7IAorCQl0cnkgeyAvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJfSAvLyBjaGVja19EZXJieUNvbm5lY3Rpb24KKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCQkJCQlpbXBvcnRHbGVtbUxlbWF0YQorCSAqIFBhcmFtZXRlcnM6CisJICogZm4JCSA6IGFic29sdXRlIGZpbGUgbmFtZSBvZiBHTEVNTSBvdXRwdXQgW0lTTzg4NTktMV0gZXhwZWN0ZWQsIG5vdCBVVEYtOCEKKwkgKiBwcm9wcwkgOiBQcm9wZXJ0aWVzIHZvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgdG8gc2V0IGNvbnN0YW50cyBuZWVkZWQKKwkgKiAJCQkgICBpbiB0aGlzIGNsYXNzLgorCSAqIGRicGF0aAkgOiBsb2NhdGlvbiArIG5hbWUgb2YgZGF0YWJhc2Ugd2hlcmUgdG8gc3RvcmUgbGVtbWF0YSt3ZnMuCisJICogUmV0dXJucwkgOiAwPU9LLCAtMTogZ2VuZXJhbCBlcnJvcjsgPiAwIDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAKKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIGR5bmFtaWNhbGx5IGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqIDA0LjExLjIxL0ZCIGRicGF0aC4KKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YShTdHJpbmcgZm4sIFByb3BlcnRpZXMgcHJvcHMsIGZpbmFsIFN0cmluZyBkYnBhdGgpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YSI7CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4gPSBudWxsOworCWludAorCQluRXJyb3JzOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyB3aGVuIGluZGV4aW5nIGRhdGEgaW50byB0aGUgZGF0YWJhc2UsIHNlbGVjdCB0aGUgc3VibWl0dGVkIGRicGF0aCwKKwkvLyAobm90IHRoZSBvbmUgc3RvcmVkIGluIHRoZSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCWRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGRicGF0aDsKKwkKKwkvLyBvcGVuIHJlYWRlciBvbiBHbGVtbSBMZW1tYXRhOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCWluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCQorCQluRXJyb3JzID0gd3JpdGVEQkxlbW1hdGEoaW4pOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBmcm9tICclcychXG4iLCBmdW5jLCBmbik7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCisJLy8gY2xvc2UgUmVhZGVyOgorCXRyeSB7CisJCWluLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJbkVycm9ycyA9IC0xOworCQl9CisJCisgCWlmKCBuRXJyb3JzID09IDAgKQorIAkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQgZG9uZSBzdWNjZXNzZnVsbHkuXG4iLCBmdW5jKTsKKyAJZWxzZQorIAkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQ6ICVkIEVycm9ycyFcbiIsIGZ1bmMsIG5FcnJvcnMpOworIAkKKwlyZXR1cm4gbkVycm9yczsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YQorCQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVEQkxlbW1hdGEoKQorCSAqICAgICAgICAgICAgICAgICAgICAgICAKKwkgKiBzdG9yZXMgbGlzdCBvZiBsZW1tYXRhICsgaW5mb3MgaW50byBEZXJieSBkYi4KKwkgKiBGaWxlIGZvcm1hdDogIkxlbW1hIERlY29tcG9zaXRpb24gV2YiLAorCSAqICAgICAgICAgICAgICBlLmcuOiAiSMOkdXNlciArLSBIYXVzIi4KKwkgKiBSZXR1cm5zOiAwID0gT0sgb3IgLTE6IGdlbmVyYWwgZXJyb3Igb3IgPiAwOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIDA5LjAxLjIwL0ZCCisJICogMDQuMTEuMjEvRkIgdHVybiBhdXRvY29tbWl0IG9mZiB0byBhY2NlbGVyYXRlIGh1Z2UgYW1vdW50IG9mIGluc2VydGlvbnMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYXRhKEJ1ZmZlcmVkUmVhZGVyIGluKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hdGEiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJUHJlcGFyZWRTdGF0ZW1lbnQKKwkJc3RtdFByZXAgPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10IAkgPSBudWxsOworCVN0cmluZworCQlsaW5lOwkKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQluSW5zZXJ0ZWQgPSAwLAkvLyBuby4gb2YgbGVtbWEvd2YgcGFpcnMgaW1wb3J0ZWQuCisJCXJldCA9IDA7IC8vIE9LLgorCWJvb2xlYW4KKwkJY29udGFpbnNTcGVjOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZSwKKwkvLyBzZXQgQXV0b2NvbW1pdCA9IGZhbHNlIHRvIGFjY2VsZXJhdGUgaW5zZXJ0aW9uczoKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJY29uLnNldEF1dG9Db21taXQoZmFsc2UpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZCAoYXV0b0NvbW1pdD1vZmYpLlxuIiwgZnVuYyk7CisJCQorCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCXN0bXRQcmVwID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0UHJlcGFyZWRRdWVyeSk7CisJCWVsc2UKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisKKwkJd2hpbGUoIChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoICE9IDMgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6ICclcycgaGFzICVkIGNvbXBvbmVudHMhIEV4cGVjdGVkID0gMyEgQ2Fubm90IGJlIHN0b3JlZCFcbiIsIGZ1bmMsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJCW5FcnJvcnMrKzsKKwkJCQljb250aW51ZTsKKwkJCQl9CisJCQkKKwkJCS8vIEdldCBJbmZvLCBpZiB3b3JkZm9ybSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgJy0nLCBpbnRlcnB1bmN0aW9uIGV0Yy46CisJCQkvLyBsZW1tYUluZm9bMl0gPSB3b3JkZm9ybS4KKwkJCWNvbnRhaW5zU3BlYyA9IExlbW1hSW5mby5pc1dmU3BlY2lhbENhc2UobGVtbWFJbmZvWzJdKTsKKwkJCS8vIHN0b3JlIGludG8gREI6CisJCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZChzdG10UHJlcCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvcyhzdG10LCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJCisJCQlpZiggcmV0ICE9IDAgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBzdG9yZSBsZW1tYSAnJXMnIGludG8gREIhIChyZXQ9JWQpXG4iLCBmdW5jLCBsaW5lLCByZXQpOworCQkJCW5FcnJvcnMrKzsgCisJCQkJfQorCQkJZWxzZQorCQkJCW5JbnNlcnRlZCsrOworCQkJfSAvLyB3aGlsZQorCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBHbGVtbSBsZW1tYXRhK2luZm9zIGZyb20gZmlsZSEgRXhpdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7IAorCQl9CQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IAorCQl7IAorCQl0cnkgeworCQkJLy8gaW1wb3J0YW50OiBub3cgY29tbWl0LCBhcyBhdXRvQ29tbWl0IGlzIGRlYWN0aXZhdGVkLAorCQkJLy8gdGhpcyBhbHNvIHJlbW92ZXMgZGF0YWJhc2UgbG9ja3M6CisJCQljb24uY29tbWl0KCk7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbW1pdCBzdWNjZXNzZnVsbC5cbiIsIGZ1bmMpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbW1pdCBhdCB0aGUgZW5kIG9mIHRoZSB3ZnMgbGlzdCBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJCisJCXRyeSB7IC8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIAorCQkJCXN0bXQuY2xvc2UoKTsKKwkJCWlmKCBzdG10UHJlcCAhPSBudWxsICkgCisJCQkJc3RtdFByZXAuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiSW5mbyA6ICVzOiBuby4gb2YgbGVtbWF0YS93ZiBwYWlycyBpbnNlcnRlZCA9ICVkLlxuIiwgZnVuYywgbkluc2VydGVkKTsKKwkKKwlyZXR1cm4gbkVycm9yczsgLy8gMD1PSywgPjAgPSBuby4gb2YgZXJyb3JzLgorCX0gLy8gd3JpdGVEQkxlbW1hdGEKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQ6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gcnVsZXMgaW50byBEZXJieSBEQi4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgaXMgdGhlIHZlcnNpb24gd2l0aCBhIFByZXBhcmVkUXVlcnkuCisJICogUGFyYW1ldGVyczoKKwkgKiBzcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTcuMDEuMjAvRkIKKwkgKiAwNS4xLjIxL0ZCIHJlamVjdCBsZW1tYS93ZiA+IDY0IGNoYXJzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCgKKwkJCVByZXBhcmVkU3RhdGVtZW50IHN0bXQsIAorCQkJU3RyaW5nIGxlbW1hLCAKKwkJCVN0cmluZyB3ZiwgCisJCQlTdHJpbmcgZGVjb21wb3NpdGlvbiwgCisJCQlib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCI7CisJZmluYWwgYm9vbGVhbgorCQliTG9nID0gZmFsc2U7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJYm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJLy8gY2hlY2sgc2l6ZSBvZiB3ZiBhbmQgbGVtbWEgYWdhaW5zdCBmaWVsZCBzaXplIGluIHRhYmxlIEdsZW1tTGVtbWF0YToKKwlpZiggbGVtbWEubGVuZ3RoKCkgPj0gR2xlbW1EQi5tYXhMZW1tYVNpemUgKSAKKwkJeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGxlbW1hIHJlamVjdGVkICg+ICVkKTogJyVzJyFcbiIsCisJCQkJZnVuYywgbWF4TGVtbWFTaXplLCBsZW1tYSk7CisJCXJldHVybiA0OworCQl9CisJaWYoIHdmLmxlbmd0aCgpID49IEdsZW1tREIubWF4V2ZTaXplICkgCisJCXsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3ZiByZWplY3RlZCAoPiAlZCk6ICclcychXG4iLAorCQkJCWZ1bmMsIG1heFdmU2l6ZSwgd2YpOworCQlyZXR1cm4gNTsKKwkJfQorCSAKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgCisJLy8gZm9yIGxvZ2luZyBvbmx5OgorCXNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwlpZiggYkxvZyApCisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorICAgIC8vIG5vdyBpbnNlcnQgbmV3IHZhbHVlcyBpbnRvIFByZXBhcmVkU3RhdGVtZW50OgorICAgIHRyeSB7CisgICAgCXN0bXQuc2V0U3RyaW5nKCAxLCBsZW1tYSk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKCAyLCB3Zik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbigzLCBwcm9wMSk7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig0LCBwcm9wMik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig1LCBzcGVjKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcmVwYXJlZCBzdG10ID0gJyVzJy5cbiIsICBmdW5jLCBzdG10LnRvU3RyaW5nKCkpOworICAgICAgICB9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlMSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKAkiRXJyb3I6ICVzOiB3aGlsZSBmaWxsaW5nIHByZXBhcmVkIHN0YXRlbWVudCB3aXRoIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0nJWInIHByb3AyPSclYicgc3BlYz0nJWInIVxuIiwgIAorCQkJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJaWYoICsrbkV4Y2VwdFN0bXQgPD0gMSApCisJCQllMS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKyAgICAKKyAgICB0cnkgeworCQkvLyBleGVjdXRlIHRoZSBmaWxsZWQgcHJlcGFyZWQgc3RhdGVtZW50OgorCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhIChuPSVkKVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYywgbik7CisgCQkJcmV0dXJuIDI7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQlpZiggKytuRXhjZXB0SW5zZXJ0IDw9IDEgKQorCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDM7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZAorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3M6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gaW50byBEZXJieSBEQi4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGNvbnRhaW5zU3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDEwLjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zKFN0YXRlbWVudCBzdG10LCBTdHJpbmcgbGVtbWEsIFN0cmluZyB3ZiwgU3RyaW5nIGRlY29tcG9zaXRpb24sIGJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zIjsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlCb29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworICAgIAorICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorCXRyeSB7CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoc3FsSW5zZXJ0KTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYURhdGEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBmcm9tIHRoZSBHbGVtbURCLgorCSAqIElucHV0OiBsZW1tYSArIEdMRU1NX09QVFNfeHh4IChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWFEYXRhKExlbW1hSW5mbyBsZW1tYUluZm8sIFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYURhdGEiOworCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJbGVtbWFJbmZvLmNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJbGVtbWFJbmZvLnN0bXQgPSBsZW1tYUluZm8uY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlpbnQgciA9IHJlYWREQkxlbW1hKGxlbW1hSW5mby5zdG10LCBsZW1tYUluZm8pOworCQkJCisJCWlmKCByICE9IDAgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZ2V0IGRhdGEgZm9yIGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIVxuIiwgCisJCQkJCWZ1bmMsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwkJCXJldHVybiAxOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggbGVtbWFJbmZvLmNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hRGF0YQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGJ5IGFjY2Vzc2luZyB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dCA6IGxlbW1hICsgcHJvcDErMiAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogT3V0cHV0OiAKKwkgKiAgLSBjb250YWlucyBhIFJlc3VsdFNldCBmb3IgZmV0Y2hpbmcgdGhlIHdvcmRmb3Jtcy4KKwkgKiAJICBUaGlzIFJlc3VsdFNldCB3aWxsIGhhdmUgYmUgYmUgY2xvc2VkIHdpdGggTGVtbWFJbmZvLmNsb3NlKCkuCisJICogCSAgVGhlIG5vLiBvZiBmb3VuZCB3b3JkZm9ybXMgaXMgbm90IGtub3duIHRpbGwgd2UKKwkgKiAJICBmZXRjaCBhbGwgb2YgdGhlbSBmcm9tIFJlc3VsdFNldCEgCisJICogCS0gZHVlIHRvIFNFTEVDVCBESVNUSU5DVCBvbmx5IHVuaXEgd2YgYXJlIHJldHVybmVkLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYShTdGF0ZW1lbnQgc3RtdCwgTGVtbWFJbmZvIGxlbW1hSW5mbykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hIjsKKwlTdHJpbmcKKwkJc3FsOworCQkKKwlzcWwgPSBTdHJpbmcuZm9ybWF0KCJTRUxFQ1QgRElTVElOQ1Qgd2YgZnJvbSAlcyBXSEVSRSBsZW1tYT0nJXMnICVzICVzICVzIiwgCisJCQlkYlRhYmxlLAorCQkJbGVtbWFJbmZvLmxlbW1hLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiQU5EIHByb3AxPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAxID8gIkFORCBwcm9wMT0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiQU5EIHByb3AyPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAxID8gIkFORCBwcm9wMj0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiQU5EIHNwZWM9J3RydWUnIiAgIDogCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICJBTkQgc3BlYz0nZmFsc2UnIiAgOiAiIik7CisJCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgZnVuYywgbGVtbWFJbmZvLnByb3AxLCBsZW1tYUluZm8ucHJvcDIsIGxlbW1hSW5mby5zcGVjKTsKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbCA9ICclcycuXG4iLCBmdW5jLCBzcWwpOworCisJdHJ5IHsKKwkJbGVtbWFJbmZvLnJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoZW4gZXhlY3V0aW5nIHNxbD0nJXMnIVxuIiwgZnVuYywgc3FsKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gYWxsIHNxbCBzdHVmZiBhcmUgY2xvc2VkIG91dHNpZGUgdGhpcyBmdW5jdGlvbiwgc28gZG9uJ3QgY2xvc2UgdGhlbSBoZXJlIQorCQl9CQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3MKKwkgKiBSZXR1cm5zIEdlbmVyYWwgSW5mb3MgYWJvdXQgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIHJlYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJJbmZvcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJZGJJbmZvID0gcmVhZERiTGVtbWF0YUluZm9zKHN0bXQpOworCQkJCisJCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCByZWFkIEdlbmVyYWwgSW5mb3MgZnJvbSBHbGVtbSBEYXRhYmFzZSFcbiIsIGZ1bmMpOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSBjb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSBzdG10LmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIG1heSBiZSBudWxsLgorCQkKKwl9IC8vIHJlYWREYkluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiTGVtbWF0YUluZm9zOgorCSAqIHJlYWRzIGFuZCByZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGNvbnRlbnQgCisJICogb2YgdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIFJldHVybnMgMD1PSyBvciBlcnJvciBjb2RlID4gMC4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkxlbW1hdGFJbmZvcyhTdGF0ZW1lbnQgc3RtdCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAicmVhZERiTGVtbWFJbmZvcyI7CisJU3RyaW5nW10KKwkJc3FsID0gewkiU0VMRUNUIENPVU5UKGRpc3RpbmN0IGxlbW1hKSBmcm9tICIgKyBkYlRhYmxlICwJLy8gY291bnRzIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSwJCQkJCS8vIGNvdW50cyB0b3RhbCBuby4gb2Ygc3RvcmVkIHdvcmRmb3Jtcy4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPXRydWUiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPXRydWUifTsKKwlSZXN1bHRTZXQKKwkJcmVzID0gbnVsbDsgCisJaW50W10KKwkJbkNvdW50cyA9IG5ldyBpbnRbc3FsLmxlbmd0aF07CisJaW50CQkKKwkJaSA9IDAsIAorCQluRGlzdExlbW1hdGEgPSAtMSwJLy8gbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEgaW4gREIuCisJCW5XZnMJCSA9IC0xOwkvLyBuby4gb2Ygd29yZGZvcm1zIGluIERCLgorCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBleHRyYWN0aW5nIGFncmVnYXRlZCBpbmZvcyBhYm91dCBEYXRhYmFzZSBjb250ZW50cy4uLlxuIiwgZnVuYyk7CisJCisJZGJJbmZvID0gbmV3IEdsZW1tREJJbmZvKCk7CisKKwkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwl0cnkgeworCQlmb3IoaT0wOyBpPHNxbC5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCXJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbFtpXSk7CisJCQlpZiggcmVzLm5leHQoKSApCisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IHJlcy5nZXRJbnQoMSk7IC8vIGNvdW50IGlzIGluIGNvbHVtbiAxLgorCQkJZWxzZQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBleHRyYWN0IGNvdW50IGZyb20gJyVzJyFcbiIsIGZ1bmMsIHNxbFtpXSk7CisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IC0xOworCQkJCX0KKwkJCX0KKyAgICAgICAKKyAgICAgICAgfQorICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgIAl7CisgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogc3FsPSclcycgZmFpbGVkIVxuIiwgZnVuYywgc3FsW2ldKTsKKyAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAJfQorCWZpbmFsbHkgeworCQl0cnkgeworCQkJcmVzLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBPSworCX0gLy8gcmVhZERiTGVtbWF0YUluZm9zCisJCisJLyoqKioqKioqKioqKioqKioqKioqIFRlc3QgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zX3Rlc3QKKwkgKiBUaGlzIGlzIGRlYnVnIGNvZGUgd3JpdHRlbiB0byB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIERlcmJ5CisJICogRGF0YWJhc2UgZnJvbSBhbiBleHRlcm5hbCBKYXZhIFByb2dyYW1tLgorCSAqIDA4LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCByZWFkRGJJbmZvc190ZXN0KCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlTdHJpbmcKKwkJaW5zZXJ0U3RtdCA9ICIiOworCQorCS8vIENvbm5lY3QgdG8gRGVyYnkgZGF0YWJhc2U6CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCQorCQkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwkJdHJ5CisJCQl7CisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIAorICAgICAgICAgICAgCXNxbCA9ICJTRUxFQ1QgKiBGUk9NICIgKyBkYlRhYmxlOworICAgICAgICAgICAgUmVzdWx0U2V0IAorICAgICAgICAgICAgCXJlc3VsdCA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CisgCisgICAgICAgICAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHRhYmxlICclcyc6XG4iLCAgZnVuYywgZGJUYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQubmV4dCgpKSB7CisgICAgICAgICAgICAJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiJyVzJyA6ICclcycgOiAnJXMnIDogJyVzJyAuXG4iLCByZXN1bHQuZ2V0U3RyaW5nKDEpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygyKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMyksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDQpKTsKKyAgICAgICAgCQlpbnNlcnRTdG10ID0gaW5zZXJ0U3RtdCArICI8cD4iICsgcmVzdWx0LmdldFN0cmluZygxKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZygyKSArICIgOiAiICsKKyAgICAgICAgICAgICAgICAJCSAgICAgcmVzdWx0LmdldFN0cmluZygzKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZyg0KSArICI8L3A+IjsKKyAgICAgICAgICAgIAl9CisJCQl9CisJICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgICAgICAJeworCSAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBpbnNlcnRTdG10PSclcycgZmFpbGVkIS5cbiIsIGZ1bmMsIHN0bXQpOworICAgICAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICAgICAgY29uLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nICclcyBmYWlsZWQhXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJdHJ5IHsKKwkJY29uLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkJCisJfSAvLyByZWFkRGJJbmZvc190ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogaW1wb3J0R2xlbW1MZW1hdGFfdGVzdAorCSAqIFRlc3QgVmVyc2lvbi4KKwkgKiAxMi4xMi4xOS9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QoU3RyaW5nIGZuKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdCI7CisJSW5wdXRTdHJlYW0gCisJCWluOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluMiA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQlyOworCQorCS8qCisJICogUmVhZCBMZW1tYXRhICsgSW5mbyBmcm9tIGZpbGU6IAorCSAqLworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCQorCXRyeSB7CisJCS8vaW4gPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSggbmV3IEZpbGVJbnB1dFN0cmVhbShmbikgKTsKKwkJaW4yID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlcihmbikpOworCQl3aGlsZSggKGxpbmUgPSBpbjIucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoID09IDMgKQorCQkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBJbXBvcnQ6IGxlbT0nJXMnIERlY29tcD0nJXMnIFdmPSclcycuXG4iLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1sxXSwgbGVtbWFJbmZvWzJdKTsKKwkJCWVsc2UKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogaW1wb3J0R2xlbW1MYW1hdGE6ICclcycgaGFzICVkIGNvbXBvbmVudHMhXG4iLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IG9wZW4gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJcmV0dXJuIDE7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKworCXRyeSB7CisJCWluMi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCS8qIENoZWNrIGNvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJICovIAorCXIgPSByZWFkRGJJbmZvc190ZXN0KCk7CisJaWYoIHIgIT0gMCApCisJCXJldHVybiByOworCQkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2Y4L2UwMTY5ZTc0NDgzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9mOC9lMDE2OWU3NDQ4M2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjUwYjgxCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9mOC9lMDE2OWU3NDQ4M2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpAQCAtMCwwICsxLDk2OSBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCisvKiAwLjEgOiAxNy4wNi4yMC9GQiAKKyAqIDAuMiA6IDI1LjEwLjIxL0ZCCisgKiAgICAgICBsb2dpbmcgb2YgdGhlIEFQSSBSZXF1ZXN0cy4KKyAqICAgICAgIGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorICogICAgICAgY29ycmVjdGluZyBjYWxsaW5nIG9mIGxlbW1hICsgcHJvcDEvcHJvcDIvc3BlYy4KKyAqICAgICAgIGhhbmRsaW5nIG9mIGxlbW1hdGEgd2l0aCAnw58nLgorICogCisgKiBHZW5lcmFsIGNvbW1lbnRzIHRvIHRoZSBlbmNvZGluZyBvZiBkZXJpdmF0aW9ucyBmcm9tIGxlbW1hIHRvIHdmcyBhbmQgaG93IHRoZXkgYXJlIGVuY29kZWQKKyAqIGluIHRoZSBEZXJieSBkYXRhYmFzZToKKyAqIAorICogR0xFTU0gZW5jb2Rpbmc6ICAKKyAqICAgXyBfIDogK0ZsZXggICAgICAgw5ZsZSAtPiDDlmwgICAgICAKKyAqICAgKyBfIDogK0NvbXAgICAgICAgw5ZsbGFtcGUgLT4gw5ZsIG9yIExhbXBlIChjb21wb3VuZCkuCisgKiAgIF8gKyA6ICtvdGhlciAgICAgIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuc2NodWggKG5vIGNvbXBvdW5kIGZvciAnVHVybnNjaHVoJywgb25seSBwcmVmaXgpLgorICogICArICsgOiArQ29tcCtvdGhlciBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybiArIFNjaHVoIChjb21wb3VuZCBmb3IgJ1NjaHVoJyArIFByZWZpeCkuCisgKiBDMiBsZW1tYXRpemF0aW9uIG9wdGlvbnM6CisgKiAgIEZsZXggIChpZGVudGljYWwgdG8gR2xlbW0pCisgKiAgIENvbXAgIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykKKyAqICAgT3RoZXIgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKS4KKyAqICAgU3BlYyAgKG9ubHkgQzI6IGluY2x1ZGVzIGFsbCB3ZnMgd2l0aCBoaXBoZW4gYW5kL29yIHNvbWUgbm9uLWFscGhhYmV0aWMgSVNPODg1OS0xIGNoYXJzKQorICogICAgICAgICBFLmcuIMOWbC1FeHBvcnRlLCAiTWFya2VuIi3DlmxlLgorICogRGVyYnkgRW5jb2Rpbmc6CisgKiAgcHJvcDEgCXByb3AyCXNwZWMgICAJbWVhbmluZyBpbiBDMjoKKyAqICAwCQkwCQktCQlGbGV4CisgKiAgMQkJMAkJLQkJQ29tcAorICogIDAJCTEJCS0JCU90aGVyIChwcmVmaXgpCisgKiAgMQkJMQkJLQkJQ29tcCArIE90aGVyCisgKiAgLQkJLQkJMAkJLVNwZWMKKyAqICAtCQktCQkxCQkrU3BlYworICogCisgKiBFeGFtcGxlczoKKyAqICZTY2h1aAkJCTogU2NodWgsIFNjaHVoZSwgLi4uIG9ubHkgZmxleGlvbnMKKyAqICZTY2h1aCtjb21wCQk6IFNjaHVoZSwgVHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzLgorICogJlNjaHVoK290aGVyCQk6IFNjaHVoZSwgQW50aXNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgcHJlZml4ZWQgd2ZzIChubyBjb21wb3VuZHMpLgorICogJlNjaHVoK2NvbXArb3RoZXI6IFNjaHVoZSwgQW50aXNjaHVoZSwgVHVybnNjaHVoZSwgQW50aXR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcyBhbmQgCisgKiAJCQkJCSAgcHJlZml4ZWQgc2luZ2xlIHdmcyAoQW50aXNjaHVoZSkgYW5kIHByZWZpeGVkIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtzcGVjCQk6ICJBbnRpIi1TY2h1aGUsIDY4Z2VyLVNjaHVoZS4uLiBtYXkgYmUgY29tYmluZWQgd2l0aCBldmVyeSBvcHRpb25zOiBhZGRzCisgKiAgICAgICAgICAgICAgICAgICAgd2ZzIHdpdGggaHlwaGVuIGFuZC9vciBub24tYWxwaGFiZXRpYyBjaGFycy4KKyAqIAorICogQ29udmVyc2lvbiBydWxlczoKKyAqIAorICogICZzY2hsaWXDn2VuIC0+IGludGVybmFsIHNlYXJjaCBmb3IgJ3NjaGxpZXNzZW4nLAorICogIGJlY2F1c2UgR2xlbW0gb3V0cHV0cyAnc3MnIGZvciAnw58nLgorICogIAorICogQ2hhcmFjdGVyIEVuY29kaW5nOgorICogCisgKiAtIFdoZW4gaW1wb3J0aW5nIHdmcyB0byB0aGUgRGVyYnkgRGF0YWJhc2Ugd2l0aCBkb0N1cmxHbGVtbVNlcnZpY2VzL2luZGV4TGVtbWF0YToKKyAqIAorICogICBJTlBVVDogd29yZGZvcm0gbGlzdCBpbiBbVVRGLThdIDogVVRGLTggaXMgdGhlbiBjb252ZXJ0ZWQgdG8gTGF0MSBmb3IgR2xlbW0sCisgKiAgICAgICAgICB0aGUgb3V0cHV0IG9mIEdsZW1tIFtMYXQxXSBpcyByZXR1cm5lZCB0byB0aGUgR2xlbW1TZXJ2aWNlcyB3aXRob3V0IHJlY29udmVyc2lvbgorICogICAgICAgICAgdG8gVVRGOCBhbmQgaW1wb3J0ZWQgaW50byBEZXJieSBEYXRhYmFzZSB1bmNoYW5nZWQuCisgKgkJCisgKi8KKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNC4xMS4yMSI7IAorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMiI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVQcm9wcwkJPSAiL1dFQi1JTkYvR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIjsKKwkKKwkvLyB0aGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgcmVhZCBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyAodGhlc2UgYXJlIHRoZSBkZWZhdWx0IHZhbHVlcyk6CisJcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggCQk9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCXByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQkJCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJQENvbnRleHQKKwlwcml2YXRlIFNlcnZsZXRDb250ZXh0IHNlcnZsZXRDb250ZXh0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZm91dAk9IG51bGw7CisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmZXJyCT0gbnVsbDsJCQorCQkKKwkvKiAKKyAJICogCisJICogLSBhZnRlciBsb2FkUHJvcGVydGllcywgc2V0cyB0aGUgY2xhc3MgdmFyaWFibGUgd2l0aCBsb2FkZWQgcHJvcGVydHkgdmFsdWVzLgorCSAqIAorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlHU19Xb3JraW5nUGF0aCAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiR1NfV29ya2luZ1BhdGgiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiKTsKKwlmbmFtZVdmcwkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVXZnMiLCAJICAgImdsX3dmc19pbi50eHQiKTsKKwlmbmFtZVdmcwkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lV2ZzOworCWZuYW1lT3V0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZU91dCIsIAkgICAiR2xlbW1TZXJ2aWNlcy5sb2ciKTsKKwlmbmFtZU91dAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lT3V0OworCWZuYW1lRXJyCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUVyciIsIAkgICAiR2xlbW1TZXJ2aWNlcy5lcnIiKTsKKwlmbmFtZUVycgkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lRXJyOworCWZuYW1lU2NyaXB0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVNjcmlwdCIsCSAgICJkb0dsZW1tIik7CisJZm5hbWVTY3JpcHQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVNjcmlwdDsKKwlmbmFtZUxlbWF0YQkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVMZW1hdGEiLCAgICAidG1wL2xlbTMiKTsKKwlmbmFtZUxlbWF0YQkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lTGVtYXRhOworCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyoKKwkgKiAgbG9nX1JlcXVlc3Q6CisJICogIAorCSAqICAtIHdyaXRlIGluZm8gYWJvdXQgQVBJIFJlcXVlc3QuCisJICogIFBhcmFtZXRlcnM6CisJICogIHJlcXVlc3RQYXRoCTogcGF0aCBvZiB3ZWJhcHAgYWRkcmVzc2VkIGJ5IHRoZSByZXF1ZXN0LgorCSAqICBmdW5jCQk6IG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHdoaWNoIGltcGxlbWVudHMgdGhlIHJlcXVlc3QuCisJICogIAorCSAqICAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBsb2dfUmVxdWVzdChTdHJpbmcgcmVxdWVzdFBhdGgsIFN0cmluZyBmdW5jKQorCQorCXsKKwkvLyB0cmFuc2Zvcm0gImRhdGVUdGltZSIgLT4gImRhdGUgdGltZSI6CisJCisJZm91dC5wcmludGYoIiMjI1xuIik7CisJZm91dC5wcmludGYoIiMjIyAlczogJXMgOiB2ZXJzPSclcycsIHZkYXRlPSclcycgcmVxdWVzdD0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdFBhdGgsIHZlcnNpb24sIHZlcnNpb25EYXRlLCAKKwkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCX0gLy8gbG9nX1JlcXVlc3QKKwkJCisJLyogZm9ybWF0RGJOYW1lCisJICogCisJICogLSBnZXRzIG5hbWUgb2YgRGF0YWJhc2UgdXNlZCBieSBEZXJieSBmcm9tIHByb3BzIAorCSAqICAgYW5kIGZvcm1hdCBpdCB0byBIVE1MLgorCSAqICAKKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgU3RyaW5nIGZvcm1hdERiTmFtZShQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlTdHJpbmcKKwkJZGJOYW1lOworCVN0cmluZworCQlkYlBhdGggPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlpbnQKKwkJaiA9IGRiUGF0aC5sYXN0SW5kZXhPZignLycpOworCQorCWlmKCBqID4gMCApCisJCWRiTmFtZSA9IGRiUGF0aC5zdWJzdHJpbmcoaisxKTsKKwllbHNlCisJCWRiTmFtZSA9IGRiUGF0aDsKKwkKKwlyZXR1cm4gZGJOYW1lOyAvLyAiPHA+PGI+RGF0YWJhc2U6ICIgKyBkYk5hbWUgKyAiPC9iPjwvcD5cbiI7CisJfSAvLyBmb3JtYXREYk5hbWUKKworCS8qCisJICogY2xvc2VMb2dTdHJlYW1zOgorCSAqIAorCSAqIC0gY2xvc2UgdGhlIGZvdXQvZmVyciBsb2cgc3RyZWFtcy4KKwkgKiAKKwkgKiAyNi4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBjbG9zZUxvZ1N0cmVhbXMoKQorCQorCXsKKwlpZiggZm91dCAhPSBudWxsKQorCQlmb3V0LmNsb3NlKCk7CisJZm91dCA9IG51bGw7CisJCisJaWYoIGZlcnIgIT0gbnVsbCApCisJCWZlcnIuY2xvc2UoKTsKKwlmZXJyID0gbnVsbDsKKwl9IC8vIGNsb3NlTG9nU3RyZWFtcworCQorCS8qIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisJICogCisJICogLSBsb2FkIEdsZW1tU2VydmljZXMucHJvcGVydGllcywgc2V0cyBHbGVtbVNlcnZpY2VzIGNvbnN0YW50cworCSAqICAgYW5kIGxvZ3MgdGhlIHJlcXVlc3QuCisJICogLSBsb2FkIHByb3BlcnRpZXMgYW5kIHNldCBjb25zdGFudHMgYmVmb3JlIGxvZ2dpbmcgYW55dGhpbmcsIGJlY2F1c2UKKwkgKiAgIGxvZ2dpbmcgd2lsbCBiZSBkb25lIGludG8gdGhlIGxhc3Qgc3Rkb3V0L3N0ZGVyciBvcGVuZWQgaW4gZ2xhc3NmaXNoJ3MgSlZNLAorCSAqICAgZS5nLiBpbiB0aGUgbG9nIG9mIGFub3RoZXIgU2VydmljZS4KKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgUHJvcGVydGllcyBpbml0X2FuZF9sb2dfUmVxdWVzdChTdHJpbmcgZnVuYywgU3RyaW5nIHJlcXVlc3RQYXRoKQorCQorCXsKKwlTdHJpbmcKKwkJcmVhbFBhdGggPSBzZXJ2bGV0Q29udGV4dC5nZXRSZWFsUGF0aChmbmFtZVByb3BzKTsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKGlmIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlQcm9wZXJ0aWVzCisJCXByb3BzID0gVXRpbHMubG9hZFByb3BlcnRpZXMoc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSwgZm5hbWVQcm9wcywgcmVhbFBhdGgsIGZhbHNlKTsKKwkKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gZm91dCBhbmQgZmVyciBhcyByZXBsYWNlbWVudCBmb3Igc3Rkb3V0L3N0ZGVyciBmb3IgdXNlIGluIEdsZW1tU2VydmljZXMuCisJLy8gZG8gbm90IHVzZSBvciByZWRpcmVjdCBTeXN0ZW0ub3V0IGFuZCBTeXN0ZW0uZXJyLCBhcyB0aGV5IHdpbGwgYmUgcmVkaXJlY3RlZAorCS8vIGJ5IG90aGVyIFNlcnZpY2VzIGluIHRoZSBzYW1lIGdsYXNzZmlzaCBKVk0sIGUuZy4gYnkgdGhlIFdmb3JtU2VydmljZXMuCisJZm91dCA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZU91dCk7CisJZmVyciA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZUVycik7CisJCisJLy9VdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQorCWxvZ19SZXF1ZXN0KHJlcXVlc3RQYXRoLCBmdW5jKTsKKwkKKwlyZXR1cm4gcHJvcHM7CisJfSAvLyBpbml0X2FuZF9sb2dfUmVxdWVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCVN0cmluZworCQlzdGF0dXM7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvc3RhdHVzLyIpOworCQorCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCQorCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5wcm9wZXJ0aWVzPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+ZGF0YWJhc2U8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSwKKwkJCQkJCQlzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpID09IG51bGwgPyAibm90IGZvdW5kIiA6CisJCQkJCQkJCXByb3BzLmlzRW1wdHkoKSA/ICJlbXB0eSIgOiAibG9hZGVkIiwKKwkJCQkJCQlmb3JtYXREYk5hbWUocHJvcHMpCisJCQkJCQkJKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIAorCSAqIGRvUE9TVF9pbXBvcnRMZW1tYURhdGE6CisJICogCisJICogUE9TVDogL2luZGV4L2FkZC86IHRleHQvcGxhaW4KKwkgKiBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZS4KKwkgKiBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZAorCSAqIGludG8gdGhlIGRhdGFiYXNlLgorCSAqIElucHV0OiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKi8KKwkKKwlAUGF0aCgiYWRkL3tkYXRhYmFzZW5hbWV9IikgCisJQFBPU1QgCisJQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvUE9TVF9pbXBvcnRMZW1tYURhdGEKKwkJCQkJCQkoCisJCQkJCQkJU3RyaW5nIAkJCQkJCQkJbGlzdCwKKwkJCQkJCQlAUGF0aFBhcmFtKHZhbHVlPSJkYXRhYmFzZW5hbWUiKSAJZmluYWwgU3RyaW5nIGRibmFtZQorCQkJCQkJCSkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb1BPU1RfaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSBhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCQorCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9hZGQvIik7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogc3VibWl0dGVkIGRhdGFiYXNlbmFtZT0nJXMnLlxuIiwgZnVuYywgZGJuYW1lKTsKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBwb3N0ZWQgbGlzdCA9ICclcycuXG4iLCBmdW5jLCBsaXN0KTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBmb3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKGZlcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMsIGZvdXQsIGZlcnIpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNmw7xocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSwgcHJvcHMpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCQorCX0gLy8gZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCisJLyogZG9HRVRfdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVycyA9ICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vIik7CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlmaW5hbCBTdHJpbmcKKwkJZGJOYW1lID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+ZGF0YWJhc2U8L2I+OiAlczwvcD4iLCBmb3JtYXREYk5hbWUocHJvcHMpKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgZGJOYW1lICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyBkb0dFVF92aWV3REJJbmZvCisKKworCS8qIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0PnZlcnNpb24gIiArIHZlcnNpb24gKyAiIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIHJlcXVlc3QgPSAnIiArIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikgKyAiJzwvaT48L2g0PlxuIiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDE6PC9iPiAoQzIgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9PC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+e2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYyk8L2NvZGU+PC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbDwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPsOWbD9vcHRzPWZsZXgrY29tcCtvdGhlcitzcGVjPC9jb2RlPjwvcD4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMjo8L2I+IChpbnRlcm5hbCBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX0/cHJvcDE9WzAxMl0mYW1wO3Byb3AyPVswMTJdJmFtcDtzcGVjPVswMTJdPC9jb2RlPiAod2hlcmUgZWFjaCBwcm9wMSwgcHJvcDIsIHNwZWMgaXMgb3B0aW9uYWwpLjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw/cHJvcDE9MCZhbXA7cHJvcDI9MSZhbXA7c3BlYz0yPC9jb2RlPjwvcD4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfSIpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSclZCcgcHJvcDI9JyVkJyBzcGVjPSclZCcuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwkvKiAKKwlmb3IoaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJCX0JCisJICovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoIGxlbW1hSW5mby5vcHRzU2V0dGluZyA9PSBMZW1tYUluZm8uT1BUU19TRVRUSU5HX0MyICkgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMSxwcm9wMixzcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaW50CisJCW5XZnMgPSBsZW1tYUluZm8ubldmczsKKwkKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwkvLyBsb2cgb3V0Y29tZToKKwlpZiggbldmcyA8IDAgKQorCQlmb3V0LnByaW50ZigiRXJyb3I6ICVzOiByZXR1cm5pbmcgMCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMpOworCWVsc2UKKwkJZm91dC5wcmludGYoIkRlYnVnLiAlczogcmV0dXJuaW5nICVkIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYywgbldmcyk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIG5vdGU6CisJICogLSBpZiBCcm93c2VyIHJlcXVlc3Q6IEhUVFBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAndGV4dC9odG1sLC4uLnhtbC4uLicKKwkgKiAtIGlmIFdmb3JtU2VydmljZXMgcmVxdWVzdDogSHR0cFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICdhcHBsaWNhdGlvbi9qc29uJy4KKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqIAorCSAqIC0gc3VibWl0dGVkIFVSTCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hLCBpcyBpbnRlcnByZXRlZCBieSBnbGFzc2Zpc2ggYXMKKwkgKiAgIGJlaW5nIElTTy04ODU5LTEgZW5jb2RlZC4gV2hlbiB0aGUgcmVxdWVzdCBpcyBVVEYtOCBlbmNvZGVkLCBVbWxhdXRzIGFuZAorCSAqICAgJ8OfJyBhcmUgbWlzLWludGVycHJlZGVkLCBsZWFkaW5nIHRvIGFuIGVycm9uZXJvdXMgcmVxdWVzdCB0byB0aGUgRGVyYnkKKwkgKiAgIGRhdGFiYXNlLgorCSAqIC0gUmVxdWVzdGVkIGxlbW1hICdsZW1tYScgaGFzIHRvIGJlIHRyYW5zZm9ybWVkIHRvIFVURi04IGZpcnN0LgorCSAqIC0gbm90ZTogZXZlbiB3aGVuIHN1Ym1pdHRpbmcgdGhlIEdFVCByZXF1ZXN0IGJ5IHNwZWNpZnlpbmcgJ2NoYXJlbmNvZGU9VVRGLTgnLAorCSAqICAgZ2xhc3NmaXNoIGRvZXMgbm90IGNvbnZlcnQgaXQgYXV0b21hdGljYWxseSBhcyBleHBlY3RlZC4KKwkgKiAgIAorCSAqICAyMi4xMC4yMS9GQgorCSAqIAorCSAqIC0gaWYgYWNjZXB0PWFwcGxpY2F0aW9uL2pzb24gcmV0dXJuIFVURi04IChXZm9ybVNlcnZpY2VzKS4KKwkgKiAtIGVsc2UgaWYgYWNjZXB0PXRleHQvaHRtbCBkbyBub3QgdHJhbnNmb3JtIGNoYXJhY3RlciBlbmNvZGluZyAoQnJvd3NlcikuCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBDb25zdW1lcygiYXBwbGljYXRpb24vanNvbiwgdGV4dC9odG1sIikKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCQorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCWZpbmFsIGJvb2xlYW4KKwkJYkVuY29kZUxlbW1hID0gZmFsc2U7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CisJCisJLyogdGVzdDoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJaWYoIGJFbmNvZGVMZW1tYSApCisJCXsKKwkJLy8gd2hlbiBhY2NlcHRpbmcgSlNPTiwgdXJsIGhhcyB0byBiZSBjb252ZXJ0ZWQgdG8gVVRGLTgsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYToKKwkJdHJ5IHsKKwkJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obmV3IFN0cmluZyhsZW1tYS5nZXRCeXRlcygiSVNPLTg4NTktMSIpLCAidXRmLTgiKSk7CisJCQl9IAorCQljYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlMSkgeworCQkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCQlMZW1tYVJlc3BvbnNlCisJCQkJbGVtcmVzcCA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbXJlc3ApLmJ1aWxkKCk7CisJCQl9CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW1VURi04XSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCWVsc2UKKwkJeworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbdW5jaGFuZ2VkXSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCisJLyogZG9lcyBub3QgaGVscDoKKwkgU3RyaW5nCisJIAlyZXF1ZXN0Q2hhckVuY29kaW5nID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldENoYXJhY3RlckVuY29kaW5nKCk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiByZXF1ZXN0IGNoYXJhY3RlciBlbmNvZGluZyA9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RDaGFyRW5jb2RpbmcpOworCSovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXsKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQkvL3JldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJfQorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsJCisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCS8qCisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC90ZXN0L2luZm8vIik7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL2ZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJZm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9HbGVtbUNsaWVudC8uaW5kZXhlcy9wcm9wZXJ0aWVzLmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvR2xlbW1DbGllbnQvLmluZGV4ZXMvcHJvcGVydGllcy5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTM2MTQwCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvR2xlbW1DbGllbnQvLmluZGV4ZXMvcHJvcGVydGllcy5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9HbGVtbUNsaWVudC8ubG9jYXRpb24gYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9HbGVtbUNsaWVudC8ubG9jYXRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZkM2YxMwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tQ2xpZW50Ly5sb2NhdGlvbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9HbGVtbUNsaWVudC8ubWFya2VycyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tQ2xpZW50Ly5tYXJrZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MDBjZjkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9HbGVtbUNsaWVudC8ubWFya2VycwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9HbGVtbUNsaWVudC9vcmcuZWNsaXBzZS5qZHQuY29yZS9zdGF0ZS5kYXQgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9HbGVtbUNsaWVudC9vcmcuZWNsaXBzZS5qZHQuY29yZS9zdGF0ZS5kYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE3OWRmNAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tQ2xpZW50L29yZy5lY2xpcHNlLmpkdC5jb3JlL3N0YXRlLmRhdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9HbGVtbVNlcnZpY2VzLy5pbmRleGVzLzViL2E4L2hpc3RvcnkuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9HbGVtbVNlcnZpY2VzLy5pbmRleGVzLzViL2E4L2hpc3RvcnkuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU1ODliZgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tU2VydmljZXMvLmluZGV4ZXMvNWIvYTgvaGlzdG9yeS5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9HbGVtbVNlcnZpY2VzLy5pbmRleGVzL2U0LzgxLzNkLzVlL2hpc3RvcnkuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9HbGVtbVNlcnZpY2VzLy5pbmRleGVzL2U0LzgxLzNkLzVlL2hpc3RvcnkuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNjZmE3YwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tU2VydmljZXMvLmluZGV4ZXMvZTQvODEvM2QvNWUvaGlzdG9yeS5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9HbGVtbVNlcnZpY2VzLy5pbmRleGVzL2hpc3RvcnkuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9HbGVtbVNlcnZpY2VzLy5pbmRleGVzL2hpc3RvcnkuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM0ZDk5ZQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tU2VydmljZXMvLmluZGV4ZXMvaGlzdG9yeS5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9HbGVtbVNlcnZpY2VzLy5pbmRleGVzL3Byb3BlcnRpZXMuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9HbGVtbVNlcnZpY2VzLy5pbmRleGVzL3Byb3BlcnRpZXMuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY4MmU4YQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tU2VydmljZXMvLmluZGV4ZXMvcHJvcGVydGllcy5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9HbGVtbVNlcnZpY2VzLy5sb2NhdGlvbiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tU2VydmljZXMvLmxvY2F0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYTFmOTQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9HbGVtbVNlcnZpY2VzLy5sb2NhdGlvbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9HbGVtbVNlcnZpY2VzLy5tYXJrZXJzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvR2xlbW1TZXJ2aWNlcy8ubWFya2VycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDllMWJjCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvR2xlbW1TZXJ2aWNlcy8ubWFya2VycwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9HbGVtbVNlcnZpY2VzL29yZy5lY2xpcHNlLmpkdC5jb3JlL3N0YXRlLmRhdCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tU2VydmljZXMvb3JnLmVjbGlwc2UuamR0LmNvcmUvc3RhdGUuZGF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMDA1ZGEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9HbGVtbVNlcnZpY2VzL29yZy5lY2xpcHNlLmpkdC5jb3JlL3N0YXRlLmRhdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9HbGVtbVNlcnZpY2VzMi8uaW5kZXhlcy9wcm9wZXJ0aWVzLmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvR2xlbW1TZXJ2aWNlczIvLmluZGV4ZXMvcHJvcGVydGllcy5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjgyZThhCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvR2xlbW1TZXJ2aWNlczIvLmluZGV4ZXMvcHJvcGVydGllcy5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9HbGVtbVNlcnZpY2VzMi8ubG9jYXRpb24gYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9HbGVtbVNlcnZpY2VzMi8ubG9jYXRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVjYjBlYwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tU2VydmljZXMyLy5sb2NhdGlvbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9HbGVtbVNlcnZpY2VzMi8ubWFya2VycyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tU2VydmljZXMyLy5tYXJrZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MjVhZTcKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9HbGVtbVNlcnZpY2VzMi8ubWFya2VycwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9HbGVtbVNlcnZpY2VzMi9vcmcuZWNsaXBzZS5qZHQuY29yZS9zdGF0ZS5kYXQgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9HbGVtbVNlcnZpY2VzMi9vcmcuZWNsaXBzZS5qZHQuY29yZS9zdGF0ZS5kYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNjNzgxYQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tU2VydmljZXMyL29yZy5lY2xpcHNlLmpkdC5jb3JlL3N0YXRlLmRhdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9Kc29uVHJhdmVyc2UvLmluZGV4ZXMvcHJvcGVydGllcy5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0pzb25UcmF2ZXJzZS8uaW5kZXhlcy9wcm9wZXJ0aWVzLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMzYxNDAKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9Kc29uVHJhdmVyc2UvLmluZGV4ZXMvcHJvcGVydGllcy5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9Kc29uVHJhdmVyc2UvLmxvY2F0aW9uIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvSnNvblRyYXZlcnNlLy5sb2NhdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDg0ZTg1Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvSnNvblRyYXZlcnNlLy5sb2NhdGlvbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9Kc29uVHJhdmVyc2UvLm1hcmtlcnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9Kc29uVHJhdmVyc2UvLm1hcmtlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRmZjNmZQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0pzb25UcmF2ZXJzZS8ubWFya2VycwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9Kc29uVHJhdmVyc2Uvb3JnLmVjbGlwc2UuamR0LmNvcmUvc3RhdGUuZGF0IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvSnNvblRyYXZlcnNlL29yZy5lY2xpcHNlLmpkdC5jb3JlL3N0YXRlLmRhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDBiZDYyCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvSnNvblRyYXZlcnNlL29yZy5lY2xpcHNlLmpkdC5jb3JlL3N0YXRlLmRhdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9UZXN0cy8uaW5kZXhlcy9wcm9wZXJ0aWVzLmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvVGVzdHMvLmluZGV4ZXMvcHJvcGVydGllcy5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTM2MTQwCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvVGVzdHMvLmluZGV4ZXMvcHJvcGVydGllcy5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9UZXN0cy8ubG9jYXRpb24gYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9UZXN0cy8ubG9jYXRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIwMmEyNgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL1Rlc3RzLy5sb2NhdGlvbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9UZXN0cy8ubWFya2VycyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL1Rlc3RzLy5tYXJrZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzOTE1ZjgKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9UZXN0cy8ubWFya2VycwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9UZXN0cy9vcmcuZWNsaXBzZS5qZHQuY29yZS9zdGF0ZS5kYXQgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9UZXN0cy9vcmcuZWNsaXBzZS5qZHQuY29yZS9zdGF0ZS5kYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJkNzhkYQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL1Rlc3RzL29yZy5lY2xpcHNlLmpkdC5jb3JlL3N0YXRlLmRhdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9VdGlscy8uaW5kZXhlcy9wcm9wZXJ0aWVzLmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvVXRpbHMvLmluZGV4ZXMvcHJvcGVydGllcy5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTM2MTQwCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvVXRpbHMvLmluZGV4ZXMvcHJvcGVydGllcy5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9VdGlscy8ubG9jYXRpb24gYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9VdGlscy8ubG9jYXRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdjODA3ZgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL1V0aWxzLy5sb2NhdGlvbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9VdGlscy8ubWFya2VycyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL1V0aWxzLy5tYXJrZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYTM4MDcKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9VdGlscy8ubWFya2VycwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9VdGlscy9vcmcuZWNsaXBzZS5qZHQuY29yZS9zdGF0ZS5kYXQgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9VdGlscy9vcmcuZWNsaXBzZS5qZHQuY29yZS9zdGF0ZS5kYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRlZmRiNwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL1V0aWxzL29yZy5lY2xpcHNlLmpkdC5jb3JlL3N0YXRlLmRhdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy93Zm9ybVNlcnZpY2VKYXIvLmluZGV4ZXMvcHJvcGVydGllcy5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL3dmb3JtU2VydmljZUphci8uaW5kZXhlcy9wcm9wZXJ0aWVzLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMzYxNDAKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy93Zm9ybVNlcnZpY2VKYXIvLmluZGV4ZXMvcHJvcGVydGllcy5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy93Zm9ybVNlcnZpY2VKYXIvLmxvY2F0aW9uIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvd2Zvcm1TZXJ2aWNlSmFyLy5sb2NhdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGZhMWYwCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvd2Zvcm1TZXJ2aWNlSmFyLy5sb2NhdGlvbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy93Zm9ybVNlcnZpY2VKYXIvLm1hcmtlcnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy93Zm9ybVNlcnZpY2VKYXIvLm1hcmtlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU1Zjc1ZgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL3dmb3JtU2VydmljZUphci8ubWFya2VycwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy93Zm9ybVNlcnZpY2VKYXIvb3JnLmVjbGlwc2UuamR0LmNvcmUvc3RhdGUuZGF0IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvd2Zvcm1TZXJ2aWNlSmFyL29yZy5lY2xpcHNlLmpkdC5jb3JlL3N0YXRlLmRhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmQ3OGRhCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvd2Zvcm1TZXJ2aWNlSmFyL29yZy5lY2xpcHNlLmpkdC5jb3JlL3N0YXRlLmRhdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy93Zm9ybVNlcnZpY2VzLy5pbmRleGVzLzViL2E4L2hpc3RvcnkuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy93Zm9ybVNlcnZpY2VzLy5pbmRleGVzLzViL2E4L2hpc3RvcnkuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA3MTIzOQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL3dmb3JtU2VydmljZXMvLmluZGV4ZXMvNWIvYTgvaGlzdG9yeS5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy93Zm9ybVNlcnZpY2VzLy5pbmRleGVzL3Byb3BlcnRpZXMuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy93Zm9ybVNlcnZpY2VzLy5pbmRleGVzL3Byb3BlcnRpZXMuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY4MmU4YQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL3dmb3JtU2VydmljZXMvLmluZGV4ZXMvcHJvcGVydGllcy5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy93Zm9ybVNlcnZpY2VzLy5sb2NhdGlvbiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL3dmb3JtU2VydmljZXMvLmxvY2F0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxYTNhMWUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy93Zm9ybVNlcnZpY2VzLy5sb2NhdGlvbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy93Zm9ybVNlcnZpY2VzLy5tYXJrZXJzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvd2Zvcm1TZXJ2aWNlcy8ubWFya2VycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWVkNGQxCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvd2Zvcm1TZXJ2aWNlcy8ubWFya2VycwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy93Zm9ybVNlcnZpY2VzL29yZy5lY2xpcHNlLmpkdC5jb3JlL3N0YXRlLmRhdCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL3dmb3JtU2VydmljZXMvb3JnLmVjbGlwc2UuamR0LmNvcmUvc3RhdGUuZGF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYzA0Y2IKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy93Zm9ybVNlcnZpY2VzL29yZy5lY2xpcHNlLmpkdC5jb3JlL3N0YXRlLmRhdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5yb290Ly5pbmRleGVzL2hpc3RvcnkudmVyc2lvbiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnJvb3QvLmluZGV4ZXMvaGlzdG9yeS52ZXJzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1Y2I5NTUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5yb290Ly5pbmRleGVzL2hpc3RvcnkudmVyc2lvbgpAQCAtMCwwICsxIEBACisCClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucm9vdC8uaW5kZXhlcy9wcm9wZXJ0aWVzLmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucm9vdC8uaW5kZXhlcy9wcm9wZXJ0aWVzLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYzkxMDgKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5yb290Ly5pbmRleGVzL3Byb3BlcnRpZXMuaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucm9vdC8uaW5kZXhlcy9wcm9wZXJ0aWVzLnZlcnNpb24gYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5yb290Ly5pbmRleGVzL3Byb3BlcnRpZXMudmVyc2lvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjJhYWE3Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucm9vdC8uaW5kZXhlcy9wcm9wZXJ0aWVzLnZlcnNpb24KQEAgLTAsMCArMSBAQAorAQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnJvb3QvMTIxLnRyZWUgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5yb290LzEyMS50cmVlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMjljODQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5yb290LzEyMS50cmVlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnNhZmV0YWJsZS9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnNhZmV0YWJsZS9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWVlZTMxCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uc2FmZXRhYmxlL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWI1YjAxCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCkBAIC0wLDAgKzEsNCBAQAorZGVzY3JpcHRpb24uYXV0b2J1aWxkaW5nPWZhbHNlCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorZW5jb2Rpbmc9VVRGLTgKK3ZlcnNpb249MQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUucHJlZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuZGVidWcuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWQxYjNjCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUucHJlZnMKQEAgLTAsMCArMSwyIEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorcHJlZldhdGNoRXhwcmVzc2lvbnM9PD94bWwgdmVyc2lvblw9IjEuMCIgZW5jb2RpbmdcPSJVVEYtOCIgc3RhbmRhbG9uZVw9Im5vIj8+XHJcbjx3YXRjaEV4cHJlc3Npb25zPlxyXG48ZXhwcmVzc2lvbiBlbmFibGVkXD0idHJ1ZSIgdGV4dFw9Impzb25Ob2RlLmdldCgmcXVvdDtmMSZxdW90OykiLz5cclxuPC93YXRjaEV4cHJlc3Npb25zPlxyXG4KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5kZWJ1Zy51aS5wcmVmcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5kZWJ1Zy51aS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzcwMzM2Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmRlYnVnLnVpLnByZWZzCkBAIC0wLDAgKzEsOSBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmRlYnVnLnVpLlBSRUZfTEFVTkNIX1BFUlNQRUNUSVZFUz08P3htbCB2ZXJzaW9uXD0iMS4wIiBlbmNvZGluZ1w9IlVURi04IiBzdGFuZGFsb25lXD0ibm8iPz5cclxuPGxhdW5jaFBlcnNwZWN0aXZlcy8+XHJcbgorb3JnLmVjbGlwc2UuZGVidWcudWkudXNlcl92aWV3X2JpbmRpbmdzPTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiIHN0YW5kYWxvbmVcPSJubyI/PlxyXG48dmlld0JpbmRpbmdzPlxyXG48dmlldyBpZFw9Im9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5EaXNwbGF5VmlldyI+XHJcbjxwZXJzcGVjdGl2ZSBpZFw9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLkRlYnVnUGVyc3BlY3RpdmUiIHVzZXJBY3Rpb25cPSJvcGVuZWQiLz5cclxuPC92aWV3PlxyXG48dmlldyBpZFw9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLlZhcmlhYmxlVmlldyI+XHJcbjxwZXJzcGVjdGl2ZSBpZFw9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLkRlYnVnUGVyc3BlY3RpdmUiIHVzZXJBY3Rpb25cPSJjbG9zZWQiLz5cclxuPC92aWV3PlxyXG48dmlldyBpZFw9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLkRlYnVnVmlldyI+XHJcbjxwZXJzcGVjdGl2ZSBpZFw9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLkRlYnVnUGVyc3BlY3RpdmUiIHVzZXJBY3Rpb25cPSJjbG9zZWQiLz5cclxuPC92aWV3PlxyXG48dmlldyBpZFw9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLkV4cHJlc3Npb25WaWV3Ij5cclxuPHBlcnNwZWN0aXZlIGlkXD0ib3JnLmVjbGlwc2UuZGVidWcudWkuRGVidWdQZXJzcGVjdGl2ZSIgdXNlckFjdGlvblw9Im9wZW5lZCIvPlxyXG48L3ZpZXc+XHJcbjx2aWV3IGlkXD0ib3JnLmVjbGlwc2UuZGVidWcudWkuQnJlYWtwb2ludFZpZXciPlxyXG48cGVyc3BlY3RpdmUgaWRcPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5EZWJ1Z1BlcnNwZWN0aXZlIiB1c2VyQWN0aW9uXD0ib3BlbmVkIi8+XHJcbjwvdmlldz5cclxuPHZpZXcgaWRcPSJvcmcuZWNsaXBzZS51aS5jb25zb2xlLkNvbnNvbGVWaWV3Ij5cclxuPHBlcnNwZWN0aXZlIGlkXD0ib3JnLmVjbGlwc2UuZGVidWcudWkuRGVidWdQZXJzcGVjdGl2ZSIgdXNlckFjdGlvblw9ImNsb3NlZCIvPlxyXG48L3ZpZXc+XHJcbjwvdmlld0JpbmRpbmdzPlxyXG4KK3ByZWZfc3RhdGVfbWVtZW50by5vcmcuZWNsaXBzZS5kZWJ1Zy51aS5CcmVha3BvaW50Vmlldz08P3htbCB2ZXJzaW9uXD0iMS4wIiBlbmNvZGluZ1w9IlVURi04Ij8+XHJcbjxWYXJpYWJsZXNWaWV3TWVtZW50byBvcmcuZWNsaXBzZS5kZWJ1Zy51aS5TQVNIX0RFVEFJTFNfUEFSVFw9IjMxNSIgb3JnLmVjbGlwc2UuZGVidWcudWkuU0FTSF9WSUVXX1BBUlRcPSI2ODQiPlxyXG48UFJFU0VOVEFUSU9OX0NPTlRFWFRfUFJPUEVSVElFUyBJTWVtZW50by5pbnRlcm5hbC5pZFw9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLkJyZWFrcG9pbnRWaWV3Ij5cclxuPEJPT0xFQU4gQk9PTEVBTlw9InRydWUiIElNZW1lbnRvLmludGVybmFsLmlkXD0ib3JnLmVjbGlwc2UuZGVidWcudWkuY2hlY2siLz5cclxuPC9QUkVTRU5UQVRJT05fQ09OVEVYVF9QUk9QRVJUSUVTPlxyXG48L1ZhcmlhYmxlc1ZpZXdNZW1lbnRvPgorcHJlZl9zdGF0ZV9tZW1lbnRvLm9yZy5lY2xpcHNlLmRlYnVnLnVpLkRlYnVnVmlld29yZy5lY2xpcHNlLmRlYnVnLnVpLkRlYnVnVmlldz08P3htbCB2ZXJzaW9uXD0iMS4wIiBlbmNvZGluZ1w9IlVURi04Ij8+XHJcbjxEZWJ1Z1ZpZXdNZW1lbnRvIG9yZy5lY2xpcHNlLmRlYnVnLnVpLkJSRUFEQ1JVTUJfRFJPUERPV05fQVVUT19FWFBBTkRcPSJmYWxzZSIvPgorcHJlZl9zdGF0ZV9tZW1lbnRvLm9yZy5lY2xpcHNlLmRlYnVnLnVpLkV4cHJlc3Npb25WaWV3PTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiPz5cclxuPFZhcmlhYmxlc1ZpZXdNZW1lbnRvIG9yZy5lY2xpcHNlLmRlYnVnLnVpLlNBU0hfREVUQUlMU19QQVJUXD0iMzE1IiBvcmcuZWNsaXBzZS5kZWJ1Zy51aS5TQVNIX1ZJRVdfUEFSVFw9IjY4NCI+XHJcbjxQUkVTRU5UQVRJT05fQ09OVEVYVF9QUk9QRVJUSUVTIElNZW1lbnRvLmludGVybmFsLmlkXD0ib3JnLmVjbGlwc2UuZGVidWcudWkuRXhwcmVzc2lvblZpZXciPlxyXG48Qk9PTEVBTiBCT09MRUFOXD0idHJ1ZSIgSU1lbWVudG8uaW50ZXJuYWwuaWRcPSJQUkVTRU5UQVRJT05fU0hPV19MT0dJQ0FMX1NUUlVDVFVSRVMiLz5cclxuPC9QUkVTRU5UQVRJT05fQ09OVEVYVF9QUk9QRVJUSUVTPlxyXG48L1ZhcmlhYmxlc1ZpZXdNZW1lbnRvPgorcHJlZl9zdGF0ZV9tZW1lbnRvLm9yZy5lY2xpcHNlLmRlYnVnLnVpLlZhcmlhYmxlVmlldz08P3htbCB2ZXJzaW9uXD0iMS4wIiBlbmNvZGluZ1w9IlVURi04Ij8+XHJcbjxWYXJpYWJsZXNWaWV3TWVtZW50byBvcmcuZWNsaXBzZS5kZWJ1Zy51aS5TQVNIX0RFVEFJTFNfUEFSVFw9IjMxNSIgb3JnLmVjbGlwc2UuZGVidWcudWkuU0FTSF9WSUVXX1BBUlRcPSI2ODQiPlxyXG48Q09MVU1OX1NJWkVTIElNZW1lbnRvLmludGVybmFsLmlkXD0ib3JnLmVjbGlwc2UuZGVidWcudWkuVkFSSUFMQkVfQ09MVU1OX1BSRVNFTlRBVElPTi5DT0xfVkFSX1ZBTFVFIiBTSVpFXD0iNTQ4Ii8+XHJcbjxDT0xVTU5fU0laRVMgSU1lbWVudG8uaW50ZXJuYWwuaWRcPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5WQVJJQUxCRV9DT0xVTU5fUFJFU0VOVEFUSU9OLkNPTF9WQVJfTkFNRSIgU0laRVw9IjIzMiIvPlxyXG48UFJFU0VOVEFUSU9OX0NPTlRFWFRfUFJPUEVSVElFUyBJTWVtZW50by5pbnRlcm5hbC5pZFw9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLlZhcmlhYmxlVmlldyI+XHJcbjxCT09MRUFOIEJPT0xFQU5cPSJ0cnVlIiBJTWVtZW50by5pbnRlcm5hbC5pZFw9IlBSRVNFTlRBVElPTl9TSE9XX0xPR0lDQUxfU1RSVUNUVVJFUyIvPlxyXG48L1BSRVNFTlRBVElPTl9DT05URVhUX1BST1BFUlRJRVM+XHJcbjwvVmFyaWFibGVzVmlld01lbWVudG8+CitwcmVmZXJyZWREZXRhaWxQYW5lcz1vcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuREVUQUlMX1BBTkVfTElORV9CUkVBS1BPSU5UXDpvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuREVUQUlMX1BBTkVfTElORV9CUkVBS1BPSU5UfERlZmF1bHREZXRhaWxQYW5lXDpEZWZhdWx0RGV0YWlsUGFuZXwKK3ByZWZlcnJlZFRhcmdldHM9ZGVmYXVsdFw6ZGVmYXVsdHxkZWZhdWx0LG9yZy5lY2xpcHNlLndzdC5qc2R0LmNocm9taXVtLmRlYnVnLnVpLnRvZ2dsZVRhcmdldElkXDpkZWZhdWx0fApkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmVnaXQuY29yZS5wcmVmcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5lZ2l0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBhODc2OQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5lZ2l0LmNvcmUucHJlZnMKQEAgLTAsMCArMSwzIEBACitHaXRSZXBvc2l0b3JpZXNWaWV3LkdpdERpcmVjdG9yaWVzPQorR2l0UmVwb3NpdG9yaWVzVmlldy5HaXREaXJlY3Rvcmllcy5yZWxhdGl2ZT0KK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUucHJlZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU0ZGRlMQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZS5wcmVmcwpAQCAtMCwwICsxLDEwIEBACithbm9ueW1pemVNZXNzYWdlcz1mYWxzZQorYW5vbnltaXplU3RhY2tUcmFjZXM9dHJ1ZQorZGVidWdFbmFibGVkPWZhbHNlCitkaXNhYmxlQXV0b21hdGljV2lyaW5nQW5hbHlzaXM9ZmFsc2UKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCityZXBvcnRlckVtYWlsPQorcmVwb3J0ZXJOYW1lPQorcmVzZXRTZW5kTW9kZT1LRUVQCityZXNldFNlbmRNb2RlT249MAorc2VuZE1vZGU9Tk9USUZZCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg0OTlkYQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDEzIEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoVmFyaWFibGUuSlJFX0xJQj1DXDovUHJvZ3JhbSBGaWxlcy9KYXZhL2pkazEuOC4wXzIzMS9qcmUvbGliL3J0Lmphcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoVmFyaWFibGUuSlJFX1NSQz1DXDovUHJvZ3JhbSBGaWxlcy9KYXZhL2pkazEuOC4wXzIzMS9zcmMuemlwCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGhWYXJpYWJsZS5KUkVfU1JDUk9PVD0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aFZhcmlhYmxlLkpVTklUX0hPTUU9Q1w6L1VzZXJzL0FkbWluX0EmQ28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuanVuaXRfNC4xMi4wLnYyMDE1MDQyODE2NDAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aFZhcmlhYmxlLk0yX1JFUE89Q1w6L1VzZXJzL0ZyYW5jay8ubTIvcmVwb3NpdG9yeQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29kZUNvbXBsZXRlLnZpc2liaWxpdHlDaGVjaz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS44CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuOAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS44CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLnByZWZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWVlOTkzCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5wcmVmcwpAQCAtMCwwICsxLDMgQEAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5kZWJ1Zy51aS5FeHByZXNzaW9uVmlldy5vcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuc2hvd19udWxsX2VudHJpZXM9dHJ1ZQorb3JnLmVjbGlwc2UuZGVidWcudWkuVmFyaWFibGVWaWV3Lm9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5zaG93X251bGxfZW50cmllcz10cnVlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0Lmp1bml0LnByZWZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5qdW5pdC5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWRmMDJjCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5qdW5pdC5wcmVmcwpAQCAtMCwwICsxLDIgQEAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuanVuaXQuY29udGVudF9hc3Npc3RfZmF2b3JpdGVfc3RhdGljX21lbWJlcnNfbWlncmF0ZWQ9dHJ1ZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcucHJlZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWM4NDZmCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcucHJlZnMKQEAgLTAsMCArMSwyIEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5QUkVGX1ZNX1hNTD08P3htbCB2ZXJzaW9uXD0iMS4wIiBlbmNvZGluZ1w9IlVURi04IiBzdGFuZGFsb25lXD0ibm8iPz5cclxuPHZtU2V0dGluZ3MgZGVmYXVsdFZNXD0iNTcsb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlMTMsMTU4NTI0NjQ5ODA4MSIgZGVmYXVsdFZNQ29ubmVjdG9yXD0iIj5cclxuPHZtVHlwZSBpZFw9Im9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZSI+XHJcbjx2bSBpZFw9IjE1ODUyNDY0OTgwODEiIG5hbWVcPSJqZGsxLjguMF8yMzEiIHBhdGhcPSJDXDpcXFByb2dyYW0gRmlsZXNcXEphdmFcXGpkazEuOC4wXzIzMSIvPlxyXG48L3ZtVHlwZT5cclxuPC92bVNldHRpbmdzPlxyXG4KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiODdhODIKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCkBAIC0wLDAgKzEsMjcgQEAKK2JyZWFkY3J1bWIub3JnLmVjbGlwc2UuanN0LmoyZWUuSjJFRVBlcnNwZWN0aXZlPXRydWUKK2NvbnRlbnRfYXNzaXN0X2Rpc2FibGVkX2NvbXB1dGVycz1vcmcuZWNsaXBzZS5qZHQudWkudGV4dFByb3Bvc2FsQ2F0ZWdvcnlcdTAwMDBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuY2FsbHMucmNwLnByb3Bvc2FsQ2F0ZWdvcnkudGVtcGxhdGVzXHUwMDAwb3JnLmVjbGlwc2UubXlseW4uamF2YS51aS5qYXZhQWxsUHJvcG9zYWxDYXRlZ29yeVx1MDAwMG9yZy5lY2xpcHNlLmpkdC51aS5qYXZhQWxsUHJvcG9zYWxDYXRlZ29yeVx1MDAwMG9yZy5lY2xpcHNlLmpkdC51aS5qYXZhVHlwZVByb3Bvc2FsQ2F0ZWdvcnlcdTAwMDBvcmcuZWNsaXBzZS5qZHQudWkuamF2YU5vVHlwZVByb3Bvc2FsQ2F0ZWdvcnlcdTAwMDBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuY2hhaW4ucmNwLnByb3Bvc2FsQ2F0ZWdvcnkuY2hhaW5cdTAwMDAKK2NvbnRlbnRfYXNzaXN0X2xydV9oaXN0b3J5PTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiIHN0YW5kYWxvbmVcPSJubyI/PjxoaXN0b3J5IG1heExIU1w9IjEwMCIgbWF4UkhTXD0iMTAiPjxsaHMgbmFtZVw9ImphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlIj48cmhzIG5hbWVcPSJqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZSIvPjwvbGhzPjxsaHMgbmFtZVw9ImphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2UkU3RhdHVzVHlwZSI+PHJocyBuYW1lXD0iamF2YXgud3MucnMuY29yZS5SZXNwb25zZSRTdGF0dXMiLz48L2xocz48L2hpc3Rvcnk+Citjb250ZW50X2Fzc2lzdF9udW1iZXJfb2ZfY29tcHV0ZXJzPTE5Citjb250ZW50X2Fzc2lzdF9wcm9wb3NhbHNfYmFja2dyb3VuZD0yNTUsMjU1LDI1NQorY29udGVudF9hc3Npc3RfcHJvcG9zYWxzX2ZvcmVncm91bmQ9MCwwLDAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkubmF2aWdhdG9yLmxheW91dD0yCitvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkubmF2aWdhdG9yLmxpYnJhcmllc25vZGU9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LnVpLmZvcm1hdHRlcnByb2ZpbGVzLnZlcnNpb249MTQKK29yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmNvZGVfdGVtcGxhdGVzX21pZ3JhdGVkPXRydWUKK29yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmN1c3RvbV9jb2RlX3RlbXBsYXRlcz08P3htbCB2ZXJzaW9uXD0iMS4wIiBlbmNvZGluZ1w9IlVURi04IiBzdGFuZGFsb25lXD0ibm8iPz48dGVtcGxhdGVzLz4KK29yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmN1c3RvbV90ZW1wbGF0ZXM9PD94bWwgdmVyc2lvblw9IjEuMCIgZW5jb2RpbmdcPSJVVEYtOCIgc3RhbmRhbG9uZVw9Im5vIj8+PHRlbXBsYXRlcy8+CitvcmcuZWNsaXBzZS5qZHQudWkudGV4dC50ZW1wbGF0ZXNfbWlncmF0ZWQ9dHJ1ZQorc3BlbGxpbmdfaWdub3JlX2FtcGVyc2FuZF9pbl9wcm9wZXJ0aWVzPXRydWUKK3NwZWxsaW5nX2lnbm9yZV9kaWdpdHM9dHJ1ZQorc3BlbGxpbmdfaWdub3JlX2phdmFfc3RyaW5ncz10cnVlCitzcGVsbGluZ19pZ25vcmVfbWl4ZWQ9dHJ1ZQorc3BlbGxpbmdfaWdub3JlX25vbl9sZXR0ZXJzPXRydWUKK3NwZWxsaW5nX2lnbm9yZV9zZW50ZW5jZT10cnVlCitzcGVsbGluZ19pZ25vcmVfc2luZ2xlX2xldHRlcnM9dHJ1ZQorc3BlbGxpbmdfaWdub3JlX3VwcGVyPXRydWUKK3NwZWxsaW5nX2lnbm9yZV91cmxzPXRydWUKK3NwZWxsaW5nX2xvY2FsZV9pbml0aWFsaXplZD10cnVlCitzcGVsbGluZ191c2VyX2RpY3Rpb25hcnlfZW5jb2Rpbmc9Cit1c2VBbm5vdGF0aW9uc1ByZWZQYWdlPXRydWUKK3VzZVF1aWNrRGlmZlByZWZQYWdlPXRydWUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLnVpLnByZWZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2UudWkucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUzYmI5NgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLnVpLnByZWZzCkBAIC0wLDAgKzEsMiBAQAorYXJlVGhlcmVXZWJTZXJ2aWNlcz1mYWxzZQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUucHJlZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYTc1YWQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsMiBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLnNlYXJjaC5KU1BJbmRleE1hbmFnZXI9SlNQIEluZGV4IHYzLjEwXzIwMTgwNDEyXzAxCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS5wcmVmcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NmM0YmUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDIgQEAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitsb2NhdGlvbm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnJ1bnRpbWUuOTA9Q1w6L1Byb2dyYW0gRmlsZXMgKHg4NikvSmF2YS9hcGFjaGUtdG9tY2F0LTkuMC4zNgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLm0yZS5kaXNjb3ZlcnkucHJlZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubTJlLmRpc2NvdmVyeS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2IxZDk2Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLm0yZS5kaXNjb3ZlcnkucHJlZnMKQEAgLTAsMCArMSwyIEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UubTJlLmRpc2NvdmVyeS5wcmVmLnByb2plY3RzPQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLm15bHluLmNvbnRleHQuY29yZS5wcmVmcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5teWx5bi5jb250ZXh0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNlOTdlNAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5teWx5bi5jb250ZXh0LmNvcmUucHJlZnMKQEAgLTAsMCArMSwyIEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorbXlseW4uYXR0ZW50aW9uLm1pZ3JhdGVkPXRydWUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5teWx5bi5qYXZhLnVpLnByZWZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLm15bHluLmphdmEudWkucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE2ZmU1MAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5teWx5bi5qYXZhLnVpLnByZWZzCkBAIC0wLDAgKzEsMyBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLm15bHluLmphdmEudWkucnVuLmNvdW50LjNfMTBfMD0xCitvcmcuZWNsaXBzZS5teWx5bi5qYXZhLnVpLnJ1bi5jb3VudC4zXzFfMD0xCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubXlseW4ubW9uaXRvci51aS5wcmVmcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5teWx5bi5tb25pdG9yLnVpLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNDYyYTYKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubXlseW4ubW9uaXRvci51aS5wcmVmcwpAQCAtMCwwICsxLDIgQEAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5teWx5bi5tb25pdG9yLmFjdGl2aXR5LnRyYWNraW5nLmVuYWJsZWQuY2hlY2tlZD10cnVlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubXlseW4udGFza3MudWkucHJlZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubXlseW4udGFza3MudWkucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI2MGMyMQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5wcmVmcwpAQCAtMCwwICsxLDUgQEAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCittaWdyYXRlZC50YXNrLnJlcG9zaXRvcmllcy5zZWN1cmUuc3RvcmU9dHJ1ZQorb3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuZmlsdGVycy5ub25tYXRjaGluZz10cnVlCitvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5maWx0ZXJzLm5vbm1hdGNoaW5nLmVuY291cmFnZWQ9dHJ1ZQorb3JnLmVjbGlwc2UubXlseW4udGFza3MudWkud2VsY29tZS5tZXNzYWdlPXRydWUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLnByZWZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJlZDYwMwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLnByZWZzCkBAIC0wLDAgKzEsMiBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK2tub3duRUVGcmFnbWVudHM9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmNvbXBsZXRpb24ucmNwLnByZWZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5jb21wbGV0aW9uLnJjcC5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWJkNzExCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5jb21wbGV0aW9uLnJjcC5wcmVmcwpAQCAtMCwwICsxLDIgQEAKK2NvbXBsZXRpb25fdGlwc19zZWVuPW9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5jb21wbGV0aW9uLnJjcC50aXBzLmRpc2NvdmVyeVw6b3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmNvbXBsZXRpb24ucmNwLnRpcHMudHlwZXMKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3AucHJlZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3AucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNjM2UzZQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcC5wcmVmcwpAQCAtMCwwICsxLDIgQEAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitpZ25vcmUuZG93bmxvYWQuZmFpbHVyZXM9YWx3YXlzCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucnNlLmNvcmUucHJlZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucnNlLmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE4NDc3NgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5yc2UuY29yZS5wcmVmcwpAQCAtMCwwICsxLDIgQEAKK2FjdGl2ZXVzZXJwcm9maWxlcz1QQy1Cb2RtZXI7VGVhbQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5zZWFyY2gucHJlZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uuc2VhcmNoLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYzY1YzQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uuc2VhcmNoLnByZWZzCkBAIC0wLDAgKzEsMiBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLnNlYXJjaC5kZWZhdWx0UGVyc3BlY3RpdmU9b3JnLmVjbGlwc2Uuc2VhcmNoLmRlZmF1bHRQZXJzcGVjdGl2ZS5ub25lCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UudGVhbS51aS5wcmVmcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS50ZWFtLnVpLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2Y2Q0OTYKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UudGVhbS51aS5wcmVmcwpAQCAtMCwwICsxLDIgQEAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS50ZWFtLnVpLmZpcnN0X3RpbWU9ZmFsc2UKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS51aS5icm93c2VyLnByZWZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLnVpLmJyb3dzZXIucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE4MjFjZAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS51aS5icm93c2VyLnByZWZzCkBAIC0wLDAgKzEsMiBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK2ludGVybmFsV2ViQnJvd3Nlckhpc3Rvcnk9aHR0cFw6Ly93d3cudzMub3JnL3B1Yi9XV1cvUHJvdG9jb2xzL3wqfGh0dHBcOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzEwLmh0bWxcI3NlYzEwLjQuN3wqfGh0dHBcOi8vMTI3LjAuMC4xXDo1NDkwNC93c2Uvd3NleHBsb3Jlci93c2V4cGxvcmVyLmpzcD98KnwKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS51aS5lZGl0b3JzLnByZWZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLnVpLmVkaXRvcnMucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFjN2RjMwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS51aS5lZGl0b3JzLnByZWZzCkBAIC0wLDAgKzEsNSBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK292ZXJ2aWV3UnVsZXJfbWlncmF0aW9uPW1pZ3JhdGVkXzMuMQorcHJpbnRNYXJnaW49dHJ1ZQorc3BlbGxpbmdFbmFibGVkPWZhbHNlCit0YWJXaWR0aD0zCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UudWkuaWRlLnByZWZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLnVpLmlkZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDQ4MWIyCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLnVpLmlkZS5wcmVmcwpAQCAtMCwwICsxLDEwIEBACitJTVBPUlRfRklMRVNfQU5EX0ZPTERFUlNfTU9ERT1wcm9tcHQKK0lNUE9SVF9GSUxFU19BTkRfRk9MREVSU19WSVJUVUFMX0ZPTERFUl9NT0RFPXByb21wdAorUFJPQkxFTVNfRklMVEVSU19NSUdSQVRFPXRydWUKK1NIT1dfTE9DQVRJT049dHJ1ZQorU0hPV19MT0NBVElPTl9OQU1FPWZhbHNlCitTSE9XX1BST0RVQ1RfSU5fVElUTEU9ZmFsc2UKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitwbGF0Zm9ybVN0YXRlPTE1ODUyNDUzMzA2NzYKK3F1aWNrU3RhcnQ9ZmFsc2UKK3RpcHNBbmRUcmlja3M9dHJ1ZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLnVpLm1vbml0b3JpbmcucHJlZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UudWkubW9uaXRvcmluZy5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTZlOWI5Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLnVpLm1vbml0b3JpbmcucHJlZnMKQEAgLTAsMCArMSwyIEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorbm9uaW50ZXJlc3RpbmdfdGhyZWFkX2ZpbHRlcj1qYXZhLiosb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4sb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlclBvb2wuc2xlZXAsb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlclBvb2wuc3RhcnRKb2Isb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC51dGlsLmltcGwudHB0LnRocmVhZHBvb2wuRXhlY3V0b3IucnVuLG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwudXRpbC5pbXBsLnRwdC50aW1lci5UaW1lckltcGwucnVuLG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5nZXROZXh0RXZlbnQsb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bixzdW4uKgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLnVpLnByZWZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLnVpLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MDc2ZjIKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UudWkucHJlZnMKQEAgLTAsMCArMSwyIEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorc2hvd0ludHJvPWZhbHNlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UudWkud29ya2JlbmNoLnByZWZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzEyYWFkCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC5wcmVmcwpAQCAtMCwwICsxLDUgQEAKKy8vb3JnLmVjbGlwc2UudWkuY29tbWFuZHMvc3RhdGUvb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLnJlc291cmNlcy5uZXN0ZWQuY2hhbmdlUHJvamVjdFByZXNlbnRhdGlvbi9vcmcuZWNsaXBzZS51aS5jb21tYW5kcy5yYWRpb1N0YXRlPWZhbHNlCisvL29yZy5lY2xpcHNlLnVpLmNvbW1hbmRzL3N0YXRlL29yZy5lY2xpcHNlLndzdC54bWwudmlld3MuWFBhdGhWaWV3LnByb2Nlc3Nvci54cGF0aHByb2Nlc3Nvci9vcmcuZWNsaXBzZS51aS5jb21tYW5kcy5yYWRpb1N0YXRlPXhwYXRoMTAKK1BMVUdJTlNfTk9UX0FDVElWQVRFRF9PTl9TVEFSVFVQPW9yZy5lY2xpcHNlLm0yZS5kaXNjb3Zlcnk7CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UudWkuY29tbWFuZHM9PD94bWwgdmVyc2lvblw9IjEuMCIgZW5jb2RpbmdcPSJVVEYtOCI/PlxyXG48b3JnLmVjbGlwc2UudWkuY29tbWFuZHMvPgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnByZWZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MjFkZDIKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkucHJlZnMKQEAgLTAsMCArMSwyIEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorbmV3RmlsZVRlbXBsYXRlTmFtZT1OZXcgSFRNTCBGaWxlICg1KQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5qc2R0LnVpLnByZWZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5qc2R0LnVpLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NDQ5NzgKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmpzZHQudWkucHJlZnMKQEAgLTAsMCArMSwxMyBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK2ZvbnRQcm9wYWdhdGVkPXRydWUKK29yZy5lY2xpcHNlLmpmYWNlLnRleHRmb250PTF8Q29uc29sYXN8MTAuMHwwfFdJTkRPV1N8MXwwfDB8MHwwfDB8MHwwfDB8MXwwfDB8MHwwfENvbnNvbGFzOworb3JnLmVjbGlwc2Uud3N0LmpzZHQuaW50ZXJuYWwudWkubmF2aWdhdG9yLmxheW91dD0xCitvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0b3IudGFiLndpZHRoPQorb3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZm9ybWF0dGVycHJvZmlsZXMudmVyc2lvbj0xMQorb3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuamF2YWRvY2xvY2F0aW9ucy5taWdyYXRlZD10cnVlCitvcmcuZWNsaXBzZS53c3QuanNkdC51aS50ZXh0LmN1c3RvbV90ZW1wbGF0ZXM9PD94bWwgdmVyc2lvblw9IjEuMCIgZW5jb2RpbmdcPSJVVEYtOCIgc3RhbmRhbG9uZVw9Im5vIj8+PHRlbXBsYXRlcy8+CitvcmcuZWNsaXBzZS53c3QuanNkdC51aS50ZXh0LnRlbXBsYXRlc19taWdyYXRlZD10cnVlCitwcm9wb3NhbE9yZGVyTWlncmF0ZWQ9dHJ1ZQordGFiV2lkdGhQcm9wYWdhdGVkPXRydWUKK3VzZUFubm90YXRpb25zUHJlZlBhZ2U9dHJ1ZQordXNlUXVpY2tEaWZmUHJlZlBhZ2U9dHJ1ZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnByZWZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3OWQ4MzUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUucHJlZnMKQEAgLTAsMCArMSwyIEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQoranNwSW5kZXhTdGF0ZT0xCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnByZWZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjlmYWI2Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5wcmVmcwpAQCAtMCwwICsxLDIgQEAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitydW50aW1lcz08P3htbCB2ZXJzaW9uXD0iMS4wIiBlbmNvZGluZ1w9IlVURi04IiBzdGFuZGFsb25lXD0ibm8iPz5cclxuPHJ1bnRpbWVzPlxyXG4gIDxydW50aW1lIGlkXD0iSjJFRSBSdW50aW1lIExpYnJhcnkiIGxvY2F0aW9uXD0iQ1w6L1Byb2dyYW0gRmlsZXMvSmF2YS9qcmUxLjguMF83MyIgbmFtZVw9IkoyRUUgUnVudGltZSBMaWJyYXJ5IiBydW50aW1lLXR5cGUtaWRcPSJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUucnVudGltZVR5cGUiIHRpbWVzdGFtcFw9IjAiIHZtLWluc3RhbGwtaWRcPSIxNTczNTU4MTA1NjYzIiB2bS1pbnN0YWxsLXR5cGUtaWRcPSJvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUiLz5cclxuICA8cnVudGltZSBpZFw9IkFwYWNoZSBUb21jYXQgdjkuMCIgbG9jYXRpb25cPSJDXDovUHJvZ3JhbSBGaWxlcy9KYXZhL2FwYWNoZS10b21jYXQtOS4wLjI5IiBuYW1lXD0iQXBhY2hlIFRvbWNhdCB2OS4wIiBydW50aW1lLXR5cGUtaWRcPSJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5ydW50aW1lLjkwIiB0aW1lc3RhbXBcPSIwIi8+XHJcbiAgPHJ1bnRpbWUgaWRcPSJBcGFjaGUgVG9tY2F0IHY5LjAgKDIpIiBsb2NhdGlvblw9IkNcOi9Qcm9ncmFtIEZpbGVzICh4ODYpL0phdmEvYXBhY2hlLXRvbWNhdC05LjAuMzYiIG5hbWVcPSJBcGFjaGUgVG9tY2F0IHY5LjAgKDIpIiBydW50aW1lLXR5cGUtaWRcPSJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5ydW50aW1lLjkwIiB0aW1lc3RhbXBcPSIwIi8+XHJcbjwvcnVudGltZXM+XHJcbgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuZGlzY292ZXJ5LnByZWZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuZGlzY292ZXJ5LnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNWRlOGQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5kaXNjb3ZlcnkucHJlZnMKQEAgLTAsMCArMSwyIEBACitjYWNoZS1sYXN0VXBkYXRlZERhdGU9XCBGcmkgSnVuIDE5IDIwMjAgMTFcOjU1XDowNiBDRVNUCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5zc2UudWkucHJlZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODZhYjg3Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5zc2UudWkucHJlZnMKQEAgLTAsMCArMSw1IEBACitjb250ZW50X2Fzc2lzdF9udW1iZXJfb2ZfY29tcHV0ZXJzPTIwCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQoraG92ZXJNb2RpZmllcnM9Y29tYmluYXRpb25Ib3Zlcnx0cnVlfDA7cHJvYmxlbUhvdmVyfGZhbHNlfDA7ZG9jdW1lbnRhdGlvbkhvdmVyfGZhbHNlfDA7YW5ub3RhdGlvbkhvdmVyfHRydWV8U2hpZnQ7Cit1c2VBbm5vdGF0aW9uc1ByZWZQYWdlPXRydWUKK3VzZVF1aWNrRGlmZlByZWZQYWdlPXRydWUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kucHJlZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2OTY5NTkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnByZWZzCkBAIC0wLDAgKzEsMyBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5zZXJ2aWNlcG9scy53c2lwcm9maWxlY29tcC53c2lhcC5kZWZhdWx0UHJvdG9jb2w9aHR0cFw6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8KK29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5zZXJ2aWNlcG9scy53c2lwcm9maWxlY29tcC53c2lzc2JwLmRlZmF1bHRQcm90b2NvbD1odHRwXDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLwpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC54bWwudWkucHJlZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWY0ZWY3Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC54bWwudWkucHJlZnMKQEAgLTAsMCArMSwyIEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC50YWJsZXRyZWUuWE1MTXVsdGlQYWdlRWRpdG9yUGFydC5sYXN0QWN0aXZlUGFnZT0xCmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwMVwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50IFwwNTAxXDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMzJhMTQKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwMVwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWdlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOkdsZW1tQ2xpZW50fSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1DbGllbnQgXDA1MDEwXDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1DbGllbnQgXDA1MDEwXDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMzJhMTQKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwMTBcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0icGFja2FnZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpHbGVtbUNsaWVudH0iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50IFwwNTAxMVwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50IFwwNTAxMVwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjMyYTE0Ci0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1DbGllbnQgXDA1MDExXDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6R2xlbW1DbGllbnR9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwMTJcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwMTJcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YzMmExNAotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50IFwwNTAxMlwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWdlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOkdsZW1tQ2xpZW50fSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1DbGllbnQgXDA1MDEzXDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1DbGllbnQgXDA1MDEzXDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMzJhMTQKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwMTNcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0icGFja2FnZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpHbGVtbUNsaWVudH0iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50IFwwNTAxNFwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50IFwwNTAxNFwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjMyYTE0Ci0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1DbGllbnQgXDA1MDE0XDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6R2xlbW1DbGllbnR9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwMTVcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwMTVcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YzMmExNAotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50IFwwNTAxNVwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWdlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOkdsZW1tQ2xpZW50fSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1DbGllbnQgXDA1MDE2XDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1DbGllbnQgXDA1MDE2XDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMzJhMTQKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwMTZcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0icGFja2FnZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpHbGVtbUNsaWVudH0iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50IFwwNTAxN1wwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50IFwwNTAxN1wwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjMyYTE0Ci0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1DbGllbnQgXDA1MDE3XDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6R2xlbW1DbGllbnR9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwMlwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50IFwwNTAyXDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMzJhMTQKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwMlwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWdlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOkdsZW1tQ2xpZW50fSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1DbGllbnQgXDA1MDNcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwM1wwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmI1NDIxCi0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1DbGllbnQgXDA1MDNcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0iY29tcGlsZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpHbGVtbUNsaWVudH0iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50IFwwNTA0XDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1DbGllbnQgXDA1MDRcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YzMmExNAotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50IFwwNTA0XDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6R2xlbW1DbGllbnR9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwNVwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50IFwwNTA1XDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMzJhMTQKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwNVwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWdlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOkdsZW1tQ2xpZW50fSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1DbGllbnQgXDA1MDZcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwNlwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2Y0NjZiCi0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1DbGllbnQgXDA1MDZcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0icGFja2FnIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOkdsZW1tQ2xpZW50fSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1DbGllbnQgXDA1MDdcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwN1wwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjMyYTE0Ci0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1DbGllbnQgXDA1MDdcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0icGFja2FnZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpHbGVtbUNsaWVudH0iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50IFwwNTA4XDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1DbGllbnQgXDA1MDhcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YzMmExNAotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50IFwwNTA4XDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6R2xlbW1DbGllbnR9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwOVwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50IFwwNTA5XDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMzJhMTQKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwOVwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWdlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOkdsZW1tQ2xpZW50fSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudC5sYXVuY2ggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50LmxhdW5jaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmI1NDIxCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudC5sYXVuY2gKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0iY29tcGlsZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpHbGVtbUNsaWVudH0iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tU2VydmljZXMgXDA1MDFcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbVNlcnZpY2VzIFwwNTAxXDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMjUyNDIKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbVNlcnZpY2VzIFwwNTAxXDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6R2xlbW1TZXJ2aWNlczJ9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tU2VydmljZXMtVGVzdC5sYXVuY2ggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tU2VydmljZXMtVGVzdC5sYXVuY2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRjN2Y0MgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1TZXJ2aWNlcy1UZXN0LmxhdW5jaApAQCAtMCwwICsxLDE3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJpbnN0YWxsIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJ0cnVlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9qZGsxLjguMF8yMzEiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iIi8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tU2VydmljZXMubGF1bmNoIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbVNlcnZpY2VzLmxhdW5jaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDBjZGYzCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbVNlcnZpY2VzLmxhdW5jaApAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJjb21waWxlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOkdsZW1tU2VydmljZXMyfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvSnNvblRyYXZlcnNlIFwwNTAxXDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvSnNvblRyYXZlcnNlIFwwNTAxXDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYzJmNTYKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Kc29uVHJhdmVyc2UgXDA1MDFcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6SnNvblRyYXZlcnNlfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvSnNvblRyYXZlcnNlIFwwNTAyXDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvSnNvblRyYXZlcnNlIFwwNTAyXDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzYmNmMDYKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Kc29uVHJhdmVyc2UgXDA1MDJcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0iY29tcGlsZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpKc29uVHJhdmVyc2V9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Kc29uVHJhdmVyc2UgXDA1MDNcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Kc29uVHJhdmVyc2UgXDA1MDNcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhmNTIxYQotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0pzb25UcmF2ZXJzZSBcMDUwM1wwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWdlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOkpzb25UcmF2ZXJzZX0iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0pzb25UcmF2ZXJzZSBcMDUwNFwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0pzb25UcmF2ZXJzZSBcMDUwNFwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGY1MjFhCi0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvSnNvblRyYXZlcnNlIFwwNTA0XDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6SnNvblRyYXZlcnNlfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvSnNvblRyYXZlcnNlIFwwNTA1XDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvSnNvblRyYXZlcnNlIFwwNTA1XDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZjUyMWEKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Kc29uVHJhdmVyc2UgXDA1MDVcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0icGFja2FnZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpKc29uVHJhdmVyc2V9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0pzb25UcmF2ZXJzZS5sYXVuY2ggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0pzb25UcmF2ZXJzZS5sYXVuY2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNiY2YwNgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvSnNvblRyYXZlcnNlLmxhdW5jaApAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJjb21waWxlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOkpzb25UcmF2ZXJzZX0iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvTmV3X2NvbmZpZ3VyYXRpb24ubGF1bmNoIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9OZXdfY29uZmlndXJhdGlvbi5sYXVuY2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY0MDk5MQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvTmV3X2NvbmZpZ3VyYXRpb24ubGF1bmNoCkBAIC0wLDAgKzEsMTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5sb2NhbEphdmFBcHBsaWNhdGlvbiI+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuTUFQUEVEX1JFU09VUkNFX1BBVEhTIj4KKzxsaXN0RW50cnkgdmFsdWU9Ii9UZXN0cyIvPgorPC9saXN0QXR0cmlidXRlPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLk1BUFBFRF9SRVNPVVJDRV9UWVBFUyI+Cis8bGlzdEVudHJ5IHZhbHVlPSI0Ii8+Cis8L2xpc3RBdHRyaWJ1dGU+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuQVRUUl9VU0VfU1RBUlRfT05fRklSU1RfVEhSRUFEIiB2YWx1ZT0idHJ1ZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuQ0xBU1NQQVRIX1BST1ZJREVSIiB2YWx1ZT0ib3JnLmVjbGlwc2UubTJlLmxhdW5jaGNvbmZpZy5jbGFzc3BhdGhQcm92aWRlciIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuTUFJTl9UWVBFIiB2YWx1ZT0iIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5QUk9KRUNUX0FUVFIiIHZhbHVlPSJUZXN0cyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuU09VUkNFX1BBVEhfUFJPVklERVIiIHZhbHVlPSJvcmcuZWNsaXBzZS5tMmUubGF1bmNoY29uZmlnLnNvdXJjZXBhdGhQcm92aWRlciIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMVwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDFcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRlMWM4MQotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDFcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0iY29tcGlsZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpUZXN0c30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDEwXDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMTBcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRlMWM4MQotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDEwXDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9ImNvbXBpbGUiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VGVzdHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAxMVwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDExXDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZTFjODEKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAxMVwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJjb21waWxlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlRlc3RzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMTJcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAxMlwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGUxYzgxCi0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMTJcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0iY29tcGlsZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpUZXN0c30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDEzXDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMTNcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRlMWM4MQotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDEzXDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9ImNvbXBpbGUiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VGVzdHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAxNFwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDE0XDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4Y2I5ZDkKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAxNFwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWdlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlRlc3RzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMTVcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAxNVwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGUxYzgxCi0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMTVcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0iY29tcGlsZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpUZXN0c30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDE2XDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMTZcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRlMWM4MQotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDE2XDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9ImNvbXBpbGUiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VGVzdHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAxN1wwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDE3XDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZTFjODEKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAxN1wwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJjb21waWxlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlRlc3RzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMThcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAxOFwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGUxYzgxCi0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMThcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0iY29tcGlsZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpUZXN0c30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDE5XDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMTlcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRlMWM4MQotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDE5XDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9ImNvbXBpbGUiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VGVzdHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAyXDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMlwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGUxYzgxCi0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMlwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJjb21waWxlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlRlc3RzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMjBcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAyMFwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGNiOWQ5Ci0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMjBcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0icGFja2FnZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpUZXN0c30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDIxXDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMjFcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhjYjlkOQotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDIxXDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VGVzdHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAyMlwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDIyXDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4Y2I5ZDkKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAyMlwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWdlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlRlc3RzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMjNcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAyM1wwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGUxYzgxCi0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMjNcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0iY29tcGlsZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpUZXN0c30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDI0XDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMjRcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhjYjlkOQotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDI0XDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VGVzdHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAyNVwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDI1XDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZTFjODEKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAyNVwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJjb21waWxlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlRlc3RzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMjZcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAyNlwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGUxYzgxCi0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMjZcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0iY29tcGlsZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpUZXN0c30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDI3XDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMjdcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRlMWM4MQotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDI3XDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9ImNvbXBpbGUiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VGVzdHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAyOFwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDI4XDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZTFjODEKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAyOFwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJjb21waWxlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlRlc3RzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMjlcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAyOVwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGUxYzgxCi0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMjlcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0iY29tcGlsZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpUZXN0c30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDNcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAzXDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZTFjODEKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAzXDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9ImNvbXBpbGUiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VGVzdHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAzMFwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDMwXDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4Y2I5ZDkKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAzMFwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWdlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlRlc3RzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMzFcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAzMVwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGNiOWQ5Ci0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMzFcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0icGFja2FnZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpUZXN0c30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDMyXDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMzJcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhjYjlkOQotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDMyXDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VGVzdHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAzM1wwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDMzXDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZTFjODEKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAzM1wwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJjb21waWxlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlRlc3RzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMzRcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAzNFwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGNiOWQ5Ci0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMzRcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0icGFja2FnZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpUZXN0c30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDM1XDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMzVcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhjYjlkOQotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDM1XDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VGVzdHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAzNlwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDM2XDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4Y2I5ZDkKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAzNlwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWdlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlRlc3RzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMzdcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAzN1wwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGNiOWQ5Ci0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMzdcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0icGFja2FnZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpUZXN0c30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDM4XDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMzhcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhjYjlkOQotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDM4XDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VGVzdHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAzOVwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDM5XDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4Y2I5ZDkKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAzOVwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWdlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlRlc3RzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwNFwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDRcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRlMWM4MQotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDRcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0iY29tcGlsZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpUZXN0c30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDQwXDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwNDBcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhjYjlkOQotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDQwXDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VGVzdHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTA0MVwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDQxXDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4Y2I5ZDkKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTA0MVwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWdlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlRlc3RzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwNDJcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTA0MlwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGNiOWQ5Ci0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwNDJcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0icGFja2FnZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpUZXN0c30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDQzXDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwNDNcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhjYjlkOQotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDQzXDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VGVzdHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTA0NFwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDQ0XDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4Y2I5ZDkKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTA0NFwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWdlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlRlc3RzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwNDVcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTA0NVwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGNiOWQ5Ci0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwNDVcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0icGFja2FnZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpUZXN0c30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDQ2XDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwNDZcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhjYjlkOQotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDQ2XDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VGVzdHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTA0N1wwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDQ3XDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4Y2I5ZDkKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTA0N1wwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWdlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlRlc3RzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwNDhcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTA0OFwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGNiOWQ5Ci0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwNDhcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0icGFja2FnZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpUZXN0c30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDQ5XDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwNDlcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhjYjlkOQotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDQ5XDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VGVzdHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTA1XDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwNVwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGUxYzgxCi0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwNVwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJjb21waWxlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlRlc3RzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwNlwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDZcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcxZjRiNgotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDZcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0iamFyIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlRlc3RzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwN1wwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDdcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhjYjlkOQotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDdcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0icGFja2FnZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpUZXN0c30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDhcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTA4XDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZTFjODEKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTA4XDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9ImNvbXBpbGUiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VGVzdHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTA5XDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwOVwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGUxYzgxCi0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwOVwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJjb21waWxlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlRlc3RzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzLmxhdW5jaCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cy5sYXVuY2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU5OGNhYwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cy5sYXVuY2gKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlRlc3RzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9UZXN0SnNvbi5sYXVuY2ggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Rlc3RKc29uLmxhdW5jaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzEyMmUzCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9UZXN0SnNvbi5sYXVuY2gKQEAgLTAsMCArMSwxNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLmxvY2FsSmF2YUFwcGxpY2F0aW9uIj4KKzxsaXN0QXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuZGVidWcuY29yZS5NQVBQRURfUkVTT1VSQ0VfUEFUSFMiPgorPGxpc3RFbnRyeSB2YWx1ZT0iL1Rlc3RzL3NyYy90ZXN0L1Rlc3RKc29uLmphdmEiLz4KKzwvbGlzdEF0dHJpYnV0ZT4KKzxsaXN0QXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuZGVidWcuY29yZS5NQVBQRURfUkVTT1VSQ0VfVFlQRVMiPgorPGxpc3RFbnRyeSB2YWx1ZT0iMSIvPgorPC9saXN0QXR0cmlidXRlPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkFUVFJfRVhDTFVERV9URVNUX0NPREUiIHZhbHVlPSJ0cnVlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5DTEFTU1BBVEhfUFJPVklERVIiIHZhbHVlPSJvcmcuZWNsaXBzZS5tMmUubGF1bmNoY29uZmlnLmNsYXNzcGF0aFByb3ZpZGVyIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5NQUlOX1RZUEUiIHZhbHVlPSJ0ZXN0LlRlc3RKc29uIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5QUk9KRUNUX0FUVFIiIHZhbHVlPSJUZXN0cyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuU09VUkNFX1BBVEhfUFJPVklERVIiIHZhbHVlPSJvcmcuZWNsaXBzZS5tMmUubGF1bmNoY29uZmlnLnNvdXJjZXBhdGhQcm92aWRlciIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9UZXN0UnVubmVyLmxhdW5jaCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvVGVzdFJ1bm5lci5sYXVuY2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIyYzU1NAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvVGVzdFJ1bm5lci5sYXVuY2gKQEAgLTAsMCArMSwxMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLmxvY2FsSmF2YUFwcGxpY2F0aW9uIj4KKzxsaXN0QXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuZGVidWcuY29yZS5NQVBQRURfUkVTT1VSQ0VfUEFUSFMiPgorPGxpc3RFbnRyeSB2YWx1ZT0iL0dsZW1tU2VydmljZXMiLz4KKzwvbGlzdEF0dHJpYnV0ZT4KKzxsaXN0QXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuZGVidWcuY29yZS5NQVBQRURfUkVTT1VSQ0VfVFlQRVMiPgorPGxpc3RFbnRyeSB2YWx1ZT0iNCIvPgorPC9saXN0QXR0cmlidXRlPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuQ0xBU1NQQVRIX1BST1ZJREVSIiB2YWx1ZT0ib3JnLmVjbGlwc2UubTJlLmxhdW5jaGNvbmZpZy5jbGFzc3BhdGhQcm92aWRlciIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuTUFJTl9UWVBFIiB2YWx1ZT0ianVuaXQuc3dpbmd1aS5UZXN0UnVubmVyIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5QUk9KRUNUX0FUVFIiIHZhbHVlPSJHbGVtbVNlcnZpY2VzIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5TT1VSQ0VfUEFUSF9QUk9WSURFUiIgdmFsdWU9Im9yZy5lY2xpcHNlLm0yZS5sYXVuY2hjb25maWcuc291cmNlcGF0aFByb3ZpZGVyIi8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9VdGlscyBcMDUwMVwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1V0aWxzIFwwNTAxXDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZDJiYzYKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9VdGlscyBcMDUwMVwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWdlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlV0aWxzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvVXRpbHMgXDA1MDJcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9VdGlscyBcMDUwMlwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWQyYmM2Ci0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvVXRpbHMgXDA1MDJcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0icGFja2FnZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpVdGlsc30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvVXRpbHMubGF1bmNoIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9VdGlscy5sYXVuY2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjlkMmJjNgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvVXRpbHMubGF1bmNoCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VXRpbHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9XZm9ybVNlcnZpY2VzIFwwNTAxXDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvV2Zvcm1TZXJ2aWNlcyBcMDUwMVwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDE1YjZkCi0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvV2Zvcm1TZXJ2aWNlcyBcMDUwMVwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJjb21waWxlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOndmb3JtU2VydmljZXN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9XZm9ybVNlcnZpY2VzIFwwNTAyXDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvV2Zvcm1TZXJ2aWNlcyBcMDUwMlwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDE1YjZkCi0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvV2Zvcm1TZXJ2aWNlcyBcMDUwMlwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJjb21waWxlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOndmb3JtU2VydmljZXN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9XZm9ybVNlcnZpY2VzIFwwNTAzXDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvV2Zvcm1TZXJ2aWNlcyBcMDUwM1wwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDI3YTc1Ci0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvV2Zvcm1TZXJ2aWNlcyBcMDUwM1wwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWdlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOndmb3JtU2VydmljZXN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9XZm9ybVNlcnZpY2VzIFwwNTA0XDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvV2Zvcm1TZXJ2aWNlcyBcMDUwNFwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDI3YTc1Ci0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvV2Zvcm1TZXJ2aWNlcyBcMDUwNFwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWdlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOndmb3JtU2VydmljZXN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9XZm9ybVNlcnZpY2VzIFwwNTA1XDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvV2Zvcm1TZXJ2aWNlcyBcMDUwNVwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDI3YTc1Ci0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvV2Zvcm1TZXJ2aWNlcyBcMDUwNVwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWdlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOndmb3JtU2VydmljZXN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL3dmb3JtU2VydmljZXMubGF1bmNoIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy93Zm9ybVNlcnZpY2VzLmxhdW5jaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDI3YTc1Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy93Zm9ybVNlcnZpY2VzLmxhdW5jaApAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWdlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOndmb3JtU2VydmljZXN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLnVpL2RpYWxvZ19zZXR0aW5ncy54bWwgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLnVpL2RpYWxvZ19zZXR0aW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY5ZjEyYQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcudWkvZGlhbG9nX3NldHRpbmdzLnhtbApAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHNlY3Rpb24gbmFtZT0iV29ya2JlbmNoIj4KKwk8c2VjdGlvbiBuYW1lPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5MQVVOQ0hfQ09ORklHVVJBVElPTlNfRElBTE9HX1NFQ1RJT04iPgorCQk8aXRlbSB2YWx1ZT0iODk2IiBrZXk9IkRJQUxPR19XSURUSCIvPgorCQk8aXRlbSB2YWx1ZT0iMXxTZWdvZSBVSXw5LjB8MHxXSU5ET1dTfDF8LTEyfDB8MHwwfDQwMHwwfDB8MHwxfDB8MHwwfDB8U2Vnb2UgVUkiIGtleT0iRElBTE9HX0ZPTlRfTkFNRSIvPgorCQk8aXRlbSB2YWx1ZT0iLCBvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLmxvY2FsSmF2YUFwcGxpY2F0aW9uLCBvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUsICIga2V5PSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5FWFBBTkRFRF9OT0RFUyIvPgorCQk8aXRlbSB2YWx1ZT0iNzYyIiBrZXk9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLkRJQUxPR19TQVNIX1dFSUdIVFNfMiIvPgorCQk8aXRlbSB2YWx1ZT0iNzAyIiBrZXk9IkRJQUxPR19IRUlHSFQiLz4KKwkJPGl0ZW0gdmFsdWU9IjIzNyIga2V5PSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5ESUFMT0dfU0FTSF9XRUlHSFRTXzEiLz4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0ib3JnLmVjbGlwc2UuZGVidWcudWkuU0lOR0xFX0xBVU5DSF9DT05GSUdVUkFUSU9OX0RJQUxPR19TRUNUSU9OIj4KKwkJPGl0ZW0gdmFsdWU9IjU2NyIga2V5PSJESUFMT0dfV0lEVEgiLz4KKwkJPGl0ZW0gdmFsdWU9IjF8U2Vnb2UgVUl8OS4wfDB8V0lORE9XU3wxfC0xMnwwfDB8MHw0MDB8MHwwfDB8MXwwfDB8MHwwfFNlZ29lIFVJIiBrZXk9IkRJQUxPR19GT05UX05BTUUiLz4KKwkJPGl0ZW0gdmFsdWU9IjcwMiIga2V5PSJESUFMT0dfSEVJR0hUIi8+CisJPC9zZWN0aW9uPgorPC9zZWN0aW9uPgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy51aS9sYXVuY2hDb25maWd1cmF0aW9uSGlzdG9yeS54bWwgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLnVpL2xhdW5jaENvbmZpZ3VyYXRpb25IaXN0b3J5LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTU0NTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy51aS9sYXVuY2hDb25maWd1cmF0aW9uSGlzdG9yeS54bWwKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoSGlzdG9yeT4KKzxsYXVuY2hHcm91cCBpZD0ib3JnLmVjbGlwc2UuZGVidWcudWkubGF1bmNoR3JvdXAuZGVidWciPgorPG1ydUhpc3RvcnkvPgorPGZhdm9yaXRlcy8+Cis8L2xhdW5jaEdyb3VwPgorPGxhdW5jaEdyb3VwIGlkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5sYXVuY2hHcm91cC5wcm9maWxlIj4KKzxtcnVIaXN0b3J5Lz4KKzxmYXZvcml0ZXMvPgorPC9sYXVuY2hHcm91cD4KKzxsYXVuY2hHcm91cCBpZD0ib3JnLmVjbGlwc2UuZWNsZW1tYS51aS5sYXVuY2hHcm91cC5jb3ZlcmFnZSI+Cis8bXJ1SGlzdG9yeS8+Cis8ZmF2b3JpdGVzLz4KKzwvbGF1bmNoR3JvdXA+Cis8bGF1bmNoR3JvdXAgaWQ9Im9yZy5lY2xpcHNlLnVpLmV4dGVybmFsdG9vbHMubGF1bmNoR3JvdXAiPgorPG1ydUhpc3RvcnkvPgorPGZhdm9yaXRlcy8+Cis8L2xhdW5jaEdyb3VwPgorPGxhdW5jaEdyb3VwIGlkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5sYXVuY2hHcm91cC5ydW4iPgorPG1ydUhpc3RvcnkvPgorPGZhdm9yaXRlcy8+Cis8L2xhdW5jaEdyb3VwPgorPC9sYXVuY2hIaXN0b3J5PgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5lNC53b3JrYmVuY2gvd29ya2JlbmNoLnhtaSBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZTQud29ya2JlbmNoL3dvcmtiZW5jaC54bWkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJjMTFjZQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZTQud29ya2JlbmNoL3dvcmtiZW5jaC54bWkKQEAgLTAsMCArMSw0MTAzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJBU0NJSSI/PgorPGFwcGxpY2F0aW9uOkFwcGxpY2F0aW9uIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6YWR2YW5jZWQ9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvdWkvMjAxMC9VSU1vZGVsL2FwcGxpY2F0aW9uL3VpL2FkdmFuY2VkIiB4bWxuczphcHBsaWNhdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy91aS8yMDEwL1VJTW9kZWwvYXBwbGljYXRpb24iIHhtbG5zOmJhc2ljPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3VpLzIwMTAvVUlNb2RlbC9hcHBsaWNhdGlvbi91aS9iYXNpYyIgeG1sbnM6bWVudT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy91aS8yMDEwL1VJTW9kZWwvYXBwbGljYXRpb24vdWkvbWVudSIgeG1sbnM6dWk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvdWkvMjAxMC9VSU1vZGVsL2FwcGxpY2F0aW9uL3VpIiB4bWk6aWQ9Il9BRzdNOEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmU0LmxlZ2FjeS5pZGUuYXBwbGljYXRpb24iIGNvbnRyaWJ1dG9yVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnBsYXRmb3JtIiBzZWxlY3RlZEVsZW1lbnQ9Il9BRzdNOFN4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dHM9Il9BRy1RUkN4UUVleW15YnpzdUw5bkJBIj4KKyAgPHBlcnNpc3RlZFN0YXRlIGtleT0ibWVtZW50byIgdmFsdWU9IiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7Pz4mI3hEOyYjeEE7Jmx0O3dvcmtiZW5jaD4mI3hEOyYjeEE7Jmx0O21ydUxpc3Q+JiN4RDsmI3hBOyZsdDtmaWxlIGZhY3RvcnlJRD0mcXVvdDtvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dEZhY3RvcnkmcXVvdDsgaWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLkNvbXBpbGF0aW9uVW5pdEVkaXRvciZxdW90OyBuYW1lPSZxdW90O1V0aWxzLmphdmEmcXVvdDsgdG9vbHRpcD0mcXVvdDt1dGlscy9zcmMvZGUva29yYXAvc2VydmljZXMvdXRpbHMvVXRpbHMuamF2YSZxdW90Oz4mI3hEOyYjeEE7Jmx0O3BlcnNpc3RhYmxlIHBhdGg9JnF1b3Q7L3V0aWxzL3NyYy9kZS9rb3JhcC9zZXJ2aWNlcy91dGlscy9VdGlscy5qYXZhJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0Oy9maWxlPiYjeEQ7JiN4QTsmbHQ7ZmlsZSBmYWN0b3J5SUQ9JnF1b3Q7b3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXRGYWN0b3J5JnF1b3Q7IGlkPSZxdW90O29yZy5lY2xpcHNlLmpkdC51aS5Db21waWxhdGlvblVuaXRFZGl0b3ImcXVvdDsgbmFtZT0mcXVvdDtHbGVtbURCLmphdmEmcXVvdDsgdG9vbHRpcD0mcXVvdDtHbGVtbVNlcnZpY2VzL3NyYy9kZS9rb3JhcC9zZXJ2aWNlcy9HbGVtbURCLmphdmEmcXVvdDs+JiN4RDsmI3hBOyZsdDtwZXJzaXN0YWJsZSBwYXRoPSZxdW90Oy9HbGVtbVNlcnZpY2VzL3NyYy9kZS9rb3JhcC9zZXJ2aWNlcy9HbGVtbURCLmphdmEmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7L2ZpbGU+JiN4RDsmI3hBOyZsdDtmaWxlIGZhY3RvcnlJRD0mcXVvdDtvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dEZhY3RvcnkmcXVvdDsgaWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLkNvbXBpbGF0aW9uVW5pdEVkaXRvciZxdW90OyBuYW1lPSZxdW90O0dsZW1tU2VydmljZXMuamF2YSZxdW90OyB0b29sdGlwPSZxdW90O0dsZW1tU2VydmljZXMvc3JjL2RlL2tvcmFwL3NlcnZpY2VzL0dsZW1tU2VydmljZXMuamF2YSZxdW90Oz4mI3hEOyYjeEE7Jmx0O3BlcnNpc3RhYmxlIHBhdGg9JnF1b3Q7L0dsZW1tU2VydmljZXMvc3JjL2RlL2tvcmFwL3NlcnZpY2VzL0dsZW1tU2VydmljZXMuamF2YSZxdW90Oy8+JiN4RDsmI3hBOyZsdDsvZmlsZT4mI3hEOyYjeEE7Jmx0O2ZpbGUgZmFjdG9yeUlEPSZxdW90O29yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0RmFjdG9yeSZxdW90OyBpZD0mcXVvdDtvcmcuZWNsaXBzZS5tMmUuZWRpdG9yLk1hdmVuUG9tRWRpdG9yJnF1b3Q7IG5hbWU9JnF1b3Q7cG9tLnhtbCZxdW90OyB0b29sdGlwPSZxdW90O0dsZW1tU2VydmljZXMvcG9tLnhtbCZxdW90Oz4mI3hEOyYjeEE7Jmx0O3BlcnNpc3RhYmxlIHBhdGg9JnF1b3Q7L0dsZW1tU2VydmljZXMvcG9tLnhtbCZxdW90Oy8+JiN4RDsmI3hBOyZsdDsvZmlsZT4mI3hEOyYjeEE7Jmx0O2ZpbGUgZmFjdG9yeUlEPSZxdW90O29yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0RmFjdG9yeSZxdW90OyBpZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuUHJvcGVydGllc0ZpbGVFZGl0b3ImcXVvdDsgbmFtZT0mcXVvdDtHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMmcXVvdDsgdG9vbHRpcD0mcXVvdDtHbGVtbVNlcnZpY2VzL1dlYkNvbnRlbnQvV0VCLUlORi9HbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMmcXVvdDs+JiN4RDsmI3hBOyZsdDtwZXJzaXN0YWJsZSBwYXRoPSZxdW90Oy9HbGVtbVNlcnZpY2VzL1dlYkNvbnRlbnQvV0VCLUlORi9HbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7L2ZpbGU+JiN4RDsmI3hBOyZsdDtmaWxlIGZhY3RvcnlJRD0mcXVvdDtvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dEZhY3RvcnkmcXVvdDsgaWQ9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5odG1sc291cmNlLnNvdXJjZSZxdW90OyBuYW1lPSZxdW90O3BsdWdpbi5odG1sJnF1b3Q7IHRvb2x0aXA9JnF1b3Q7d2Zvcm1TZXJ2aWNlcy9XZWJDb250ZW50L1dFQi1JTkYvcGx1Z2luLmh0bWwmcXVvdDs+JiN4RDsmI3hBOyZsdDtwZXJzaXN0YWJsZSBwYXRoPSZxdW90Oy93Zm9ybVNlcnZpY2VzL1dlYkNvbnRlbnQvV0VCLUlORi9wbHVnaW4uaHRtbCZxdW90Oy8+JiN4RDsmI3hBOyZsdDsvZmlsZT4mI3hEOyYjeEE7Jmx0O2ZpbGUgZmFjdG9yeUlEPSZxdW90O29yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0RmFjdG9yeSZxdW90OyBpZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuUHJvcGVydGllc0ZpbGVFZGl0b3ImcXVvdDsgbmFtZT0mcXVvdDtXZm9ybVNlcnZpY2VzLnByb3BlcnRpZXMmcXVvdDsgdG9vbHRpcD0mcXVvdDt3Zm9ybVNlcnZpY2VzL1dlYkNvbnRlbnQvV0VCLUlORi9XZm9ybVNlcnZpY2VzLnByb3BlcnRpZXMmcXVvdDs+JiN4RDsmI3hBOyZsdDtwZXJzaXN0YWJsZSBwYXRoPSZxdW90Oy93Zm9ybVNlcnZpY2VzL1dlYkNvbnRlbnQvV0VCLUlORi9XZm9ybVNlcnZpY2VzLnByb3BlcnRpZXMmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7L2ZpbGU+JiN4RDsmI3hBOyZsdDtmaWxlIGZhY3RvcnlJRD0mcXVvdDtvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dEZhY3RvcnkmcXVvdDsgaWQ9JnF1b3Q7b3JnLmVjbGlwc2UubTJlLmVkaXRvci5NYXZlblBvbUVkaXRvciZxdW90OyBuYW1lPSZxdW90O3BvbS54bWwmcXVvdDsgdG9vbHRpcD0mcXVvdDt3Zm9ybVNlcnZpY2VzL3BvbS54bWwmcXVvdDs+JiN4RDsmI3hBOyZsdDtwZXJzaXN0YWJsZSBwYXRoPSZxdW90Oy93Zm9ybVNlcnZpY2VzL3BvbS54bWwmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7L2ZpbGU+JiN4RDsmI3hBOyZsdDtmaWxlIGZhY3RvcnlJRD0mcXVvdDtvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dEZhY3RvcnkmcXVvdDsgaWQ9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC50YWJsZXRyZWUuWE1MTXVsdGlQYWdlRWRpdG9yUGFydCZxdW90OyBuYW1lPSZxdW90O3dlYi54bWwmcXVvdDsgdG9vbHRpcD0mcXVvdDtHbGVtbVNlcnZpY2VzL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sJnF1b3Q7PiYjeEQ7JiN4QTsmbHQ7cGVyc2lzdGFibGUgcGF0aD0mcXVvdDsvR2xlbW1TZXJ2aWNlcy9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbCZxdW90Oy8+JiN4RDsmI3hBOyZsdDsvZmlsZT4mI3hEOyYjeEE7Jmx0O2ZpbGUgZmFjdG9yeUlEPSZxdW90O29yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0RmFjdG9yeSZxdW90OyBpZD0mcXVvdDtvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnRhYmxldHJlZS5YTUxNdWx0aVBhZ2VFZGl0b3JQYXJ0JnF1b3Q7IG5hbWU9JnF1b3Q7d2ViLnhtbCZxdW90OyB0b29sdGlwPSZxdW90O3dmb3JtU2VydmljZXMvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwmcXVvdDs+JiN4RDsmI3hBOyZsdDtwZXJzaXN0YWJsZSBwYXRoPSZxdW90Oy93Zm9ybVNlcnZpY2VzL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0Oy9maWxlPiYjeEQ7JiN4QTsmbHQ7ZmlsZSBmYWN0b3J5SUQ9JnF1b3Q7b3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXRGYWN0b3J5JnF1b3Q7IGlkPSZxdW90O29yZy5lY2xpcHNlLmpkdC51aS5Db21waWxhdGlvblVuaXRFZGl0b3ImcXVvdDsgbmFtZT0mcXVvdDtMZW1tYUluZm8uamF2YSZxdW90OyB0b29sdGlwPSZxdW90O0dsZW1tU2VydmljZXMvc3JjL2RlL2tvcmFwL3NlcnZpY2VzL0xlbW1hSW5mby5qYXZhJnF1b3Q7PiYjeEQ7JiN4QTsmbHQ7cGVyc2lzdGFibGUgcGF0aD0mcXVvdDsvR2xlbW1TZXJ2aWNlcy9zcmMvZGUva29yYXAvc2VydmljZXMvTGVtbWFJbmZvLmphdmEmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7L2ZpbGU+JiN4RDsmI3hBOyZsdDtmaWxlIGZhY3RvcnlJRD0mcXVvdDtvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dEZhY3RvcnkmcXVvdDsgaWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLkNvbXBpbGF0aW9uVW5pdEVkaXRvciZxdW90OyBuYW1lPSZxdW90O0dsZW1tQ2xpZW50LmphdmEmcXVvdDsgdG9vbHRpcD0mcXVvdDtHbGVtbUNsaWVudC9zcmMvZGUva29yYXAvc2VydmljZXMvZ2xlbW0vY2xpZW50L0dsZW1tQ2xpZW50LmphdmEmcXVvdDs+JiN4RDsmI3hBOyZsdDtwZXJzaXN0YWJsZSBwYXRoPSZxdW90Oy9HbGVtbUNsaWVudC9zcmMvZGUva29yYXAvc2VydmljZXMvZ2xlbW0vY2xpZW50L0dsZW1tQ2xpZW50LmphdmEmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7L2ZpbGU+JiN4RDsmI3hBOyZsdDtmaWxlIGZhY3RvcnlJRD0mcXVvdDtvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dEZhY3RvcnkmcXVvdDsgaWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLkNvbXBpbGF0aW9uVW5pdEVkaXRvciZxdW90OyBuYW1lPSZxdW90O1RyYXZlcnNlZFBhdGguamF2YSZxdW90OyB0b29sdGlwPSZxdW90O0pzb25UcmF2ZXJzZS9zcmMvZGUva29yYXAvanNvbi9UcmF2ZXJzZWRQYXRoLmphdmEmcXVvdDs+JiN4RDsmI3hBOyZsdDtwZXJzaXN0YWJsZSBwYXRoPSZxdW90Oy9Kc29uVHJhdmVyc2Uvc3JjL2RlL2tvcmFwL2pzb24vVHJhdmVyc2VkUGF0aC5qYXZhJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0Oy9maWxlPiYjeEQ7JiN4QTsmbHQ7ZmlsZSBmYWN0b3J5SUQ9JnF1b3Q7b3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXRGYWN0b3J5JnF1b3Q7IGlkPSZxdW90O29yZy5lY2xpcHNlLmpkdC51aS5Db21waWxhdGlvblVuaXRFZGl0b3ImcXVvdDsgbmFtZT0mcXVvdDtKc29uVHJhdmVyc2UuamF2YSZxdW90OyB0b29sdGlwPSZxdW90O0pzb25UcmF2ZXJzZS9zcmMvZGUva29yYXAvanNvbi9Kc29uVHJhdmVyc2UuamF2YSZxdW90Oz4mI3hEOyYjeEE7Jmx0O3BlcnNpc3RhYmxlIHBhdGg9JnF1b3Q7L0pzb25UcmF2ZXJzZS9zcmMvZGUva29yYXAvanNvbi9Kc29uVHJhdmVyc2UuamF2YSZxdW90Oy8+JiN4RDsmI3hBOyZsdDsvZmlsZT4mI3hEOyYjeEE7Jmx0O2ZpbGUgZmFjdG9yeUlEPSZxdW90O29yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0RmFjdG9yeSZxdW90OyBpZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuQ29tcGlsYXRpb25Vbml0RWRpdG9yJnF1b3Q7IG5hbWU9JnF1b3Q7TGVtbWFSZXNwb25zZS5qYXZhJnF1b3Q7IHRvb2x0aXA9JnF1b3Q7SnNvblRyYXZlcnNlL3NyYy9kZS9rb3JhcC9zZXJ2aWNlcy9MZW1tYVJlc3BvbnNlLmphdmEmcXVvdDs+JiN4RDsmI3hBOyZsdDtwZXJzaXN0YWJsZSBwYXRoPSZxdW90Oy9Kc29uVHJhdmVyc2Uvc3JjL2RlL2tvcmFwL3NlcnZpY2VzL0xlbW1hUmVzcG9uc2UuamF2YSZxdW90Oy8+JiN4RDsmI3hBOyZsdDsvZmlsZT4mI3hEOyYjeEE7Jmx0O2ZpbGUgZmFjdG9yeUlEPSZxdW90O29yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0RmFjdG9yeSZxdW90OyBpZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuQ29tcGlsYXRpb25Vbml0RWRpdG9yJnF1b3Q7IG5hbWU9JnF1b3Q7V29yZGZvcm1TZXJ2aWNlcy5qYXZhJnF1b3Q7IHRvb2x0aXA9JnF1b3Q7d2Zvcm1TZXJ2aWNlcy9zcmMvZGUva29yYXAvc2VydmljZXMvV29yZGZvcm1TZXJ2aWNlcy5qYXZhJnF1b3Q7PiYjeEQ7JiN4QTsmbHQ7cGVyc2lzdGFibGUgcGF0aD0mcXVvdDsvd2Zvcm1TZXJ2aWNlcy9zcmMvZGUva29yYXAvc2VydmljZXMvV29yZGZvcm1TZXJ2aWNlcy5qYXZhJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0Oy9maWxlPiYjeEQ7JiN4QTsmbHQ7ZmlsZSBmYWN0b3J5SUQ9JnF1b3Q7b3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXRGYWN0b3J5JnF1b3Q7IGlkPSZxdW90O29yZy5lY2xpcHNlLm0yZS5lZGl0b3IuTWF2ZW5Qb21FZGl0b3ImcXVvdDsgbmFtZT0mcXVvdDtwb20ueG1sJnF1b3Q7IHRvb2x0aXA9JnF1b3Q7d2Zvcm1TZXJ2aWNlSmFyL3BvbS54bWwmcXVvdDs+JiN4RDsmI3hBOyZsdDtwZXJzaXN0YWJsZSBwYXRoPSZxdW90Oy93Zm9ybVNlcnZpY2VKYXIvcG9tLnhtbCZxdW90Oy8+JiN4RDsmI3hBOyZsdDsvZmlsZT4mI3hEOyYjeEE7Jmx0O2ZpbGUgZmFjdG9yeUlEPSZxdW90O29yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0RmFjdG9yeSZxdW90OyBpZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuQ29tcGlsYXRpb25Vbml0RWRpdG9yJnF1b3Q7IG5hbWU9JnF1b3Q7V29yZGZvcm1SZXdyaXRlLmphdmEmcXVvdDsgdG9vbHRpcD0mcXVvdDt3Zm9ybVNlcnZpY2VzL3NyYy9kZS9rb3JhcC9zZXJ2aWNlcy9Xb3JkZm9ybVJld3JpdGUuamF2YSZxdW90Oz4mI3hEOyYjeEE7Jmx0O3BlcnNpc3RhYmxlIHBhdGg9JnF1b3Q7L3dmb3JtU2VydmljZXMvc3JjL2RlL2tvcmFwL3NlcnZpY2VzL1dvcmRmb3JtUmV3cml0ZS5qYXZhJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0Oy9maWxlPiYjeEQ7JiN4QTsmbHQ7ZmlsZSBmYWN0b3J5SUQ9JnF1b3Q7b3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXRGYWN0b3J5JnF1b3Q7IGlkPSZxdW90O29yZy5lY2xpcHNlLm0yZS5lZGl0b3IuTWF2ZW5Qb21FZGl0b3ImcXVvdDsgbmFtZT0mcXVvdDtwb20ueG1sJnF1b3Q7IHRvb2x0aXA9JnF1b3Q7dXRpbHMvcG9tLnhtbCZxdW90Oz4mI3hEOyYjeEE7Jmx0O3BlcnNpc3RhYmxlIHBhdGg9JnF1b3Q7L3V0aWxzL3BvbS54bWwmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7L2ZpbGU+JiN4RDsmI3hBOyZsdDtmaWxlIGZhY3RvcnlJRD0mcXVvdDtvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dEZhY3RvcnkmcXVvdDsgaWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLkNvbXBpbGF0aW9uVW5pdEVkaXRvciZxdW90OyBuYW1lPSZxdW90O0dsZW1tREJJbmZvLmphdmEmcXVvdDsgdG9vbHRpcD0mcXVvdDtHbGVtbVNlcnZpY2VzL3NyYy9kZS9rb3JhcC9zZXJ2aWNlcy9HbGVtbURCSW5mby5qYXZhJnF1b3Q7PiYjeEQ7JiN4QTsmbHQ7cGVyc2lzdGFibGUgcGF0aD0mcXVvdDsvR2xlbW1TZXJ2aWNlcy9zcmMvZGUva29yYXAvc2VydmljZXMvR2xlbW1EQkluZm8uamF2YSZxdW90Oy8+JiN4RDsmI3hBOyZsdDsvZmlsZT4mI3hEOyYjeEE7Jmx0Oy9tcnVMaXN0PiYjeEQ7JiN4QTsmbHQ7L3dvcmtiZW5jaD4iLz4KKyAgPHRhZ3M+TW9kZWxNaWdyYXRpb25Qcm9jZXNzb3IuMDAxPC90YWdzPgorICA8dGFncz5hY3RpdmVTY2hlbWVJZDpvcmcuZWNsaXBzZS51aS5kZWZhdWx0QWNjZWxlcmF0b3JDb25maWd1cmF0aW9uPC90YWdzPgorICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlRyaW1tZWRXaW5kb3ciIHhtaTppZD0iX0FHN004U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iSURFV2luZG93IiBjb250cmlidXRvclVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5wbGF0Zm9ybSIgc2VsZWN0ZWRFbGVtZW50PSJfQUc3TThpeFFFZXlteWJ6c3VMOW5CQSIgbGFiZWw9IiV0cmltbWVkd2luZG93LmxhYmVsLmVjbGlwc2VTREsiIHg9IjAiIHk9IjAiIHdpZHRoPSI5NDkiIGhlaWdodD0iMTA0NyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0iY29vbEJhclZpc2libGUiIHZhbHVlPSJ0cnVlIi8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0icGVyc3BlY3RpdmVCYXJWaXNpYmxlIiB2YWx1ZT0idHJ1ZSIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9ImlzUmVzdG9yZWQiIHZhbHVlPSJ0cnVlIi8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ic2hvd19pbl90aW1lIiB2YWx1ZT0iJmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/PiYjeEQ7JiN4QTsmbHQ7c2hvd19pbl90aW1lPiYjeEQ7JiN4QTsmbHQ7aWQgSU1lbWVudG8uaW50ZXJuYWwuaWQ9JnF1b3Q7b3JnLmVjbGlwc2UuZWdpdC51aS5SZXBvc2l0b3JpZXNWaWV3JnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O2lkIElNZW1lbnRvLmludGVybmFsLmlkPSZxdW90O29yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Qcm9qZWN0RXhwbG9yZXImcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7aWQgSU1lbWVudG8uaW50ZXJuYWwuaWQ9JnF1b3Q7b3JnLmVjbGlwc2UuZWNsZW1tYS51aS5Db3ZlcmFnZVZpZXcmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7aWQgSU1lbWVudG8uaW50ZXJuYWwuaWQ9JnF1b3Q7b3JnLmVjbGlwc2UudWkudmlld3MuUmVzb3VyY2VOYXZpZ2F0b3ImcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7aWQgSU1lbWVudG8uaW50ZXJuYWwuaWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VFeHBsb3JlciZxdW90Oy8+JiN4RDsmI3hBOyZsdDsvc2hvd19pbl90aW1lPiIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9IndvcmtpbmdTZXRzIiB2YWx1ZT0iJmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/PiYjeEQ7JiN4QTsmbHQ7d29ya2luZ1NldHMvPiIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9ImFnZ3JlZ2F0ZVdvcmtpbmdTZXRJZCIgdmFsdWU9IkFnZ3JlZ2F0ZSBmb3Igd2luZG93IDE1NzM1NTgwMDgzNjciLz4KKyAgICA8dGFncz50b3BMZXZlbDwvdGFncz4KKyAgICA8dGFncz5zaGVsbE1heGltaXplZDwvdGFncz4KKyAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlBhcnRTYXNoQ29udGFpbmVyIiB4bWk6aWQ9Il9BRzdNOGl4UUVleW15YnpzdUw5bkJBIiBzZWxlY3RlZEVsZW1lbnQ9Il9BRzdNOHl4UUVleW15YnpzdUw5bkJBIiBob3Jpem9udGFsPSJ0cnVlIj4KKyAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGVyc3BlY3RpdmVTdGFjayIgeG1pOmlkPSJfQUc3TTh5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5pZGUucGVyc3BlY3RpdmVzdGFjayIgY29udGFpbmVyRGF0YT0iNzUwMCIgc2VsZWN0ZWRFbGVtZW50PSJfQUc3TkRTeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGVyc3BlY3RpdmUiIHhtaTppZD0iX0FHN005Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuanN0LmoyZWUuSjJFRVBlcnNwZWN0aXZlLiZsdDtKYXZhIEVFPiIgc2VsZWN0ZWRFbGVtZW50PSJfQUc3TTlTeFFFZXlteWJ6c3VMOW5CQSIgbGFiZWw9IiZsdDtKYXZhIEVFPiIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5qc3QuajJlZS51aS9pY29ucy9mdWxsL2N2aWV3MTYvajJlZV9wZXJzcGVjdGl2ZS5naWYiPgorICAgICAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9InBlcnNwLmhpZGRlbkl0ZW1zIiB2YWx1ZT0icGVyc3AuaGlkZVRvb2xiYXJTQzpwcmludCxwZXJzcC5oaWRlVG9vbGJhclNDOm9yZy5lY2xpcHNlLnVpLmVkaXQudW5kbyxwZXJzcC5oaWRlVG9vbGJhclNDOm9yZy5lY2xpcHNlLnVpLmVkaXQucmVkbyxwZXJzcC5oaWRlVG9vbGJhclNDOm9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC50b2dnbGVTaG93U2VsZWN0ZWRFbGVtZW50T25seSxwZXJzcC5oaWRlVG9vbGJhclNDOm9yZy5lY2xpcHNlLmRlYnVnLnVpLmNvbW1hbmRzLlJ1blRvTGluZSxwZXJzcC5oaWRlVG9vbGJhclNDOm9yZy5lY2xpcHNlLmpkdC51aS5hY3Rpb25zLk9wZW5Qcm9qZWN0V2l6YXJkLCIvPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS5teWx5bi5kb2MuYWN0aW9uU2V0PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5uYXZpZ2F0aW9uPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS51aS5jaGVhdHNoZWV0cy5hY3Rpb25TZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLnJzZS5jb3JlLnNlYXJjaC5zZWFyY2hBY3Rpb25TZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLnNlYXJjaC5zZWFyY2hBY3Rpb25TZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5hY3Rpb25TZXQuYW5ub3RhdGlvbk5hdmlnYXRpb248L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5hY3Rpb25TZXQubmF2aWdhdGlvbjwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmFjdGlvblNldC5jb252ZXJ0TGluZURlbGltaXRlcnNUbzwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UudWkuZXh0ZXJuYWx0b29scy5FeHRlcm5hbFRvb2xzU2V0PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS51aS5hY3Rpb25TZXQua2V5QmluZGluZ3M8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLnVpLmFjdGlvblNldC5vcGVuRmlsZXM8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLndzdC5qc2R0LmNocm9taXVtLmRlYnVnLnVpLmFjdGlvblNldHM8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLmpzdC5qMmVlLkoyZWVNYWluQWN0aW9uU2V0PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS5qZHQudWkuSmF2YUFjdGlvblNldDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UuZGVidWcudWkubGF1bmNoQWN0aW9uU2V0PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5kZWJ1Z0FjdGlvblNldDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UudWkuTmF2aWdhdGVBY3Rpb25TZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Qcm9qZWN0RXhwbG9yZXI8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuU2VydmVyc1ZpZXc8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLmRhdGF0b29scy5jb25uZWN0aXZpdHkuRGF0YVNvdXJjZUV4cGxvcmVyTmF2aWdhdG9yPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS51aS52aWV3cy5Cb29rbWFya1ZpZXc8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLnVpLnZpZXdzLkNvbnRlbnRPdXRsaW5lPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS51aS52aWV3cy5SZXNvdXJjZU5hdmlnYXRvcjwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5zbmlwcGV0cy5pbnRlcm5hbC51aS5TbmlwcGV0c1ZpZXc8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLnVpLnZpZXdzLkFsbE1hcmtlcnNWaWV3PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS52aWV3cy50YXNrczwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2Uuc2VhcmNoLnVpLnZpZXdzLlNlYXJjaFZpZXc8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLnVpLmNvbnNvbGUuQ29uc29sZVZpZXc8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Auc2hvd0luOm9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Qcm9qZWN0RXhwbG9yZXI8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci5leHBsb3JlcjwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5tMmUuY29yZS53aXphcmRzLk1hdmVuMlByb2plY3RXaXphcmQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Auc2hvd0luOm9yZy5lY2xpcHNlLnRtLnRlcm1pbmFsLnZpZXcudWkuVGVybWluYWxzVmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5wZXJzcFNDOm9yZy5lY2xpcHNlLmRlYnVnLnVpLkRlYnVnUGVyc3BlY3RpdmU8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AucGVyc3BTQzpvcmcuZWNsaXBzZS5qZHQudWkuSmF2YVBlcnNwZWN0aXZlPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnBlcnNwU0M6b3JnLmVjbGlwc2UudWkucmVzb3VyY2VQZXJzcGVjdGl2ZTwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5wZXJzcFNDOm9yZy5lY2xpcHNlLndzdC53ZWIudWkud2ViRGV2UGVyc3BlY3RpdmU8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UuanN0LmoyZWUudWkucHJvamVjdC5mYWNldC5FYXJQcm9qZWN0V2l6YXJkPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLmpzdC5zZXJ2bGV0LnVpLnByb2plY3QuZmFjZXQuV2ViUHJvamVjdFdpemFyZDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5qc3QuZWpiLnVpLnByb2plY3QuZmFjZXQuRWpiUHJvamVjdFdpemFyZDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5qc3QuajJlZS5qY2EudWkuaW50ZXJuYWwud2l6YXJkLkNvbm5lY3RvclByb2plY3RXaXphcmQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UuanN0LmoyZWUudWkucHJvamVjdC5mYWNldC5hcHBjbGllbnQuQXBwQ2xpZW50UHJvamVjdFdpemFyZDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS53c3Qud2ViLnVpLmludGVybmFsLndpemFyZHMuU2ltcGxlV2ViUHJvamVjdFdpemFyZDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5qcHQudWkud2l6YXJkLm5ld0pwYVByb2plY3Q8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UuanN0LnNlcnZsZXQudWkuaW50ZXJuYWwud2l6YXJkLkFkZFNlcnZsZXRXaXphcmQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UuanN0LmVqYi51aS5pbnRlcm5hbC53aXphcmQuQWRkU2Vzc2lvbkJlYW5XaXphcmQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UuanN0LmVqYi51aS5pbnRlcm5hbC53aXphcmQuQWRkTWVzc2FnZURyaXZlbkJlYW5XaXphcmQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UuanB0LnVpLndpemFyZC5uZXdFbnRpdHk8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UudWkud2l6YXJkcy5uZXcuZm9sZGVyPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLnVpLndpemFyZHMubmV3LmZpbGU8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuaW50ZXJuYWwud2ViYnJvd3Nlci5hY3Rpb25TZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLmRlYnVnLnVpLmJyZWFrcG9pbnRBY3Rpb25TZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLmVjbGVtbWEudWkuQ292ZXJhZ2VBY3Rpb25TZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Auc2hvd0luOm9yZy5lY2xpcHNlLmVjbGVtbWEudWkuQ292ZXJhZ2VWaWV3PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLmpwdC5qcGEudWkud2l6YXJkLm5ld0pwYVByb2plY3Q8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AucGVyc3BTQzpvcmcuZWNsaXBzZS5qcHQudWkuanBhUGVyc3BlY3RpdmU8L3RhZ3M+CisgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJiYXNpYzpQYXJ0U2FzaENvbnRhaW5lciIgeG1pOmlkPSJfQUc3TTlTeFFFZXlteWJ6c3VMOW5CQSIgc2VsZWN0ZWRFbGVtZW50PSJfQUc3TTlpeFFFZXlteWJ6c3VMOW5CQSIgaG9yaXpvbnRhbD0idHJ1ZSI+CisgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlBhcnRTdGFjayIgeG1pOmlkPSJfQUc3TTlpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJ0b3BMZWZ0IiBjb250YWluZXJEYXRhPSIxOTI5IiBzZWxlY3RlZEVsZW1lbnQ9Il9BRzdNOXl4UUVleW15YnpzdUw5bkJBIj4KKyAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3TTl5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuUHJvamVjdEV4cGxvcmVyIiByZWY9Il9BRzhiZ0N4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3TS1DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5SZXNvdXJjZU5hdmlnYXRvciIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgcmVmPSJfQUc4Yi1DeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHN00tU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLlR5cGVIaWVyYXJjaHkiIHRvQmVSZW5kZXJlZD0iZmFsc2UiIHJlZj0iX0FHOGIteXhRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpKYXZhPC90YWdzPgorICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzdNLWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlc1ZpZXciIHRvQmVSZW5kZXJlZD0iZmFsc2UiIHJlZj0iX0FHOGJfaXhRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpKYXZhIEJyb3dzaW5nPC90YWdzPgorICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYmFzaWM6UGFydFNhc2hDb250YWluZXIiIHhtaTppZD0iX0FHN00teXhRRWV5bXlienN1TDluQkEiIGNvbnRhaW5lckRhdGE9IjgwNzEiIHNlbGVjdGVkRWxlbWVudD0iX0FHN01fQ3hRRWV5bXlienN1TDluQkEiPgorICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlBhcnRTYXNoQ29udGFpbmVyIiB4bWk6aWQ9Il9BRzdNX0N4UUVleW15YnpzdUw5bkJBIiBjb250YWluZXJEYXRhPSI3NDU4IiBzZWxlY3RlZEVsZW1lbnQ9Il9BRzdNX1N4UUVleW15YnpzdUw5bkJBIiBob3Jpem9udGFsPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzdNX1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXRvcnNzIiBjb250YWluZXJEYXRhPSI3ODQ3IiByZWY9Il9BRzcxZHl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJiYXNpYzpQYXJ0U3RhY2siIHhtaTppZD0iX0FHN01faXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0idG9wUmlnaHQiIGNvbnRhaW5lckRhdGE9IjIxNTMiIHNlbGVjdGVkRWxlbWVudD0iX0FHN01feXhRRWV5bXlienN1TDluQkEiPgorICAgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3TV95eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Db250ZW50T3V0bGluZSIgcmVmPSJfQUc4Y2FDeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzdOQUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnZpZXdzLnRhc2tzIiByZWY9Il9BRzlDWGl4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpNeWx5bjwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJiYXNpYzpQYXJ0U3RhY2siIHhtaTppZD0iX0FHN05BU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iYm90dG9tUmlnaHQiIGNvbnRhaW5lckRhdGE9IjI1NDIiIHNlbGVjdGVkRWxlbWVudD0iX0FHN05DU3hRRWV5bXlienN1TDluQkEiPgorICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHN05BaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuQWxsTWFya2Vyc1ZpZXciIHJlZj0iX0FHOGJfeXhRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHN05BeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuUHJvcGVydHlTaGVldCIgcmVmPSJfQUc4Y0FpeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3TkJDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLlNlcnZlcnNWaWV3IiByZWY9Il9BRzhjQlN4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOlNlcnZlcjwvdGFncz4KKyAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHN05CU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGF0YXRvb2xzLmNvbm5lY3Rpdml0eS5EYXRhU291cmNlRXhwbG9yZXJOYXZpZ2F0b3IiIHJlZj0iX0FHOGNDQ3hRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6RGF0YSBNYW5hZ2VtZW50PC90YWdzPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3TkJpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuY29tbW9uLnNuaXBwZXRzLmludGVybmFsLnVpLlNuaXBwZXRzVmlldyIgcmVmPSJfQUc4Y0N5eFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3TkJ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9ibGVtVmlldyIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgcmVmPSJfQUc4Y0RDeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3TkNDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5UYXNrTGlzdCIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgcmVmPSJfQUc4Y0VTeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3TkNTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5jb25zb2xlLkNvbnNvbGVWaWV3IiByZWY9Il9BRzhjRWl4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzdOQ2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLkJvb2ttYXJrVmlldyIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgcmVmPSJfQUc4Y0tTeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3TkN5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9ncmVzc1ZpZXciIHRvQmVSZW5kZXJlZD0iZmFsc2UiIHJlZj0iX0FHOGNLaXhRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHN05EQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uuc2VhcmNoLnVpLnZpZXdzLlNlYXJjaFZpZXciIHJlZj0iX0FHOGNMU3hRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBlcnNwZWN0aXZlIiB4bWk6aWQ9Il9BRzdORFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5KYXZhUGVyc3BlY3RpdmUiIHNlbGVjdGVkRWxlbWVudD0iX0FHN05EaXhRRWV5bXlienN1TDluQkEiIGxhYmVsPSJKYXZhIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmpkdC51aS8kbmwkL2ljb25zL2Z1bGwvZXZpZXcxNi9qcGVyc3BlY3RpdmUucG5nIj4KKyAgICAgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJwZXJzcC5oaWRkZW5JdGVtcyIgdmFsdWU9InBlcnNwLmhpZGVUb29sYmFyU0M6cHJpbnQscGVyc3AuaGlkZVRvb2xiYXJTQzpvcmcuZWNsaXBzZS51aS5lZGl0LnVuZG8scGVyc3AuaGlkZVRvb2xiYXJTQzpvcmcuZWNsaXBzZS51aS5lZGl0LnJlZG8scGVyc3AuaGlkZVRvb2xiYXJTQzpvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQudG9nZ2xlU2hvd1NlbGVjdGVkRWxlbWVudE9ubHkscGVyc3AuaGlkZVRvb2xiYXJTQzpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5jb21tYW5kcy5SdW5Ub0xpbmUscGVyc3AuaGlkZVRvb2xiYXJTQzpvcmcuZWNsaXBzZS5qZHQudWkuYWN0aW9ucy5PcGVuUHJvamVjdFdpemFyZCwiLz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UubXlseW4uZG9jLmFjdGlvblNldDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UubXlseW4udGFza3MudWkubmF2aWdhdGlvbjwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UudWkuY2hlYXRzaGVldHMuYWN0aW9uU2V0PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS5zZWFyY2guc2VhcmNoQWN0aW9uU2V0PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuYWN0aW9uU2V0LmFubm90YXRpb25OYXZpZ2F0aW9uPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuYWN0aW9uU2V0Lm5hdmlnYXRpb248L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5hY3Rpb25TZXQuY29udmVydExpbmVEZWxpbWl0ZXJzVG88L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLnVpLmV4dGVybmFsdG9vbHMuRXh0ZXJuYWxUb29sc1NldDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UudWkuYWN0aW9uU2V0LmtleUJpbmRpbmdzPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS51aS5hY3Rpb25TZXQub3BlbkZpbGVzPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5sYXVuY2hBY3Rpb25TZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLmpkdC51aS5KYXZhQWN0aW9uU2V0PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS5qZHQudWkuSmF2YUVsZW1lbnRDcmVhdGlvbkFjdGlvblNldDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UudWkuTmF2aWdhdGVBY3Rpb25TZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlRXhwbG9yZXI8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLmpkdC51aS5UeXBlSGllcmFyY2h5PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS5qZHQudWkuU291cmNlVmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UuamR0LnVpLkphdmFkb2NWaWV3PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS5zZWFyY2gudWkudmlld3MuU2VhcmNoVmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UudWkuY29uc29sZS5Db25zb2xlVmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UudWkudmlld3MuQ29udGVudE91dGxpbmU8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb2JsZW1WaWV3PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS51aS52aWV3cy5SZXNvdXJjZU5hdmlnYXRvcjwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UudWkudmlld3MuVGFza0xpc3Q8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb2dyZXNzVmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlcjwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5UZW1wbGF0ZXNWaWV3PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS5wZGUucnVudGltZS5Mb2dWaWV3PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLmpkdC51aS53aXphcmRzLkphdmFQcm9qZWN0V2l6YXJkPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLmpkdC51aS53aXphcmRzLk5ld1BhY2thZ2VDcmVhdGlvbldpemFyZDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5qZHQudWkud2l6YXJkcy5OZXdDbGFzc0NyZWF0aW9uV2l6YXJkPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLmpkdC51aS53aXphcmRzLk5ld0ludGVyZmFjZUNyZWF0aW9uV2l6YXJkPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLmpkdC51aS53aXphcmRzLk5ld0VudW1DcmVhdGlvbldpemFyZDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5qZHQudWkud2l6YXJkcy5OZXdBbm5vdGF0aW9uQ3JlYXRpb25XaXphcmQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UuamR0LnVpLndpemFyZHMuTmV3U291cmNlRm9sZGVyQ3JlYXRpb25XaXphcmQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UuamR0LnVpLndpemFyZHMuTmV3U25pcHBldEZpbGVDcmVhdGlvbldpemFyZDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5qZHQudWkud2l6YXJkcy5OZXdKYXZhV29ya2luZ1NldFdpemFyZDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS51aS53aXphcmRzLm5ldy5mb2xkZXI8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UudWkud2l6YXJkcy5uZXcuZmlsZTwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS51aS5lZGl0b3JzLndpemFyZHMuVW50aXRsZWRUZXh0RmlsZVdpemFyZDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5wZXJzcFNDOm9yZy5lY2xpcHNlLmpkdC51aS5KYXZhQnJvd3NpbmdQZXJzcGVjdGl2ZTwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5wZXJzcFNDOm9yZy5lY2xpcHNlLmRlYnVnLnVpLkRlYnVnUGVyc3BlY3RpdmU8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnZpZXdzLnRhc2tzPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLndpemFyZHMubmV3LnJlcG9zaXRvcnkudGFzazwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5zaG93SW46b3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VFeHBsb3JlcjwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5zaG93SW46b3JnLmVjbGlwc2UudGVhbS51aS5HZW5lcmljSGlzdG9yeVZpZXc8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Auc2hvd0luOm9yZy5lY2xpcHNlLnVpLnZpZXdzLlJlc291cmNlTmF2aWdhdG9yPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnNob3dJbjpvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuUHJvamVjdEV4cGxvcmVyPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5icmVha3BvaW50QWN0aW9uU2V0PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuSkRURGVidWdBY3Rpb25TZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLmVjbGVtbWEudWkuQ292ZXJhZ2VBY3Rpb25TZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Auc2hvd0luOm9yZy5lY2xpcHNlLmVjbGVtbWEudWkuQ292ZXJhZ2VWaWV3PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnNob3dJbjpvcmcuZWNsaXBzZS5lZ2l0LnVpLlJlcG9zaXRvcmllc1ZpZXc8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UuamR0Lmp1bml0LndpemFyZHMuTmV3VGVzdENhc2VDcmVhdGlvbldpemFyZDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UuamR0Lmp1bml0LkpVbml0QWN0aW9uU2V0PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS5hbnQudWkudmlld3MuQW50VmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2Uud3N0LmpzZHQuY2hyb21pdW0uZGVidWcudWkuYWN0aW9uU2V0czwvdGFncz4KKyAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlBhcnRTYXNoQ29udGFpbmVyIiB4bWk6aWQ9Il9BRzdORGl4UUVleW15YnpzdUw5bkJBIiBzZWxlY3RlZEVsZW1lbnQ9Il9BRzdOR0N4UUVleW15YnpzdUw5bkJBIiBob3Jpem9udGFsPSJ0cnVlIj4KKyAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYmFzaWM6UGFydFNhc2hDb250YWluZXIiIHhtaTppZD0iX0FHN05EeXhRRWV5bXlienN1TDluQkEiIGNvbnRhaW5lckRhdGE9IjE0NjAiIHNlbGVjdGVkRWxlbWVudD0iX0FHN05FQ3hRRWV5bXlienN1TDluQkEiPgorICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlBhcnRTdGFjayIgeG1pOmlkPSJfQUc3TkVDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJsZWZ0IiBjb250YWluZXJEYXRhPSI2MDAwIiBzZWxlY3RlZEVsZW1lbnQ9Il9BRzdORVN4UUVleW15YnpzdUw5bkJBIj4KKyAgICAgICAgICAgICAgICA8dGFncz5vcmcuZWNsaXBzZS5lNC5wcmltYXJ5TmF2aWdhdGlvblN0YWNrPC90YWdzPgorICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHN05FU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlciIgcmVmPSJfQUc4YmdDeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3TkVpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZUV4cGxvcmVyIiByZWY9Il9BRzlDaml4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkphdmE8L3RhZ3M+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzdORXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5UeXBlSGllcmFyY2h5IiByZWY9Il9BRzhiLXl4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkphdmE8L3RhZ3M+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzdORkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlJlc291cmNlTmF2aWdhdG9yIiByZWY9Il9BRzhiLUN4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzdORlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC5qdW5pdC5SZXN1bHRWaWV3IiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiByZWY9Il9BRzlDblN4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkphdmE8L3RhZ3M+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJiYXNpYzpQYXJ0U3RhY2siIHhtaTppZD0iX0FHN05GaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5SZXBvc2l0b3JpZXNWaWV3TVN0YWNrIiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiBjb250YWluZXJEYXRhPSI0MDAwIj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzdORnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuUmVwb3NpdG9yaWVzVmlldyIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgcmVmPSJfQUc5Q21peFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHaXQ8L3RhZ3M+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlBhcnRTYXNoQ29udGFpbmVyIiB4bWk6aWQ9Il9BRzdOR0N4UUVleW15YnpzdUw5bkJBIiBjb250YWluZXJEYXRhPSI4NTQwIiBzZWxlY3RlZEVsZW1lbnQ9Il9BRzdOR1N4UUVleW15YnpzdUw5bkJBIj4KKyAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJiYXNpYzpQYXJ0U2FzaENvbnRhaW5lciIgeG1pOmlkPSJfQUc3TkdTeFFFZXlteWJ6c3VMOW5CQSIgY29udGFpbmVyRGF0YT0iNzMwNiIgc2VsZWN0ZWRFbGVtZW50PSJfQUc3TkdpeFFFZXlteWJ6c3VMOW5CQSIgaG9yaXpvbnRhbD0idHJ1ZSI+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3TkdpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0b3JzcyIgY29udGFpbmVyRGF0YT0iNzUwMCIgcmVmPSJfQUc3MWR5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYmFzaWM6UGFydFNhc2hDb250YWluZXIiIHhtaTppZD0iX0FHN05HeXhRRWV5bXlienN1TDluQkEiIGNvbnRhaW5lckRhdGE9IjI1MDAiIHNlbGVjdGVkRWxlbWVudD0iX0FHN05IaXhRRWV5bXlienN1TDluQkEiPgorICAgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJiYXNpYzpQYXJ0U3RhY2siIHhtaTppZD0iX0FHN05IQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkudmlld3MudGFza3NNU3RhY2siIGNvbnRhaW5lckRhdGE9IjUwMDAiIHNlbGVjdGVkRWxlbWVudD0iX0FHN05IU3hRRWV5bXlienN1TDluQkEiPgorICAgICAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzdOSFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnZpZXdzLnRhc2tzIiByZWY9Il9BRzlDWGl4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6TXlseW48L3RhZ3M+CisgICAgICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJiYXNpYzpQYXJ0U3RhY2siIHhtaTppZD0iX0FHN05IaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0icmlnaHQiIGNvbnRhaW5lckRhdGE9IjUwMDAiIHNlbGVjdGVkRWxlbWVudD0iX0FHN05IeXhRRWV5bXlienN1TDluQkEiPgorICAgICAgICAgICAgICAgICAgICA8dGFncz5vcmcuZWNsaXBzZS5lNC5zZWNvbmRhcnlOYXZpZ2F0aW9uU3RhY2s8L3RhZ3M+CisgICAgICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHN05IeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuQ29udGVudE91dGxpbmUiIHJlZj0iX0FHOGNhQ3hRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzdOSUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuVGVtcGxhdGVzVmlldyIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgcmVmPSJfQUc5Q21TeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHN05JU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuYW50LnVpLnZpZXdzLkFudFZpZXciIHRvQmVSZW5kZXJlZD0iZmFsc2UiIHJlZj0iX0FHOUNuaXhRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpBbnQ8L3RhZ3M+CisgICAgICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYmFzaWM6UGFydFN0YWNrIiB4bWk6aWQ9Il9BRzdOSWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9ImJvdHRvbSIgY29udGFpbmVyRGF0YT0iMjY5NCIgc2VsZWN0ZWRFbGVtZW50PSJfQUc3Tkp5eFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICAgICAgICAgICAgPHRhZ3M+b3JnLmVjbGlwc2UuZTQuc2Vjb25kYXJ5RGF0YVN0YWNrPC90YWdzPgorICAgICAgICAgICAgICAgIDx0YWdzPkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgICAgICAgPHRhZ3M+SmF2YTwvdGFncz4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzdOSXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb2JsZW1WaWV3IiByZWY9Il9BRzhjREN4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzdOSkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5KYXZhZG9jVmlldyIgcmVmPSJfQUc5Q2t5eFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpKYXZhPC90YWdzPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3TkpTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuU291cmNlVmlldyIgcmVmPSJfQUc5Q2xpeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpKYXZhPC90YWdzPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3TkppeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5zZWFyY2gudWkudmlld3MuU2VhcmNoVmlldyIgcmVmPSJfQUc4Y0xTeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3Tkp5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5jb25zb2xlLkNvbnNvbGVWaWV3IiByZWY9Il9BRzhjRWl4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzdOS0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLkJvb2ttYXJrVmlldyIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgcmVmPSJfQUc4Y0tTeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3TktTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9ncmVzc1ZpZXciIHRvQmVSZW5kZXJlZD0iZmFsc2UiIHJlZj0iX0FHOGNLaXhRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHN05LaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuUHJvcGVydHlTaGVldCIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgcmVmPSJfQUc4Y0FpeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3Tkt5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lY2xlbW1hLnVpLkNvdmVyYWdlVmlldyIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgcmVmPSJfQUc5Q3NDeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpKYXZhPC90YWdzPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfcEtxZkVETC1FZXk0aGJwWmdpZC1mdyIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQuY2FsbGhpZXJhcmNoeS52aWV3IiByZWY9Il9wS3A0QURMLUVleTRoYnBaZ2lkLWZ3IiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkphdmE8L3RhZ3M+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQZXJzcGVjdGl2ZSIgeG1pOmlkPSJfQUc3TkxDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5EZWJ1Z1BlcnNwZWN0aXZlIiBzZWxlY3RlZEVsZW1lbnQ9Il9BRzdOTFN4UUVleW15YnpzdUw5bkJBIiBsYWJlbD0iRGVidWciIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZGVidWcudWkvJG5sJC9pY29ucy9mdWxsL2V2aWV3MTYvZGVidWdfcGVyc3AucG5nIj4KKyAgICAgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJwZXJzcC5oaWRkZW5JdGVtcyIgdmFsdWU9InBlcnNwLmhpZGVUb29sYmFyU0M6cHJpbnQscGVyc3AuaGlkZVRvb2xiYXJTQzpvcmcuZWNsaXBzZS51aS5lZGl0LnVuZG8scGVyc3AuaGlkZVRvb2xiYXJTQzpvcmcuZWNsaXBzZS51aS5lZGl0LnJlZG8scGVyc3AuaGlkZVRvb2xiYXJTQzpvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQudG9nZ2xlU2hvd1NlbGVjdGVkRWxlbWVudE9ubHkscGVyc3AuaGlkZVRvb2xiYXJTQzpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5jb21tYW5kcy5SdW5Ub0xpbmUscGVyc3AuaGlkZVRvb2xiYXJTQzpvcmcuZWNsaXBzZS5qZHQudWkuYWN0aW9ucy5PcGVuUHJvamVjdFdpemFyZCwiLz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UubXlseW4uZG9jLmFjdGlvblNldDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UubXlseW4udGFza3MudWkubmF2aWdhdGlvbjwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UudWkuY2hlYXRzaGVldHMuYWN0aW9uU2V0PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS5zZWFyY2guc2VhcmNoQWN0aW9uU2V0PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuYWN0aW9uU2V0LmFubm90YXRpb25OYXZpZ2F0aW9uPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuYWN0aW9uU2V0Lm5hdmlnYXRpb248L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5hY3Rpb25TZXQuY29udmVydExpbmVEZWxpbWl0ZXJzVG88L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLnVpLmV4dGVybmFsdG9vbHMuRXh0ZXJuYWxUb29sc1NldDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UudWkuYWN0aW9uU2V0LmtleUJpbmRpbmdzPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS51aS5hY3Rpb25TZXQub3BlbkZpbGVzPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS53c3QuanNkdC5jaHJvbWl1bS5kZWJ1Zy51aS5hY3Rpb25TZXRzPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9ncmVzc1ZpZXc8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuVGVtcGxhdGVzVmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UuZGVidWcudWkubGF1bmNoQWN0aW9uU2V0PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5kZWJ1Z0FjdGlvblNldDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UudWkuTmF2aWdhdGVBY3Rpb25TZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLmRlYnVnLnVpLkRlYnVnVmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UuZGVidWcudWkuVmFyaWFibGVWaWV3PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5CcmVha3BvaW50VmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UuZGVidWcudWkuRXhwcmVzc2lvblZpZXc8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLnVpLnZpZXdzLkNvbnRlbnRPdXRsaW5lPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS51aS5jb25zb2xlLkNvbnNvbGVWaWV3PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9ibGVtVmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlcjwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UucGRlLnJ1bnRpbWUuTG9nVmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UuZGVidWcudWkuYnJlYWtwb2ludEFjdGlvblNldDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5wZXJzcFNDOm9yZy5lY2xpcHNlLndzdC54bWwudWkucGVyc3BlY3RpdmU8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AucGVyc3BTQzpvcmcuZWNsaXBzZS5qZHQudWkuSmF2YVBlcnNwZWN0aXZlPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnBlcnNwU0M6b3JnLmVjbGlwc2UuamR0LnVpLkphdmFCcm93c2luZ1BlcnNwZWN0aXZlPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS5qZHQudWkuSmF2YUFjdGlvblNldDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5zaG93SW46b3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VFeHBsb3JlcjwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5wZXJzcFNDOm9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLkphdmFQZXJzcGVjdGl2ZTwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5zaG93SW46b3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuUGFja2FnZUV4cGxvcmVyPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuSkRURGVidWdBY3Rpb25TZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5EaXNwbGF5VmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UuZWNsZW1tYS51aS5Db3ZlcmFnZUFjdGlvblNldDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5zaG93SW46b3JnLmVjbGlwc2UuZWNsZW1tYS51aS5Db3ZlcmFnZVZpZXc8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Auc2hvd0luOm9yZy5lY2xpcHNlLmVnaXQudWkuUmVwb3NpdG9yaWVzVmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UuamR0Lmp1bml0LlJlc3VsdFZpZXc8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLmFudC51aS52aWV3cy5BbnRWaWV3PC90YWdzPgorICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYmFzaWM6UGFydFNhc2hDb250YWluZXIiIHhtaTppZD0iX0FHN05MU3hRRWV5bXlienN1TDluQkEiIHNlbGVjdGVkRWxlbWVudD0iX0FHN05OU3hRRWV5bXlienN1TDluQkEiIGhvcml6b250YWw9InRydWUiPgorICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJiYXNpYzpQYXJ0U3RhY2siIHhtaTppZD0iX0FHN05MaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcuaW50ZXJuYWwudWkuTmF2aWdhdG9yRm9sZGVyVmlldyIgY29udGFpbmVyRGF0YT0iMTczNiIgc2VsZWN0ZWRFbGVtZW50PSJfQUc3Tkx5eFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICAgICAgICAgIDx0YWdzPm9yZy5lY2xpcHNlLmU0LnByaW1hcnlOYXZpZ2F0aW9uU3RhY2s8L3RhZ3M+CisgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHN05MeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlciIgcmVmPSJfQUc4YmdDeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHN05NQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuRGVidWdWaWV3IiByZWY9Il9BRzlDbnl4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6RGVidWc8L3RhZ3M+CisgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHN05NU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS5TZXJ2ZXJzVmlldyIgcmVmPSJfQUc4Y0JTeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOlNlcnZlcjwvdGFncz4KKyAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3Tk1peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZUV4cGxvcmVyIiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiByZWY9Il9BRzlDaml4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6SmF2YTwvdGFncz4KKyAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3Tk15eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuVHlwZUhpZXJhcmNoeSIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgcmVmPSJfQUc4Yi15eFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkphdmE8L3RhZ3M+CisgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHN05OQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0Lmp1bml0LlJlc3VsdFZpZXciIHRvQmVSZW5kZXJlZD0iZmFsc2UiIHJlZj0iX0FHOUNuU3hRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpKYXZhPC90YWdzPgorICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYmFzaWM6UGFydFNhc2hDb250YWluZXIiIHhtaTppZD0iX0FHN05OU3hRRWV5bXlienN1TDluQkEiIGNvbnRhaW5lckRhdGE9IjgyNjQiIHNlbGVjdGVkRWxlbWVudD0iX0FHNzBDU3hRRWV5bXlienN1TDluQkEiPgorICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlBhcnRTYXNoQ29udGFpbmVyIiB4bWk6aWQ9Il9BRzcwQUN4UUVleW15YnpzdUw5bkJBIiBjb250YWluZXJEYXRhPSI3NTAwIiBzZWxlY3RlZEVsZW1lbnQ9Il9BRzcwQVN4UUVleW15YnpzdUw5bkJBIiBob3Jpem9udGFsPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzcwQVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXRvcnNzIiBjb250YWluZXJEYXRhPSI3NDY1IiByZWY9Il9BRzcxZHl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJiYXNpYzpQYXJ0U3RhY2siIHhtaTppZD0iX0FHNzBBaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcuaW50ZXJuYWwudWkuT3V0bGluZUZvbGRlclZpZXciIGNvbnRhaW5lckRhdGE9IjI1MzUiIHNlbGVjdGVkRWxlbWVudD0iX0FHNzBBeXhRRWV5bXlienN1TDluQkEiPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+b3JnLmVjbGlwc2UuZTQuc2Vjb25kYXJ5TmF2aWdhdGlvblN0YWNrPC90YWdzPgorICAgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3MEF5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5WYXJpYWJsZVZpZXciIHJlZj0iX0FHOUNveXhRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkRlYnVnPC90YWdzPgorICAgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHNzBCQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuQnJlYWtwb2ludFZpZXciIHJlZj0iX0FHOUNwaXhRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkRlYnVnPC90YWdzPgorICAgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHNzBCU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuRXhwcmVzc2lvblZpZXciIHJlZj0iX0FHOUNxU3hRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkRlYnVnPC90YWdzPgorICAgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHNzBCaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuQ29udGVudE91dGxpbmUiIHRvQmVSZW5kZXJlZD0iZmFsc2UiIHJlZj0iX0FHOGNhQ3hRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3MEJ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0IiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiByZWY9Il9BRzhjQWl4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHNzBDQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuYW50LnVpLnZpZXdzLkFudFZpZXciIHRvQmVSZW5kZXJlZD0iZmFsc2UiIHJlZj0iX0FHOUNuaXhRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkFudDwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJiYXNpYzpQYXJ0U3RhY2siIHhtaTppZD0iX0FHNzBDU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcuaW50ZXJuYWwudWkuVG9vbHNGb2xkZXJWaWV3IiBjb250YWluZXJEYXRhPSIyNTAwIiBzZWxlY3RlZEVsZW1lbnQ9Il9BRzcwQ2l4UUVleW15YnpzdUw5bkJBIj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzcwQ2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmNvbnNvbGUuQ29uc29sZVZpZXciIHJlZj0iX0FHOGNFaXhRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPmFjdGl2ZTwvdGFncz4KKyAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHNzBDeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuUHJvYmxlbVZpZXciIHJlZj0iX0FHOGNEQ3hRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHNzBEQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuUmVnaXN0ZXJWaWV3IiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiByZWY9Il9BRzlDb2l4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkRlYnVnPC90YWdzPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3MERTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Cb29rbWFya1ZpZXciIHRvQmVSZW5kZXJlZD0iZmFsc2UiIHJlZj0iX0FHOGNLU3hRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHNzBEaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuUHJvZ3Jlc3NWaWV3IiByZWY9Il9BRzhjS2l4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzcwRHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnBkZS5ydW50aW1lLkxvZ1ZpZXciIHRvQmVSZW5kZXJlZD0iZmFsc2UiIHJlZj0iX0FHOUNyQ3hRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHNzBFQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLkRpc3BsYXlWaWV3IiByZWY9Il9BRzlDclN4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkRlYnVnPC90YWdzPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3MEVTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5zZWFyY2gudWkudmlld3MuU2VhcmNoVmlldyIgcmVmPSJfQUc4Y0xTeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGVyc3BlY3RpdmUiIHhtaTppZD0iX0FHNzBFaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuanN0LmoyZWUuSjJFRVBlcnNwZWN0aXZlIiBzZWxlY3RlZEVsZW1lbnQ9Il9BRzcwRXl4UUVleW15YnpzdUw5bkJBIiBsYWJlbD0iSmF2YSBFRSIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5qc3QuajJlZS51aS9pY29ucy9mdWxsL2N2aWV3MTYvajJlZV9wZXJzcGVjdGl2ZS5naWYiPgorICAgICAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9InBlcnNwLmhpZGRlbkl0ZW1zIiB2YWx1ZT0icGVyc3AuaGlkZVRvb2xiYXJTQzpwcmludCxwZXJzcC5oaWRlVG9vbGJhclNDOm9yZy5lY2xpcHNlLnVpLmVkaXQudW5kbyxwZXJzcC5oaWRlVG9vbGJhclNDOm9yZy5lY2xpcHNlLnVpLmVkaXQucmVkbyxwZXJzcC5oaWRlVG9vbGJhclNDOm9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC50b2dnbGVTaG93U2VsZWN0ZWRFbGVtZW50T25seSxwZXJzcC5oaWRlVG9vbGJhclNDOm9yZy5lY2xpcHNlLmRlYnVnLnVpLmNvbW1hbmRzLlJ1blRvTGluZSxwZXJzcC5oaWRlVG9vbGJhclNDOm9yZy5lY2xpcHNlLmpkdC51aS5hY3Rpb25zLk9wZW5Qcm9qZWN0V2l6YXJkLCIvPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS5teWx5bi5kb2MuYWN0aW9uU2V0PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5uYXZpZ2F0aW9uPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS51aS5jaGVhdHNoZWV0cy5hY3Rpb25TZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLnNlYXJjaC5zZWFyY2hBY3Rpb25TZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5hY3Rpb25TZXQuYW5ub3RhdGlvbk5hdmlnYXRpb248L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5hY3Rpb25TZXQubmF2aWdhdGlvbjwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmFjdGlvblNldC5jb252ZXJ0TGluZURlbGltaXRlcnNUbzwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UudWkuZXh0ZXJuYWx0b29scy5FeHRlcm5hbFRvb2xzU2V0PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS51aS5hY3Rpb25TZXQua2V5QmluZGluZ3M8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLnVpLmFjdGlvblNldC5vcGVuRmlsZXM8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLndzdC5qc2R0LmNocm9taXVtLmRlYnVnLnVpLmFjdGlvblNldHM8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLmpzdC5qMmVlLkoyZWVNYWluQWN0aW9uU2V0PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS5qZHQudWkuSmF2YUFjdGlvblNldDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UuZGVidWcudWkubGF1bmNoQWN0aW9uU2V0PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5kZWJ1Z0FjdGlvblNldDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UudWkuTmF2aWdhdGVBY3Rpb25TZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Qcm9qZWN0RXhwbG9yZXI8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuU2VydmVyc1ZpZXc8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLmRhdGF0b29scy5jb25uZWN0aXZpdHkuRGF0YVNvdXJjZUV4cGxvcmVyTmF2aWdhdG9yPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS51aS52aWV3cy5Cb29rbWFya1ZpZXc8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLnVpLnZpZXdzLkNvbnRlbnRPdXRsaW5lPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS51aS52aWV3cy5SZXNvdXJjZU5hdmlnYXRvcjwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5zbmlwcGV0cy5pbnRlcm5hbC51aS5TbmlwcGV0c1ZpZXc8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLnVpLnZpZXdzLkFsbE1hcmtlcnNWaWV3PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS52aWV3cy50YXNrczwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2Uuc2VhcmNoLnVpLnZpZXdzLlNlYXJjaFZpZXc8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLnVpLmNvbnNvbGUuQ29uc29sZVZpZXc8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Auc2hvd0luOm9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Qcm9qZWN0RXhwbG9yZXI8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci5leHBsb3JlcjwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5tMmUuY29yZS53aXphcmRzLk1hdmVuMlByb2plY3RXaXphcmQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLmVjbGVtbWEudWkuQ292ZXJhZ2VBY3Rpb25TZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Auc2hvd0luOm9yZy5lY2xpcHNlLmVjbGVtbWEudWkuQ292ZXJhZ2VWaWV3PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnBlcnNwU0M6b3JnLmVjbGlwc2UuZGVidWcudWkuRGVidWdQZXJzcGVjdGl2ZTwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5wZXJzcFNDOm9yZy5lY2xpcHNlLmpkdC51aS5KYXZhUGVyc3BlY3RpdmU8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AucGVyc3BTQzpvcmcuZWNsaXBzZS51aS5yZXNvdXJjZVBlcnNwZWN0aXZlPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnBlcnNwU0M6b3JnLmVjbGlwc2Uud3N0LndlYi51aS53ZWJEZXZQZXJzcGVjdGl2ZTwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5qc3QuajJlZS51aS5wcm9qZWN0LmZhY2V0LkVhclByb2plY3RXaXphcmQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UuanN0LnNlcnZsZXQudWkucHJvamVjdC5mYWNldC5XZWJQcm9qZWN0V2l6YXJkPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLmpzdC5lamIudWkucHJvamVjdC5mYWNldC5FamJQcm9qZWN0V2l6YXJkPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLmpzdC5qMmVlLmpjYS51aS5pbnRlcm5hbC53aXphcmQuQ29ubmVjdG9yUHJvamVjdFdpemFyZDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5qc3QuajJlZS51aS5wcm9qZWN0LmZhY2V0LmFwcGNsaWVudC5BcHBDbGllbnRQcm9qZWN0V2l6YXJkPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLndzdC53ZWIudWkuaW50ZXJuYWwud2l6YXJkcy5TaW1wbGVXZWJQcm9qZWN0V2l6YXJkPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLmpwdC51aS53aXphcmQubmV3SnBhUHJvamVjdDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5qc3Quc2VydmxldC51aS5pbnRlcm5hbC53aXphcmQuQWRkU2VydmxldFdpemFyZDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5qc3QuZWpiLnVpLmludGVybmFsLndpemFyZC5BZGRTZXNzaW9uQmVhbldpemFyZDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5qc3QuZWpiLnVpLmludGVybmFsLndpemFyZC5BZGRNZXNzYWdlRHJpdmVuQmVhbldpemFyZDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5qcHQudWkud2l6YXJkLm5ld0VudGl0eTwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS51aS53aXphcmRzLm5ldy5mb2xkZXI8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UudWkud2l6YXJkcy5uZXcuZmlsZTwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS5pbnRlcm5hbC53ZWJicm93c2VyLmFjdGlvblNldDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UuZGVidWcudWkuYnJlYWtwb2ludEFjdGlvblNldDwvdGFncz4KKyAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlBhcnRTYXNoQ29udGFpbmVyIiB4bWk6aWQ9Il9BRzcwRXl4UUVleW15YnpzdUw5bkJBIiBzZWxlY3RlZEVsZW1lbnQ9Il9BRzcwR1N4UUVleW15YnpzdUw5bkJBIiBob3Jpem9udGFsPSJ0cnVlIj4KKyAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYmFzaWM6UGFydFN0YWNrIiB4bWk6aWQ9Il9BRzcwRkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9InRvcExlZnQiIGNvbnRhaW5lckRhdGE9IjI1MDAiIHNlbGVjdGVkRWxlbWVudD0iX0FHNzBGU3hRRWV5bXlienN1TDluQkEiPgorICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzcwRlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Qcm9qZWN0RXhwbG9yZXIiIHJlZj0iX0FHOGJnQ3hRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzcwRml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlJlc291cmNlTmF2aWdhdG9yIiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiByZWY9Il9BRzhiLUN4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3MEZ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuVHlwZUhpZXJhcmNoeSIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgcmVmPSJfQUc4Yi15eFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkphdmE8L3RhZ3M+CisgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHNzBHQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VzVmlldyIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgcmVmPSJfQUc4Yl9peFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkphdmEgQnJvd3Npbmc8L3RhZ3M+CisgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJiYXNpYzpQYXJ0U2FzaENvbnRhaW5lciIgeG1pOmlkPSJfQUc3MEdTeFFFZXlteWJ6c3VMOW5CQSIgY29udGFpbmVyRGF0YT0iNzUwMCIgc2VsZWN0ZWRFbGVtZW50PSJfQUc3MEh5eFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYmFzaWM6UGFydFNhc2hDb250YWluZXIiIHhtaTppZD0iX0FHNzBHaXhRRWV5bXlienN1TDluQkEiIGNvbnRhaW5lckRhdGE9IjcwMDAiIHNlbGVjdGVkRWxlbWVudD0iX0FHNzBHeXhRRWV5bXlienN1TDluQkEiIGhvcml6b250YWw9InRydWUiPgorICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHNzBHeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdG9yc3MiIGNvbnRhaW5lckRhdGE9IjcwMDAiIHJlZj0iX0FHNzFkeXhRRWV5bXlienN1TDluQkEiLz4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlBhcnRTdGFjayIgeG1pOmlkPSJfQUc3MEhDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJ0b3BSaWdodCIgY29udGFpbmVyRGF0YT0iMzAwMCIgc2VsZWN0ZWRFbGVtZW50PSJfQUc3MEhTeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzcwSFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLkNvbnRlbnRPdXRsaW5lIiByZWY9Il9BRzhjYUN4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHNzBIaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkudmlld3MudGFza3MiIHJlZj0iX0FHOUNYaXhRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOk15bHluPC90YWdzPgorICAgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlBhcnRTdGFjayIgeG1pOmlkPSJfQUc3MEh5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJib3R0b21SaWdodCIgY29udGFpbmVyRGF0YT0iMzAwMCIgc2VsZWN0ZWRFbGVtZW50PSJfQUc3MEppeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3MElDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5BbGxNYXJrZXJzVmlldyIgcmVmPSJfQUc4Yl95eFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3MElTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0IiByZWY9Il9BRzhjQWl4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzcwSWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuU2VydmVyc1ZpZXciIHJlZj0iX0FHOGNCU3hRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6U2VydmVyPC90YWdzPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3MEl5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuY29tbW9uLnNuaXBwZXRzLmludGVybmFsLnVpLlNuaXBwZXRzVmlldyIgcmVmPSJfQUc4Y0N5eFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3MEpDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9ibGVtVmlldyIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgcmVmPSJfQUc4Y0RDeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3MEpTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5UYXNrTGlzdCIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgcmVmPSJfQUc4Y0VTeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3MEppeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5jb25zb2xlLkNvbnNvbGVWaWV3IiByZWY9Il9BRzhjRWl4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzcwSnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLkJvb2ttYXJrVmlldyIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgcmVmPSJfQUc4Y0tTeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3MEtDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9ncmVzc1ZpZXciIHRvQmVSZW5kZXJlZD0iZmFsc2UiIHJlZj0iX0FHOGNLaXhRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHNzBLU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uuc2VhcmNoLnVpLnZpZXdzLlNlYXJjaFZpZXciIHRvQmVSZW5kZXJlZD0iZmFsc2UiIHJlZj0iX0FHOGNMU3hRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgPC9jaGlsZHJlbj4KKyAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYmFzaWM6UGFydFN0YWNrIiB4bWk6aWQ9Il9BRzcwS2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9InN0aWNreUZvbGRlclJpZ2h0IiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiBjb250YWluZXJEYXRhPSIyNTAwIj4KKyAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3MEt5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5oZWxwLnVpLkhlbHBWaWV3IiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiByZWY9Il9BRzcxY0N4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6SGVscDwvdGFncz4KKyAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3MExDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pbnRyb3ZpZXciIHRvQmVSZW5kZXJlZD0iZmFsc2UiIHJlZj0iX0FHNzFjeXhRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzcwTFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmNoZWF0c2hlZXRzLnZpZXdzLkNoZWF0U2hlZXRWaWV3IiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiByZWY9Il9BRzcxZGl4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6SGVscDwvdGFncz4KKyAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgIDwvY2hpbGRyZW4+CisgICAgPC9jaGlsZHJlbj4KKyAgICA8c2hhcmVkRWxlbWVudHMgeHNpOnR5cGU9ImJhc2ljOlBhcnQiIHhtaTppZD0iX0FHNzFjQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuaGVscC51aS5IZWxwVmlldyIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3IiBsYWJlbD0iSGVscCIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5oZWxwLnVpL2ljb25zL3ZpZXcxNi9oZWxwX3ZpZXcuZ2lmIiB0b29sdGlwPSIiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5oZWxwLnVpLmludGVybmFsLnZpZXdzLkhlbHBWaWV3Ii8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuaGVscC51aSIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ibWVtZW50byIgdmFsdWU9IiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7Pz4mI3hEOyYjeEE7Jmx0O3ZpZXcgYWN0aXZlU2V0PSZxdW90O0RlZmF1bHQmcXVvdDsgZXhwcmVzc2lvbj0mcXVvdDsmcXVvdDsgcGFnZUlkPSZxdW90O2luZGV4LXBhZ2UmcXVvdDsvPiIvPgorICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkhlbHA8L3RhZ3M+CisgICAgICA8bWVudXMgeG1pOmlkPSJfQUc3MWNTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5oZWxwLnVpLkhlbHBWaWV3Ij4KKyAgICAgICAgPHRhZ3M+Vmlld01lbnU8L3RhZ3M+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246bWVudTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8dG9vbGJhciB4bWk6aWQ9Il9BRzcxY2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmhlbHAudWkuSGVscFZpZXciIHZpc2libGU9ImZhbHNlIi8+CisgICAgPC9zaGFyZWRFbGVtZW50cz4KKyAgICA8c2hhcmVkRWxlbWVudHMgeHNpOnR5cGU9ImJhc2ljOlBhcnQiIHhtaTppZD0iX0FHNzFjeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaW50cm92aWV3IiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciIGxhYmVsPSJXZWxjb21lIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVpL2ljb25zL2Z1bGwvZXZpZXcxNi9kZWZhdWx0dmlld19taXNjLnBuZyIgdG9vbHRpcD0iIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuVmlld0ludHJvQWRhcHRlclBhcnQiLz4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS51aSIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ibWVtZW50byIgdmFsdWU9IiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7Pz4mI3hEOyYjeEE7Jmx0O3ZpZXc+JiN4RDsmI3hBOyZsdDtwcmVzZW50YXRpb24gY3VycmVudFBhZ2U9JnF1b3Q7dHV0b3JpYWxzJnF1b3Q7IHJlc3RvcmU9JnF1b3Q7dHJ1ZSZxdW90Oy8+JiN4RDsmI3hBOyZsdDtzdGFuZGJ5UGFydC8+JiN4RDsmI3hBOyZsdDsvdmlldz4iLz4KKyAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgPG1lbnVzIHhtaTppZD0iX0FHNzFkQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaW50cm92aWV3Ij4KKyAgICAgICAgPHRhZ3M+Vmlld01lbnU8L3RhZ3M+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246bWVudTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8dG9vbGJhciB4bWk6aWQ9Il9BRzcxZFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLmludHJvdmlldyIgdmlzaWJsZT0iZmFsc2UiLz4KKyAgICA8L3NoYXJlZEVsZW1lbnRzPgorICAgIDxzaGFyZWRFbGVtZW50cyB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfQUc3MWRpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5jaGVhdHNoZWV0cy52aWV3cy5DaGVhdFNoZWV0VmlldyIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3IiBsYWJlbD0iQ2hlYXQgU2hlZXRzIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVpLmNoZWF0c2hlZXRzL2ljb25zL3ZpZXcxNi9jaGVhdHNoZWV0X3ZpZXcuZ2lmIiB0b29sdGlwPSIiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5jaGVhdHNoZWV0cy52aWV3cy5DaGVhdFNoZWV0VmlldyIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLmNoZWF0c2hlZXRzIi8+CisgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6SGVscDwvdGFncz4KKyAgICA8L3NoYXJlZEVsZW1lbnRzPgorICAgIDxzaGFyZWRFbGVtZW50cyB4c2k6dHlwZT0iYWR2YW5jZWQ6QXJlYSIgeG1pOmlkPSJfQUc3MWR5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0b3JzcyIgc2VsZWN0ZWRFbGVtZW50PSJfQUc3MWVDeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlBhcnRTdGFjayIgeG1pOmlkPSJfQUc3MWVDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJQYXJ0U3RhY2tANDUyNWU5ZTgiIHNlbGVjdGVkRWxlbWVudD0iX0FHNzFlU3hRRWV5bXlienN1TDluQkEiPgorICAgICAgICA8dGFncz5vcmcuZWNsaXBzZS5lNC5wcmltYXJ5RGF0YVN0YWNrPC90YWdzPgorICAgICAgICA8dGFncz5FZGl0b3JTdGFjazwvdGFncz4KKyAgICAgICAgPHRhZ3M+YWN0aXZlPC90YWdzPgorICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlBhcnQiIHhtaTppZD0iX0FHNzFlU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZTQudWkuY29tcGF0aWJpbGl0eS5lZGl0b3IiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5RWRpdG9yIiBsYWJlbD0iR2xlbW1EQi5qYXZhIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmpkdC51aS9pY29ucy9mdWxsL29iajE2L2pjdV9vYmoucG5nIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im1lbWVudG8iIHZhbHVlPSImbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8+JiN4RDsmI3hBOyZsdDtlZGl0b3IgaWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLkNvbXBpbGF0aW9uVW5pdEVkaXRvciZxdW90OyBuYW1lPSZxdW90O0dsZW1tREIuamF2YSZxdW90OyBwYXJ0TmFtZT0mcXVvdDtHbGVtbURCLmphdmEmcXVvdDsgdGl0bGU9JnF1b3Q7R2xlbW1EQi5qYXZhJnF1b3Q7IHRvb2x0aXA9JnF1b3Q7R2xlbW1TZXJ2aWNlcy9zcmMvZGUva29yYXAvc2VydmljZXMvR2xlbW1EQi5qYXZhJnF1b3Q7PiYjeEQ7JiN4QTsmbHQ7aW5wdXQgZmFjdG9yeUlEPSZxdW90O29yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0RmFjdG9yeSZxdW90OyBwYXRoPSZxdW90Oy9HbGVtbVNlcnZpY2VzL3NyYy9kZS9rb3JhcC9zZXJ2aWNlcy9HbGVtbURCLmphdmEmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7ZWRpdG9yU3RhdGUgc2VsZWN0aW9uSG9yaXpvbnRhbFBpeGVsPSZxdW90OzAmcXVvdDsgc2VsZWN0aW9uTGVuZ3RoPSZxdW90OzAmcXVvdDsgc2VsZWN0aW9uT2Zmc2V0PSZxdW90OzcxNjgmcXVvdDsgc2VsZWN0aW9uVG9wUGl4ZWw9JnF1b3Q7MzcyMCZxdW90Oy8+JiN4RDsmI3hBOyZsdDsvZWRpdG9yPiIvPgorICAgICAgICAgIDx0YWdzPkVkaXRvcjwvdGFncz4KKyAgICAgICAgICA8dGFncz5vcmcuZWNsaXBzZS5qZHQudWkuQ29tcGlsYXRpb25Vbml0RWRpdG9yPC90YWdzPgorICAgICAgICAgIDx0YWdzPnJlbW92ZU9uSGlkZTwvdGFncz4KKyAgICAgICAgICA8dGFncz5hY3RpdmU8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+YWN0aXZlT25DbG9zZTwvdGFncz4KKyAgICAgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzcxZWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IiNDb21waWxhdGlvblVuaXRFZGl0b3JDb250ZXh0Ij4KKyAgICAgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgICAgICA8dGFncz5wb3B1cDojQ29tcGlsYXRpb25Vbml0RWRpdG9yQ29udGV4dDwvdGFncz4KKyAgICAgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLmpkdC51aS5Db21waWxhdGlvblVuaXRFZGl0b3IuRWRpdG9yQ29udGV4dDwvdGFncz4KKyAgICAgICAgICAgIDx0YWdzPnBvcHVwOiNBYnN0cmFjdFRleHRFZGl0b3JDb250ZXh0PC90YWdzPgorICAgICAgICAgIDwvbWVudXM+CisgICAgICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc3MWV5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSIjQ29tcGlsYXRpb25Vbml0UnVsZXJDb250ZXh0Ij4KKyAgICAgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgICAgICA8dGFncz5wb3B1cDojQ29tcGlsYXRpb25Vbml0UnVsZXJDb250ZXh0PC90YWdzPgorICAgICAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UuamR0LnVpLkNvbXBpbGF0aW9uVW5pdEVkaXRvci5SdWxlckNvbnRleHQ8L3RhZ3M+CisgICAgICAgICAgICA8dGFncz5wb3B1cDojQWJzdHJhY3RUZXh0RWRpdG9yUnVsZXJDb250ZXh0PC90YWdzPgorICAgICAgICAgIDwvbWVudXM+CisgICAgICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc3MWZDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSIjT3ZlcnZpZXdSdWxlckNvbnRleHQiPgorICAgICAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgICAgIDx0YWdzPnBvcHVwOiNPdmVydmlld1J1bGVyQ29udGV4dDwvdGFncz4KKyAgICAgICAgICA8L21lbnVzPgorICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlBhcnQiIHhtaTppZD0iX0FHNzFmU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZTQudWkuY29tcGF0aWJpbGl0eS5lZGl0b3IiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5RWRpdG9yIiBsYWJlbD0iR2xlbW1TZXJ2aWNlcy5qYXZhIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmpkdC51aS9pY29ucy9mdWxsL29iajE2L2pjdV9vYmoucG5nIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im1lbWVudG8iIHZhbHVlPSImbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8+JiN4RDsmI3hBOyZsdDtlZGl0b3IgaWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLkNvbXBpbGF0aW9uVW5pdEVkaXRvciZxdW90OyBuYW1lPSZxdW90O0dsZW1tU2VydmljZXMuamF2YSZxdW90OyBwYXJ0TmFtZT0mcXVvdDtHbGVtbVNlcnZpY2VzLmphdmEmcXVvdDsgdGl0bGU9JnF1b3Q7R2xlbW1TZXJ2aWNlcy5qYXZhJnF1b3Q7IHRvb2x0aXA9JnF1b3Q7R2xlbW1TZXJ2aWNlcy9zcmMvZGUva29yYXAvc2VydmljZXMvR2xlbW1TZXJ2aWNlcy5qYXZhJnF1b3Q7PiYjeEQ7JiN4QTsmbHQ7aW5wdXQgZmFjdG9yeUlEPSZxdW90O29yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0RmFjdG9yeSZxdW90OyBwYXRoPSZxdW90Oy9HbGVtbVNlcnZpY2VzL3NyYy9kZS9rb3JhcC9zZXJ2aWNlcy9HbGVtbVNlcnZpY2VzLmphdmEmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7ZWRpdG9yU3RhdGUgc2VsZWN0aW9uSG9yaXpvbnRhbFBpeGVsPSZxdW90OzAmcXVvdDsgc2VsZWN0aW9uTGVuZ3RoPSZxdW90OzAmcXVvdDsgc2VsZWN0aW9uT2Zmc2V0PSZxdW90OzEwODYxJnF1b3Q7IHNlbGVjdGlvblRvcFBpeGVsPSZxdW90OzUxMzAmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7L2VkaXRvcj4iLz4KKyAgICAgICAgICA8dGFncz5FZGl0b3I8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+b3JnLmVjbGlwc2UuamR0LnVpLkNvbXBpbGF0aW9uVW5pdEVkaXRvcjwvdGFncz4KKyAgICAgICAgICA8dGFncz5yZW1vdmVPbkhpZGU8L3RhZ3M+CisgICAgICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc3MWZpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSIjQ29tcGlsYXRpb25Vbml0RWRpdG9yQ29udGV4dCI+CisgICAgICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICAgICAgPHRhZ3M+cG9wdXA6I0NvbXBpbGF0aW9uVW5pdEVkaXRvckNvbnRleHQ8L3RhZ3M+CisgICAgICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5qZHQudWkuQ29tcGlsYXRpb25Vbml0RWRpdG9yLkVkaXRvckNvbnRleHQ8L3RhZ3M+CisgICAgICAgICAgICA8dGFncz5wb3B1cDojQWJzdHJhY3RUZXh0RWRpdG9yQ29udGV4dDwvdGFncz4KKyAgICAgICAgICA8L21lbnVzPgorICAgICAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOGJTQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iI0NvbXBpbGF0aW9uVW5pdFJ1bGVyQ29udGV4dCI+CisgICAgICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICAgICAgPHRhZ3M+cG9wdXA6I0NvbXBpbGF0aW9uVW5pdFJ1bGVyQ29udGV4dDwvdGFncz4KKyAgICAgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLmpkdC51aS5Db21waWxhdGlvblVuaXRFZGl0b3IuUnVsZXJDb250ZXh0PC90YWdzPgorICAgICAgICAgICAgPHRhZ3M+cG9wdXA6I0Fic3RyYWN0VGV4dEVkaXRvclJ1bGVyQ29udGV4dDwvdGFncz4KKyAgICAgICAgICA8L21lbnVzPgorICAgICAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOGJTU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iI092ZXJ2aWV3UnVsZXJDb250ZXh0Ij4KKyAgICAgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgICAgICA8dGFncz5wb3B1cDojT3ZlcnZpZXdSdWxlckNvbnRleHQ8L3RhZ3M+CisgICAgICAgICAgPC9tZW51cz4KKyAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJiYXNpYzpQYXJ0IiB4bWk6aWQ9Il9BRzhiVFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmU0LnVpLmNvbXBhdGliaWxpdHkuZWRpdG9yIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eUVkaXRvciIgbGFiZWw9IldvcmRmb3JtU2VydmljZXMuamF2YSIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5qZHQudWkvaWNvbnMvZnVsbC9vYmoxNi9qY3Vfb2JqLnBuZyIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJtZW1lbnRvIiB2YWx1ZT0iJmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/PiYjeEQ7JiN4QTsmbHQ7ZWRpdG9yIGlkPSZxdW90O29yZy5lY2xpcHNlLmpkdC51aS5Db21waWxhdGlvblVuaXRFZGl0b3ImcXVvdDsgbmFtZT0mcXVvdDtXb3JkZm9ybVNlcnZpY2VzLmphdmEmcXVvdDsgcGFydE5hbWU9JnF1b3Q7V29yZGZvcm1TZXJ2aWNlcy5qYXZhJnF1b3Q7IHRpdGxlPSZxdW90O1dvcmRmb3JtU2VydmljZXMuamF2YSZxdW90OyB0b29sdGlwPSZxdW90O3dmb3JtU2VydmljZXMvc3JjL2RlL2tvcmFwL3NlcnZpY2VzL1dvcmRmb3JtU2VydmljZXMuamF2YSZxdW90Oz4mI3hEOyYjeEE7Jmx0O2lucHV0IGZhY3RvcnlJRD0mcXVvdDtvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dEZhY3RvcnkmcXVvdDsgcGF0aD0mcXVvdDsvd2Zvcm1TZXJ2aWNlcy9zcmMvZGUva29yYXAvc2VydmljZXMvV29yZGZvcm1TZXJ2aWNlcy5qYXZhJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O2VkaXRvclN0YXRlIHNlbGVjdGlvbkhvcml6b250YWxQaXhlbD0mcXVvdDswJnF1b3Q7IHNlbGVjdGlvbkxlbmd0aD0mcXVvdDswJnF1b3Q7IHNlbGVjdGlvbk9mZnNldD0mcXVvdDs0ODI2JnF1b3Q7IHNlbGVjdGlvblRvcFBpeGVsPSZxdW90OzE2OTUmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7L2VkaXRvcj4iLz4KKyAgICAgICAgICA8dGFncz5FZGl0b3I8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+b3JnLmVjbGlwc2UuamR0LnVpLkNvbXBpbGF0aW9uVW5pdEVkaXRvcjwvdGFncz4KKyAgICAgICAgICA8dGFncz5yZW1vdmVPbkhpZGU8L3RhZ3M+CisgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfQUc4YlNpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lNC51aS5jb21wYXRpYmlsaXR5LmVkaXRvciIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlFZGl0b3IiIGxhYmVsPSJXb3JkZm9ybVJld3JpdGUuamF2YSIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5qZHQudWkvaWNvbnMvZnVsbC9vYmoxNi9qY3Vfb2JqLnBuZyIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJtZW1lbnRvIiB2YWx1ZT0iJmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/PiYjeEQ7JiN4QTsmbHQ7ZWRpdG9yIGlkPSZxdW90O29yZy5lY2xpcHNlLmpkdC51aS5Db21waWxhdGlvblVuaXRFZGl0b3ImcXVvdDsgbmFtZT0mcXVvdDtXb3JkZm9ybVJld3JpdGUuamF2YSZxdW90OyBwYXJ0TmFtZT0mcXVvdDtXb3JkZm9ybVJld3JpdGUuamF2YSZxdW90OyB0aXRsZT0mcXVvdDtXb3JkZm9ybVJld3JpdGUuamF2YSZxdW90OyB0b29sdGlwPSZxdW90O3dmb3JtU2VydmljZXMvc3JjL2RlL2tvcmFwL3NlcnZpY2VzL1dvcmRmb3JtUmV3cml0ZS5qYXZhJnF1b3Q7PiYjeEQ7JiN4QTsmbHQ7aW5wdXQgZmFjdG9yeUlEPSZxdW90O29yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0RmFjdG9yeSZxdW90OyBwYXRoPSZxdW90Oy93Zm9ybVNlcnZpY2VzL3NyYy9kZS9rb3JhcC9zZXJ2aWNlcy9Xb3JkZm9ybVJld3JpdGUuamF2YSZxdW90Oy8+JiN4RDsmI3hBOyZsdDtlZGl0b3JTdGF0ZSBzZWxlY3Rpb25Ib3Jpem9udGFsUGl4ZWw9JnF1b3Q7MCZxdW90OyBzZWxlY3Rpb25MZW5ndGg9JnF1b3Q7MCZxdW90OyBzZWxlY3Rpb25PZmZzZXQ9JnF1b3Q7MTgzNCZxdW90OyBzZWxlY3Rpb25Ub3BQaXhlbD0mcXVvdDs4NTQmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7L2VkaXRvcj4iLz4KKyAgICAgICAgICA8dGFncz5FZGl0b3I8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+b3JnLmVjbGlwc2UuamR0LnVpLkNvbXBpbGF0aW9uVW5pdEVkaXRvcjwvdGFncz4KKyAgICAgICAgICA8dGFncz5yZW1vdmVPbkhpZGU8L3RhZ3M+CisgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfQUc4YlRpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lNC51aS5jb21wYXRpYmlsaXR5LmVkaXRvciIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlFZGl0b3IiIGxhYmVsPSJHbGVtbUNsaWVudC5qYXZhIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmpkdC51aS9pY29ucy9mdWxsL29iajE2L2pjdV9vYmoucG5nIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im1lbWVudG8iIHZhbHVlPSImbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8+JiN4RDsmI3hBOyZsdDtlZGl0b3IgaWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLkNvbXBpbGF0aW9uVW5pdEVkaXRvciZxdW90OyBuYW1lPSZxdW90O0dsZW1tQ2xpZW50LmphdmEmcXVvdDsgcGFydE5hbWU9JnF1b3Q7R2xlbW1DbGllbnQuamF2YSZxdW90OyB0aXRsZT0mcXVvdDtHbGVtbUNsaWVudC5qYXZhJnF1b3Q7IHRvb2x0aXA9JnF1b3Q7R2xlbW1DbGllbnQvc3JjL2RlL2tvcmFwL3NlcnZpY2VzL2dsZW1tL2NsaWVudC9HbGVtbUNsaWVudC5qYXZhJnF1b3Q7PiYjeEQ7JiN4QTsmbHQ7aW5wdXQgZmFjdG9yeUlEPSZxdW90O29yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0RmFjdG9yeSZxdW90OyBwYXRoPSZxdW90Oy9HbGVtbUNsaWVudC9zcmMvZGUva29yYXAvc2VydmljZXMvZ2xlbW0vY2xpZW50L0dsZW1tQ2xpZW50LmphdmEmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7ZWRpdG9yU3RhdGUgc2VsZWN0aW9uSG9yaXpvbnRhbFBpeGVsPSZxdW90OzAmcXVvdDsgc2VsZWN0aW9uTGVuZ3RoPSZxdW90OzAmcXVvdDsgc2VsZWN0aW9uT2Zmc2V0PSZxdW90OzEwMDImcXVvdDsgc2VsZWN0aW9uVG9wUGl4ZWw9JnF1b3Q7MCZxdW90Oy8+JiN4RDsmI3hBOyZsdDsvZWRpdG9yPiIvPgorICAgICAgICAgIDx0YWdzPkVkaXRvcjwvdGFncz4KKyAgICAgICAgICA8dGFncz5vcmcuZWNsaXBzZS5qZHQudWkuQ29tcGlsYXRpb25Vbml0RWRpdG9yPC90YWdzPgorICAgICAgICAgIDx0YWdzPnJlbW92ZU9uSGlkZTwvdGFncz4KKyAgICAgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzhiVHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IiNDb21waWxhdGlvblVuaXRFZGl0b3JDb250ZXh0Ij4KKyAgICAgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgICAgICA8dGFncz5wb3B1cDojQ29tcGlsYXRpb25Vbml0RWRpdG9yQ29udGV4dDwvdGFncz4KKyAgICAgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLmpkdC51aS5Db21waWxhdGlvblVuaXRFZGl0b3IuRWRpdG9yQ29udGV4dDwvdGFncz4KKyAgICAgICAgICAgIDx0YWdzPnBvcHVwOiNBYnN0cmFjdFRleHRFZGl0b3JDb250ZXh0PC90YWdzPgorICAgICAgICAgIDwvbWVudXM+CisgICAgICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc4YlVDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSIjQ29tcGlsYXRpb25Vbml0UnVsZXJDb250ZXh0Ij4KKyAgICAgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgICAgICA8dGFncz5wb3B1cDojQ29tcGlsYXRpb25Vbml0UnVsZXJDb250ZXh0PC90YWdzPgorICAgICAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UuamR0LnVpLkNvbXBpbGF0aW9uVW5pdEVkaXRvci5SdWxlckNvbnRleHQ8L3RhZ3M+CisgICAgICAgICAgICA8dGFncz5wb3B1cDojQWJzdHJhY3RUZXh0RWRpdG9yUnVsZXJDb250ZXh0PC90YWdzPgorICAgICAgICAgIDwvbWVudXM+CisgICAgICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc4YlVTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSIjT3ZlcnZpZXdSdWxlckNvbnRleHQiPgorICAgICAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgICAgIDx0YWdzPnBvcHVwOiNPdmVydmlld1J1bGVyQ29udGV4dDwvdGFncz4KKyAgICAgICAgICA8L21lbnVzPgorICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlBhcnQiIHhtaTppZD0iX21XaVpvRFozRWV5Zmx2X0t3czR1aGciIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZTQudWkuY29tcGF0aWJpbGl0eS5lZGl0b3IiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5RWRpdG9yIiBsYWJlbD0iTGVtbWFSZXNwb25zZS5qYXZhIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmpkdC51aS9pY29ucy9mdWxsL29iajE2L2pjdV9vYmoucG5nIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im1lbWVudG8iIHZhbHVlPSImbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8+JiN4RDsmI3hBOyZsdDtlZGl0b3IgaWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLkNvbXBpbGF0aW9uVW5pdEVkaXRvciZxdW90OyBuYW1lPSZxdW90O0xlbW1hUmVzcG9uc2UuamF2YSZxdW90OyBwYXJ0TmFtZT0mcXVvdDtMZW1tYVJlc3BvbnNlLmphdmEmcXVvdDsgdGl0bGU9JnF1b3Q7TGVtbWFSZXNwb25zZS5qYXZhJnF1b3Q7IHRvb2x0aXA9JnF1b3Q7SnNvblRyYXZlcnNlL3NyYy9kZS9rb3JhcC9zZXJ2aWNlcy9MZW1tYVJlc3BvbnNlLmphdmEmcXVvdDs+JiN4RDsmI3hBOyZsdDtpbnB1dCBmYWN0b3J5SUQ9JnF1b3Q7b3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXRGYWN0b3J5JnF1b3Q7IHBhdGg9JnF1b3Q7L0pzb25UcmF2ZXJzZS9zcmMvZGUva29yYXAvc2VydmljZXMvTGVtbWFSZXNwb25zZS5qYXZhJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O2VkaXRvclN0YXRlIHNlbGVjdGlvbkhvcml6b250YWxQaXhlbD0mcXVvdDswJnF1b3Q7IHNlbGVjdGlvbkxlbmd0aD0mcXVvdDswJnF1b3Q7IHNlbGVjdGlvbk9mZnNldD0mcXVvdDsxOTM0JnF1b3Q7IHNlbGVjdGlvblRvcFBpeGVsPSZxdW90Ozg2NSZxdW90Oy8+JiN4RDsmI3hBOyZsdDsvZWRpdG9yPiIvPgorICAgICAgICAgIDx0YWdzPkVkaXRvcjwvdGFncz4KKyAgICAgICAgICA8dGFncz5vcmcuZWNsaXBzZS5qZHQudWkuQ29tcGlsYXRpb25Vbml0RWRpdG9yPC90YWdzPgorICAgICAgICAgIDx0YWdzPnJlbW92ZU9uSGlkZTwvdGFncz4KKyAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJiYXNpYzpQYXJ0IiB4bWk6aWQ9Il9MY1N3Y0RpS0VleTlYdUtOV25KSmtnIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmU0LnVpLmNvbXBhdGliaWxpdHkuZWRpdG9yIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eUVkaXRvciIgbGFiZWw9IkxlbW1hSW5mby5qYXZhIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmpkdC51aS9pY29ucy9mdWxsL29iajE2L2pjdV9vYmoucG5nIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im1lbWVudG8iIHZhbHVlPSImbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8+JiN4RDsmI3hBOyZsdDtlZGl0b3IgaWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLkNvbXBpbGF0aW9uVW5pdEVkaXRvciZxdW90OyBuYW1lPSZxdW90O0xlbW1hSW5mby5qYXZhJnF1b3Q7IHBhcnROYW1lPSZxdW90O0xlbW1hSW5mby5qYXZhJnF1b3Q7IHRpdGxlPSZxdW90O0xlbW1hSW5mby5qYXZhJnF1b3Q7IHRvb2x0aXA9JnF1b3Q7R2xlbW1TZXJ2aWNlcy9zcmMvZGUva29yYXAvc2VydmljZXMvTGVtbWFJbmZvLmphdmEmcXVvdDs+JiN4RDsmI3hBOyZsdDtpbnB1dCBmYWN0b3J5SUQ9JnF1b3Q7b3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXRGYWN0b3J5JnF1b3Q7IHBhdGg9JnF1b3Q7L0dsZW1tU2VydmljZXMvc3JjL2RlL2tvcmFwL3NlcnZpY2VzL0xlbW1hSW5mby5qYXZhJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O2VkaXRvclN0YXRlIHNlbGVjdGlvbkhvcml6b250YWxQaXhlbD0mcXVvdDswJnF1b3Q7IHNlbGVjdGlvbkxlbmd0aD0mcXVvdDs5JnF1b3Q7IHNlbGVjdGlvbk9mZnNldD0mcXVvdDsyMjMmcXVvdDsgc2VsZWN0aW9uVG9wUGl4ZWw9JnF1b3Q7MjcwJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0Oy9lZGl0b3I+Ii8+CisgICAgICAgICAgPHRhZ3M+RWRpdG9yPC90YWdzPgorICAgICAgICAgIDx0YWdzPm9yZy5lY2xpcHNlLmpkdC51aS5Db21waWxhdGlvblVuaXRFZGl0b3I8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cmVtb3ZlT25IaWRlPC90YWdzPgorICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlBhcnQiIHhtaTppZD0iX1RhX2xRRHpRRWV5dWFPOTVkeXVTanciIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZTQudWkuY29tcGF0aWJpbGl0eS5lZGl0b3IiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5RWRpdG9yIiBsYWJlbD0iR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmpkdC51aS9pY29ucy9mdWxsL29iajE2L2ZpbGVfb2JqLnBuZyIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJtZW1lbnRvIiB2YWx1ZT0iJmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/PiYjeEQ7JiN4QTsmbHQ7ZWRpdG9yIGlkPSZxdW90O29yZy5lY2xpcHNlLmpkdC51aS5Qcm9wZXJ0aWVzRmlsZUVkaXRvciZxdW90OyBuYW1lPSZxdW90O0dsZW1tU2VydmljZXMucHJvcGVydGllcyZxdW90OyBwYXJ0TmFtZT0mcXVvdDtHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMmcXVvdDsgdGl0bGU9JnF1b3Q7R2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzJnF1b3Q7IHRvb2x0aXA9JnF1b3Q7R2xlbW1TZXJ2aWNlcy9XZWJDb250ZW50L1dFQi1JTkYvR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzJnF1b3Q7PiYjeEQ7JiN4QTsmbHQ7aW5wdXQgZmFjdG9yeUlEPSZxdW90O29yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0RmFjdG9yeSZxdW90OyBwYXRoPSZxdW90Oy9HbGVtbVNlcnZpY2VzL1dlYkNvbnRlbnQvV0VCLUlORi9HbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7ZWRpdG9yU3RhdGUgc2VsZWN0aW9uSG9yaXpvbnRhbFBpeGVsPSZxdW90OzAmcXVvdDsgc2VsZWN0aW9uTGVuZ3RoPSZxdW90OzUxJnF1b3Q7IHNlbGVjdGlvbk9mZnNldD0mcXVvdDsyNDkmcXVvdDsgc2VsZWN0aW9uVG9wUGl4ZWw9JnF1b3Q7MCZxdW90Oy8+JiN4RDsmI3hBOyZsdDsvZWRpdG9yPiIvPgorICAgICAgICAgIDx0YWdzPkVkaXRvcjwvdGFncz4KKyAgICAgICAgICA8dGFncz5vcmcuZWNsaXBzZS5qZHQudWkuUHJvcGVydGllc0ZpbGVFZGl0b3I8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cmVtb3ZlT25IaWRlPC90YWdzPgorICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlBhcnQiIHhtaTppZD0iX3BGNHZnRDFBRWV5OTNiTHQ2RUIzQWciIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZTQudWkuY29tcGF0aWJpbGl0eS5lZGl0b3IiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5RWRpdG9yIiBsYWJlbD0iR2xlbW1TZXJ2aWNlcy9wb20ueG1sIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLm0yZS5lZGl0b3IvaWNvbnMvZWRpdG9yLXBvbS5naWYiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ibWVtZW50byIgdmFsdWU9IiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7Pz4mI3hEOyYjeEE7Jmx0O2VkaXRvciBpZD0mcXVvdDtvcmcuZWNsaXBzZS5tMmUuZWRpdG9yLk1hdmVuUG9tRWRpdG9yJnF1b3Q7IG5hbWU9JnF1b3Q7cG9tLnhtbCZxdW90OyBwYXJ0TmFtZT0mcXVvdDtHbGVtbVNlcnZpY2VzL3BvbS54bWwmcXVvdDsgdGl0bGU9JnF1b3Q7R2xlbW1TZXJ2aWNlcy9wb20ueG1sJnF1b3Q7IHRvb2x0aXA9JnF1b3Q7R2xlbW1TZXJ2aWNlcy9wb20ueG1sJnF1b3Q7PiYjeEQ7JiN4QTsmbHQ7aW5wdXQgZmFjdG9yeUlEPSZxdW90O29yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0RmFjdG9yeSZxdW90OyBwYXRoPSZxdW90Oy9HbGVtbVNlcnZpY2VzL3BvbS54bWwmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7L2VkaXRvcj4iLz4KKyAgICAgICAgICA8dGFncz5FZGl0b3I8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+b3JnLmVjbGlwc2UubTJlLmVkaXRvci5NYXZlblBvbUVkaXRvcjwvdGFncz4KKyAgICAgICAgICA8dGFncz5yZW1vdmVPbkhpZGU8L3RhZ3M+CisgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICA8L2NoaWxkcmVuPgorICAgIDwvc2hhcmVkRWxlbWVudHM+CisgICAgPHNoYXJlZEVsZW1lbnRzIHhzaTp0eXBlPSJiYXNpYzpQYXJ0IiB4bWk6aWQ9Il9BRzhiZ0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Qcm9qZWN0RXhwbG9yZXIiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyIgbGFiZWw9IlByb2plY3QgRXhwbG9yZXIiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLnJlc291cmNlcy9pY29ucy9mdWxsL2V2aWV3MTYvcmVzb3VyY2VfcGVyc3AucG5nIiB0b29sdGlwPSIiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IucmVzb3VyY2VzLlByb2plY3RFeHBsb3JlciIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5yZXNvdXJjZXMiLz4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im1lbWVudG8iIHZhbHVlPSImbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8+JiN4RDsmI3hBOyZsdDt2aWV3IENvbW1vbk5hdmlnYXRvci5MSU5LSU5HX0VOQUJMRUQ9JnF1b3Q7MCZxdW90OyBjdXJyZW50V29ya2luZ1NldE5hbWU9JnF1b3Q7QWdncmVnYXRlIGZvciB3aW5kb3cgMTU3MzU1ODAwODM2NyZxdW90OyBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IucmVzb3VyY2VzLndvcmtpbmdTZXRzLnNob3dUb3BMZXZlbFdvcmtpbmdTZXRzPSZxdW90OzAmcXVvdDs+JiN4RDsmI3hBOyZsdDtsYXN0UmVjZW50bHlVc2VkRmlsdGVycy8+JiN4RDsmI3hBOyZsdDsvdmlldz4iLz4KKyAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgPG1lbnVzIHhtaTppZD0iX0FHOGJnU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlciI+CisgICAgICAgIDx0YWdzPlZpZXdNZW51PC90YWdzPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOm1lbnU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc4YmxDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuUHJvamVjdEV4cGxvcmVyI1BvcHVwTWVudSI+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Qcm9qZWN0RXhwbG9yZXIjUG9wdXBNZW51PC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOGJsU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlciNQb3B1cE1lbnUiPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuUHJvamVjdEV4cGxvcmVyI1BvcHVwTWVudTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzhibGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Qcm9qZWN0RXhwbG9yZXIjUG9wdXBNZW51Ij4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlciNQb3B1cE1lbnU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc4Ymx5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuUHJvamVjdEV4cGxvcmVyI1BvcHVwTWVudSI+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Qcm9qZWN0RXhwbG9yZXIjUG9wdXBNZW51PC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOGJtQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlciNQb3B1cE1lbnUiPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuUHJvamVjdEV4cGxvcmVyI1BvcHVwTWVudTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzhibVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Qcm9qZWN0RXhwbG9yZXIjUG9wdXBNZW51Ij4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlciNQb3B1cE1lbnU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPHRvb2xiYXIgeG1pOmlkPSJfQUc4YjhpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuUHJvamVjdEV4cGxvcmVyIi8+CisgICAgPC9zaGFyZWRFbGVtZW50cz4KKyAgICA8c2hhcmVkRWxlbWVudHMgeHNpOnR5cGU9ImJhc2ljOlBhcnQiIHhtaTppZD0iX0FHOGItQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuUmVzb3VyY2VOYXZpZ2F0b3IiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyIgbGFiZWw9Ik5hdmlnYXRvciIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51aS5pZGUvaWNvbnMvZnVsbC9ldmlldzE2L2ZpbGVuYXZfbmF2LnBuZyIgdG9vbHRpcD0iIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkudmlld3MubmF2aWdhdG9yLlJlc291cmNlTmF2aWdhdG9yIi8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkuaWRlIi8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJtZW1lbnRvIiB2YWx1ZT0iJmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/PiYjeEQ7JiN4QTsmbHQ7dmlldyBMSU5LX05BVklHQVRPUl9UT19FRElUT1I9JnF1b3Q7MCZxdW90OyBzb3J0ZXI9JnF1b3Q7MSZxdW90Oz4mI3hEOyYjeEE7Jmx0O2ZpbHRlcnM+JiN4RDsmI3hBOyZsdDtmaWx0ZXIgZWxlbWVudD0mcXVvdDsqLmNsYXNzJnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDtmYWxzZSZxdW90Oy8+JiN4RDsmI3hBOyZsdDtmaWx0ZXIgZWxlbWVudD0mcXVvdDsuKiZxdW90OyBpc0VuYWJsZWQ9JnF1b3Q7ZmFsc2UmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7L2ZpbHRlcnM+JiN4RDsmI3hBOyZsdDtzZWxlY3Rpb24+JiN4RDsmI3hBOyZsdDtlbGVtZW50IHBhdGg9JnF1b3Q7L0dsZW1tU2VydmljZXMmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7L3NlbGVjdGlvbj4mI3hEOyYjeEE7Jmx0Oy92aWV3PiIvPgorICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICA8bWVudXMgeG1pOmlkPSJfQUc4Yi1TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5SZXNvdXJjZU5hdmlnYXRvciI+CisgICAgICAgIDx0YWdzPlZpZXdNZW51PC90YWdzPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOm1lbnU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPHRvb2xiYXIgeG1pOmlkPSJfQUc4Yi1peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5SZXNvdXJjZU5hdmlnYXRvciIgdmlzaWJsZT0iZmFsc2UiLz4KKyAgICA8L3NoYXJlZEVsZW1lbnRzPgorICAgIDxzaGFyZWRFbGVtZW50cyB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfQUc4Yi15eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuVHlwZUhpZXJhcmNoeSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3IiBsYWJlbD0iVHlwZSBIaWVyYXJjaHkiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuamR0LnVpL2ljb25zL2Z1bGwvZXZpZXcxNi9jbGFzc19oaS5wbmciIHRvb2x0aXA9IiIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS50eXBlaGllcmFyY2h5LlR5cGVIaWVyYXJjaHlWaWV3UGFydCIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC51aSIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ibWVtZW50byIgdmFsdWU9IiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7Pz4mI3hEOyYjeEE7Jmx0O3ZpZXcgaGlkZWZpZWxkcz0mcXVvdDtmYWxzZSZxdW90OyBoaWRlbG9jYWx0eXBlcz0mcXVvdDtmYWxzZSZxdW90OyBoaWRlbm9ucHVibGljPSZxdW90O2ZhbHNlJnF1b3Q7IGhpZGVzdGF0aWM9JnF1b3Q7ZmFsc2UmcXVvdDsgaW5wdXQ9JnF1b3Q7PXdmb3JtU2VydmljZXMvc3JjJmFtcDtsdDtkZS5rb3JhcC5zZXJ2aWNlcyZxdW90OyBsaW5rX2VkaXRvcnM9JnF1b3Q7MCZxdW90OyBtdl92ZXJ0aWNhbF9zY3JvbGw9JnF1b3Q7MCZxdW90OyBvcmllbnRhdGlvbj0mcXVvdDszJnF1b3Q7IHF1YWxpZmllZF9uYW1lcz0mcXVvdDswJnF1b3Q7IHJhdGlvPSZxdW90OzM1MCZxdW90OyBzZWxlY3Rpb249JnF1b3Q7PXdmb3JtU2VydmljZXMvQzpcL1Byb2dyYW0gRmlsZXNcL0phdmFcL2pkazEuOC4wXzIzMVwvanJlXC9saWJcL3J0LmphciZhbXA7bHQ7amF2YS5sYW5nKE9iamVjdC5jbGFzc1tPYmplY3QmcXVvdDsgc2hvd2luaGVyaXRlZD0mcXVvdDtmYWxzZSZxdW90OyBzb3J0YnlkZWZpbmluZ3R5cGU9JnF1b3Q7ZmFsc2UmcXVvdDsgdmVydGljYWxfc2Nyb2xsPSZxdW90OzAmcXVvdDsgdmlldz0mcXVvdDsyJnF1b3Q7IHdvcmtpbmdTZXROYW1lPSZxdW90O0FnZ3JlZ2F0ZSBmb3Igd2luZG93IDE1NzM1NTgwMDgzNjcmcXVvdDsvPiIvPgorICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkphdmE8L3RhZ3M+CisgICAgICA8bWVudXMgeG1pOmlkPSJfQUc4Yl9DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuVHlwZUhpZXJhcmNoeSI+CisgICAgICAgIDx0YWdzPlZpZXdNZW51PC90YWdzPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOm1lbnU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPHRvb2xiYXIgeG1pOmlkPSJfQUc4Yl9TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuVHlwZUhpZXJhcmNoeSIgdmlzaWJsZT0iZmFsc2UiLz4KKyAgICA8L3NoYXJlZEVsZW1lbnRzPgorICAgIDxzaGFyZWRFbGVtZW50cyB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfQUc4Yl9peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZXNWaWV3IiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciIGxhYmVsPSJQYWNrYWdlcyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5qZHQudWkvaWNvbnMvZnVsbC9ldmlldzE2L3BhY2thZ2VzLnBuZyIgdG9vbHRpcD0iIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLmJyb3dzaW5nLlBhY2thZ2VzVmlldyIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC51aSIvPgorICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkphdmEgQnJvd3Npbmc8L3RhZ3M+CisgICAgPC9zaGFyZWRFbGVtZW50cz4KKyAgICA8c2hhcmVkRWxlbWVudHMgeHNpOnR5cGU9ImJhc2ljOlBhcnQiIHhtaTppZD0iX0FHOGJfeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuQWxsTWFya2Vyc1ZpZXciIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyIgbGFiZWw9Ik1hcmtlcnMiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudWkuaWRlL2ljb25zL2Z1bGwvZXZpZXcxNi9wcm9ibGVtc192aWV3LnBuZyIgdG9vbHRpcD0iIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwudmlld3MubWFya2Vycy5BbGxNYXJrZXJzVmlldyIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLmlkZSIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ibWVtZW50byIgdmFsdWU9IiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7Pz4mI3hEOyYjeEE7Jmx0O3ZpZXcgUFJJTUFSWV9TT1JUX0ZJRUxEPSZxdW90O29yZy5lY2xpcHNlLnVpLmlkZS5hbGxTZXZlcml0eUZpZWxkJnF1b3Q7IGNhdGVnb3J5R3JvdXA9JnF1b3Q7b3JnLmVjbGlwc2UudWkuaWRlLnR5cGUmcXVvdDsgbWFya2VyQ29udGVudEdlbmVyYXRvcj0mcXVvdDtvcmcuZWNsaXBzZS51aS5pZGUuYWxsTWFya2Vyc0dlbmVyYXRvciZxdW90OyBwYXJ0TmFtZT0mcXVvdDtNYXJrZXJzJnF1b3Q7PiYjeEQ7JiN4QTsmbHQ7ZXhwYW5kZWQ+JiN4RDsmI3hBOyZsdDtjYXRlZ29yeSBJTWVtZW50by5pbnRlcm5hbC5pZD0mcXVvdDtKYXZhIEJ1aWxkIFBhdGggUHJvYmxlbXMmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7L2V4cGFuZGVkPiYjeEQ7JiN4QTsmbHQ7Y29sdW1uV2lkdGhzIG9yZy5lY2xpcHNlLnVpLmlkZS5hbGxTZXZlcml0eUZpZWxkPSZxdW90OzU5OSZxdW90OyBvcmcuZWNsaXBzZS51aS5pZGUubG9jYXRpb25GaWVsZD0mcXVvdDs5MCZxdW90OyBvcmcuZWNsaXBzZS51aS5pZGUubWFya2VyVHlwZT0mcXVvdDs5MCZxdW90OyBvcmcuZWNsaXBzZS51aS5pZGUucGF0aEZpZWxkPSZxdW90OzEyMCZxdW90OyBvcmcuZWNsaXBzZS51aS5pZGUucmVzb3VyY2VGaWVsZD0mcXVvdDs5MCZxdW90Oy8+JiN4RDsmI3hBOyZsdDt2aXNpYmxlIElNZW1lbnRvLmludGVybmFsLmlkPSZxdW90O29yZy5lY2xpcHNlLnVpLmlkZS5hbGxTZXZlcml0eUZpZWxkJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O3Zpc2libGUgSU1lbWVudG8uaW50ZXJuYWwuaWQ9JnF1b3Q7b3JnLmVjbGlwc2UudWkuaWRlLnJlc291cmNlRmllbGQmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7dmlzaWJsZSBJTWVtZW50by5pbnRlcm5hbC5pZD0mcXVvdDtvcmcuZWNsaXBzZS51aS5pZGUucGF0aEZpZWxkJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O3Zpc2libGUgSU1lbWVudG8uaW50ZXJuYWwuaWQ9JnF1b3Q7b3JnLmVjbGlwc2UudWkuaWRlLmxvY2F0aW9uRmllbGQmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7dmlzaWJsZSBJTWVtZW50by5pbnRlcm5hbC5pZD0mcXVvdDtvcmcuZWNsaXBzZS51aS5pZGUubWFya2VyVHlwZSZxdW90Oy8+JiN4RDsmI3hBOyZsdDsvdmlldz4iLz4KKyAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgPG1lbnVzIHhtaTppZD0iX0FHOGNBQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuQWxsTWFya2Vyc1ZpZXciPgorICAgICAgICA8dGFncz5WaWV3TWVudTwvdGFncz4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjptZW51PC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDx0b29sYmFyIHhtaTppZD0iX0FHOGNBU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuQWxsTWFya2Vyc1ZpZXciIHZpc2libGU9ImZhbHNlIi8+CisgICAgPC9zaGFyZWRFbGVtZW50cz4KKyAgICA8c2hhcmVkRWxlbWVudHMgeHNpOnR5cGU9ImJhc2ljOlBhcnQiIHhtaTppZD0iX0FHOGNBaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuUHJvcGVydHlTaGVldCIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3IiBsYWJlbD0iUHJvcGVydGllcyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51aS52aWV3cy9pY29ucy9mdWxsL2V2aWV3MTYvcHJvcF9wcy5wbmciIHRvb2x0aXA9IiIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldCIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLnZpZXdzIi8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJtZW1lbnRvIiB2YWx1ZT0iJmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/PiYjeEQ7JiN4QTsmbHQ7dmlldy8+Ii8+CisgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgIDxtZW51cyB4bWk6aWQ9Il9BRzhjQXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiPgorICAgICAgICA8dGFncz5WaWV3TWVudTwvdGFncz4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjptZW51PC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDx0b29sYmFyIHhtaTppZD0iX0FHOGNCQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuUHJvcGVydHlTaGVldCIgdmlzaWJsZT0iZmFsc2UiLz4KKyAgICA8L3NoYXJlZEVsZW1lbnRzPgorICAgIDxzaGFyZWRFbGVtZW50cyB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfQUc4Y0JTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLlNlcnZlcnNWaWV3IiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciIGxhYmVsPSJTZXJ2ZXJzIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkvaWNvbnMvY3ZpZXcxNi9zZXJ2ZXJzX3ZpZXcuZ2lmIiB0b29sdGlwPSIiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLmludGVybmFsLmNuZi5TZXJ2ZXJzVmlldzIiLz4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpIi8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJtZW1lbnRvIiB2YWx1ZT0iJmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/PiYjeEQ7JiN4QTsmbHQ7dmlldyBDb21tb25OYXZpZ2F0b3IuTElOS0lOR19FTkFCTEVEPSZxdW90OzAmcXVvdDs+JiN4RDsmI3hBOyZsdDtsYXN0UmVjZW50bHlVc2VkRmlsdGVycy8+JiN4RDsmI3hBOyZsdDsvdmlldz4iLz4KKyAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICA8dGFncz5jYXRlZ29yeVRhZzpTZXJ2ZXI8L3RhZ3M+CisgICAgICA8bWVudXMgeG1pOmlkPSJfQUc4Y0JpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLlNlcnZlcnNWaWV3Ij4KKyAgICAgICAgPHRhZ3M+Vmlld01lbnU8L3RhZ3M+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246bWVudTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8dG9vbGJhciB4bWk6aWQ9Il9BRzhjQnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuU2VydmVyc1ZpZXciIHZpc2libGU9ImZhbHNlIi8+CisgICAgPC9zaGFyZWRFbGVtZW50cz4KKyAgICA8c2hhcmVkRWxlbWVudHMgeHNpOnR5cGU9ImJhc2ljOlBhcnQiIHhtaTppZD0iX0FHOGNDQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGF0YXRvb2xzLmNvbm5lY3Rpdml0eS5EYXRhU291cmNlRXhwbG9yZXJOYXZpZ2F0b3IiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyIgbGFiZWw9IkRhdGEgU291cmNlIEV4cGxvcmVyIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmRhdGF0b29scy5jb25uZWN0aXZpdHkudWkuZHNlL2ljb25zL2Z1bGwvY3ZpZXcxNi9lbnRlcnByaXNlX2V4cGxvcmVyLmdpZiIgdG9vbHRpcD0iIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuZGF0YXRvb2xzLmNvbm5lY3Rpdml0eS51aS5kc2Uudmlld3MuRGF0YVNvdXJjZUV4cGxvcmVyVmlldyIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmRhdGF0b29scy5jb25uZWN0aXZpdHkudWkuZHNlIi8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJtZW1lbnRvIiB2YWx1ZT0iJmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/PiYjeEQ7JiN4QTsmbHQ7dmlldy8+Ii8+CisgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6RGF0YSBNYW5hZ2VtZW50PC90YWdzPgorICAgICAgPG1lbnVzIHhtaTppZD0iX0FHOGNDU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGF0YXRvb2xzLmNvbm5lY3Rpdml0eS5EYXRhU291cmNlRXhwbG9yZXJOYXZpZ2F0b3IiPgorICAgICAgICA8dGFncz5WaWV3TWVudTwvdGFncz4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjptZW51PC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDx0b29sYmFyIHhtaTppZD0iX0FHOGNDaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGF0YXRvb2xzLmNvbm5lY3Rpdml0eS5EYXRhU291cmNlRXhwbG9yZXJOYXZpZ2F0b3IiIHZpc2libGU9ImZhbHNlIi8+CisgICAgPC9zaGFyZWRFbGVtZW50cz4KKyAgICA8c2hhcmVkRWxlbWVudHMgeHNpOnR5cGU9ImJhc2ljOlBhcnQiIHhtaTppZD0iX0FHOGNDeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5zbmlwcGV0cy5pbnRlcm5hbC51aS5TbmlwcGV0c1ZpZXciIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyIgbGFiZWw9IlNuaXBwZXRzIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLndzdC5jb21tb24uc25pcHBldHMvaWNvbnMvc25pcHBldHNfdmlldy5naWYiIHRvb2x0aXA9IiIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5jb21tb24uc25pcHBldHMuaW50ZXJuYWwudWkuU25pcHBldHNWaWV3Ii8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5zbmlwcGV0cyIvPgorICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgPC9zaGFyZWRFbGVtZW50cz4KKyAgICA8c2hhcmVkRWxlbWVudHMgeHNpOnR5cGU9ImJhc2ljOlBhcnQiIHhtaTppZD0iX0FHOGNEQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuUHJvYmxlbVZpZXciIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyIgbGFiZWw9IlByb2JsZW1zIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVpLmlkZS9pY29ucy9mdWxsL2V2aWV3MTYvcHJvYmxlbXNfdmlldy5wbmciIHRvb2x0aXA9IiIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLnZpZXdzLm1hcmtlcnMuUHJvYmxlbXNWaWV3Ii8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkuaWRlIi8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJtZW1lbnRvIiB2YWx1ZT0iJmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/PiYjeEQ7JiN4QTsmbHQ7dmlldyBQUklNQVJZX1NPUlRfRklFTEQ9JnF1b3Q7b3JnLmVjbGlwc2UudWkuaWRlLnNldmVyaXR5QW5kRGVzY3JpcHRpb25GaWVsZCZxdW90OyBjYXRlZ29yeUdyb3VwPSZxdW90O29yZy5lY2xpcHNlLnVpLmlkZS5zZXZlcml0eSZxdW90OyBtYXJrZXJDb250ZW50R2VuZXJhdG9yPSZxdW90O29yZy5lY2xpcHNlLnVpLmlkZS5wcm9ibGVtc0dlbmVyYXRvciZxdW90OyBwYXJ0TmFtZT0mcXVvdDtQcm9ibGVtcyZxdW90Oz4mI3hEOyYjeEE7Jmx0O2NvbHVtbldpZHRocyBvcmcuZWNsaXBzZS51aS5pZGUubG9jYXRpb25GaWVsZD0mcXVvdDsxOTMmcXVvdDsgb3JnLmVjbGlwc2UudWkuaWRlLm1hcmtlclR5cGU9JnF1b3Q7MjUxJnF1b3Q7IG9yZy5lY2xpcHNlLnVpLmlkZS5wYXRoRmllbGQ9JnF1b3Q7MTIwJnF1b3Q7IG9yZy5lY2xpcHNlLnVpLmlkZS5yZXNvdXJjZUZpZWxkPSZxdW90OzE2OSZxdW90OyBvcmcuZWNsaXBzZS51aS5pZGUuc2V2ZXJpdHlBbmREZXNjcmlwdGlvbkZpZWxkPSZxdW90OzgyOSZxdW90Oy8+JiN4RDsmI3hBOyZsdDt2aXNpYmxlIElNZW1lbnRvLmludGVybmFsLmlkPSZxdW90O29yZy5lY2xpcHNlLnVpLmlkZS5zZXZlcml0eUFuZERlc2NyaXB0aW9uRmllbGQmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7dmlzaWJsZSBJTWVtZW50by5pbnRlcm5hbC5pZD0mcXVvdDtvcmcuZWNsaXBzZS51aS5pZGUucmVzb3VyY2VGaWVsZCZxdW90Oy8+JiN4RDsmI3hBOyZsdDt2aXNpYmxlIElNZW1lbnRvLmludGVybmFsLmlkPSZxdW90O29yZy5lY2xpcHNlLnVpLmlkZS5wYXRoRmllbGQmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7dmlzaWJsZSBJTWVtZW50by5pbnRlcm5hbC5pZD0mcXVvdDtvcmcuZWNsaXBzZS51aS5pZGUubG9jYXRpb25GaWVsZCZxdW90Oy8+JiN4RDsmI3hBOyZsdDt2aXNpYmxlIElNZW1lbnRvLmludGVybmFsLmlkPSZxdW90O29yZy5lY2xpcHNlLnVpLmlkZS5tYXJrZXJUeXBlJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0Oy92aWV3PiIvPgorICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICA8bWVudXMgeG1pOmlkPSJfQUc4Y0RTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9ibGVtVmlldyI+CisgICAgICAgIDx0YWdzPlZpZXdNZW51PC90YWdzPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOm1lbnU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc4Y0RpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9ibGVtVmlldyI+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb2JsZW1WaWV3PC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS51aS5pZGUuTWFya2Vyc1ZpZXc8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc4Y0R5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9ibGVtVmlldyI+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb2JsZW1WaWV3PC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS51aS5pZGUuTWFya2Vyc1ZpZXc8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPHRvb2xiYXIgeG1pOmlkPSJfQUc4Y0VDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9ibGVtVmlldyIgdmlzaWJsZT0iZmFsc2UiLz4KKyAgICA8L3NoYXJlZEVsZW1lbnRzPgorICAgIDxzaGFyZWRFbGVtZW50cyB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfQUc4Y0VTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5UYXNrTGlzdCIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3IiBsYWJlbD0iVGFza3MiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudWkuaWRlL2ljb25zL2Z1bGwvZXZpZXcxNi90YXNrc190c2sucG5nIiB0b29sdGlwPSIiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC52aWV3cy5tYXJrZXJzLlRhc2tzVmlldyIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLmlkZSIvPgorICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgPC9zaGFyZWRFbGVtZW50cz4KKyAgICA8c2hhcmVkRWxlbWVudHMgeHNpOnR5cGU9ImJhc2ljOlBhcnQiIHhtaTppZD0iX0FHOGNFaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuY29uc29sZS5Db25zb2xlVmlldyIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3IiBsYWJlbD0iQ29uc29sZSIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51aS5jb25zb2xlL2ljb25zL2Z1bGwvY3ZpZXcxNi9jb25zb2xlX3ZpZXcucG5nIiB0b29sdGlwPSIiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5jb25zb2xlLkNvbnNvbGVWaWV3Ii8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkuY29uc29sZSIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ibWVtZW50byIgdmFsdWU9IiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7Pz4mI3hEOyYjeEE7Jmx0O3ZpZXcvPiIvPgorICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICA8bWVudXMgeG1pOmlkPSJfQUc4Y0V5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5jb25zb2xlLkNvbnNvbGVWaWV3Ij4KKyAgICAgICAgPHRhZ3M+Vmlld01lbnU8L3RhZ3M+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246bWVudTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzhjRkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLlByb2Nlc3NDb25zb2xlVHlwZS4jQ29udGV4dE1lbnUiPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5Qcm9jZXNzQ29uc29sZVR5cGUuI0NvbnRleHRNZW51PC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOGNGU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuUHJvY2Vzc0NvbnNvbGVUeXBlLiNDb250ZXh0TWVudSI+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLmRlYnVnLnVpLlByb2Nlc3NDb25zb2xlVHlwZS4jQ29udGV4dE1lbnU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc4Y0ZpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5Qcm9jZXNzQ29uc29sZVR5cGUuI0NvbnRleHRNZW51Ij4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UuZGVidWcudWkuUHJvY2Vzc0NvbnNvbGVUeXBlLiNDb250ZXh0TWVudTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzhjRnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLlByb2Nlc3NDb25zb2xlVHlwZS4jQ29udGV4dE1lbnUiPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5Qcm9jZXNzQ29uc29sZVR5cGUuI0NvbnRleHRNZW51PC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOGNHQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuUHJvY2Vzc0NvbnNvbGVUeXBlLiNDb250ZXh0TWVudSI+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLmRlYnVnLnVpLlByb2Nlc3NDb25zb2xlVHlwZS4jQ29udGV4dE1lbnU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc4Y0dTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5Qcm9jZXNzQ29uc29sZVR5cGUuI0NvbnRleHRNZW51Ij4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UuZGVidWcudWkuUHJvY2Vzc0NvbnNvbGVUeXBlLiNDb250ZXh0TWVudTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8dG9vbGJhciB4bWk6aWQ9Il9BRzhjR2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmNvbnNvbGUuQ29uc29sZVZpZXciLz4KKyAgICA8L3NoYXJlZEVsZW1lbnRzPgorICAgIDxzaGFyZWRFbGVtZW50cyB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfQUc4Y0tTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Cb29rbWFya1ZpZXciIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyIgbGFiZWw9IkJvb2ttYXJrcyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51aS5pZGUvaWNvbnMvZnVsbC9ldmlldzE2L2JrbXJrX25hdi5wbmciIHRvb2x0aXA9IiIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLnZpZXdzLm1hcmtlcnMuQm9va21hcmtzVmlldyIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLmlkZSIvPgorICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgPC9zaGFyZWRFbGVtZW50cz4KKyAgICA8c2hhcmVkRWxlbWVudHMgeHNpOnR5cGU9ImJhc2ljOlBhcnQiIHhtaTppZD0iX0FHOGNLaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuUHJvZ3Jlc3NWaWV3IiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciIGxhYmVsPSJQcm9ncmVzcyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51aS5pZGUvaWNvbnMvZnVsbC9ldmlldzE2L3B2aWV3LnBuZyIgdG9vbHRpcD0iIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwucHJvZ3Jlc3MuUHJvZ3Jlc3NWaWV3Ii8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkuaWRlIi8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJtZW1lbnRvIiB2YWx1ZT0iJmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/PiYjeEQ7JiN4QTsmbHQ7dmlldy8+Ii8+CisgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgIDxtZW51cyB4bWk6aWQ9Il9BRzhjS3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb2dyZXNzVmlldyI+CisgICAgICAgIDx0YWdzPlZpZXdNZW51PC90YWdzPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOm1lbnU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPHRvb2xiYXIgeG1pOmlkPSJfQUc4Y0xDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9ncmVzc1ZpZXciIHZpc2libGU9ImZhbHNlIi8+CisgICAgPC9zaGFyZWRFbGVtZW50cz4KKyAgICA8c2hhcmVkRWxlbWVudHMgeHNpOnR5cGU9ImJhc2ljOlBhcnQiIHhtaTppZD0iX0FHOGNMU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uuc2VhcmNoLnVpLnZpZXdzLlNlYXJjaFZpZXciIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyIgbGFiZWw9IlNlYXJjaCIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zZWFyY2gvaWNvbnMvZnVsbC9ldmlldzE2L3NlYXJjaHJlcy5wbmciIHRvb2x0aXA9IiIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLnNlYXJjaDIuaW50ZXJuYWwudWkuU2VhcmNoVmlldyIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnNlYXJjaCIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ibWVtZW50byIgdmFsdWU9IiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7Pz4mI3hEOyYjeEE7Jmx0O3ZpZXcgaXNQaW5uZWQ9JnF1b3Q7ZmFsc2UmcXVvdDs+JiN4RDsmI3hBOyZsdDt2aWV3IElNZW1lbnRvLmludGVybmFsLmlkPSZxdW90OyZxdW90OyBvcmcuZWNsaXBzZS5zZWFyY2gubGFzdEFjdGl2YXRpb249JnF1b3Q7MCZxdW90Oy8+JiN4RDsmI3hBOyZsdDt2aWV3IElNZW1lbnRvLmludGVybmFsLmlkPSZxdW90O29yZy5lY2xpcHNlLnNlYXJjaC50ZXh0LkZpbGVTZWFyY2hSZXN1bHRQYWdlJnF1b3Q7IG9yZy5lY2xpcHNlLnNlYXJjaC5sYXN0QWN0aXZhdGlvbj0mcXVvdDsxJnF1b3Q7IG9yZy5lY2xpcHNlLnNlYXJjaC5yZXN1bHRwYWdlLmxheW91dD0mcXVvdDsyJnF1b3Q7IG9yZy5lY2xpcHNlLnNlYXJjaC5yZXN1bHRwYWdlLmxpbWl0PSZxdW90OzEwMDAmcXVvdDsgb3JnLmVjbGlwc2Uuc2VhcmNoLnJlc3VsdHBhZ2Uuc29ydGluZz0mcXVvdDsyJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0Oy92aWV3PiIvPgorICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICA8bWVudXMgeG1pOmlkPSJfQUc4Y0xpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5zZWFyY2gudWkudmlld3MuU2VhcmNoVmlldyI+CisgICAgICAgIDx0YWdzPlZpZXdNZW51PC90YWdzPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOm1lbnU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc4Y1BpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5zZWFyY2gudWkudmlld3MuU2VhcmNoVmlldyI+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLnNlYXJjaC51aS52aWV3cy5TZWFyY2hWaWV3PC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOGNQeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uuc2VhcmNoLnVpLnZpZXdzLlNlYXJjaFZpZXciPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5zZWFyY2gudWkudmlld3MuU2VhcmNoVmlldzwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzhjUUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnNlYXJjaC51aS52aWV3cy5TZWFyY2hWaWV3Ij4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2Uuc2VhcmNoLnVpLnZpZXdzLlNlYXJjaFZpZXc8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPHRvb2xiYXIgeG1pOmlkPSJfQUc4Y1FTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5zZWFyY2gudWkudmlld3MuU2VhcmNoVmlldyIgdmlzaWJsZT0iZmFsc2UiLz4KKyAgICA8L3NoYXJlZEVsZW1lbnRzPgorICAgIDxzaGFyZWRFbGVtZW50cyB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfQUc4Y2FDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Db250ZW50T3V0bGluZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3IiBsYWJlbD0iT3V0bGluZSIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51aS52aWV3cy9pY29ucy9mdWxsL2V2aWV3MTYvb3V0bGluZV9jby5wbmciIHRvb2x0aXA9IiIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lIi8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkudmlld3MiLz4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im1lbWVudG8iIHZhbHVlPSImbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8+JiN4RDsmI3hBOyZsdDt2aWV3Lz4iLz4KKyAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgPG1lbnVzIHhtaTppZD0iX0FHOUNJQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuQ29udGVudE91dGxpbmUiPgorICAgICAgICA8dGFncz5WaWV3TWVudTwvdGFncz4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjptZW51PC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOUNLeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLm91dGxpbmUiPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5qZHQudWkub3V0bGluZTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzlDTEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5vdXRsaW5lIj4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UuamR0LnVpLm91dGxpbmU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc5Q0xTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkub3V0bGluZSI+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLmpkdC51aS5vdXRsaW5lPC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOUNMaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLm91dGxpbmUiPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5qZHQudWkub3V0bGluZTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzlDTHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5vdXRsaW5lIj4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UuamR0LnVpLm91dGxpbmU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc5Q01DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkub3V0bGluZSI+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLmpkdC51aS5vdXRsaW5lPC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOUNNU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLm91dGxpbmUiPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5qZHQudWkub3V0bGluZTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzlDTWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5vdXRsaW5lIj4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UuamR0LnVpLm91dGxpbmU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc5Q015eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkub3V0bGluZSI+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLmpkdC51aS5vdXRsaW5lPC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOUNOQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLm91dGxpbmUiPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5qZHQudWkub3V0bGluZTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzlDTlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5vdXRsaW5lIj4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UuamR0LnVpLm91dGxpbmU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc5Q05peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5tMmUuY29yZS5wb21GaWxlLnNvdXJjZS5PdXRsaW5lQ29udGV4dCI+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLm0yZS5jb3JlLnBvbUZpbGUuc291cmNlLk91dGxpbmVDb250ZXh0PC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5tMmUuZWRpdG9yLk1hdmVuUG9tRWRpdG9yLnNvdXJjZS5PdXRsaW5lQ29udGV4dDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvci5PdXRsaW5lQ29udGV4dDwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzlDTnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5vdXRsaW5lIj4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UuamR0LnVpLm91dGxpbmU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc5Q09DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkub3V0bGluZSI+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLmpkdC51aS5vdXRsaW5lPC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOUNPU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubTJlLmNvcmUucG9tRmlsZS5zb3VyY2UuT3V0bGluZUNvbnRleHQiPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5tMmUuY29yZS5wb21GaWxlLnNvdXJjZS5PdXRsaW5lQ29udGV4dDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UubTJlLmVkaXRvci5NYXZlblBvbUVkaXRvci5zb3VyY2UuT3V0bGluZUNvbnRleHQ8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3IuT3V0bGluZUNvbnRleHQ8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc5Q09peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkub3V0bGluZSI+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLmpkdC51aS5vdXRsaW5lPC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOUNPeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5odG1sc291cmNlLnNvdXJjZS5PdXRsaW5lQ29udGV4dCI+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaHRtbHNvdXJjZS5zb3VyY2UuT3V0bGluZUNvbnRleHQ8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaHRtbHNvdXJjZS5zb3VyY2Uuc291cmNlLk91dGxpbmVDb250ZXh0PC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yLk91dGxpbmVDb250ZXh0PC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOUNQQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLm91dGxpbmUiPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5qZHQudWkub3V0bGluZTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzlDUFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5vdXRsaW5lIj4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UuamR0LnVpLm91dGxpbmU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc5Q1BpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkub3V0bGluZSI+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLmpkdC51aS5vdXRsaW5lPC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOUNQeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5odG1sc291cmNlLnNvdXJjZS5PdXRsaW5lQ29udGV4dCI+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaHRtbHNvdXJjZS5zb3VyY2UuT3V0bGluZUNvbnRleHQ8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaHRtbHNvdXJjZS5zb3VyY2Uuc291cmNlLk91dGxpbmVDb250ZXh0PC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yLk91dGxpbmVDb250ZXh0PC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOUNRQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLm91dGxpbmUiPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5qZHQudWkub3V0bGluZTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzlDUVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5vdXRsaW5lIj4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UuamR0LnVpLm91dGxpbmU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc5Q1FpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkub3V0bGluZSI+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLmpkdC51aS5vdXRsaW5lPC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOUNReXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLm91dGxpbmUiPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5qZHQudWkub3V0bGluZTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzlDUkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5vdXRsaW5lIj4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UuamR0LnVpLm91dGxpbmU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc5Q1JTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkub3V0bGluZSI+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLmpkdC51aS5vdXRsaW5lPC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOUNSaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLm91dGxpbmUiPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5qZHQudWkub3V0bGluZTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzlDUnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm0yZS5jb3JlLnBvbUZpbGUuc291cmNlLk91dGxpbmVDb250ZXh0Ij4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UubTJlLmNvcmUucG9tRmlsZS5zb3VyY2UuT3V0bGluZUNvbnRleHQ8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLm0yZS5lZGl0b3IuTWF2ZW5Qb21FZGl0b3Iuc291cmNlLk91dGxpbmVDb250ZXh0PC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yLk91dGxpbmVDb250ZXh0PC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDx0b29sYmFyIHhtaTppZD0iX0FHOUNTQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuQ29udGVudE91dGxpbmUiLz4KKyAgICA8L3NoYXJlZEVsZW1lbnRzPgorICAgIDxzaGFyZWRFbGVtZW50cyB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfQUc5Q1hpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS52aWV3cy50YXNrcyIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3IiBsYWJlbD0iVGFzayBMaXN0IiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpL2ljb25zL2V2aWV3MTYvdGFzay1saXN0LmdpZiIgdG9vbHRpcD0iIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UubXlseW4uaW50ZXJuYWwudGFza3MudWkudmlld3MuVGFza0xpc3RWaWV3Ii8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkiLz4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im1lbWVudG8iIHZhbHVlPSImbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8+JiN4RDsmI3hBOyZsdDt2aWV3IGxpbmtXaXRoRWRpdG9yPSZxdW90O3RydWUmcXVvdDsgcHJlc2VudGF0aW9uPSZxdW90O29yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmNhdGVnb3JpemVkJnF1b3Q7PiYjeEQ7JiN4QTsmbHQ7c29ydGVyIGdyb3VwQnk9JnF1b3Q7Q0FURUdPUllfUVVFUlkmcXVvdDs+JiN4RDsmI3hBOyZsdDtzb3J0ZXI+JiN4RDsmI3hBOyZsdDtzb3J0b3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuc2NoZWR1bGVkMCBzb3J0RGlyZWN0aW9uPSZxdW90OzEmcXVvdDsgc29ydEtleT0mcXVvdDtEVUVfREFURSZxdW90Oy8+JiN4RDsmI3hBOyZsdDtzb3J0b3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuc2NoZWR1bGVkMSBzb3J0RGlyZWN0aW9uPSZxdW90OzEmcXVvdDsgc29ydEtleT0mcXVvdDtTQ0hFRFVMRURfREFURSZxdW90Oy8+JiN4RDsmI3hBOyZsdDtzb3J0b3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuc2NoZWR1bGVkMiBzb3J0RGlyZWN0aW9uPSZxdW90OzEmcXVvdDsgc29ydEtleT0mcXVvdDtQUklPUklUWSZxdW90Oy8+JiN4RDsmI3hBOyZsdDtzb3J0b3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuc2NoZWR1bGVkMyBzb3J0RGlyZWN0aW9uPSZxdW90OzEmcXVvdDsgc29ydEtleT0mcXVvdDtSQU5LJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O3NvcnRvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5zY2hlZHVsZWQ0IHNvcnREaXJlY3Rpb249JnF1b3Q7MSZxdW90OyBzb3J0S2V5PSZxdW90O0RBVEVfQ1JFQVRFRCZxdW90Oy8+JiN4RDsmI3hBOyZsdDtzb3J0b3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuc2NoZWR1bGVkNSBzb3J0RGlyZWN0aW9uPSZxdW90OzEmcXVvdDsgc29ydEtleT0mcXVvdDtOT05FJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O3NvcnRvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5zY2hlZHVsZWQ2IHNvcnREaXJlY3Rpb249JnF1b3Q7MSZxdW90OyBzb3J0S2V5PSZxdW90O05PTkUmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7c29ydG9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnNjaGVkdWxlZDcgc29ydERpcmVjdGlvbj0mcXVvdDsxJnF1b3Q7IHNvcnRLZXk9JnF1b3Q7Tk9ORSZxdW90Oy8+JiN4RDsmI3hBOyZsdDtzb3J0b3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuc2NoZWR1bGVkOCBzb3J0RGlyZWN0aW9uPSZxdW90OzEmcXVvdDsgc29ydEtleT0mcXVvdDtOT05FJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O3NvcnRvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5jYXRlZ29yaXplZDAgc29ydERpcmVjdGlvbj0mcXVvdDsxJnF1b3Q7IHNvcnRLZXk9JnF1b3Q7UFJJT1JJVFkmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7c29ydG9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmNhdGVnb3JpemVkMSBzb3J0RGlyZWN0aW9uPSZxdW90OzEmcXVvdDsgc29ydEtleT0mcXVvdDtSQU5LJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O3NvcnRvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5jYXRlZ29yaXplZDIgc29ydERpcmVjdGlvbj0mcXVvdDsxJnF1b3Q7IHNvcnRLZXk9JnF1b3Q7REFURV9DUkVBVEVEJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O3NvcnRvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5jYXRlZ29yaXplZDMgc29ydERpcmVjdGlvbj0mcXVvdDsxJnF1b3Q7IHNvcnRLZXk9JnF1b3Q7Tk9ORSZxdW90Oy8+JiN4RDsmI3hBOyZsdDtzb3J0b3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuY2F0ZWdvcml6ZWQ0IHNvcnREaXJlY3Rpb249JnF1b3Q7MSZxdW90OyBzb3J0S2V5PSZxdW90O05PTkUmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7c29ydG9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmNhdGVnb3JpemVkNSBzb3J0RGlyZWN0aW9uPSZxdW90OzEmcXVvdDsgc29ydEtleT0mcXVvdDtOT05FJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O3NvcnRvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5jYXRlZ29yaXplZDYgc29ydERpcmVjdGlvbj0mcXVvdDsxJnF1b3Q7IHNvcnRLZXk9JnF1b3Q7Tk9ORSZxdW90Oy8+JiN4RDsmI3hBOyZsdDtzb3J0b3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuY2F0ZWdvcml6ZWQ3IHNvcnREaXJlY3Rpb249JnF1b3Q7MSZxdW90OyBzb3J0S2V5PSZxdW90O05PTkUmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7c29ydG9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmNhdGVnb3JpemVkOCBzb3J0RGlyZWN0aW9uPSZxdW90OzEmcXVvdDsgc29ydEtleT0mcXVvdDtOT05FJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0Oy9zb3J0ZXI+JiN4RDsmI3hBOyZsdDsvc29ydGVyPiYjeEQ7JiN4QTsmbHQ7ZmlsdGVyZWRUcmVlRmluZEhpc3RvcnkvPiYjeEQ7JiN4QTsmbHQ7L3ZpZXc+Ii8+CisgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6TXlseW48L3RhZ3M+CisgICAgICA8bWVudXMgeG1pOmlkPSJfQUc5Q1h5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS52aWV3cy50YXNrcyI+CisgICAgICAgIDx0YWdzPlZpZXdNZW51PC90YWdzPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOm1lbnU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc5Q2RTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5tZW51cy5hY3RpdmVUYXNrIj4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UubXlseW4udGFza3MudWkubWVudXMuYWN0aXZlVGFzazwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzlDZGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnZpZXdzLnRhc2tzIj4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UubXlseW4udGFza3MudWkudmlld3MudGFza3M8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc5Q2R5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5tZW51cy5hY3RpdmVUYXNrIj4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UubXlseW4udGFza3MudWkubWVudXMuYWN0aXZlVGFzazwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzlDZUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnZpZXdzLnRhc2tzIj4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UubXlseW4udGFza3MudWkudmlld3MudGFza3M8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc5Q2VTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5tZW51cy5hY3RpdmVUYXNrIj4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UubXlseW4udGFza3MudWkubWVudXMuYWN0aXZlVGFzazwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzlDZWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnZpZXdzLnRhc2tzIj4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UubXlseW4udGFza3MudWkudmlld3MudGFza3M8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc5Q2V5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5tZW51cy5hY3RpdmVUYXNrIj4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UubXlseW4udGFza3MudWkubWVudXMuYWN0aXZlVGFzazwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzlDZkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnZpZXdzLnRhc2tzIj4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UubXlseW4udGFza3MudWkudmlld3MudGFza3M8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc5Q2ZTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5tZW51cy5hY3RpdmVUYXNrIj4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UubXlseW4udGFza3MudWkubWVudXMuYWN0aXZlVGFzazwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzlDZml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnZpZXdzLnRhc2tzIj4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UubXlseW4udGFza3MudWkudmlld3MudGFza3M8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPHRvb2xiYXIgeG1pOmlkPSJfQUc5Q2Z5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS52aWV3cy50YXNrcyIvPgorICAgIDwvc2hhcmVkRWxlbWVudHM+CisgICAgPHNoYXJlZEVsZW1lbnRzIHhzaTp0eXBlPSJiYXNpYzpQYXJ0IiB4bWk6aWQ9Il9BRzlDaml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlRXhwbG9yZXIiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyIgbGFiZWw9IlBhY2thZ2UgRXhwbG9yZXIiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuamR0LnVpL2ljb25zL2Z1bGwvZXZpZXcxNi9wYWNrYWdlLnBuZyIgdG9vbHRpcD0iIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC51aSIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLnBhY2thZ2V2aWV3LlBhY2thZ2VFeHBsb3JlclBhcnQiLz4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im1lbWVudG8iIHZhbHVlPSImbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8+JiN4RDsmI3hBOyZsdDt2aWV3IGdyb3VwX2xpYnJhcmllcz0mcXVvdDsxJnF1b3Q7IGxheW91dD0mcXVvdDsyJnF1b3Q7IGxpbmtXaXRoRWRpdG9yPSZxdW90OzAmcXVvdDsgcm9vdE1vZGU9JnF1b3Q7MSZxdW90OyB3b3JraW5nU2V0TmFtZT0mcXVvdDtBZ2dyZWdhdGUgZm9yIHdpbmRvdyAxNTczNTU4MDA4MzY3JnF1b3Q7PiYjeEQ7JiN4QTsmbHQ7Y3VzdG9tRmlsdGVycyB1c2VyRGVmaW5lZFBhdHRlcm5zRW5hYmxlZD0mcXVvdDtmYWxzZSZxdW90Oz4mI3hEOyYjeEE7Jmx0O3htbERlZmluZWRGaWx0ZXJzPiYjeEQ7JiN4QTsmbHQ7Y2hpbGQgZmlsdGVySWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VFeHBsb3Jlci5TdGF0aWNzRmlsdGVyJnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDtmYWxzZSZxdW90Oy8+JiN4RDsmI3hBOyZsdDtjaGlsZCBmaWx0ZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS5idWlsZHNoaXAudWkucGFja2FnZWV4cGxvcmVyLmZpbHRlci5ncmFkbGUuYnVpbGRmb2xkZXImcXVvdDsgaXNFbmFibGVkPSZxdW90O3RydWUmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7Y2hpbGQgZmlsdGVySWQ9JnF1b3Q7b3JnLmVjbGlwc2UubXlseW4uamF2YS51aS5NZW1iZXJzRmlsdGVyJnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDtmYWxzZSZxdW90Oy8+JiN4RDsmI3hBOyZsdDtjaGlsZCBmaWx0ZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZUV4cGxvcmVyLk5vbkphdmFQcm9qZWN0c0ZpbHRlciZxdW90OyBpc0VuYWJsZWQ9JnF1b3Q7ZmFsc2UmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7Y2hpbGQgZmlsdGVySWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VFeHBsb3Jlcl9wYXR0ZXJuRmlsdGVySWRfLiomcXVvdDsgaXNFbmFibGVkPSZxdW90O3RydWUmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7Y2hpbGQgZmlsdGVySWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VFeHBsb3Jlci5Ob25TaGFyZWRQcm9qZWN0c0ZpbHRlciZxdW90OyBpc0VuYWJsZWQ9JnF1b3Q7ZmFsc2UmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7Y2hpbGQgZmlsdGVySWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VFeHBsb3Jlci5TeW50aGV0aWNNZW1iZXJzRmlsdGVyJnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDt0cnVlJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O2NoaWxkIGZpbHRlcklkPSZxdW90O29yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlRXhwbG9yZXIuQ29udGFpbmVkTGlicmFyeUZpbHRlciZxdW90OyBpc0VuYWJsZWQ9JnF1b3Q7ZmFsc2UmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7Y2hpbGQgZmlsdGVySWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLlBhY2thZ2VFeHBsb3Jlci5IaWRlSW5uZXJDbGFzc0ZpbGVzRmlsdGVyJnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDt0cnVlJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O2NoaWxkIGZpbHRlcklkPSZxdW90O29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5QYWNrYWdlRXhwbG9yZXIuRW1wdHlJbm5lclBhY2thZ2VGaWx0ZXImcXVvdDsgaXNFbmFibGVkPSZxdW90O3RydWUmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7Y2hpbGQgZmlsdGVySWQ9JnF1b3Q7b3JnLmVjbGlwc2UubTJlLk1hdmVuTW9kdWxlRmlsdGVyJnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDtmYWxzZSZxdW90Oy8+JiN4RDsmI3hBOyZsdDtjaGlsZCBmaWx0ZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS5idWlsZHNoaXAudWkucGFja2FnZWV4cGxvcmVyLmZpbHRlci5ncmFkbGUuc3ViUHJvamVjdCZxdW90OyBpc0VuYWJsZWQ9JnF1b3Q7dHJ1ZSZxdW90Oy8+JiN4RDsmI3hBOyZsdDtjaGlsZCBmaWx0ZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZUV4cGxvcmVyLkNsb3NlZFByb2plY3RzRmlsdGVyJnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDtmYWxzZSZxdW90Oy8+JiN4RDsmI3hBOyZsdDtjaGlsZCBmaWx0ZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZUV4cGxvcmVyLkRlcHJlY2F0ZWRNZW1iZXJzRmlsdGVyJnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDtmYWxzZSZxdW90Oy8+JiN4RDsmI3hBOyZsdDtjaGlsZCBmaWx0ZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZUV4cGxvcmVyLkVtcHR5TGlicmFyeUNvbnRhaW5lckZpbHRlciZxdW90OyBpc0VuYWJsZWQ9JnF1b3Q7dHJ1ZSZxdW90Oy8+JiN4RDsmI3hBOyZsdDtjaGlsZCBmaWx0ZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZUV4cGxvcmVyLlBhY2thZ2VEZWNsYXJhdGlvbkZpbHRlciZxdW90OyBpc0VuYWJsZWQ9JnF1b3Q7dHJ1ZSZxdW90Oy8+JiN4RDsmI3hBOyZsdDtjaGlsZCBmaWx0ZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZUV4cGxvcmVyLkltcG9ydERlY2xhcmF0aW9uRmlsdGVyJnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDt0cnVlJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O2NoaWxkIGZpbHRlcklkPSZxdW90O29yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlRXhwbG9yZXIuTm9uSmF2YUVsZW1lbnRGaWx0ZXImcXVvdDsgaXNFbmFibGVkPSZxdW90O2ZhbHNlJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O2NoaWxkIGZpbHRlcklkPSZxdW90O29yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlRXhwbG9yZXIuTGlicmFyeUZpbHRlciZxdW90OyBpc0VuYWJsZWQ9JnF1b3Q7ZmFsc2UmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7Y2hpbGQgZmlsdGVySWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VFeHBsb3Jlci5DdUFuZENsYXNzRmlsZUZpbHRlciZxdW90OyBpc0VuYWJsZWQ9JnF1b3Q7ZmFsc2UmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7Y2hpbGQgZmlsdGVySWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLlBhY2thZ2VFeHBsb3Jlci5FbXB0eVBhY2thZ2VGaWx0ZXImcXVvdDsgaXNFbmFibGVkPSZxdW90O2ZhbHNlJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O2NoaWxkIGZpbHRlcklkPSZxdW90O29yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlRXhwbG9yZXIuTm9uUHVibGljRmlsdGVyJnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDtmYWxzZSZxdW90Oy8+JiN4RDsmI3hBOyZsdDtjaGlsZCBmaWx0ZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZUV4cGxvcmVyLkxvY2FsVHlwZXNGaWx0ZXImcXVvdDsgaXNFbmFibGVkPSZxdW90O2ZhbHNlJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O2NoaWxkIGZpbHRlcklkPSZxdW90O29yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlRXhwbG9yZXIuRmllbGRzRmlsdGVyJnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDtmYWxzZSZxdW90Oy8+JiN4RDsmI3hBOyZsdDsveG1sRGVmaW5lZEZpbHRlcnM+JiN4RDsmI3hBOyZsdDsvY3VzdG9tRmlsdGVycz4mI3hEOyYjeEE7Jmx0Oy92aWV3PiIvPgorICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkphdmE8L3RhZ3M+CisgICAgICA8bWVudXMgeG1pOmlkPSJfQUc5Q2p5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZUV4cGxvcmVyIj4KKyAgICAgICAgPHRhZ3M+Vmlld01lbnU8L3RhZ3M+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246bWVudTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzlDa0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlRXhwbG9yZXIiPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZUV4cGxvcmVyPC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOUNrU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VFeHBsb3JlciI+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlRXhwbG9yZXI8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPHRvb2xiYXIgeG1pOmlkPSJfQUc5Q2tpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZUV4cGxvcmVyIiB2aXNpYmxlPSJmYWxzZSIvPgorICAgIDwvc2hhcmVkRWxlbWVudHM+CisgICAgPHNoYXJlZEVsZW1lbnRzIHhzaTp0eXBlPSJiYXNpYzpQYXJ0IiB4bWk6aWQ9Il9BRzlDa3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5KYXZhZG9jVmlldyIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3IiBsYWJlbD0iSmF2YWRvYyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5qZHQudWkvaWNvbnMvZnVsbC9ldmlldzE2L2phdmFkb2MucG5nIiB0b29sdGlwPSIiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LnVpIi8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuaW5mb3ZpZXdzLkphdmFkb2NWaWV3Ii8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJtZW1lbnRvIiB2YWx1ZT0iJmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/PiYjeEQ7JiN4QTsmbHQ7dmlldy8+Ii8+CisgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6SmF2YTwvdGFncz4KKyAgICAgIDxtZW51cyB4bWk6aWQ9Il9BRzlDbEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5KYXZhZG9jVmlldyI+CisgICAgICAgIDx0YWdzPlZpZXdNZW51PC90YWdzPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOm1lbnU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPHRvb2xiYXIgeG1pOmlkPSJfQUc5Q2xTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuSmF2YWRvY1ZpZXciIHZpc2libGU9ImZhbHNlIi8+CisgICAgPC9zaGFyZWRFbGVtZW50cz4KKyAgICA8c2hhcmVkRWxlbWVudHMgeHNpOnR5cGU9ImJhc2ljOlBhcnQiIHhtaTppZD0iX0FHOUNsaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLlNvdXJjZVZpZXciIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyIgbGFiZWw9IkRlY2xhcmF0aW9uIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmpkdC51aS9pY29ucy9mdWxsL2V2aWV3MTYvc291cmNlLnBuZyIgdG9vbHRpcD0iIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC51aSIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLmluZm92aWV3cy5Tb3VyY2VWaWV3Ii8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJtZW1lbnRvIiB2YWx1ZT0iJmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/PiYjeEQ7JiN4QTsmbHQ7dmlldy8+Ii8+CisgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6SmF2YTwvdGFncz4KKyAgICAgIDxtZW51cyB4bWk6aWQ9Il9BRzlDbHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5Tb3VyY2VWaWV3Ij4KKyAgICAgICAgPHRhZ3M+Vmlld01lbnU8L3RhZ3M+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246bWVudTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8dG9vbGJhciB4bWk6aWQ9Il9BRzlDbUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5Tb3VyY2VWaWV3IiB2aXNpYmxlPSJmYWxzZSIvPgorICAgIDwvc2hhcmVkRWxlbWVudHM+CisgICAgPHNoYXJlZEVsZW1lbnRzIHhzaTp0eXBlPSJiYXNpYzpQYXJ0IiB4bWk6aWQ9Il9BRzlDbVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuVGVtcGxhdGVzVmlldyIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3IiBsYWJlbD0iVGVtcGxhdGVzIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmpkdC51aS9pY29ucy9mdWxsL2V2aWV3MTYvdGVtcGxhdGVzLnBuZyIgdG9vbHRpcD0iIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC51aSIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci50ZW1wbGF0ZXMuVGVtcGxhdGVzVmlldyIvPgorICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgPC9zaGFyZWRFbGVtZW50cz4KKyAgICA8c2hhcmVkRWxlbWVudHMgeHNpOnR5cGU9ImJhc2ljOlBhcnQiIHhtaTppZD0iX0FHOUNtaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5SZXBvc2l0b3JpZXNWaWV3IiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciIGxhYmVsPSJHaXQgUmVwb3NpdG9yaWVzIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVnaXQudWkvaWNvbnMvZXZpZXcxNi9yZXBvX3JlcC5wbmciIHRvb2x0aXA9IiIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5lZ2l0LnVpIi8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmludGVybmFsLnJlcG9zaXRvcnkuUmVwb3NpdG9yaWVzVmlldyIvPgorICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdpdDwvdGFncz4KKyAgICAgIDxtZW51cyB4bWk6aWQ9Il9BRzlDbXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuUmVwb3NpdG9yaWVzVmlldyI+CisgICAgICAgIDx0YWdzPlZpZXdNZW51PC90YWdzPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOm1lbnU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPHRvb2xiYXIgeG1pOmlkPSJfQUc5Q25DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLlJlcG9zaXRvcmllc1ZpZXciIHZpc2libGU9ImZhbHNlIi8+CisgICAgPC9zaGFyZWRFbGVtZW50cz4KKyAgICA8c2hhcmVkRWxlbWVudHMgeHNpOnR5cGU9ImJhc2ljOlBhcnQiIHhtaTppZD0iX0FHOUNuU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0Lmp1bml0LlJlc3VsdFZpZXciIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyIgbGFiZWw9IkpVbml0IiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmpkdC5qdW5pdC9pY29ucy9mdWxsL2V2aWV3MTYvanVuaXQucG5nIiB0b29sdGlwPSIiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0Lmp1bml0Ii8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuanVuaXQudWkuVGVzdFJ1bm5lclZpZXdQYXJ0Ii8+CisgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6SmF2YTwvdGFncz4KKyAgICA8L3NoYXJlZEVsZW1lbnRzPgorICAgIDxzaGFyZWRFbGVtZW50cyB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfQUc5Q25peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5hbnQudWkudmlld3MuQW50VmlldyIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3IiBsYWJlbD0iQW50IiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmFudC51aS9pY29ucy9mdWxsL2V2aWV3MTYvYW50X3ZpZXcucG5nIiB0b29sdGlwPSIiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuYW50LnVpIi8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5hbnQuaW50ZXJuYWwudWkudmlld3MuQW50VmlldyIvPgorICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkFudDwvdGFncz4KKyAgICA8L3NoYXJlZEVsZW1lbnRzPgorICAgIDxzaGFyZWRFbGVtZW50cyB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfQUc5Q255eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5EZWJ1Z1ZpZXciIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyIgbGFiZWw9IkRlYnVnIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmRlYnVnLnVpL2ljb25zL2Z1bGwvZXZpZXcxNi9kZWJ1Z192aWV3LnBuZyIgdG9vbHRpcD0iIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmRlYnVnLnVpIi8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5kZWJ1Zy5pbnRlcm5hbC51aS52aWV3cy5sYXVuY2guTGF1bmNoVmlldyIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ibWVtZW50byIgdmFsdWU9IiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7Pz4mI3hEOyYjeEE7Jmx0O3ZpZXcvPiIvPgorICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkRlYnVnPC90YWdzPgorICAgICAgPG1lbnVzIHhtaTppZD0iX0FHOUNvQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuRGVidWdWaWV3Ij4KKyAgICAgICAgPHRhZ3M+Vmlld01lbnU8L3RhZ3M+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246bWVudTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8dG9vbGJhciB4bWk6aWQ9Il9BRzlDb1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLkRlYnVnVmlldyIgdmlzaWJsZT0iZmFsc2UiLz4KKyAgICA8L3NoYXJlZEVsZW1lbnRzPgorICAgIDxzaGFyZWRFbGVtZW50cyB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfQUc5Q29peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5SZWdpc3RlclZpZXciIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyIgbGFiZWw9IlJlZ2lzdGVycyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5kZWJ1Zy51aS9pY29ucy9mdWxsL2V2aWV3MTYvcmVnaXN0ZXJfdmlldy5wbmciIHRvb2x0aXA9IiIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aSIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuZGVidWcuaW50ZXJuYWwudWkudmlld3MucmVnaXN0ZXJzLlJlZ2lzdGVyc1ZpZXciLz4KKyAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICA8dGFncz5jYXRlZ29yeVRhZzpEZWJ1ZzwvdGFncz4KKyAgICA8L3NoYXJlZEVsZW1lbnRzPgorICAgIDxzaGFyZWRFbGVtZW50cyB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfQUc5Q295eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5WYXJpYWJsZVZpZXciIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyIgbGFiZWw9IlZhcmlhYmxlcyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5kZWJ1Zy51aS9pY29ucy9mdWxsL2V2aWV3MTYvdmFyaWFibGVfdmlldy5wbmciIHRvb2x0aXA9IiIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aSIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuZGVidWcuaW50ZXJuYWwudWkudmlld3MudmFyaWFibGVzLlZhcmlhYmxlc1ZpZXciLz4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im1lbWVudG8iIHZhbHVlPSImbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8+JiN4RDsmI3hBOyZsdDt2aWV3Lz4iLz4KKyAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICA8dGFncz5jYXRlZ29yeVRhZzpEZWJ1ZzwvdGFncz4KKyAgICAgIDxtZW51cyB4bWk6aWQ9Il9BRzlDcEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLlZhcmlhYmxlVmlldyI+CisgICAgICAgIDx0YWdzPlZpZXdNZW51PC90YWdzPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOm1lbnU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPHRvb2xiYXIgeG1pOmlkPSJfQUc5Q3BTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5WYXJpYWJsZVZpZXciLz4KKyAgICA8L3NoYXJlZEVsZW1lbnRzPgorICAgIDxzaGFyZWRFbGVtZW50cyB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfQUc5Q3BpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5CcmVha3BvaW50VmlldyIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3IiBsYWJlbD0iQnJlYWtwb2ludHMiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZGVidWcudWkvaWNvbnMvZnVsbC9ldmlldzE2L2JyZWFrcG9pbnRfdmlldy5wbmciIHRvb2x0aXA9IiIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aSIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuZGVidWcuaW50ZXJuYWwudWkudmlld3MuYnJlYWtwb2ludHMuQnJlYWtwb2ludHNWaWV3Ii8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJtZW1lbnRvIiB2YWx1ZT0iJmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/PiYjeEQ7JiN4QTsmbHQ7dmlldy8+Ii8+CisgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6RGVidWc8L3RhZ3M+CisgICAgICA8bWVudXMgeG1pOmlkPSJfQUc5Q3B5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5CcmVha3BvaW50VmlldyI+CisgICAgICAgIDx0YWdzPlZpZXdNZW51PC90YWdzPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOm1lbnU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPHRvb2xiYXIgeG1pOmlkPSJfQUc5Q3FDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5CcmVha3BvaW50VmlldyIgdmlzaWJsZT0iZmFsc2UiLz4KKyAgICA8L3NoYXJlZEVsZW1lbnRzPgorICAgIDxzaGFyZWRFbGVtZW50cyB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfQUc5Q3FTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5FeHByZXNzaW9uVmlldyIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3IiBsYWJlbD0iRXhwcmVzc2lvbnMiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZGVidWcudWkvaWNvbnMvZnVsbC9ldmlldzE2L3dhdGNobGlzdF92aWV3LnBuZyIgdG9vbHRpcD0iIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmRlYnVnLnVpIi8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5kZWJ1Zy5pbnRlcm5hbC51aS52aWV3cy5leHByZXNzaW9uLkV4cHJlc3Npb25WaWV3Ii8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJtZW1lbnRvIiB2YWx1ZT0iJmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/PiYjeEQ7JiN4QTsmbHQ7dmlldy8+Ii8+CisgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6RGVidWc8L3RhZ3M+CisgICAgICA8bWVudXMgeG1pOmlkPSJfQUc5Q3FpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5FeHByZXNzaW9uVmlldyI+CisgICAgICAgIDx0YWdzPlZpZXdNZW51PC90YWdzPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOm1lbnU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPHRvb2xiYXIgeG1pOmlkPSJfQUc5Q3F5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5FeHByZXNzaW9uVmlldyIgdmlzaWJsZT0iZmFsc2UiLz4KKyAgICA8L3NoYXJlZEVsZW1lbnRzPgorICAgIDxzaGFyZWRFbGVtZW50cyB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfQUc5Q3JDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5wZGUucnVudGltZS5Mb2dWaWV3IiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciIGxhYmVsPSJFcnJvciBMb2ciIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudWkudmlld3MubG9nL2ljb25zL2V2aWV3MTYvZXJyb3JfbG9nLnBuZyIgdG9vbHRpcD0iIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLmxvZyIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwudmlld3MubG9nLkxvZ1ZpZXciLz4KKyAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgIDwvc2hhcmVkRWxlbWVudHM+CisgICAgPHNoYXJlZEVsZW1lbnRzIHhzaTp0eXBlPSJiYXNpYzpQYXJ0IiB4bWk6aWQ9Il9BRzlDclN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5EaXNwbGF5VmlldyIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3IiBsYWJlbD0iRGVidWcgU2hlbGwiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpL2ljb25zL2Z1bGwvZXRvb2wxNi9kaXNwX3Nib29rLnBuZyIgdG9vbHRpcD0iIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aSIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmRpc3BsYXkuRGlzcGxheVZpZXciLz4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im1lbWVudG8iIHZhbHVlPSImbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8+JiN4RDsmI3hBOyZsdDt2aWV3Lz4iLz4KKyAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICA8dGFncz5jYXRlZ29yeVRhZzpEZWJ1ZzwvdGFncz4KKyAgICAgIDxtZW51cyB4bWk6aWQ9Il9BRzlDcml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5EaXNwbGF5VmlldyI+CisgICAgICAgIDx0YWdzPlZpZXdNZW51PC90YWdzPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOm1lbnU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPHRvb2xiYXIgeG1pOmlkPSJfQUc5Q3J5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuRGlzcGxheVZpZXciIHZpc2libGU9ImZhbHNlIi8+CisgICAgPC9zaGFyZWRFbGVtZW50cz4KKyAgICA8c2hhcmVkRWxlbWVudHMgeHNpOnR5cGU9ImJhc2ljOlBhcnQiIHhtaTppZD0iX0FHOUNzQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWNsZW1tYS51aS5Db3ZlcmFnZVZpZXciIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyIgbGFiZWw9IkNvdmVyYWdlIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVjbGVtbWEudWkvaWNvbnMvZnVsbC9ldmlldzE2L2NvdmVyYWdlLnBuZyIgdG9vbHRpcD0iIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmVjbGVtbWEudWkiLz4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmVjbGVtbWEuaW50ZXJuYWwudWkuY292ZXJhZ2V2aWV3LkNvdmVyYWdlVmlldyIvPgorICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkphdmE8L3RhZ3M+CisgICAgICA8bWVudXMgeG1pOmlkPSJfQUc5Q3NTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lY2xlbW1hLnVpLkNvdmVyYWdlVmlldyI+CisgICAgICAgIDx0YWdzPlZpZXdNZW51PC90YWdzPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOm1lbnU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPHRvb2xiYXIgeG1pOmlkPSJfQUc5Q3NpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lY2xlbW1hLnVpLkNvdmVyYWdlVmlldyIgdmlzaWJsZT0iZmFsc2UiLz4KKyAgICA8L3NoYXJlZEVsZW1lbnRzPgorICAgIDxzaGFyZWRFbGVtZW50cyB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfcEtwNEFETC1FZXk0aGJwWmdpZC1mdyIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQuY2FsbGhpZXJhcmNoeS52aWV3IiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciIGxhYmVsPSJDYWxsIEhpZXJhcmNoeSIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5qZHQudWkvaWNvbnMvZnVsbC9ldmlldzE2L2NhbGxfaGllcmFyY2h5LnBuZyIgdG9vbHRpcD0iIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC51aSIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLmNhbGxoaWVyYXJjaHkuQ2FsbEhpZXJhcmNoeVZpZXdQYXJ0Ii8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJtZW1lbnRvIiB2YWx1ZT0iJmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/PiYjeEQ7JiN4QTsmbHQ7dmlldyBzZWFyY2hfc2NvcGVfdHlwZT0mcXVvdDsxJnF1b3Q7Lz4iLz4KKyAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICA8dGFncz5jYXRlZ29yeVRhZzpKYXZhPC90YWdzPgorICAgICAgPG1lbnVzIHhtaTppZD0iX3BSQmx3REwtRWV5NGhicFpnaWQtZnciIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LmNhbGxoaWVyYXJjaHkudmlldyI+CisgICAgICAgIDx0YWdzPlZpZXdNZW51PC90YWdzPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOm1lbnU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPHRvb2xiYXIgeG1pOmlkPSJfcFJCbHdUTC1FZXk0aGJwWmdpZC1mdyIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQuY2FsbGhpZXJhcmNoeS52aWV3IiB2aXNpYmxlPSJmYWxzZSIvPgorICAgIDwvc2hhcmVkRWxlbWVudHM+CisgICAgPHRyaW1CYXJzIHhtaTppZD0iX0FHOUNzeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkubWFpbi50b29sYmFyIj4KKyAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0ibWVudTpUb29sQmFyIiB4bWk6aWQ9Il9BRzlDdEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Imdyb3VwLmZpbGUiIHRvQmVSZW5kZXJlZD0iZmFsc2UiPgorICAgICAgICA8dGFncz50b29sYmFyU2VwYXJhdG9yPC90YWdzPgorICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6VG9vbEJhclNlcGFyYXRvciIgeG1pOmlkPSJfQUc5Q3RTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJncm91cC5maWxlIiB0b0JlUmVuZGVyZWQ9ImZhbHNlIi8+CisgICAgICA8L2NoaWxkcmVuPgorICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OlRvb2xCYXIiIHhtaTppZD0iX0FHOUN0aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkud29ya2JlbmNoLmZpbGUiPgorICAgICAgICA8dGFncz5EcmFnZ2FibGU8L3RhZ3M+CisgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0ibWVudTpIYW5kbGVkVG9vbEl0ZW0iIHhtaTppZD0iX3NBQ2RjRUZuRWV5ZkpxR25pTE9yb1EiIGVsZW1lbnRJZD0icHJpbnQiIHZpc2libGU9ImZhbHNlIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVpL2ljb25zL2Z1bGwvZXRvb2wxNi9wcmludF9lZGl0LnBuZyIgdG9vbHRpcD0iUHJpbnQiIGNvbW1hbmQ9Il9BSEF1Zml4UUVleW15YnpzdUw5bkJBIi8+CisgICAgICA8L2NoaWxkcmVuPgorICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OlRvb2xCYXIiIHhtaTppZD0iX0FHOUN4Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iZ3JvdXAuZWRpdCIgdG9CZVJlbmRlcmVkPSJmYWxzZSI+CisgICAgICAgIDx0YWdzPnRvb2xiYXJTZXBhcmF0b3I8L3RhZ3M+CisgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0ibWVudTpUb29sQmFyU2VwYXJhdG9yIiB4bWk6aWQ9Il9BRzlDeFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Imdyb3VwLmVkaXQiIHRvQmVSZW5kZXJlZD0iZmFsc2UiLz4KKyAgICAgIDwvY2hpbGRyZW4+CisgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6VG9vbEJhciIgeG1pOmlkPSJfQUc5Q3hpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS53b3JrYmVuY2guZWRpdCIgdmlzaWJsZT0iZmFsc2UiPgorICAgICAgICA8dGFncz5EcmFnZ2FibGU8L3RhZ3M+CisgICAgICA8L2NoaWxkcmVuPgorICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OlRvb2xCYXIiIHhtaTppZD0iX0FHOUN5aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iYWRkaXRpb25zIiB0b0JlUmVuZGVyZWQ9ImZhbHNlIj4KKyAgICAgICAgPHRhZ3M+dG9vbGJhclNlcGFyYXRvcjwvdGFncz4KKyAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OlRvb2xCYXJTZXBhcmF0b3IiIHhtaTppZD0iX0FHOUN5eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iYWRkaXRpb25zIiB0b0JlUmVuZGVyZWQ9ImZhbHNlIi8+CisgICAgICA8L2NoaWxkcmVuPgorICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OlRvb2xCYXIiIHhtaTppZD0iX0FHOUM5eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLkphdmFFbGVtZW50Q3JlYXRpb25BY3Rpb25TZXQiPgorICAgICAgICA8dGFncz5EcmFnZ2FibGU8L3RhZ3M+CisgICAgICA8L2NoaWxkcmVuPgorICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OlRvb2xCYXIiIHhtaTppZD0iX0FHOUNfQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkubGF1bmNoQWN0aW9uU2V0Ij4KKyAgICAgICAgPHRhZ3M+RHJhZ2dhYmxlPC90YWdzPgorICAgICAgPC9jaGlsZHJlbj4KKyAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0ibWVudTpUb29sQmFyIiB4bWk6aWQ9Il9BRzlEQWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLkoyZWVNYWluQWN0aW9uU2V0IiB2aXNpYmxlPSJmYWxzZSI+CisgICAgICAgIDx0YWdzPkRyYWdnYWJsZTwvdGFncz4KKyAgICAgIDwvY2hpbGRyZW4+CisgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6VG9vbEJhciIgeG1pOmlkPSJfQUc5REF5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5zZWFyY2guc2VhcmNoQWN0aW9uU2V0Ij4KKyAgICAgICAgPHRhZ3M+RHJhZ2dhYmxlPC90YWdzPgorICAgICAgPC9jaGlsZHJlbj4KKyAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0ibWVudTpUb29sQmFyIiB4bWk6aWQ9Il9BRzlEQ0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5hY3Rpb25TZXQucHJlc2VudGF0aW9uIj4KKyAgICAgICAgPHRhZ3M+RHJhZ2dhYmxlPC90YWdzPgorICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6SGFuZGxlZFRvb2xJdGVtIiB4bWk6aWQ9Il9BRzlEQ1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmdlbmVyaWNlZGl0b3IudG9nZ2xlaGlnaGxpZ2h0IiB2aXNpYmxlPSJmYWxzZSIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51aS5nZW5lcmljZWRpdG9yL2ljb25zL2Z1bGwvZXRvb2wxNi9tYXJrX29jY3VycmVuY2VzLnBuZyIgc2VsZWN0ZWQ9InRydWUiIHR5cGU9IkNoZWNrIiBjb21tYW5kPSJfQUhBdXZ5eFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0iSUlkZW50aWZpZXIiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS5nZW5lcmljZWRpdG9yL29yZy5lY2xpcHNlLnVpLmdlbmVyaWNlZGl0b3IudG9nZ2xlaGlnaGxpZ2h0Ii8+CisgICAgICAgICAgPHZpc2libGVXaGVuIHhzaTp0eXBlPSJ1aTpDb3JlRXhwcmVzc2lvbiIgeG1pOmlkPSJfQUc5RENpeFFFZXlteWJ6c3VMOW5CQSIgY29yZUV4cHJlc3Npb25JZD0icHJvZ3JhbW1hdGljLnZhbHVlIi8+CisgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0ibWVudTpIYW5kbGVkVG9vbEl0ZW0iIHhtaTppZD0iX0FHOURDeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZ2VuZXJpY2VkaXRvci50b2dnbGVoaWdobGlnaHQiIHZpc2libGU9ImZhbHNlIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVpLmdlbmVyaWNlZGl0b3IvaWNvbnMvZnVsbC9ldG9vbDE2L21hcmtfb2NjdXJyZW5jZXMucG5nIiBzZWxlY3RlZD0idHJ1ZSIgdHlwZT0iQ2hlY2siIGNvbW1hbmQ9Il9BSEF1dnl4UUVleW15YnpzdUw5bkJBIj4KKyAgICAgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJJSWRlbnRpZmllciIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLmdlbmVyaWNlZGl0b3Ivb3JnLmVjbGlwc2UudWkuZ2VuZXJpY2VkaXRvci50b2dnbGVoaWdobGlnaHQiLz4KKyAgICAgICAgICA8dmlzaWJsZVdoZW4geHNpOnR5cGU9InVpOkNvcmVFeHByZXNzaW9uIiB4bWk6aWQ9Il9BRzlEREN4UUVleW15YnpzdUw5bkJBIiBjb3JlRXhwcmVzc2lvbklkPSJwcm9ncmFtbWF0aWMudmFsdWUiLz4KKyAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OkhhbmRsZWRUb29sSXRlbSIgeG1pOmlkPSJfQUc5RERTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5nZW5lcmljZWRpdG9yLnRvZ2dsZWhpZ2hsaWdodCIgdmlzaWJsZT0iZmFsc2UiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudWkuZ2VuZXJpY2VkaXRvci9pY29ucy9mdWxsL2V0b29sMTYvbWFya19vY2N1cnJlbmNlcy5wbmciIHNlbGVjdGVkPSJ0cnVlIiB0eXBlPSJDaGVjayIgY29tbWFuZD0iX0FIQXV2eXhRRWV5bXlienN1TDluQkEiPgorICAgICAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9IklJZGVudGlmaWVyIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkuZ2VuZXJpY2VkaXRvci9vcmcuZWNsaXBzZS51aS5nZW5lcmljZWRpdG9yLnRvZ2dsZWhpZ2hsaWdodCIvPgorICAgICAgICAgIDx2aXNpYmxlV2hlbiB4c2k6dHlwZT0idWk6Q29yZUV4cHJlc3Npb24iIHhtaTppZD0iX0FHOUREaXhRRWV5bXlienN1TDluQkEiIGNvcmVFeHByZXNzaW9uSWQ9InByb2dyYW1tYXRpYy52YWx1ZSIvPgorICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6SGFuZGxlZFRvb2xJdGVtIiB4bWk6aWQ9Il9BRzlERHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmdlbmVyaWNlZGl0b3IudG9nZ2xlaGlnaGxpZ2h0IiB2aXNpYmxlPSJmYWxzZSIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51aS5nZW5lcmljZWRpdG9yL2ljb25zL2Z1bGwvZXRvb2wxNi9tYXJrX29jY3VycmVuY2VzLnBuZyIgc2VsZWN0ZWQ9InRydWUiIHR5cGU9IkNoZWNrIiBjb21tYW5kPSJfQUhBdXZ5eFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0iSUlkZW50aWZpZXIiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS5nZW5lcmljZWRpdG9yL29yZy5lY2xpcHNlLnVpLmdlbmVyaWNlZGl0b3IudG9nZ2xlaGlnaGxpZ2h0Ii8+CisgICAgICAgICAgPHZpc2libGVXaGVuIHhzaTp0eXBlPSJ1aTpDb3JlRXhwcmVzc2lvbiIgeG1pOmlkPSJfQUc5REVDeFFFZXlteWJ6c3VMOW5CQSIgY29yZUV4cHJlc3Npb25JZD0icHJvZ3JhbW1hdGljLnZhbHVlIi8+CisgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0ibWVudTpIYW5kbGVkVG9vbEl0ZW0iIHhtaTppZD0iX0FHOURFU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZ2VuZXJpY2VkaXRvci50b2dnbGVoaWdobGlnaHQiIHZpc2libGU9ImZhbHNlIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVpLmdlbmVyaWNlZGl0b3IvaWNvbnMvZnVsbC9ldG9vbDE2L21hcmtfb2NjdXJyZW5jZXMucG5nIiBzZWxlY3RlZD0idHJ1ZSIgdHlwZT0iQ2hlY2siIGNvbW1hbmQ9Il9BSEF1dnl4UUVleW15YnpzdUw5bkJBIj4KKyAgICAgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJJSWRlbnRpZmllciIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLmdlbmVyaWNlZGl0b3Ivb3JnLmVjbGlwc2UudWkuZ2VuZXJpY2VkaXRvci50b2dnbGVoaWdobGlnaHQiLz4KKyAgICAgICAgICA8dmlzaWJsZVdoZW4geHNpOnR5cGU9InVpOkNvcmVFeHByZXNzaW9uIiB4bWk6aWQ9Il9BRzlERWl4UUVleW15YnpzdUw5bkJBIiBjb3JlRXhwcmVzc2lvbklkPSJwcm9ncmFtbWF0aWMudmFsdWUiLz4KKyAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OkhhbmRsZWRUb29sSXRlbSIgeG1pOmlkPSJfQUc5REV5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5nZW5lcmljZWRpdG9yLnRvZ2dsZWhpZ2hsaWdodCIgdmlzaWJsZT0iZmFsc2UiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudWkuZ2VuZXJpY2VkaXRvci9pY29ucy9mdWxsL2V0b29sMTYvbWFya19vY2N1cnJlbmNlcy5wbmciIHNlbGVjdGVkPSJ0cnVlIiB0eXBlPSJDaGVjayIgY29tbWFuZD0iX0FIQXV2eXhRRWV5bXlienN1TDluQkEiPgorICAgICAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9IklJZGVudGlmaWVyIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkuZ2VuZXJpY2VkaXRvci9vcmcuZWNsaXBzZS51aS5nZW5lcmljZWRpdG9yLnRvZ2dsZWhpZ2hsaWdodCIvPgorICAgICAgICAgIDx2aXNpYmxlV2hlbiB4c2k6dHlwZT0idWk6Q29yZUV4cHJlc3Npb24iIHhtaTppZD0iX0FHOURGQ3hRRWV5bXlienN1TDluQkEiIGNvcmVFeHByZXNzaW9uSWQ9InByb2dyYW1tYXRpYy52YWx1ZSIvPgorICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6SGFuZGxlZFRvb2xJdGVtIiB4bWk6aWQ9Il9BRzlERlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmdlbmVyaWNlZGl0b3IudG9nZ2xlaGlnaGxpZ2h0IiB2aXNpYmxlPSJmYWxzZSIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51aS5nZW5lcmljZWRpdG9yL2ljb25zL2Z1bGwvZXRvb2wxNi9tYXJrX29jY3VycmVuY2VzLnBuZyIgc2VsZWN0ZWQ9InRydWUiIHR5cGU9IkNoZWNrIiBjb21tYW5kPSJfQUhBdXZ5eFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0iSUlkZW50aWZpZXIiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS5nZW5lcmljZWRpdG9yL29yZy5lY2xpcHNlLnVpLmdlbmVyaWNlZGl0b3IudG9nZ2xlaGlnaGxpZ2h0Ii8+CisgICAgICAgICAgPHZpc2libGVXaGVuIHhzaTp0eXBlPSJ1aTpDb3JlRXhwcmVzc2lvbiIgeG1pOmlkPSJfQUc5REZpeFFFZXlteWJ6c3VMOW5CQSIgY29yZUV4cHJlc3Npb25JZD0icHJvZ3JhbW1hdGljLnZhbHVlIi8+CisgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICA8L2NoaWxkcmVuPgorICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OlRvb2xCYXIiIHhtaTppZD0iX0FHOURIeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS5pbnRlcm5hbC53ZWJicm93c2VyLmFjdGlvblNldCIgdmlzaWJsZT0iZmFsc2UiPgorICAgICAgICA8dGFncz5EcmFnZ2FibGU8L3RhZ3M+CisgICAgICA8L2NoaWxkcmVuPgorICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OlRvb2xCYXIiIHhtaTppZD0iX0FHOURJQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLmV4cGxvcmVyIiB2aXNpYmxlPSJmYWxzZSI+CisgICAgICAgIDx0YWdzPkRyYWdnYWJsZTwvdGFncz4KKyAgICAgIDwvY2hpbGRyZW4+CisgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6VG9vbEJhciIgeG1pOmlkPSJfQUc5RElTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJncm91cC5uYXYiIHRvQmVSZW5kZXJlZD0iZmFsc2UiPgorICAgICAgICA8dGFncz50b29sYmFyU2VwYXJhdG9yPC90YWdzPgorICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6VG9vbEJhclNlcGFyYXRvciIgeG1pOmlkPSJfQUc5RElpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJncm91cC5uYXYiIHRvQmVSZW5kZXJlZD0iZmFsc2UiLz4KKyAgICAgIDwvY2hpbGRyZW4+CisgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6VG9vbEJhciIgeG1pOmlkPSJfQUc5REl5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS53b3JrYmVuY2gubmF2aWdhdGUiPgorICAgICAgICA8dGFncz5EcmFnZ2FibGU8L3RhZ3M+CisgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0ibWVudTpIYW5kbGVkVG9vbEl0ZW0iIHhtaTppZD0iX3NBTG5hVUZuRWV5ZkpxR25pTE9yb1EiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkud2luZG93LnBpbkVkaXRvciIgdmlzaWJsZT0iZmFsc2UiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudWkvaWNvbnMvZnVsbC9ldG9vbDE2L3Bpbl9lZGl0b3IucG5nIiB0b29sdGlwPSJQaW4gRWRpdG9yIiB0eXBlPSJDaGVjayIgY29tbWFuZD0iX0FIQXVIeXhRRWV5bXlienN1TDluQkEiLz4KKyAgICAgIDwvY2hpbGRyZW4+CisgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6VG9vbEJhciIgeG1pOmlkPSJfQUc5RE1DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJncm91cC5lZGl0b3IiIHRvQmVSZW5kZXJlZD0iZmFsc2UiPgorICAgICAgICA8dGFncz50b29sYmFyU2VwYXJhdG9yPC90YWdzPgorICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6VG9vbEJhclNlcGFyYXRvciIgeG1pOmlkPSJfQUc5RE1TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJncm91cC5lZGl0b3IiIHRvQmVSZW5kZXJlZD0iZmFsc2UiLz4KKyAgICAgIDwvY2hpbGRyZW4+CisgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6VG9vbEJhciIgeG1pOmlkPSJfQUc5RE1peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJncm91cC5oZWxwIiB0b0JlUmVuZGVyZWQ9ImZhbHNlIj4KKyAgICAgICAgPHRhZ3M+dG9vbGJhclNlcGFyYXRvcjwvdGFncz4KKyAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OlRvb2xCYXJTZXBhcmF0b3IiIHhtaTppZD0iX0FHOURNeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iZ3JvdXAuaGVscCIgdG9CZVJlbmRlcmVkPSJmYWxzZSIvPgorICAgICAgPC9jaGlsZHJlbj4KKyAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0ibWVudTpUb29sQmFyIiB4bWk6aWQ9Il9BRzlETkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC5oZWxwIiB2aXNpYmxlPSJmYWxzZSI+CisgICAgICAgIDx0YWdzPkRyYWdnYWJsZTwvdGFncz4KKyAgICAgIDwvY2hpbGRyZW4+CisgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6VG9vbENvbnRyb2wiIHhtaTppZD0iX0FHOUROeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iUGVyc3BlY3RpdmVTcGFjZXIiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC9vcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC5MYXlvdXRNb2RpZmllclRvb2xDb250cm9sIj4KKyAgICAgICAgPHRhZ3M+c3RyZXRjaDwvdGFncz4KKyAgICAgICAgPHRhZ3M+U0hPV19SRVNUT1JFX01FTlU8L3RhZ3M+CisgICAgICA8L2NoaWxkcmVuPgorICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OlRvb2xDb250cm9sIiB4bWk6aWQ9Il9BRzlET3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IlBlcnNwZWN0aXZlU3dpdGNoZXIiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLmFkZG9ucy5wZXJzcGVjdGl2ZXN3aXRjaGVyLlBlcnNwZWN0aXZlU3dpdGNoZXIiPgorICAgICAgICA8dGFncz5EcmFnZ2FibGU8L3RhZ3M+CisgICAgICAgIDx0YWdzPkhJREVBQkxFPC90YWdzPgorICAgICAgICA8dGFncz5TSE9XX1JFU1RPUkVfTUVOVTwvdGFncz4KKyAgICAgIDwvY2hpbGRyZW4+CisgICAgPC90cmltQmFycz4KKyAgICA8dHJpbUJhcnMgeG1pOmlkPSJfQUc5RFFpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS50cmltLnN0YXR1cyIgc2lkZT0iQm90dG9tIj4KKyAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0ibWVudTpUb29sQ29udHJvbCIgeG1pOmlkPSJfQUc5RFF5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5TdGF0dXNMaW5lIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YW5kYXJkVHJpbSI+CisgICAgICAgIDx0YWdzPnN0cmV0Y2g8L3RhZ3M+CisgICAgICA8L2NoaWxkcmVuPgorICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OlRvb2xDb250cm9sIiB4bWk6aWQ9Il9BRzlEUkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLkhlYXBTdGF0dXMiIHRvQmVSZW5kZXJlZD0iZmFsc2UiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhbmRhcmRUcmltIj4KKyAgICAgICAgPHRhZ3M+RHJhZ2dhYmxlPC90YWdzPgorICAgICAgPC9jaGlsZHJlbj4KKyAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0ibWVudTpUb29sQ29udHJvbCIgeG1pOmlkPSJfQUc5RFJTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5Qcm9ncmVzc0JhciIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFuZGFyZFRyaW0iPgorICAgICAgICA8dGFncz5EcmFnZ2FibGU8L3RhZ3M+CisgICAgICA8L2NoaWxkcmVuPgorICAgIDwvdHJpbUJhcnM+CisgICAgPHRyaW1CYXJzIHhtaTppZD0iX0FHOURVU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudHJpbS52ZXJ0aWNhbDEiIHRvQmVSZW5kZXJlZD0iZmFsc2UiIHNpZGU9IkxlZnQiPgorICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OlRvb2xDb250cm9sIiB4bWk6aWQ9Il9BRzlEVWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmlkZS5wZXJzcGVjdGl2ZXN0YWNrKG1pbmltaXplZCkiIHRvQmVSZW5kZXJlZD0iZmFsc2UiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2guYWRkb25zLnN3dC9vcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2guYWRkb25zLm1pbm1heC5UcmltU3RhY2siPgorICAgICAgICA8dGFncz5UcmltU3RhY2s8L3RhZ3M+CisgICAgICAgIDx0YWdzPkRyYWdnYWJsZTwvdGFncz4KKyAgICAgIDwvY2hpbGRyZW4+CisgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6VG9vbENvbnRyb2wiIHhtaTppZD0iX0FHOURVeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ibGVmdChJREVXaW5kb3cpLihvcmcuZWNsaXBzZS5qZHQudWkuSmF2YVBlcnNwZWN0aXZlKSIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5hZGRvbnMuc3d0L29yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5hZGRvbnMubWlubWF4LlRyaW1TdGFjayI+CisgICAgICAgIDx0YWdzPlRyaW1TdGFjazwvdGFncz4KKyAgICAgICAgPHRhZ3M+RHJhZ2dhYmxlPC90YWdzPgorICAgICAgPC9jaGlsZHJlbj4KKyAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0ibWVudTpUb29sQ29udHJvbCIgeG1pOmlkPSJfQUc5RFZDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJ0b3BMZWZ0KElERVdpbmRvdykuKG9yZy5lY2xpcHNlLmpzdC5qMmVlLkoyRUVQZXJzcGVjdGl2ZSkiIHRvQmVSZW5kZXJlZD0iZmFsc2UiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2guYWRkb25zLnN3dC9vcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2guYWRkb25zLm1pbm1heC5UcmltU3RhY2siPgorICAgICAgICA8dGFncz5UcmltU3RhY2s8L3RhZ3M+CisgICAgICAgIDx0YWdzPkRyYWdnYWJsZTwvdGFncz4KKyAgICAgIDwvY2hpbGRyZW4+CisgICAgPC90cmltQmFycz4KKyAgICA8dHJpbUJhcnMgeG1pOmlkPSJfQUc5RFZTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS50cmltLnZlcnRpY2FsMiIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgc2lkZT0iUmlnaHQiPgorICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OlRvb2xDb250cm9sIiB4bWk6aWQ9Il9BRzlEVml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnZpZXdzLnRhc2tzTVN0YWNrKElERVdpbmRvdykuKG9yZy5lY2xpcHNlLmpkdC51aS5KYXZhUGVyc3BlY3RpdmUpIiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLmFkZG9ucy5zd3Qvb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLmFkZG9ucy5taW5tYXguVHJpbVN0YWNrIj4KKyAgICAgICAgPHRhZ3M+VHJpbVN0YWNrPC90YWdzPgorICAgICAgICA8dGFncz5EcmFnZ2FibGU8L3RhZ3M+CisgICAgICA8L2NoaWxkcmVuPgorICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OlRvb2xDb250cm9sIiB4bWk6aWQ9Il9BRzlEVnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9InJpZ2h0KElERVdpbmRvdykuKG9yZy5lY2xpcHNlLmpkdC51aS5KYXZhUGVyc3BlY3RpdmUpIiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLmFkZG9ucy5zd3Qvb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLmFkZG9ucy5taW5tYXguVHJpbVN0YWNrIj4KKyAgICAgICAgPHRhZ3M+VHJpbVN0YWNrPC90YWdzPgorICAgICAgICA8dGFncz5EcmFnZ2FibGU8L3RhZ3M+CisgICAgICA8L2NoaWxkcmVuPgorICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OlRvb2xDb250cm9sIiB4bWk6aWQ9Il9BRzlEV0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9ImJvdHRvbShJREVXaW5kb3cpLihvcmcuZWNsaXBzZS5qZHQudWkuSmF2YVBlcnNwZWN0aXZlKSIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5hZGRvbnMuc3d0L29yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5hZGRvbnMubWlubWF4LlRyaW1TdGFjayI+CisgICAgICAgIDx0YWdzPlRyaW1TdGFjazwvdGFncz4KKyAgICAgICAgPHRhZ3M+RHJhZ2dhYmxlPC90YWdzPgorICAgICAgPC9jaGlsZHJlbj4KKyAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0ibWVudTpUb29sQ29udHJvbCIgeG1pOmlkPSJfQUc5RFdTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJ0b3BSaWdodChJREVXaW5kb3cpLihvcmcuZWNsaXBzZS5qc3QuajJlZS5KMkVFUGVyc3BlY3RpdmUpIiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLmFkZG9ucy5zd3Qvb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLmFkZG9ucy5taW5tYXguVHJpbVN0YWNrIj4KKyAgICAgICAgPHRhZ3M+VHJpbVN0YWNrPC90YWdzPgorICAgICAgICA8dGFncz5EcmFnZ2FibGU8L3RhZ3M+CisgICAgICA8L2NoaWxkcmVuPgorICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OlRvb2xDb250cm9sIiB4bWk6aWQ9Il9BRzlEV2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9ImJvdHRvbVJpZ2h0KElERVdpbmRvdykuKG9yZy5lY2xpcHNlLmpzdC5qMmVlLkoyRUVQZXJzcGVjdGl2ZSkiIHRvQmVSZW5kZXJlZD0iZmFsc2UiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2guYWRkb25zLnN3dC9vcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2guYWRkb25zLm1pbm1heC5UcmltU3RhY2siPgorICAgICAgICA8dGFncz5UcmltU3RhY2s8L3RhZ3M+CisgICAgICAgIDx0YWdzPkRyYWdnYWJsZTwvdGFncz4KKyAgICAgIDwvY2hpbGRyZW4+CisgICAgPC90cmltQmFycz4KKyAgPC9jaGlsZHJlbj4KKyAgPGhhbmRsZXJzIHhtaTppZD0iX0FHOURXeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm5ld3MucmNwLmhhbmRsZXIucG9sbE5ld3NGZWVkcyIgY29udHJpYnV0b3JVUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm5ld3MucmNwIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm5ld3MucmNwL29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5uZXdzLnJjcC5wb2xsLlBvbGxOZXdzRmVlZHNIYW5kbGVyIiBjb21tYW5kPSJfQUhCVUZ5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8aGFuZGxlcnMgeG1pOmlkPSJfQUc5RFhDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubmV3cy5yY3AuaGFuZGxlci5yZWFkTmV3c0l0ZW1zIiBjb250cmlidXRvclVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubmV3cy5yY3AiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubmV3cy5yY3Avb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm5ld3MucmNwLnJlYWQuUmVhZE5ld3NJdGVtc0hhbmRsZXIiIGNvbW1hbmQ9Il9BSEJVR0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOURYU3hRRWV5bXlienN1TDluQkEiIGNvbnRyaWJ1dG9yVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnBsYXRmb3JtIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFSQ3hRRWV5bXlienN1TDluQkEiPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEWGl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK0YxMSIgY29tbWFuZD0iX0FIQUZ4Q3hRRWV5bXlienN1TDluQkEiPgorICAgICAgPHRhZ3M+cGxhdGZvcm06d2luMzI8L3RhZ3M+CisgICAgPC9iaW5kaW5ncz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RFh5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IlNISUZUK0lOU0VSVCIgY29tbWFuZD0iX0FHX2dRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RFlDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtQQUdFX1VQIiBjb21tYW5kPSJfQUhBdEVpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEWVN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1BBR0VfRE9XTiIgY29tbWFuZD0iX0FIQXQ0Q3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RFlpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IlNISUZUK0RFTCIgY29tbWFuZD0iX0FIQUdmU3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RFl5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrU1BBQ0UiIGNvbW1hbmQ9Il9BSEFHVVN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURaQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NQQUNFIiBjb21tYW5kPSJfQUhBdVJDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEWlN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtBIiBjb21tYW5kPSJfQUhBczBTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEWml4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtDIiBjb21tYW5kPSJfQUhBdFBTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEWnl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCsxIiBjb21tYW5kPSJfQUhBR0tDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEYUN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtJIiBjb21tYW5kPSJfQUhBR0NTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEYVN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtMIiBjb21tYW5kPSJfQUhBdXZpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEYWl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtEIiBjb21tYW5kPSJfQUhBdTdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEYXl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtYIiBjb21tYW5kPSJfQUhBR2ZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEYkN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtZIiBjb21tYW5kPSJfQUhBdEFpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEYlN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtaIiBjb21tYW5kPSJfQUhBR2RTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEYml4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtWIiBjb21tYW5kPSJfQUdfZ1FDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEYnl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtJTlNFUlQiIGNvbW1hbmQ9Il9BSEF0UFN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURjQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrRjMiIGNvbW1hbmQ9Il9BSEF1aVN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURjU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK0YxMCIgY29tbWFuZD0iX0FIQUZtQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPC9iaW5kaW5nVGFibGVzPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlEY2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnRleHRFZGl0b3JTY29wZSIgYmluZGluZ0NvbnRleHQ9Il9BRy1RU1N4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RGN5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkVORCIgY29tbWFuZD0iX0FIQXVwQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RGRDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IklOU0VSVCIgY29tbWFuZD0iX0FIQXRnU3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RGRTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkYyIiBjb21tYW5kPSJfQUhBR015eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEZGl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iSE9NRSIgY29tbWFuZD0iX0FIQXUwQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RGR5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IlNISUZUK0VORCIgY29tbWFuZD0iX0FIQXN0Q3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RGVDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IlNISUZUK0hPTUUiIGNvbW1hbmQ9Il9BSEFzaml4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURlU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrQVJST1dfVVAiIGNvbW1hbmQ9Il9BSEF2TWl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURlaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrQVJST1dfRE9XTiIgY29tbWFuZD0iX0FIQXQ3U3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RGV5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrQlMiIGNvbW1hbmQ9Il9BR19mX3l4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURmQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMKysiIGNvbW1hbmQ9Il9BSEF0dGl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURmU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMKy0iIGNvbW1hbmQ9Il9BSEFzcHl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURmaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK0NSIiBjb21tYW5kPSJfQUhBdWlDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEZnl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtKIiBjb21tYW5kPSJfQUhBRm9DeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEZ0N4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtLIiBjb21tYW5kPSJfQUhBdDJpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEZ1N4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtMIiBjb21tYW5kPSJfQUhBdVhTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEZ2l4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtEIiBjb21tYW5kPSJfQUhBRnNTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEZ3l4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtYIiBjb21tYW5kPSJfQUhBdFJpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEaEN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtZIiBjb21tYW5kPSJfQUhBc29TeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEaFN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCs9IiBjb21tYW5kPSJfQUhBdHRpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEaGl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUKy8iIGNvbW1hbmQ9Il9BSEF1MVN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURoeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK1EiIGNvbW1hbmQ9Il9BSEFHRVN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURpQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrQSIgY29tbWFuZD0iX0FIQXRZQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RGlTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtZIiBjb21tYW5kPSJfQUdfZjlpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEaWl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtKIiBjb21tYW5kPSJfQUhBR0FpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEaXl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtLIiBjb21tYW5kPSJfQUhBRjFTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEakN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iU0hJRlQrQ1IiIGNvbW1hbmQ9Il9BSEF1eml4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURqU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrQ1RSTCtKIiBjb21tYW5kPSJfQUhBR0h5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEaml4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtERUwiIGNvbW1hbmQ9Il9BSEFHYml4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURqeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK0RFTCIgY29tbWFuZD0iX0FIQXVTeXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RGtDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrRU5EIiBjb21tYW5kPSJfQUhBdDhpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEa1N4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtOVU1QQURfTVVMVElQTFkiIGNvbW1hbmQ9Il9BSEF1RUN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURraXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK05VTVBBRF9ESVZJREUiIGNvbW1hbmQ9Il9BSEF0Z3l4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURreXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK0FSUk9XX1VQIiBjb21tYW5kPSJfQUhBRjJpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEbEN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtBUlJPV19ET1dOIiBjb21tYW5kPSJfQUhBdlNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEbFN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtBUlJPV19MRUZUIiBjb21tYW5kPSJfQUhBdE55eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEbGl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtBUlJPV19SSUdIVCIgY29tbWFuZD0iX0FIQUdEaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RGx5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrSE9NRSIgY29tbWFuZD0iX0FHX2dQaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RG1DeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrSU5TRVJUIiBjb21tYW5kPSJfQUhBRjhDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEbVN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtOVU1QQURfTVVMVElQTFkiIGNvbW1hbmQ9Il9BSEF1QlN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURtaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK05VTVBBRF9BREQiIGNvbW1hbmQ9Il9BSEF1OHl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURteXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK05VTVBBRF9TVUJUUkFDVCIgY29tbWFuZD0iX0FIQXVoaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RG5DeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrTlVNUEFEX0RJVklERSIgY29tbWFuZD0iX0FIQUYzeXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RG5TeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrQVJST1dfTEVGVCIgY29tbWFuZD0iX0FIQXN1Q3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RG5peFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrQVJST1dfUklHSFQiIGNvbW1hbmQ9Il9BSEFGOWl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURueXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrQ1RSTCtBUlJPV19VUCIgY29tbWFuZD0iX0FIQXZCaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RG9DeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtDVFJMK0FSUk9XX0RPV04iIGNvbW1hbmQ9Il9BSEFzM0N4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURvU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK0YxMCIgY29tbWFuZD0iX0FIQXVneXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RG9peFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtDVFJMK1NQQUNFIiBjb21tYW5kPSJfQUhCVUJpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8L2JpbmRpbmdUYWJsZXM+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOURveXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkudmlld3MudGFza3MiIGJpbmRpbmdDb250ZXh0PSJfQUctUWVTeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBNQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJJTlNFUlQiIGNvbW1hbmQ9Il9BSEFzbml4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBNU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJGNCIgY29tbWFuZD0iX0FIQUZreXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cE1peFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IlNISUZUK0lOU0VSVCIgY29tbWFuZD0iX0FIQUZ5aXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cE15eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtBUlJPV19VUCIgY29tbWFuZD0iX0FIQXR5eXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cE5DeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtBUlJPV19ET1dOIiBjb21tYW5kPSJfQUhBR1ppeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwTlN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtDUiIgY29tbWFuZD0iX0FIQUdZQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cE5peFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtJIiBjb21tYW5kPSJfQUhBc3FDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwTnl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK0MiIGNvbW1hbmQ9Il9BSEF0SUN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBPQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrUiIgY29tbWFuZD0iX0FIQXN0aXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cE9TeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtVIiBjb21tYW5kPSJfQUhBdF95eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwT2l4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK0FSUk9XX1VQIiBjb21tYW5kPSJfQUhBdU55eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwT3l4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK0FSUk9XX0RPV04iIGNvbW1hbmQ9Il9BSEFzc0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDwvYmluZGluZ1RhYmxlcz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cFBDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi5pbnRlcm5hbC53aWtpdGV4dC51aS5lZGl0b3IuYmFzaWNNYXJrdXBTb3VyY2VDb250ZXh0IiBiaW5kaW5nQ29udGV4dD0iX0FHLVFaeXhRRWV5bXlienN1TDluQkEiPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwUFN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iRjEiIGNvbW1hbmQ9Il9BR19nRHl4UUVleW15YnpzdUw5bkJBIi8+CisgIDwvYmluZGluZ1RhYmxlcz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cFBpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5jb250ZXh0cy53aW5kb3ciIGJpbmRpbmdDb250ZXh0PSJfQUctUVJTeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBQeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJGMiIgY29tbWFuZD0iX0FIQUZlQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cFFDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkYzIiBjb21tYW5kPSJfQUhBR0lTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwUVN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iRjQiIGNvbW1hbmQ9Il9BSEFGZ2l4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBRaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJGNSIgY29tbWFuZD0iX0FIQXNoaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cFF5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtGNyIgY29tbWFuZD0iX0FIQXRhQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cFJDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IlNISUZUK0YyIiBjb21tYW5kPSJfQUhBdGx5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwUlN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iU0hJRlQrRjUiIGNvbW1hbmQ9Il9BSEFzNFN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBSaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrRjUiIGNvbW1hbmQ9Il9BSEFzeHl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBSeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrQVJST1dfTEVGVCIgY29tbWFuZD0iX0FIQUZuQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cFNDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkYxMSIgY29tbWFuZD0iX0FIQXU0U3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cFNTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtBUlJPV19SSUdIVCIgY29tbWFuZD0iX0FIQUdraXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cFNpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkYxMiIgY29tbWFuZD0iX0FIQXVSeXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cFN5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkRFTCIgY29tbWFuZD0iX0FIQUZ6eXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cFRDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtDVFJMK1ggRyIgY29tbWFuZD0iX0FIQXUzQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cFRTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtYIEEiIGNvbW1hbmQ9Il9BSEFGY3l4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBUaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrWCBRIiBjb21tYW5kPSJfQUhBR0JpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwVHl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1ggVCIgY29tbWFuZD0iX0FIQXN6aXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cFVDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtYIEoiIGNvbW1hbmQ9Il9BSEF0NVN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBVU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrWCBNIiBjb21tYW5kPSJfQUhBczJDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwVWl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCsrIiBjb21tYW5kPSJfQUhBc2dDeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICA8dGFncz5sb2NhbGU6ZGU8L3RhZ3M+CisgICAgPC9iaW5kaW5ncz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cFV5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrLCIgY29tbWFuZD0iX0FIQUZkU3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cFZDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrLSIgY29tbWFuZD0iX0FIQXV3U3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cFZTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrLiIgY29tbWFuZD0iX0FIQXZDeXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cFZpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrIyIgY29tbWFuZD0iX0FIQUZtU3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cFZ5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrSCIgY29tbWFuZD0iX0FIQXVReXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cFdDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtEIEoiIGNvbW1hbmQ9Il9BSEF1Rml4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBXU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK00iIGNvbW1hbmQ9Il9BSEF1UHl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBXaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrRCBRIiBjb21tYW5kPSJfQUhBczZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwV3l4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtOIiBjb21tYW5kPSJfQUhBdkppeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwWEN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK0NUUkwrUCIgY29tbWFuZD0iX0FIQUZ4eXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cFhTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrQiIgY29tbWFuZD0iX0FIQUZlU3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cFhpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrRSIgY29tbWFuZD0iX0FIQUdiQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cFh5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrRiIgY29tbWFuZD0iX0FIQUZ2U3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cFlDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrRyIgY29tbWFuZD0iX0FHX2dBQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cFlTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtIIiBjb21tYW5kPSJfQUhBR1pDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwWWl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK0kiIGNvbW1hbmQ9Il9BSEFGbWl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBZeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrSiIgY29tbWFuZD0iX0FIQUdhQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cFpDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtMIiBjb21tYW5kPSJfQUhBR0l5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwWlN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUKy0iIGNvbW1hbmQ9Il9BSEF0VVN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBaaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMKz0iIGNvbW1hbmQ9Il9BSEFzZ0N4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBaeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrTSIgY29tbWFuZD0iX0FIQXU5Q3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cGFDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtOIiBjb21tYW5kPSJfQUhBR2RpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwYVN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtSIiBjb21tYW5kPSJfQUhBdlRpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwYWl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK0QgVCIgY29tbWFuZD0iX0FHX2dEaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cGF5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtDIiBjb21tYW5kPSJfQUhBdVNpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwYkN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtTIiBjb21tYW5kPSJfQUhBdHFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwYlN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCszIiBjb21tYW5kPSJfQUhBR01peFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwYml4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtUIiBjb21tYW5kPSJfQUhBR2ZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwYnl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtVIiBjb21tYW5kPSJfQUhBRjdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwY0N4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK0YiIGNvbW1hbmQ9Il9BSEF1bEN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBjU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK1YiIGNvbW1hbmQ9Il9BSEF1ckN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBjaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK1ciIGNvbW1hbmQ9Il9BSEFHZXl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBjeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK0giIGNvbW1hbmQ9Il9BSEF0THl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBkQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrWiIgY29tbWFuZD0iX0FIQXRLaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cGRTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrTiIgY29tbWFuZD0iX0FIQXRVaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cGRpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrTyIgY29tbWFuZD0iX0FIQXU2Q3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cGR5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtQIiBjb21tYW5kPSJfQUhBdHhpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwZUN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtCIiBjb21tYW5kPSJfQUhBRjFpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwZVN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1IiIGNvbW1hbmQ9Il9BSEF0Qnl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBlaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrUyIgY29tbWFuZD0iX0FIQXRJaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cGV5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtUIiBjb21tYW5kPSJfQUhBdFlpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwZkN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtFIiBjb21tYW5kPSJfQUhBRjZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwZlN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1YiIGNvbW1hbmQ9Il9BSEFzdHl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBmaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK0ciIGNvbW1hbmQ9Il9BSEF2SVN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBmeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrVyIgY29tbWFuZD0iX0FIQXZCU3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cGdDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtDVFJMK0giIGNvbW1hbmQ9Il9BSEFGakN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBnU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrQ1IiIGNvbW1hbmQ9Il9BSEF1TGl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBnaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrRCBBIiBjb21tYW5kPSJfQUhBdVlDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwZ3l4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtfIiBjb21tYW5kPSJfQUhBR1ZTeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BRzlwaEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IlNwbGl0dGVyLmlzSG9yaXpvbnRhbCIgbmFtZT0iU3BsaXR0ZXIuaXNIb3Jpem9udGFsIiB2YWx1ZT0idHJ1ZSIvPgorICAgIDwvYmluZGluZ3M+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBoU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1AiIGNvbW1hbmQ9Il9BSEF1Zml4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBoaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1EiIGNvbW1hbmQ9Il9BSEF1anl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBoeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrQ1RSTCtCIiBjb21tYW5kPSJfQUhBdDFpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwaUN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTIiBjb21tYW5kPSJfQUhBc3FTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwaVN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtVIiBjb21tYW5kPSJfQUhBcy1TeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwaWl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK0NUUkwrRyIgY29tbWFuZD0iX0FIQXR2eXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cGl5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrVyIgY29tbWFuZD0iX0FIQXREU3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cGpDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwreyIgY29tbWFuZD0iX0FIQUdWU3hRRWV5bXlienN1TDluQkEiPgorICAgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUc5cGpTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJTcGxpdHRlci5pc0hvcml6b250YWwiIG5hbWU9IlNwbGl0dGVyLmlzSG9yaXpvbnRhbCIgdmFsdWU9ImZhbHNlIi8+CisgICAgPC9iaW5kaW5ncz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cGppeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtFIEwiIGNvbW1hbmQ9Il9BSEFGZGl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBqeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrRSBOIiBjb21tYW5kPSJfQUhBdkV5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwa0N4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK0UgUCIgY29tbWFuZD0iX0FHX2ZfQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cGtTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtFIFIiIGNvbW1hbmQ9Il9BSEFHRkN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBraXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrRSBFIiBjb21tYW5kPSJfQUhBRm5peFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwa3l4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK0UgRyIgY29tbWFuZD0iX0FIQUdneXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cGxDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtFIEoiIGNvbW1hbmQ9Il9BR19nUHl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBsU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrRSBUIiBjb21tYW5kPSJfQUhBRmxTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwbGl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK0UgUyIgY29tbWFuZD0iX0FIQXMwaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cGx5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtRIEgiIGNvbW1hbmQ9Il9BSEF0eml4UUVleW15YnpzdUw5bkJBIj4KKyAgICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FHOXBtQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3Muc2hvd1ZpZXcudmlld0lkIiBuYW1lPSJvcmcuZWNsaXBzZS51aS52aWV3cy5zaG93Vmlldy52aWV3SWQiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS5jaGVhdHNoZWV0cy52aWV3cy5DaGVhdFNoZWV0VmlldyIvPgorICAgIDwvYmluZGluZ3M+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBtU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrUSBKIiBjb21tYW5kPSJfQUhBdHppeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BRzlwbWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLnNob3dWaWV3LnZpZXdJZCIgbmFtZT0ib3JnLmVjbGlwc2UudWkudmlld3Muc2hvd1ZpZXcudmlld0lkIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LnVpLkphdmFkb2NWaWV3Ii8+CisgICAgPC9iaW5kaW5ncz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cG15eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtRIEwiIGNvbW1hbmQ9Il9BSEF0eml4UUVleW15YnpzdUw5bkJBIj4KKyAgICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FHOXBuQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3Muc2hvd1ZpZXcudmlld0lkIiBuYW1lPSJvcmcuZWNsaXBzZS51aS52aWV3cy5zaG93Vmlldy52aWV3SWQiIHZhbHVlPSJvcmcuZWNsaXBzZS5wZGUucnVudGltZS5Mb2dWaWV3Ii8+CisgICAgPC9iaW5kaW5ncz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cG5TeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtRIEsiIGNvbW1hbmQ9Il9BSEF0eml4UUVleW15YnpzdUw5bkJBIj4KKyAgICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FHOXBuaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3Muc2hvd1ZpZXcudmlld0lkIiBuYW1lPSJvcmcuZWNsaXBzZS51aS52aWV3cy5zaG93Vmlldy52aWV3SWQiIHZhbHVlPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS52aWV3cy50YXNrcyIvPgorICAgIDwvYmluZGluZ3M+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBueXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrQ1RSTCtTSElGVCtBUlJPV19VUCIgY29tbWFuZD0iX0FIQXRraXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cG9DeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtRIEIiIGNvbW1hbmQ9Il9BSEF0eml4UUVleW15YnpzdUw5bkJBIj4KKyAgICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FHOXBvU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3Muc2hvd1ZpZXcudmlld0lkIiBuYW1lPSJvcmcuZWNsaXBzZS51aS52aWV3cy5zaG93Vmlldy52aWV3SWQiIHZhbHVlPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5CcmVha3BvaW50VmlldyIvPgorICAgIDwvYmluZGluZ3M+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBvaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrQ1RSTCtTSElGVCtBUlJPV19ET1dOIiBjb21tYW5kPSJfQUhBdkxpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwb3l4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK0NUUkwrU0hJRlQrQVJST1dfUklHSFQiIGNvbW1hbmQ9Il9BSEF0ZkN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBwQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrUSBEIiBjb21tYW5kPSJfQUhBdHppeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BRzlwcFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLnNob3dWaWV3LnZpZXdJZCIgbmFtZT0ib3JnLmVjbGlwc2UudWkudmlld3Muc2hvd1ZpZXcudmlld0lkIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LnVpLlNvdXJjZVZpZXciLz4KKyAgICA8L2JpbmRpbmdzPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwcGl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1EgQyIgY29tbWFuZD0iX0FIQXR6aXhRRWV5bXlienN1TDluQkEiPgorICAgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUc5cHB5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5zaG93Vmlldy52aWV3SWQiIG5hbWU9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLnNob3dWaWV3LnZpZXdJZCIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLmNvbnNvbGUuQ29uc29sZVZpZXciLz4KKyAgICA8L2JpbmRpbmdzPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwcUN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK0NUUkwrU0hJRlQrRjEyIiBjb21tYW5kPSJfQUhBdTlpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwcVN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtOVU1QQURfTVVMVElQTFkiIGNvbW1hbmQ9Il9BSEF0cHl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBxaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK0Y0IiBjb21tYW5kPSJfQUhBdERTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwcXl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtGNiIgY29tbWFuZD0iX0FIQUZ5Q3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cHJDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrTlVNUEFEX0RJVklERSIgY29tbWFuZD0iX0FIQUdWeXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cHJTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrRjciIGNvbW1hbmQ9Il9BSEF1NUN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXByaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK0Y4IiBjb21tYW5kPSJfQUhBR1ZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwcnl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtGOSIgY29tbWFuZD0iX0FIQXN4Q3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cHNDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrRjExIiBjb21tYW5kPSJfQUhBdEppeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwc1N4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtGMTIiIGNvbW1hbmQ9Il9BR19nSGl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBzaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrUSBYIiBjb21tYW5kPSJfQUhBdHppeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BRzlwc3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLnNob3dWaWV3LnZpZXdJZCIgbmFtZT0ib3JnLmVjbGlwc2UudWkudmlld3Muc2hvd1ZpZXcudmlld0lkIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkudmlld3MuUHJvYmxlbVZpZXciLz4KKyAgICA8L2JpbmRpbmdzPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwdEN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1EgWiIgY29tbWFuZD0iX0FIQXR6aXhRRWV5bXlienN1TDluQkEiPgorICAgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUc5cHRTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5zaG93Vmlldy52aWV3SWQiIG5hbWU9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLnNob3dWaWV3LnZpZXdJZCIgdmFsdWU9Im9yZy5lY2xpcHNlLnRlYW0udWkuR2VuZXJpY0hpc3RvcnlWaWV3Ii8+CisgICAgPC9iaW5kaW5ncz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cHRpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtRIFkiIGNvbW1hbmQ9Il9BSEF0eml4UUVleW15YnpzdUw5bkJBIj4KKyAgICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FHOXB0eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3Muc2hvd1ZpZXcudmlld0lkIiBuYW1lPSJvcmcuZWNsaXBzZS51aS52aWV3cy5zaG93Vmlldy52aWV3SWQiIHZhbHVlPSJvcmcuZWNsaXBzZS50ZWFtLnN5bmMudmlld3MuU3luY2hyb25pemVWaWV3Ii8+CisgICAgPC9iaW5kaW5ncz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cHVDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrRjQiIGNvbW1hbmQ9Il9BSEFHZXl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXB1U3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK0Y2IiBjb21tYW5kPSJfQUhBdHN5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwdWl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK0Y3IiBjb21tYW5kPSJfQUhBdDlDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwdXl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1EgUCIgY29tbWFuZD0iX0FIQXR6aXhRRWV5bXlienN1TDluQkEiPgorICAgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUc5cHZDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5zaG93Vmlldy52aWV3SWQiIG5hbWU9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLnNob3dWaWV3LnZpZXdJZCIgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlRXhwbG9yZXIiLz4KKyAgICA8L2JpbmRpbmdzPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwdlN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1EgTyIgY29tbWFuZD0iX0FIQXR6aXhRRWV5bXlienN1TDluQkEiPgorICAgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUc5cHZpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5zaG93Vmlldy52aWV3SWQiIG5hbWU9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLnNob3dWaWV3LnZpZXdJZCIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLkNvbnRlbnRPdXRsaW5lIi8+CisgICAgPC9iaW5kaW5ncz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cHZ5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtRIFEiIGNvbW1hbmQ9Il9BSEF0eml4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXB3Q3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrUSBUIiBjb21tYW5kPSJfQUhBdHppeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BRzlwd1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLnNob3dWaWV3LnZpZXdJZCIgbmFtZT0ib3JnLmVjbGlwc2UudWkudmlld3Muc2hvd1ZpZXcudmlld0lkIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LnVpLlR5cGVIaWVyYXJjaHkiLz4KKyAgICA8L2JpbmRpbmdzPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwd2l4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1EgUyIgY29tbWFuZD0iX0FIQXR6aXhRRWV5bXlienN1TDluQkEiPgorICAgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUc5cHd5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5zaG93Vmlldy52aWV3SWQiIG5hbWU9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLnNob3dWaWV3LnZpZXdJZCIgdmFsdWU9Im9yZy5lY2xpcHNlLnNlYXJjaC51aS52aWV3cy5TZWFyY2hWaWV3Ii8+CisgICAgPC9iaW5kaW5ncz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cHhDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtRIFYiIGNvbW1hbmQ9Il9BSEF0eml4UUVleW15YnpzdUw5bkJBIj4KKyAgICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FHOXB4U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3Muc2hvd1ZpZXcudmlld0lkIiBuYW1lPSJvcmcuZWNsaXBzZS51aS52aWV3cy5zaG93Vmlldy52aWV3SWQiIHZhbHVlPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5WYXJpYWJsZVZpZXciLz4KKyAgICA8L2JpbmRpbmdzPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlweGl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtGNyIgY29tbWFuZD0iX0FIQXRQaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cHh5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrRjgiIGNvbW1hbmQ9Il9BSEFHS3l4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXB5Q3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK0Y5IiBjb21tYW5kPSJfQUhBRjdDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlweVN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtGMTEiIGNvbW1hbmQ9Il9BSEF1cWl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXB5aXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK0YxMiIgY29tbWFuZD0iX0FIQUYyU3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cHl5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtYIFIiIGNvbW1hbmQ9Il9BSEF0QUN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXB6Q3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrRCBSIiBjb21tYW5kPSJfQUhBdEF5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8L2JpbmRpbmdUYWJsZXM+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXB6U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuYW50LnVpLkFudEVkaXRvclNjb3BlIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFZU3hRRWV5bXlienN1TDluQkEiPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlweml4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iRjMiIGNvbW1hbmQ9Il9BR19nRVN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXB6eXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJTSElGVCtGMiIgY29tbWFuZD0iX0FIQXRjaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cDBDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtPIiBjb21tYW5kPSJfQUdfZ0NpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwMFN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1IiIGNvbW1hbmQ9Il9BSEFGZ1N4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXAwaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK0YiIGNvbW1hbmQ9Il9BSEF1elN4UUVleW15YnpzdUw5bkJBIi8+CisgIDwvYmluZGluZ1RhYmxlcz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cDB5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5nZW5lcmljZWRpdG9yLmdlbmVyaWNFZGl0b3JDb250ZXh0IiBiaW5kaW5nQ29udGV4dD0iX0FHLVFaQ3hRRWV5bXlienN1TDluQkEiPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwMUN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iRjMiIGNvbW1hbmQ9Il9BSEF1a0N4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXAxU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK0ciIGNvbW1hbmQ9Il9BSEF1b3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDwvYmluZGluZ1RhYmxlcz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cDFpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5qYXZhc2NyaXB0Vmlld1Njb3BlIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFTeXhRRWV5bXlienN1TDluQkEiPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwMXl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iRjMiIGNvbW1hbmQ9Il9BSEF0LVN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXAyQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJGNCIgY29tbWFuZD0iX0FIQXM0Q3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cDJTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IlNISUZUK0YyIiBjb21tYW5kPSJfQUhBdVV5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwMml4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtHIiBjb21tYW5kPSJfQUhBdDNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwMnl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK0kiIGNvbW1hbmQ9Il9BSEF0Ynl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXAzQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrSiIgY29tbWFuZD0iX0FIQXRreXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cDNTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtMIiBjb21tYW5kPSJfQUhBczd5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwM2l4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK00iIGNvbW1hbmQ9Il9BSEF1cGl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXAzeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrQyIgY29tbWFuZD0iX0FIQUdSaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cDRDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrVSIgY29tbWFuZD0iX0FIQUdEU3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cDRTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrSCIgY29tbWFuZD0iX0FIQXZTeXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cDRpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtaIiBjb21tYW5kPSJfQUhBc3hpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwNHl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtPIiBjb21tYW5kPSJfQUhBRnNpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwNUN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1IiIGNvbW1hbmQ9Il9BSEF0clN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXA1U3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrUyIgY29tbWFuZD0iX0FIQXRveXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cDVpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtUIiBjb21tYW5kPSJfQUhBRjFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwNXl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1YiIGNvbW1hbmQ9Il9BSEFHRUN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXA2Q3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK0ciIGNvbW1hbmQ9Il9BSEF0WlN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXA2U3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrQ1RSTCtIIiBjb21tYW5kPSJfQUhBdU9DeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwNml4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1EgSiIgY29tbWFuZD0iX0FIQXV1U3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cDZ5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtRIEQiIGNvbW1hbmQ9Il9BSEF0N2l4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXA3Q3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrUSBQIiBjb21tYW5kPSJfQUhBdHVDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwN1N4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1EgVCIgY29tbWFuZD0iX0FIQXRqeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPC9iaW5kaW5nVGFibGVzPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlwN2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuc3RydWN0dXJlZFRleHRFZGl0b3JTY29wZSIgYmluZGluZ0NvbnRleHQ9Il9BRy1RVHl4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cDd5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkYzIiBjb21tYW5kPSJfQUhBdFhpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwOEN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCsvIiBjb21tYW5kPSJfQUhBdFVDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwOFN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtJIiBjb21tYW5kPSJfQUhBdWdTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwOGl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtPIiBjb21tYW5kPSJfQUhBdGJpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwOHl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtcIiBjb21tYW5kPSJfQUhBdHdTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwOUN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtQIiBjb21tYW5kPSJfQUhBdFlTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwOVN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtBIiBjb21tYW5kPSJfQUhBdlNTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwOWl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtDIiBjb21tYW5kPSJfQUhBdXl5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwOXl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtGIiBjb21tYW5kPSJfQUhBdklpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwLUN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCs+IiBjb21tYW5kPSJfQUhBdVlTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwLVN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK0FSUk9XX1VQIiBjb21tYW5kPSJfQUhBdDZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwLWl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK0FSUk9XX0RPV04iIGNvbW1hbmQ9Il9BSEF1QVN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXAteXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrQVJST1dfTEVGVCIgY29tbWFuZD0iX0FIQUZpaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cF9DeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtBUlJPV19SSUdIVCIgY29tbWFuZD0iX0FIQXRtaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cF9TeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrQVJST1dfVVAiIGNvbW1hbmQ9Il9BSEFHQUN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBfaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK0FSUk9XX0RPV04iIGNvbW1hbmQ9Il9BSEFzN2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDwvYmluZGluZ1RhYmxlcz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cF95eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5idWlsZHNoaXAudWkuY29udGV4dHMudGFza3ZpZXciIGJpbmRpbmdDb250ZXh0PSJfQUctUWVpeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFBQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJGNSIgY29tbWFuZD0iX0FIQXV5aXhRRWV5bXlienN1TDluQkEiLz4KKyAgPC9iaW5kaW5nVGFibGVzPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxQVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLmRlYnVnZ2luZyIgYmluZGluZ0NvbnRleHQ9Il9BRy1RY3l4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cUFpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkY1IiBjb21tYW5kPSJfQUhBRmh5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxQXl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iRjYiIGNvbW1hbmQ9Il9BSEFzdkN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFCQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJGNyIgY29tbWFuZD0iX0FIQXZGQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cUJTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkY4IiBjb21tYW5kPSJfQUhBdGVpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxQml4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtSIiBjb21tYW5kPSJfQUhBdFFTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxQnl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtGMiIgY29tbWFuZD0iX0FIQXVUeXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cUNDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrRjUiIGNvbW1hbmQ9Il9BSEF1Mnl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFDU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUKzMiIGNvbW1hbmQ9Il9BSEFGZ3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDwvYmluZGluZ1RhYmxlcz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cUNpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS50bS50ZXJtaW5hbC5FZGl0Q29udGV4dCIgYmluZGluZ0NvbnRleHQ9Il9BRy1RUnl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFDeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLlNRTEVkaXRvclNjb3BlIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFUQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cURDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS50bS50ZXJtaW5hbC5UZXJtaW5hbENvbnRleHQiIGJpbmRpbmdDb250ZXh0PSJfQUctUWVDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxRFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLm1lbW9yeS5hYnN0cmFjdGFzeW5jdGFibGVyZW5kZXJpbmciIGJpbmRpbmdDb250ZXh0PSJfQUctUWRDeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFEaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUKywiIGNvbW1hbmQ9Il9BSEF1a3l4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFEeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUKy4iIGNvbW1hbmQ9Il9BSEF1UFN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFFQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK0ciIGNvbW1hbmQ9Il9BSEF1UGl4UUVleW15YnpzdUw5bkJBIi8+CisgIDwvYmluZGluZ1RhYmxlcz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cUVTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5CcmVha3BvaW50VmlldyIgYmluZGluZ0NvbnRleHQ9Il9BRy1RU0N4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cUVpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtDUiIgY29tbWFuZD0iX0FIQXRMaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cUV5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrQ1IiIGNvbW1hbmQ9Il9BSEFGbEN4UUVleW15YnpzdUw5bkJBIi8+CisgIDwvYmluZGluZ1RhYmxlcz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cUZDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuamF2YUVkaXRvclNjb3BlIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFUaXhRRWV5bXlienN1TDluQkEiPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxRlN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCsvIiBjb21tYW5kPSJfQUhBcy1peFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxRml4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCsvIiBjb21tYW5kPSJfQUhBdFZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxRnl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtJIiBjb21tYW5kPSJfQUhBR2tDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxR0N4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtPIiBjb21tYW5kPSJfQUhBczB5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxR1N4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtcIiBjb21tYW5kPSJfQUhBRnN5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxR2l4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK08iIGNvbW1hbmQ9Il9BSEFHY0N4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFHeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK1AiIGNvbW1hbmQ9Il9BSEF0OHl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFIQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrQiIgY29tbWFuZD0iX0FIQXZOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cUhTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrMiBSIiBjb21tYW5kPSJfQUhBdU1peFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxSGl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCs3IiBjb21tYW5kPSJfQUhBdFZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxSHl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtNIiBjb21tYW5kPSJfQUhBR05DeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxSUN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtDIiBjb21tYW5kPSJfQUhBdFZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxSVN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1UiIGNvbW1hbmQ9Il9BSEF1SFN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFJaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK0YiIGNvbW1hbmQ9Il9BSEF1elN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFJeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1QiIGNvbW1hbmQ9Il9BSEF0WHl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFKQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK0YzIiBjb21tYW5kPSJfQUhBdkNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxSlN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK0FSUk9XX1VQIiBjb21tYW5kPSJfQUhBczV5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxSml4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK0FSUk9XX0RPV04iIGNvbW1hbmQ9Il9BSEFGMnl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFKeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrQVJST1dfTEVGVCIgY29tbWFuZD0iX0FIQXNoQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cUtDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtBUlJPV19SSUdIVCIgY29tbWFuZD0iX0FIQUZyU3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cUtTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrMiBNIiBjb21tYW5kPSJfQUhBc2lTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxS2l4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCsyIEwiIGNvbW1hbmQ9Il9BSEFGcEN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFLeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK0FSUk9XX1VQIiBjb21tYW5kPSJfQUhBdER5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxTEN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtBUlJPV19ET1dOIiBjb21tYW5kPSJfQUhBczFTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxTFN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCsyIEYiIGNvbW1hbmQ9Il9BSEF1OGl4UUVleW15YnpzdUw5bkJBIi8+CisgIDwvYmluZGluZ1RhYmxlcz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cUxpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5qYXZhRWRpdG9yU2NvcGUiIGJpbmRpbmdDb250ZXh0PSJfQUctUVNpeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFMeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUKy8iIGNvbW1hbmQ9Il9BSEFzN1N4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFNQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMKy8iIGNvbW1hbmQ9Il9BSEF0ZXl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFNU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK0kiIGNvbW1hbmQ9Il9BSEFzdVN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFNaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK08iIGNvbW1hbmQ9Il9BR19nSml4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFNeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK1wiIGNvbW1hbmQ9Il9BSEFGelN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFOQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrTyIgY29tbWFuZD0iX0FIQXNrQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cU5TeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrUCIgY29tbWFuZD0iX0FIQXRxaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cU5peFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrMiBSIiBjb21tYW5kPSJfQUhBR055eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxTnl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtUIiBjb21tYW5kPSJfQUhBczhDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxT0N4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK0UiIGNvbW1hbmQ9Il9BSEF0S1N4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFPU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMKzciIGNvbW1hbmQ9Il9BSEF0ZXl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFPaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK00iIGNvbW1hbmQ9Il9BSEFGaml4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFPeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK0MiIGNvbW1hbmQ9Il9BSEF0ZXl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFQQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrVSIgY29tbWFuZD0iX0FIQUdlaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cVBTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrRiIgY29tbWFuZD0iX0FIQUZxQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cVBpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrVCIgY29tbWFuZD0iX0FIQXRsQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cVB5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrRjMiIGNvbW1hbmQ9Il9BSEF0UWl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFRQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrQVJST1dfVVAiIGNvbW1hbmQ9Il9BSEFGZlN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFRU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrQVJST1dfRE9XTiIgY29tbWFuZD0iX0FIQXVHaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cVFpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtBUlJPV19MRUZUIiBjb21tYW5kPSJfQUhBdXp5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxUXl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK0FSUk9XX1JJR0hUIiBjb21tYW5kPSJfQUhBdHpDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxUkN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCsyIEwiIGNvbW1hbmQ9Il9BSEF2Q2l4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFSU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK0FSUk9XX1VQIiBjb21tYW5kPSJfQUhBdlVTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxUml4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtBUlJPV19ET1dOIiBjb21tYW5kPSJfQUhBRjd5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxUnl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCsyIEYiIGNvbW1hbmQ9Il9BSEFzbWl4UUVleW15YnpzdUw5bkJBIi8+CisgIDwvYmluZGluZ1RhYmxlcz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cVNDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkucHJvcGVydGllc0VkaXRvclNjb3BlIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFhaXhRRWV5bXlienN1TDluQkEiPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxU1N4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCsvIiBjb21tYW5kPSJfQUhBdFZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxU2l4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCs3IiBjb21tYW5kPSJfQUhBdFZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxU3l4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtDIiBjb21tYW5kPSJfQUhBdFZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8L2JpbmRpbmdUYWJsZXM+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFUQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkubWVtb3J5dmlldyIgYmluZGluZ0NvbnRleHQ9Il9BRy1RYlN4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cVRTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrTiIgY29tbWFuZD0iX0FIQXR1aXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cVRpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtDVFJMK00iIGNvbW1hbmQ9Il9BSEFzeXl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFUeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrQ1RSTCtOIiBjb21tYW5kPSJfQUhBdTl5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxVUN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtUIiBjb21tYW5kPSJfQUhBR09DeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxVVN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtXIiBjb21tYW5kPSJfQUhBdGlTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8L2JpbmRpbmdUYWJsZXM+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFVaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuZWRpdG9ycy50YXNrIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFaaXhRRWV5bXlienN1TDluQkEiPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxVXl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtPIiBjb21tYW5kPSJfQUhBdkFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxVkN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK0kiIGNvbW1hbmQ9Il9BSEFzcUN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFWU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrQyIgY29tbWFuZD0iX0FIQXRJQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cVZpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrTSIgY29tbWFuZD0iX0FHX2dKU3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cVZ5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtSIiBjb21tYW5kPSJfQUhBc3RpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxV0N4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1MiIGNvbW1hbmQ9Il9BSEFHZ2l4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFXU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrVSIgY29tbWFuZD0iX0FIQXRfeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPC9iaW5kaW5nVGFibGVzPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxV2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLndpa2l0ZXh0LnVpLmVkaXRvci5tYXJrdXBTb3VyY2VDb250ZXh0IiBiaW5kaW5nQ29udGV4dD0iX0FHLVFhQ3hRRWV5bXlienN1TDluQkEiPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxV3l4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtPIiBjb21tYW5kPSJfQUdfZ05peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8L2JpbmRpbmdUYWJsZXM+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFYQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucGRlLnVpLnBkZUVkaXRvckNvbnRleHQiIGJpbmRpbmdDb250ZXh0PSJfQUctUVl5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxWFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnNlcnZlclZpZXdTY29wZSIgYmluZGluZ0NvbnRleHQ9Il9BRy1RY2l4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cVhpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtDVFJMK1AiIGNvbW1hbmQ9Il9BSEF0LWl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFYeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrQ1RSTCtSIiBjb21tYW5kPSJfQUhBdkVDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxWUN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK0NUUkwrUyIgY29tbWFuZD0iX0FIQUdHaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cVlTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtDVFJMK0QiIGNvbW1hbmQ9Il9BSEF0M3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDwvYmluZGluZ1RhYmxlcz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cVlpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLlJlcG9zaXRvcmllc1ZpZXciIGJpbmRpbmdDb250ZXh0PSJfQUctUWV5eFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFZeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK0MiIGNvbW1hbmQ9Il9BSEFHUVN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFaQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1YiIGNvbW1hbmQ9Il9BSEF0UkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDwvYmluZGluZ1RhYmxlcz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cVpTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLlJlZmxvZ1ZpZXciIGJpbmRpbmdDb250ZXh0PSJfQUctUWR5eFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFaaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK0MiIGNvbW1hbmQ9Il9BSEFGeVN4UUVleW15YnpzdUw5bkJBIi8+CisgIDwvYmluZGluZ1RhYmxlcz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cVp5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUueG1sIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFVeXhRRWV5bXlienN1TDluQkEiPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxYUN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtQIiBjb21tYW5kPSJfQUhBdVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxYVN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtEIiBjb21tYW5kPSJfQUhBcy1DeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8L2JpbmRpbmdUYWJsZXM+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFhaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmNsYXNzRmlsZUVkaXRvclNjb3BlIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFUU3hRRWV5bXlienN1TDluQkEiPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxYXl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCsxIiBjb21tYW5kPSJfQUhBdkd5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8L2JpbmRpbmdUYWJsZXM+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFiQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmJyZWFkY3J1bWJFZGl0b3JTY29wZSIgYmluZGluZ0NvbnRleHQ9Il9BRy1RZnl4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cWJTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtCIiBjb21tYW5kPSJfQUhBdk5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8L2JpbmRpbmdUYWJsZXM+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFiaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQuY2hyb21pdW0uZGVidWcudWkuZWRpdG9ycy5Kc0VkaXRvci5jb250ZXh0IiBiaW5kaW5nQ29udGV4dD0iX0FHLVFmU3hRRWV5bXlienN1TDluQkEiPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxYnl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtJIiBjb21tYW5kPSJfQUhBdV95eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8L2JpbmRpbmdUYWJsZXM+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFjQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuanN0LmpzcC51aS5zdHJ1Y3R1cmVkLnRleHQuZWRpdG9yLmpzcC5zY29wZSIgYmluZGluZ0NvbnRleHQ9Il9BRy1RV2l4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cWNTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrTSIgY29tbWFuZD0iX0FIQUdSU3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cWNpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtSIiBjb21tYW5kPSJfQUhBdS1peFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxY3l4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1YiIGNvbW1hbmQ9Il9BSEFzMUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDwvYmluZGluZ1RhYmxlcz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cWRDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi53aWtpdGV4dC50YXNrcy51aS5tYXJrdXBTb3VyY2VDb250ZXh0IiBiaW5kaW5nQ29udGV4dD0iX0FHLVFhU3hRRWV5bXlienN1TDluQkEiPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxZFN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtPIiBjb21tYW5kPSJfQUdfZ05peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8L2JpbmRpbmdUYWJsZXM+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFkaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuY29uc29sZSIgYmluZGluZ0NvbnRleHQ9Il9BRy1RYnl4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cWR5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrWiIgY29tbWFuZD0iX0FIQXZBaXhRRWV5bXlienN1TDluQkEiPgorICAgICAgPHRhZ3M+cGxhdGZvcm06d2luMzI8L3RhZ3M+CisgICAgPC9iaW5kaW5ncz4KKyAgPC9iaW5kaW5nVGFibGVzPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxZUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpzdC5qc2YuZmFjZXNjb25maWcuZWRpdG9yQ29udGV4dCIgYmluZGluZ0NvbnRleHQ9Il9BRy1RYXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFlU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuanN0LnBhZ2VkZXNpZ25lci5lZGl0b3JDb250ZXh0IiBiaW5kaW5nQ29udGV4dD0iX0FHLVFZaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cWVpeFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1RaFN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFleXhRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0PSJfQUctUWhpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxZkN4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFoeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cWZTeFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1RaUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFmaXhRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0PSJfQUctUWlTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxZnl4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFpaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cWdDeFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1RaXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFnU3hRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0PSJfQUctUWpDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxZ2l4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFqU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cWd5eFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1Raml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFoQ3hRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0PSJfQUctUWp5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxaFN4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFrQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cWhpeFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1Ra1N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFoeXhRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0PSJfQUctUWtpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxaUN4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFreXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cWlTeFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1RbEN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFpaXhRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0PSJfQUctUWxTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxaXl4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFsaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cWpDeFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1RbHl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFqU3hRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0PSJfQUctUW1DeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxaml4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFtU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cWp5eFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1RbWl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFrQ3hRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0PSJfQUctUW15eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxa1N4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFuQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cWtpeFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1RblN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFreXhRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0PSJfQUctUW5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxbEN4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFueXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cWxTeFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1Rb0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFsaXhRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0PSJfQUctUW9TeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxbHl4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFvaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cW1DeFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1Rb3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFtU3hRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0PSJfQUctUXBDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxbWl4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFwU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cW15eFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1RcGl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFuQ3hRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0PSJfQUctUXB5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxblN4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFxQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cW5peFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1RcVN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFueXhRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0PSJfQUctUXFpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxb0N4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFxeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cW9TeFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1RckN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFvaXhRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0PSJfQUctUXJTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxb3l4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFyaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cXBDeFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1Rcnl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFwU3hRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0PSJfQUctUXNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxcGl4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFzU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cXB5eFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1Rc2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFxQ3hRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0PSJfQUctUXN5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxcVN4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVF0Q3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUctUVFDeFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1RdFN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHLVFRU3hRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0PSJfQUctUXRpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRy1RUWl4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVF0eXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUctUVF5eFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1RdUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1RUkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmNvbnRleHRzLmRpYWxvZ0FuZFdpbmRvdyIgY29udHJpYnV0b3JVUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucGxhdGZvcm0iIG5hbWU9IkluIERpYWxvZ3MgYW5kIFdpbmRvd3MiIGRlc2NyaXB0aW9uPSJFaXRoZXIgYSBkaWFsb2cgb3IgYSB3aW5kb3cgaXMgb3BlbiI+CisgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFSU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuY29udGV4dHMud2luZG93IiBjb250cmlidXRvclVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5wbGF0Zm9ybSIgbmFtZT0iSW4gV2luZG93cyIgZGVzY3JpcHRpb249IkEgd2luZG93IGlzIG9wZW4iPgorICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFSaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZTQudWkuY29udGV4dHMudmlld3MiIGNvbnRyaWJ1dG9yVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnBsYXRmb3JtIiBuYW1lPSIlYmluZGluZ2NvbnRleHQubmFtZS5iaW5kaW5nVmlldyIvPgorICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFSeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudG0udGVybWluYWwuRWRpdENvbnRleHQiIG5hbWU9IlRlcm1pbmFsIENvbnRyb2wgaW4gRm9jdXMiIGRlc2NyaXB0aW9uPSJTaG93IG1vZGlmaWVkIGtleWJvYXJkIHNob3J0Y3V0cyBpbiBjb250ZXh0IG1lbnUiLz4KKyAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RU0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLkJyZWFrcG9pbnRWaWV3IiBuYW1lPSJJbiBCcmVha3BvaW50cyBWaWV3IiBkZXNjcmlwdGlvbj0iVGhlIGJyZWFrcG9pbnRzIHZpZXcgY29udGV4dCIvPgorICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFTU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudGV4dEVkaXRvclNjb3BlIiBuYW1lPSJFZGl0aW5nIFRleHQiIGRlc2NyaXB0aW9uPSJFZGl0aW5nIFRleHQgQ29udGV4dCI+CisgICAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RU2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmphdmFFZGl0b3JTY29wZSIgbmFtZT0iRWRpdGluZyBKYXZhU2NyaXB0IFNvdXJjZSIgZGVzY3JpcHRpb249IkVkaXRpbmcgSmF2YVNjcmlwdCBTb3VyY2UgQ29udGV4dCI+CisgICAgICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFTeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuamF2YXNjcmlwdFZpZXdTY29wZSIgbmFtZT0iSmF2YVNjcmlwdCBWaWV3IiBkZXNjcmlwdGlvbj0iSmF2YVNjcmlwdCBWaWV3IENvbnRleHQiLz4KKyAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFUQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLlNRTEVkaXRvclNjb3BlIiBuYW1lPSJFZGl0aW5nIFNRTCIgZGVzY3JpcHRpb249IkVkaXRpbmcgU1FMIENvbnRleHQiLz4KKyAgICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFUU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmNsYXNzRmlsZUVkaXRvclNjb3BlIiBuYW1lPSJCcm93c2luZyBhdHRhY2hlZCBKYXZhIFNvdXJjZSIgZGVzY3JpcHRpb249IkJyb3dzaW5nIGF0dGFjaGVkIEphdmEgU291cmNlIENvbnRleHQiLz4KKyAgICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFUaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmphdmFFZGl0b3JTY29wZSIgbmFtZT0iRWRpdGluZyBKYXZhIFNvdXJjZSIgZGVzY3JpcHRpb249IkVkaXRpbmcgSmF2YSBTb3VyY2UgQ29udGV4dCIvPgorICAgICAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUVR5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnN0cnVjdHVyZWRUZXh0RWRpdG9yU2NvcGUiIG5hbWU9IkVkaXRpbmcgaW4gU3RydWN0dXJlZCBUZXh0IEVkaXRvcnMiIGRlc2NyaXB0aW9uPSJFZGl0aW5nIGluIFN0cnVjdHVyZWQgVGV4dCBFZGl0b3JzIj4KKyAgICAgICAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUVVDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QueG1sLmNsZWFudXAiIG5hbWU9IlhNTCBTb3VyY2UgQ2xlYW51cCIgZGVzY3JpcHRpb249IlhNTCBTb3VyY2UgQ2xlYW51cCIvPgorICAgICAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RVVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UuY29tbWVudHMiIG5hbWU9IlNvdXJjZSBDb21tZW50cyBpbiBTdHJ1Y3R1cmVkIFRleHQgRWRpdG9ycyIgZGVzY3JpcHRpb249IlNvdXJjZSBDb21tZW50cyBpbiBTdHJ1Y3R1cmVkIFRleHQgRWRpdG9ycyIvPgorICAgICAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RVWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiIG5hbWU9IkpTUCBTb3VyY2UiIGRlc2NyaXB0aW9uPSJKU1AgU291cmNlIi8+CisgICAgICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFVeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnhtbCIgbmFtZT0iRWRpdGluZyBYTUwgU291cmNlIiBkZXNjcmlwdGlvbj0iRWRpdGluZyBYTUwgU291cmNlIi8+CisgICAgICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFWQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC5vY2N1cnJlbmNlcyIgbmFtZT0iWE1MIFNvdXJjZSBPY2N1cnJlbmNlcyIgZGVzY3JpcHRpb249IlhNTCBTb3VyY2UgT2NjdXJyZW5jZXMiLz4KKyAgICAgICAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUVZTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QueG1sLmdyYW1tYXIiIG5hbWU9IlhNTCBTb3VyY2UgR3JhbW1hciIgZGVzY3JpcHRpb249IlhNTCBTb3VyY2UgR3JhbW1hciIvPgorICAgICAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RVml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC54bWwuY29tbWVudHMiIG5hbWU9IlhNTCBTb3VyY2UgQ29tbWVudHMiIGRlc2NyaXB0aW9uPSJYTUwgU291cmNlIENvbW1lbnRzIi8+CisgICAgICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFWeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC5leHBhbmQiIG5hbWU9IlhNTCBTb3VyY2UgRXhwYW5kL0NvbGxhcHNlIiBkZXNjcmlwdGlvbj0iWE1MIFNvdXJjZSBFeHBhbmQvQ29sbGFwc2UiLz4KKyAgICAgICAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUVdDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3Quc3NlLmhpZGVGb3JtYXQiIG5hbWU9IkVkaXRpbmcgaW4gU3RydWN0dXJlZCBUZXh0IEVkaXRvcnMiIGRlc2NyaXB0aW9uPSJFZGl0aW5nIGluIFN0cnVjdHVyZWQgVGV4dCBFZGl0b3JzIi8+CisgICAgICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFXU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC5zZWxlY3Rpb24iIG5hbWU9IlhNTCBTb3VyY2UgU2VsZWN0aW9uIiBkZXNjcmlwdGlvbj0iWE1MIFNvdXJjZSBTZWxlY3Rpb24iLz4KKyAgICAgICAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUVdpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnN0cnVjdHVyZWQudGV4dC5lZGl0b3IuanNwLnNjb3BlIiBuYW1lPSJFZGl0aW5nIEpTUCBTb3VyY2UiIGRlc2NyaXB0aW9uPSJFZGl0aW5nIEpTUCBTb3VyY2UiLz4KKyAgICAgICAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUVd5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QueG1sLm5hdmlnYXRpb24iIG5hbWU9IlhNTCBTb3VyY2UgTmF2aWdhdGlvbiIgZGVzY3JpcHRpb249IlhNTCBTb3VyY2UgTmF2aWdhdGlvbiIvPgorICAgICAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RWEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc29uLmNvcmUuanNvbnNvdXJjZSIgbmFtZT0iJXNjb3BlLnN0cnVjdHVyZWQudGV4dC5lZGl0b3IuanNvbi5uYW1lIiBkZXNjcmlwdGlvbj0iJXNjb3BlLnN0cnVjdHVyZWQudGV4dC5lZGl0b3IuanNvbi5kZXNjcmlwdGlvbiIvPgorICAgICAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RWFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5jc3Nzb3VyY2UiIG5hbWU9IkVkaXRpbmcgQ1NTIFNvdXJjZSIgZGVzY3JpcHRpb249IkVkaXRpbmcgQ1NTIFNvdXJjZSIvPgorICAgICAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RWGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaHRtbHNvdXJjZSIgbmFtZT0iRWRpdGluZyBIVE1MIFNvdXJjZSIgZGVzY3JpcHRpb249IkVkaXRpbmcgSFRNTCBTb3VyY2UiLz4KKyAgICAgICAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUVh5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QueG1sLmRlcGVuZGVuY2llcyIgbmFtZT0iWE1MIFNvdXJjZSBEZXBlbmRlbmNpZXMiIGRlc2NyaXB0aW9uPSJYTUwgU291cmNlIERlcGVuZGVuY2llcyIvPgorICAgICAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RWUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5odG1sLm9jY3VycmVuY2VzIiBuYW1lPSJIVE1MIFNvdXJjZSBPY2N1cnJlbmNlcyIgZGVzY3JpcHRpb249IkhUTUwgU291cmNlIE9jY3VycmVuY2VzIi8+CisgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RWVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmFudC51aS5BbnRFZGl0b3JTY29wZSIgbmFtZT0iRWRpdGluZyBBbnQgQnVpbGRmaWxlcyIgZGVzY3JpcHRpb249IkVkaXRpbmcgQW50IEJ1aWxkZmlsZXMgQ29udGV4dCIvPgorICAgICAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUVlpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qc3QucGFnZWRlc2lnbmVyLmVkaXRvckNvbnRleHQiIG5hbWU9IlVzaW5nIFdlYiBQYWdlIEVkaXRvciIgZGVzY3JpcHRpb249IktleSBiaW5kaW5nIGNvbnRleHQgd2hlbiB1c2luZyB0aGUgd2ViIHBhZ2UgZWRpdG9yIi8+CisgICAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RWXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnBkZS51aS5wZGVFZGl0b3JDb250ZXh0IiBuYW1lPSJQREUgZWRpdG9yIiBkZXNjcmlwdGlvbj0iVGhlIGNvbnRleHQgdXNlZCBieSBQREUgZWRpdG9ycyIvPgorICAgICAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUVpDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5nZW5lcmljZWRpdG9yLmdlbmVyaWNFZGl0b3JDb250ZXh0IiBuYW1lPSJpbiBHZW5lcmljIENvZGUgRWRpdG9yIiBkZXNjcmlwdGlvbj0iV2hlbiBlZGl0aW5nIGluIHRoZSBHZW5lcmljIENvZGUgRWRpdG9yIi8+CisgICAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RWlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC54c2QudWkudGV4dC5lZGl0b3IuY29udGV4dCIgbmFtZT0iRWRpdGluZyBYU0QgY29udGV4dCIvPgorICAgICAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUVppeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5lZGl0b3JzLnRhc2siIG5hbWU9IkluIFRhc2tzIEVkaXRvciIvPgorICAgICAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUVp5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi5pbnRlcm5hbC53aWtpdGV4dC51aS5lZGl0b3IuYmFzaWNNYXJrdXBTb3VyY2VDb250ZXh0IiBuYW1lPSJXaWtpVGV4dCBNYXJrdXAgU291cmNlIENvbnRleHQiIGRlc2NyaXB0aW9uPSJXaWtpVGV4dCBtYXJrdXAgZWRpdGluZyBjb250ZXh0Ij4KKyAgICAgICAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUWFDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi53aWtpdGV4dC51aS5lZGl0b3IubWFya3VwU291cmNlQ29udGV4dCIgbmFtZT0iV2lraVRleHQgTWFya3VwIFNvdXJjZSBDb250ZXh0IiBkZXNjcmlwdGlvbj0iV2lraVRleHQgbWFya3VwIGVkaXRpbmcgY29udGV4dCIvPgorICAgICAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RYVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLndpa2l0ZXh0LnRhc2tzLnVpLm1hcmt1cFNvdXJjZUNvbnRleHQiIG5hbWU9IlRhc2sgTWFya3VwIEVkaXRvciBTb3VyY2UgQ29udGV4dCIvPgorICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUWFpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkucHJvcGVydGllc0VkaXRvclNjb3BlIiBuYW1lPSJFZGl0aW5nIFByb3BlcnRpZXMgRmlsZXMiIGRlc2NyaXB0aW9uPSJFZGl0aW5nIFByb3BlcnRpZXMgRmlsZXMgQ29udGV4dCIvPgorICAgICAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUWF5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qc3QuanNmLmZhY2VzY29uZmlnLmVkaXRvckNvbnRleHQiIG5hbWU9IkluIEZhY2VzIENvbmZpZyBFZGl0b3IiIGRlc2NyaXB0aW9uPSJLZXkgYmluZGluZyBjb250ZXh0IHdoZW4gdXNpbmcgdGhlIEZhY2VzIENvbmZpZyBFZGl0b3IiLz4KKyAgICAgIDwvY2hpbGRyZW4+CisgICAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUWJDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5jb21wYXJlLmNvbXBhcmVFZGl0b3JTY29wZSIgbmFtZT0iQ29tcGFyaW5nIGluIGFuIEVkaXRvciIgZGVzY3JpcHRpb249IkNvbXBhcmluZyBpbiBhbiBFZGl0b3IiLz4KKyAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RYlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLm1lbW9yeXZpZXciIG5hbWU9IkluIE1lbW9yeSBWaWV3IiBkZXNjcmlwdGlvbj0iSW4gbWVtb3J5IHZpZXciLz4KKyAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RYml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zY2hlbWFvYmplY3RlZGl0b3Iuc2NoZW1hZWRpdGluZyIgbmFtZT0iU2NoZW1hIE9iamVjdCBFZGl0b3IiIGRlc2NyaXB0aW9uPSJTY2hlbWEgT2JqZWN0IEVkaXRvciIvPgorICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFieXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuY29uc29sZSIgbmFtZT0iSW4gSS9PIENvbnNvbGUiIGRlc2NyaXB0aW9uPSJJbiBJL08gY29uc29sZSIvPgorICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFjQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudG0udGVybWluYWwudmlldy51aS5UZXJtaW5hbHNWaWV3IiBuYW1lPSJJbiBUZXJtaW5hbCBWaWV3IiBkZXNjcmlwdGlvbj0iU2hvdyBtb2RpZmllZCBrZXlib2FyZCBzaG9ydGN1dHMgaW4gY29udGV4dCBtZW51Ii8+CisgICAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUWNTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5jb25zb2xlLkNvbnNvbGVWaWV3IiBuYW1lPSJJbiBDb25zb2xlIFZpZXciIGRlc2NyaXB0aW9uPSJJbiBDb25zb2xlIFZpZXciLz4KKyAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RY2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnNlcnZlclZpZXdTY29wZSIgbmFtZT0iSW4gU2VydmVycyBWaWV3IiBkZXNjcmlwdGlvbj0iSW4gU2VydmVycyBWaWV3Ii8+CisgICAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUWN5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5kZWJ1Z2dpbmciIG5hbWU9IkRlYnVnZ2luZyIgZGVzY3JpcHRpb249IkRlYnVnZ2luZyBwcm9ncmFtcyI+CisgICAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RZEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLm1lbW9yeS5hYnN0cmFjdGFzeW5jdGFibGVyZW5kZXJpbmciIG5hbWU9IkluIFRhYmxlIE1lbW9yeSBSZW5kZXJpbmciIGRlc2NyaXB0aW9uPSJJbiBUYWJsZSBNZW1vcnkgUmVuZGVyaW5nIi8+CisgICAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RZFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkuY29udGV4dCIgbmFtZT0iWFNMVCBEZWJ1Z2dpbmciIGRlc2NyaXB0aW9uPSJDb250ZXh0IGZvciBkZWJ1Z2dpbmcgWFNMVCIvPgorICAgICAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUWRpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuZGVidWdnaW5nIiBuYW1lPSJEZWJ1Z2dpbmcgSmF2YSIgZGVzY3JpcHRpb249IkRlYnVnZ2luZyBKYXZhIHByb2dyYW1zIi8+CisgICAgICA8L2NoaWxkcmVuPgorICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFkeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5SZWZsb2dWaWV3IiBuYW1lPSJJbiBHaXQgUmVmbG9nIFZpZXciLz4KKyAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RZUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnRtLnRlcm1pbmFsLlRlcm1pbmFsQ29udGV4dCIgbmFtZT0iVGVybWluYWwgVHlwaW5nIENvbm5lY3RlZCIgZGVzY3JpcHRpb249Ik92ZXJyaWRlIEFMVCt4IG1lbnUgYWNjZXNzIGtleXMgd2hpbGUgdHlwaW5nIGludG8gdGhlIFRlcm1pbmFsIi8+CisgICAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUWVTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS52aWV3cy50YXNrcyIgbmFtZT0iSW4gVGFza3MgVmlldyIvPgorICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFlaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuYnVpbGRzaGlwLnVpLmNvbnRleHRzLnRhc2t2aWV3IiBuYW1lPSJJbiBHcmFkbGUgVGFza3MgVmlldyIgZGVzY3JpcHRpb249IlRoaXMgY29udGV4dCBpcyBhY3RpdmF0ZWQgd2hlbiB0aGUgR3JhZGxlIFRhc2tzIHZpZXcgaXMgaW4gZm9jdXMiLz4KKyAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RZXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuUmVwb3NpdG9yaWVzVmlldyIgbmFtZT0iSW4gR2l0IFJlcG9zaXRvcmllcyBWaWV3Ii8+CisgICAgPC9jaGlsZHJlbj4KKyAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUWZDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5jb250ZXh0cy5kaWFsb2ciIGNvbnRyaWJ1dG9yVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnBsYXRmb3JtIiBuYW1lPSJJbiBEaWFsb2dzIiBkZXNjcmlwdGlvbj0iQSBkaWFsb2cgaXMgb3BlbiIvPgorICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RZlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LmNocm9taXVtLmRlYnVnLnVpLmVkaXRvcnMuSnNFZGl0b3IuY29udGV4dCIgbmFtZT0iQ2hyb21pdW0gRGVidWciIGRlc2NyaXB0aW9uPSJEZWJ1ZyBDaHJvbWl1bSBKYXZhU2NyaXB0Ii8+CisgIDwvcm9vdENvbnRleHQ+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1RZml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmNvbnRleHRzLndvcmtiZW5jaE1lbnUiIG5hbWU9IldvcmtiZW5jaCBNZW51IiBkZXNjcmlwdGlvbj0iV2hlbiBubyBXb3JrYmVuY2ggd2luZG93cyBhcmUgYWN0aXZlIi8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1RZnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5icmVhZGNydW1iRWRpdG9yU2NvcGUiIG5hbWU9IkVkaXRvciBCcmVhZGNydW1iIE5hdmlnYXRpb24iIGRlc2NyaXB0aW9uPSJFZGl0b3IgQnJlYWRjcnVtYiBOYXZpZ2F0aW9uIENvbnRleHQiLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFnQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnhzZC51aS5lZGl0b3Iuc291cmNlVmlldyIgbmFtZT0iWFNEIEVkaXRvciBTb3VyY2UgVmlldyIgZGVzY3JpcHRpb249IlhTRCBFZGl0b3IgU291cmNlIFZpZXciLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFnU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZWRpdG9yLnNvdXJjZVZpZXciIG5hbWU9IldTREwgRWRpdG9yIFNvdXJjZSBWaWV3IiBkZXNjcmlwdGlvbj0iV1NETCBFZGl0b3IgU291cmNlIFZpZXciLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFnaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnhzZC51aS5lZGl0b3IuZGVzaWduVmlldyIgbmFtZT0iWFNEIEVkaXRvciBEZXNpZ24gVmlldyIgZGVzY3JpcHRpb249IlhTRCBFZGl0b3IgRGVzaWduIFZpZXciLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFneXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuY29udGV4dHMuYWN0aW9uU2V0IiBuYW1lPSJBY3Rpb24gU2V0IiBkZXNjcmlwdGlvbj0iUGFyZW50IGNvbnRleHQgZm9yIGFjdGlvbiBzZXRzIi8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1RaEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmVkaXRvci5kZXNpZ25WaWV3IiBuYW1lPSJXU0RMIEVkaXRvciBEZXNpZ24gVmlldyIgZGVzY3JpcHRpb249IldTREwgRWRpdG9yIERlc2lnbiBWaWV3Ii8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1RaFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmFudC51aS5hY3Rpb25TZXQucHJlc2VudGF0aW9uIiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS5hbnQudWkuYWN0aW9uU2V0LnByZXNlbnRhdGlvbiIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUWhpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3Fsc2NyYXBib29rLmFjdGlvblNldCIgbmFtZT0iQXV0bzo6b3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbHNjcmFwYm9vay5hY3Rpb25TZXQiLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFoeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuYnJlYWtwb2ludEFjdGlvblNldCIgbmFtZT0iQXV0bzo6b3JnLmVjbGlwc2UuZGVidWcudWkuYnJlYWtwb2ludEFjdGlvblNldCIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUWlDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5kZWJ1Z0FjdGlvblNldCIgbmFtZT0iQXV0bzo6b3JnLmVjbGlwc2UuZGVidWcudWkuZGVidWdBY3Rpb25TZXQiLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFpU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkubGF1bmNoQWN0aW9uU2V0IiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5sYXVuY2hBY3Rpb25TZXQiLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFpaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkucHJvZmlsZUFjdGlvblNldCIgbmFtZT0iQXV0bzo6b3JnLmVjbGlwc2UuZGVidWcudWkucHJvZmlsZUFjdGlvblNldCIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUWl5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lY2xlbW1hLnVpLkNvdmVyYWdlQWN0aW9uU2V0IiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS5lY2xlbW1hLnVpLkNvdmVyYWdlQWN0aW9uU2V0Ii8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1RakN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuZ2l0YWN0aW9uIiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS5lZ2l0LnVpLmdpdGFjdGlvbiIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUWpTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLm5hdmlnYXRpb24iIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLmVnaXQudWkubmF2aWdhdGlvbiIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUWppeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuSkRURGVidWdBY3Rpb25TZXQiIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5KRFREZWJ1Z0FjdGlvblNldCIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUWp5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQuanVuaXQuSlVuaXRBY3Rpb25TZXQiIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLmpkdC5qdW5pdC5KVW5pdEFjdGlvblNldCIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUWtDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5qYXZhLmFjdGlvblNldC5wcmVzZW50YXRpb24iIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmphdmEuYWN0aW9uU2V0LnByZXNlbnRhdGlvbiIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUWtTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuSmF2YUVsZW1lbnRDcmVhdGlvbkFjdGlvblNldCIgbmFtZT0iQXV0bzo6b3JnLmVjbGlwc2UuamR0LnVpLkphdmFFbGVtZW50Q3JlYXRpb25BY3Rpb25TZXQiLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFraXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLkphdmFBY3Rpb25TZXQiIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLmpkdC51aS5KYXZhQWN0aW9uU2V0Ii8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1Ra3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5BX09wZW5BY3Rpb25TZXQiIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLmpkdC51aS5BX09wZW5BY3Rpb25TZXQiLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFsQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLkNvZGluZ0FjdGlvblNldCIgbmFtZT0iQXV0bzo6b3JnLmVjbGlwc2UuamR0LnVpLkNvZGluZ0FjdGlvblNldCIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUWxTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuU2VhcmNoQWN0aW9uU2V0IiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS5qZHQudWkuU2VhcmNoQWN0aW9uU2V0Ii8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1RbGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpwdC5qcGEudWkuYWN0aW9uU2V0LmpwYUVsZW1lbnRDcmVhdGlvbiIgbmFtZT0iQXV0bzo6b3JnLmVjbGlwc2UuanB0LmpwYS51aS5hY3Rpb25TZXQuanBhRWxlbWVudENyZWF0aW9uIi8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1RbHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLkoyZWVNYWluQWN0aW9uU2V0IiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS5qc3QuajJlZS5KMmVlTWFpbkFjdGlvblNldCIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUW1DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi5jb250ZXh0LnVpLmFjdGlvblNldCIgbmFtZT0iQXV0bzo6b3JnLmVjbGlwc2UubXlseW4uY29udGV4dC51aS5hY3Rpb25TZXQiLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFtU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4uamF2YS5hY3Rpb25TZXQiIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLm15bHluLmphdmEuYWN0aW9uU2V0Ii8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1RbWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLmphdmEuYWN0aW9uU2V0LmJyb3dzaW5nIiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS5teWx5bi5qYXZhLmFjdGlvblNldC5icm93c2luZyIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUW15eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi5kb2MuYWN0aW9uU2V0IiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS5teWx5bi5kb2MuYWN0aW9uU2V0Ii8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1RbkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLm5hdmlnYXRpb24iIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLm5hdmlnYXRpb24iLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFuU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkubmF2aWdhdGlvbi5hZGRpdGlvbnMiIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLm5hdmlnYXRpb24uYWRkaXRpb25zIi8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1Rbml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnBkZS51aS5TZWFyY2hBY3Rpb25TZXQiIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLnBkZS51aS5TZWFyY2hBY3Rpb25TZXQiLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFueXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuY2hlYXRzaGVldHMuYWN0aW9uU2V0IiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS51aS5jaGVhdHNoZWV0cy5hY3Rpb25TZXQiLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFvQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucnNlLmNvcmUuc2VhcmNoLnNlYXJjaEFjdGlvblNldCIgbmFtZT0iQXV0bzo6b3JnLmVjbGlwc2UucnNlLmNvcmUuc2VhcmNoLnNlYXJjaEFjdGlvblNldCIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUW9TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5zZWFyY2guc2VhcmNoQWN0aW9uU2V0IiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS5zZWFyY2guc2VhcmNoQWN0aW9uU2V0Ii8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1Rb2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnRlYW0udWkuYWN0aW9uU2V0IiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS50ZWFtLnVpLmFjdGlvblNldCIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUW95eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuYWN0aW9uU2V0LmFubm90YXRpb25OYXZpZ2F0aW9uIiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuYWN0aW9uU2V0LmFubm90YXRpb25OYXZpZ2F0aW9uIi8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1RcEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5hY3Rpb25TZXQubmF2aWdhdGlvbiIgbmFtZT0iQXV0bzo6b3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmFjdGlvblNldC5uYXZpZ2F0aW9uIi8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1RcFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5hY3Rpb25TZXQuY29udmVydExpbmVEZWxpbWl0ZXJzVG8iIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5hY3Rpb25TZXQuY29udmVydExpbmVEZWxpbWl0ZXJzVG8iLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFwaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZXh0ZXJuYWx0b29scy5FeHRlcm5hbFRvb2xzU2V0IiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS51aS5leHRlcm5hbHRvb2xzLkV4dGVybmFsVG9vbHNTZXQiLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFweXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuTmF2aWdhdGVBY3Rpb25TZXQiIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLnVpLk5hdmlnYXRlQWN0aW9uU2V0Ii8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1RcUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmFjdGlvblNldC5rZXlCaW5kaW5ncyIgbmFtZT0iQXV0bzo6b3JnLmVjbGlwc2UudWkuYWN0aW9uU2V0LmtleUJpbmRpbmdzIi8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1RcVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLldvcmtpbmdTZXRNb2RpZmljYXRpb25BY3Rpb25TZXQiIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLnVpLldvcmtpbmdTZXRNb2RpZmljYXRpb25BY3Rpb25TZXQiLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFxaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuV29ya2luZ1NldEFjdGlvblNldCIgbmFtZT0iQXV0bzo6b3JnLmVjbGlwc2UudWkuV29ya2luZ1NldEFjdGlvblNldCIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUXF5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5hY3Rpb25TZXQub3BlbkZpbGVzIiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS51aS5hY3Rpb25TZXQub3BlbkZpbGVzIi8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1RckN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5hY3Rpb25TZXQucHJlc2VudGF0aW9uIiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuYWN0aW9uU2V0LnByZXNlbnRhdGlvbiIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUXJTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC5jaHJvbWl1bS5kZWJ1Zy51aS5hY3Rpb25TZXRzIiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS53c3QuanNkdC5jaHJvbWl1bS5kZWJ1Zy51aS5hY3Rpb25TZXRzIi8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1Rcml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLnRleHQuamF2YS5hY3Rpb25TZXQucHJlc2VudGF0aW9uIiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS53c3QuanNkdC51aS50ZXh0LmphdmEuYWN0aW9uU2V0LnByZXNlbnRhdGlvbiIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUXJ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5KYXZhRWxlbWVudENyZWF0aW9uQWN0aW9uU2V0IiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS53c3QuanNkdC51aS5KYXZhRWxlbWVudENyZWF0aW9uQWN0aW9uU2V0Ii8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1Rc0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLkphdmFBY3Rpb25TZXQiIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLkphdmFBY3Rpb25TZXQiLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFzU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuQV9PcGVuQWN0aW9uU2V0IiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS53c3QuanNkdC51aS5BX09wZW5BY3Rpb25TZXQiLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFzaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuQ29kaW5nQWN0aW9uU2V0IiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS53c3QuanNkdC51aS5Db2RpbmdBY3Rpb25TZXQiLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFzeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuU2VhcmNoQWN0aW9uU2V0IiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS53c3QuanNkdC51aS5TZWFyY2hBY3Rpb25TZXQiLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVF0Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS5uZXcuYWN0aW9uU2V0IiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLm5ldy5hY3Rpb25TZXQiLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVF0U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS5pbnRlcm5hbC53ZWJicm93c2VyLmFjdGlvblNldCIgbmFtZT0iQXV0bzo6b3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS5pbnRlcm5hbC53ZWJicm93c2VyLmFjdGlvblNldCIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUXRpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3Qud2ViLnVpLndpemFyZHNBY3Rpb25TZXQiIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLndzdC53ZWIudWkud2l6YXJkc0FjdGlvblNldCIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUXR5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIuZXhwbG9yZXIiIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci5leHBsb3JlciIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUXVDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLmxvY2FsSmF2YUFwcGxpY2F0aW9uLmludGVybmFsLm9yZy5lY2xpcHNlLmRlYnVnLnVpLkRlYnVnUGVyc3BlY3RpdmUiIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcubG9jYWxKYXZhQXBwbGljYXRpb24uaW50ZXJuYWwub3JnLmVjbGlwc2UuZGVidWcudWkuRGVidWdQZXJzcGVjdGl2ZSIvPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUXVTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lNC51aS5jb21wYXRpYmlsaXR5LmVkaXRvciIgYWxsb3dNdWx0aXBsZT0idHJ1ZSIgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLmU0LnByaW1hcnlEYXRhU3RhY2siIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlFZGl0b3IiPgorICAgIDx0YWdzPkVkaXRvcjwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVF1aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuYW50LnVpLnZpZXdzLkFudFZpZXciIGxhYmVsPSJBbnQiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuYW50LnVpL2ljb25zL2Z1bGwvZXZpZXcxNi9hbnRfdmlldy5wbmciIHRvb2x0aXA9IiIgY2F0ZWdvcnk9IkFudCIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmFudC5pbnRlcm5hbC51aS52aWV3cy5BbnRWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmFudC51aSIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6QW50PC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUXV5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5idWlsZHNoaXAudWkudmlld3MudGFza3ZpZXciIGxhYmVsPSJHcmFkbGUgVGFza3MiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuYnVpbGRzaGlwLnVpL2ljb25zL2Z1bGwvZXZpZXcxNi90YXNrc192aWV3LnBuZyIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iR3JhZGxlIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuYnVpbGRzaGlwLnVpLnZpZXcudGFzay5UYXNrVmlldyIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5idWlsZHNoaXAudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdyYWRsZTwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVF2Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuYnVpbGRzaGlwLnVpLnZpZXdzLmV4ZWN1dGlvbnZpZXciIGxhYmVsPSJHcmFkbGUgRXhlY3V0aW9ucyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5idWlsZHNoaXAudWkvaWNvbnMvZnVsbC9ldmlldzE2L2V4ZWN1dGlvbnNfdmlldy5wbmciIHRvb2x0aXA9IiIgY2F0ZWdvcnk9IkdyYWRsZSIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmJ1aWxkc2hpcC51aS52aWV3LmV4ZWN1dGlvbi5FeGVjdXRpb25zVmlldyIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5idWlsZHNoaXAudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdyYWRsZTwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVF2U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuRGVidWdWaWV3IiBsYWJlbD0iRGVidWciIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZGVidWcudWkvaWNvbnMvZnVsbC9ldmlldzE2L2RlYnVnX3ZpZXcucG5nIiB0b29sdGlwPSIiIGNhdGVnb3J5PSJEZWJ1ZyIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmRlYnVnLmludGVybmFsLnVpLnZpZXdzLmxhdW5jaC5MYXVuY2hWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmRlYnVnLnVpIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpEZWJ1ZzwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVF2aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuQnJlYWtwb2ludFZpZXciIGxhYmVsPSJCcmVha3BvaW50cyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5kZWJ1Zy51aS9pY29ucy9mdWxsL2V2aWV3MTYvYnJlYWtwb2ludF92aWV3LnBuZyIgdG9vbHRpcD0iIiBhbGxvd011bHRpcGxlPSJ0cnVlIiBjYXRlZ29yeT0iRGVidWciIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5kZWJ1Zy5pbnRlcm5hbC51aS52aWV3cy5icmVha3BvaW50cy5CcmVha3BvaW50c1ZpZXciLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuZGVidWcudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkRlYnVnPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUXZ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5WYXJpYWJsZVZpZXciIGxhYmVsPSJWYXJpYWJsZXMiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZGVidWcudWkvaWNvbnMvZnVsbC9ldmlldzE2L3ZhcmlhYmxlX3ZpZXcucG5nIiB0b29sdGlwPSIiIGFsbG93TXVsdGlwbGU9InRydWUiIGNhdGVnb3J5PSJEZWJ1ZyIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmRlYnVnLmludGVybmFsLnVpLnZpZXdzLnZhcmlhYmxlcy5WYXJpYWJsZXNWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmRlYnVnLnVpIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpEZWJ1ZzwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVF3Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuRXhwcmVzc2lvblZpZXciIGxhYmVsPSJFeHByZXNzaW9ucyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5kZWJ1Zy51aS9pY29ucy9mdWxsL2V2aWV3MTYvd2F0Y2hsaXN0X3ZpZXcucG5nIiB0b29sdGlwPSIiIGFsbG93TXVsdGlwbGU9InRydWUiIGNhdGVnb3J5PSJEZWJ1ZyIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmRlYnVnLmludGVybmFsLnVpLnZpZXdzLmV4cHJlc3Npb24uRXhwcmVzc2lvblZpZXciLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuZGVidWcudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkRlYnVnPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUXdTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5SZWdpc3RlclZpZXciIGxhYmVsPSJSZWdpc3RlcnMiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZGVidWcudWkvaWNvbnMvZnVsbC9ldmlldzE2L3JlZ2lzdGVyX3ZpZXcucG5nIiB0b29sdGlwPSIiIGFsbG93TXVsdGlwbGU9InRydWUiIGNhdGVnb3J5PSJEZWJ1ZyIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmRlYnVnLmludGVybmFsLnVpLnZpZXdzLnJlZ2lzdGVycy5SZWdpc3RlcnNWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmRlYnVnLnVpIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpEZWJ1ZzwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVF3aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuTW9kdWxlVmlldyIgbGFiZWw9Ik1vZHVsZXMiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZGVidWcudWkvaWNvbnMvZnVsbC9ldmlldzE2L21vZHVsZV92aWV3LnBuZyIgdG9vbHRpcD0iIiBhbGxvd011bHRpcGxlPSJ0cnVlIiBjYXRlZ29yeT0iRGVidWciIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5kZWJ1Zy5pbnRlcm5hbC51aS52aWV3cy5tb2R1bGVzLk1vZHVsZXNWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmRlYnVnLnVpIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpEZWJ1ZzwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVF3eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuTWVtb3J5VmlldyIgbGFiZWw9Ik1lbW9yeSIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5kZWJ1Zy51aS9pY29ucy9mdWxsL2V2aWV3MTYvbWVtb3J5X3ZpZXcucG5nIiB0b29sdGlwPSIiIGFsbG93TXVsdGlwbGU9InRydWUiIGNhdGVnb3J5PSJEZWJ1ZyIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmRlYnVnLmludGVybmFsLnVpLnZpZXdzLm1lbW9yeS5NZW1vcnlWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmRlYnVnLnVpIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpEZWJ1ZzwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVF4Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWNsZW1tYS51aS5Db3ZlcmFnZVZpZXciIGxhYmVsPSJDb3ZlcmFnZSIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lY2xlbW1hLnVpL2ljb25zL2Z1bGwvZXZpZXcxNi9jb3ZlcmFnZS5wbmciIHRvb2x0aXA9IiIgY2F0ZWdvcnk9IkphdmEiIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5lY2xlbW1hLmludGVybmFsLnVpLmNvdmVyYWdldmlldy5Db3ZlcmFnZVZpZXciLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuZWNsZW1tYS51aSIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6SmF2YTwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVF4U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5SZXBvc2l0b3JpZXNWaWV3IiBsYWJlbD0iR2l0IFJlcG9zaXRvcmllcyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lZ2l0LnVpL2ljb25zL2V2aWV3MTYvcmVwb19yZXAucG5nIiB0b29sdGlwPSIiIGNhdGVnb3J5PSJHaXQiIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmludGVybmFsLnJlcG9zaXRvcnkuUmVwb3NpdG9yaWVzVmlldyIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5lZ2l0LnVpIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpHaXQ8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1ReGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuU3RhZ2luZ1ZpZXciIGxhYmVsPSJHaXQgU3RhZ2luZyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lZ2l0LnVpL2ljb25zL2V2aWV3MTYvc3RhZ2luZy5wbmciIHRvb2x0aXA9IiIgY2F0ZWdvcnk9IkdpdCIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmVnaXQudWkuaW50ZXJuYWwuc3RhZ2luZy5TdGFnaW5nVmlldyIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5lZ2l0LnVpIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpHaXQ8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1ReHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuSW50ZXJhY3RpdmVSZWJhc2VWaWV3IiBsYWJlbD0iR2l0IEludGVyYWN0aXZlIFJlYmFzZSIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lZ2l0LnVpL2ljb25zL2V2aWV3MTYvcmViYXNlX2ludGVyYWN0aXZlLnBuZyIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iR2l0IiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuZWdpdC51aS5pbnRlcm5hbC5yZWJhc2UuUmViYXNlSW50ZXJhY3RpdmVWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmVnaXQudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdpdDwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVF5Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5Db21wYXJlVHJlZVZpZXciIGxhYmVsPSJHaXQgVHJlZSBDb21wYXJlIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVnaXQudWkvaWNvbnMvb2JqMTYvZ2l0cmVwb3NpdG9yeS5wbmciIHRvb2x0aXA9IiIgY2F0ZWdvcnk9IkdpdCIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmVnaXQudWkuaW50ZXJuYWwuZGlhbG9ncy5Db21wYXJlVHJlZVZpZXciLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuZWdpdC51aSIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2l0PC90YWdzPgorICAgIDx0YWdzPk5vUmVzdG9yZTwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVF5U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5SZWZsb2dWaWV3IiBsYWJlbD0iR2l0IFJlZmxvZyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lZ2l0LnVpL2ljb25zL2V2aWV3MTYvcmVmbG9nLnBuZyIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iR2l0IiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuZWdpdC51aS5pbnRlcm5hbC5yZWZsb2cuUmVmbG9nVmlldyIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5lZ2l0LnVpIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpHaXQ8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1ReWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmdlZi51aS5wYWxldHRlX3ZpZXciIGxhYmVsPSJQYWxldHRlIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmdlZi9pY29ucy9wYWxldHRlX3ZpZXcuZ2lmIiB0b29sdGlwPSIiIGNhdGVnb3J5PSJHZW5lcmFsIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuZ2VmLnVpLnZpZXdzLnBhbGV0dGUuUGFsZXR0ZVZpZXciLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuZ2VmIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUXl5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5oZWxwLnVpLkhlbHBWaWV3IiBsYWJlbD0iSGVscCIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5oZWxwLnVpL2ljb25zL3ZpZXcxNi9oZWxwX3ZpZXcuZ2lmIiB0b29sdGlwPSIiIGNhdGVnb3J5PSJIZWxwIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuaGVscC51aS5pbnRlcm5hbC52aWV3cy5IZWxwVmlldyIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5oZWxwLnVpIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpIZWxwPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUXpDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuRGlzcGxheVZpZXciIGxhYmVsPSJEZWJ1ZyBTaGVsbCIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5qZHQuZGVidWcudWkvaWNvbnMvZnVsbC9ldG9vbDE2L2Rpc3Bfc2Jvb2sucG5nIiB0b29sdGlwPSIiIGNhdGVnb3J5PSJEZWJ1ZyIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5kaXNwbGF5LkRpc3BsYXlWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aSIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6RGVidWc8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1RelN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC5qdW5pdC5SZXN1bHRWaWV3IiBsYWJlbD0iSlVuaXQiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuamR0Lmp1bml0L2ljb25zL2Z1bGwvZXZpZXcxNi9qdW5pdC5wbmciIHRvb2x0aXA9IiIgY2F0ZWdvcnk9IkphdmEiIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuanVuaXQudWkuVGVzdFJ1bm5lclZpZXdQYXJ0Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC5qdW5pdCIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6SmF2YTwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVF6aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VFeHBsb3JlciIgbGFiZWw9IlBhY2thZ2UgRXhwbG9yZXIiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuamR0LnVpL2ljb25zL2Z1bGwvZXZpZXcxNi9wYWNrYWdlLnBuZyIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iSmF2YSIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5wYWNrYWdldmlldy5QYWNrYWdlRXhwbG9yZXJQYXJ0Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC51aSIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6SmF2YTwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVF6eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLlR5cGVIaWVyYXJjaHkiIGxhYmVsPSJUeXBlIEhpZXJhcmNoeSIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5qZHQudWkvaWNvbnMvZnVsbC9ldmlldzE2L2NsYXNzX2hpLnBuZyIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iSmF2YSIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS50eXBlaGllcmFyY2h5LlR5cGVIaWVyYXJjaHlWaWV3UGFydCIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qZHQudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkphdmE8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1RMEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5Qcm9qZWN0c1ZpZXciIGxhYmVsPSJQcm9qZWN0cyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5qZHQudWkvaWNvbnMvZnVsbC9ldmlldzE2L3Byb2plY3RzLnBuZyIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iSmF2YSBCcm93c2luZyIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5icm93c2luZy5Qcm9qZWN0c1ZpZXciLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LnVpIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpKYXZhIEJyb3dzaW5nPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUTBTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZXNWaWV3IiBsYWJlbD0iUGFja2FnZXMiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuamR0LnVpL2ljb25zL2Z1bGwvZXZpZXcxNi9wYWNrYWdlcy5wbmciIHRvb2x0aXA9IiIgY2F0ZWdvcnk9IkphdmEgQnJvd3NpbmciIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuYnJvd3NpbmcuUGFja2FnZXNWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC51aSIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6SmF2YSBCcm93c2luZzwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVEwaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLlR5cGVzVmlldyIgbGFiZWw9IlR5cGVzIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmpkdC51aS9pY29ucy9mdWxsL2V2aWV3MTYvdHlwZXMucG5nIiB0b29sdGlwPSIiIGNhdGVnb3J5PSJKYXZhIEJyb3dzaW5nIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLmJyb3dzaW5nLlR5cGVzVmlldyIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qZHQudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkphdmEgQnJvd3Npbmc8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1RMHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5NZW1iZXJzVmlldyIgbGFiZWw9Ik1lbWJlcnMiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuamR0LnVpL2ljb25zL2Z1bGwvZXZpZXcxNi9tZW1iZXJzLnBuZyIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iSmF2YSBCcm93c2luZyIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5icm93c2luZy5NZW1iZXJzVmlldyIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qZHQudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkphdmEgQnJvd3Npbmc8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1RMUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC5jYWxsaGllcmFyY2h5LnZpZXciIGxhYmVsPSJDYWxsIEhpZXJhcmNoeSIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5qZHQudWkvaWNvbnMvZnVsbC9ldmlldzE2L2NhbGxfaGllcmFyY2h5LnBuZyIgdG9vbHRpcD0iIiBhbGxvd011bHRpcGxlPSJ0cnVlIiBjYXRlZ29yeT0iSmF2YSIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5jYWxsaGllcmFyY2h5LkNhbGxIaWVyYXJjaHlWaWV3UGFydCIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qZHQudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkphdmE8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1RMVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuVGVtcGxhdGVzVmlldyIgbGFiZWw9IlRlbXBsYXRlcyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5qZHQudWkvaWNvbnMvZnVsbC9ldmlldzE2L3RlbXBsYXRlcy5wbmciIHRvb2x0aXA9IiIgY2F0ZWdvcnk9IkdlbmVyYWwiIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLnRlbXBsYXRlcy5UZW1wbGF0ZXNWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC51aSIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVExaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLlNvdXJjZVZpZXciIGxhYmVsPSJEZWNsYXJhdGlvbiIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5qZHQudWkvaWNvbnMvZnVsbC9ldmlldzE2L3NvdXJjZS5wbmciIHRvb2x0aXA9IiIgY2F0ZWdvcnk9IkphdmEiIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuaW5mb3ZpZXdzLlNvdXJjZVZpZXciLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LnVpIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpKYXZhPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUTF5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuSmF2YWRvY1ZpZXciIGxhYmVsPSJKYXZhZG9jIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmpkdC51aS9pY29ucy9mdWxsL2V2aWV3MTYvamF2YWRvYy5wbmciIHRvb2x0aXA9IiIgY2F0ZWdvcnk9IkphdmEiIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuaW5mb3ZpZXdzLkphdmFkb2NWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC51aSIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6SmF2YTwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVEyQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubTJlLmNvcmUudmlld3MuTWF2ZW5SZXBvc2l0b3J5VmlldyIgbGFiZWw9Ik1hdmVuIFJlcG9zaXRvcmllcyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5tMmUuY29yZS51aS9pY29ucy9tYXZlbl9pbmRleGVzLmdpZiIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iTWF2ZW4iIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5tMmUuY29yZS51aS5pbnRlcm5hbC52aWV3cy5NYXZlblJlcG9zaXRvcnlWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLm0yZS5jb3JlLnVpIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpNYXZlbjwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVEyU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubTJlLmNvcmUudmlld3MuTWF2ZW5CdWlsZCIgbGFiZWw9Ik1hdmVuIFdvcmtzcGFjZSBCdWlsZCIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51aS9pY29ucy9mdWxsL2V2aWV3MTYvZGVmYXVsdHZpZXdfbWlzYy5wbmciIHRvb2x0aXA9IiIgY2F0ZWdvcnk9Ik1hdmVuIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UubTJlLmNvcmUudWkuaW50ZXJuYWwudmlld3MuYnVpbGQuQnVpbGREZWJ1Z1ZpZXciLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UubTJlLmNvcmUudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOk1hdmVuPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUTJpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi5jb21tb25zLnJlcG9zaXRvcmllcy51aS5uYXZpZ2F0b3IuUmVwb3NpdG9yaWVzIiBsYWJlbD0iVGVhbSBSZXBvc2l0b3JpZXMiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UubXlseW4uY29tbW9ucy5yZXBvc2l0b3JpZXMudWkvaWNvbnMvZXZpZXcxNi9yZXBvc2l0b3JpZXMuZ2lmIiB0b29sdGlwPSIiIGNhdGVnb3J5PSJNeWx5biIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLm15bHluLmludGVybmFsLmNvbW1vbnMucmVwb3NpdG9yaWVzLnVpLlJlcG9zaXRvcmllc1ZpZXciLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UubXlseW4uY29tbW9ucy5yZXBvc2l0b3JpZXMudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOk15bHluPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUTJ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS52aWV3cy50YXNrcyIgbGFiZWw9IlRhc2sgTGlzdCIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS9pY29ucy9ldmlldzE2L3Rhc2stbGlzdC5naWYiIHRvb2x0aXA9IiIgYWxsb3dNdWx0aXBsZT0idHJ1ZSIgY2F0ZWdvcnk9Ik15bHluIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UubXlseW4uaW50ZXJuYWwudGFza3MudWkudmlld3MuVGFza0xpc3RWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpNeWx5bjwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVEzQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkudmlld3MucmVwb3NpdG9yaWVzIiBsYWJlbD0iVGFzayBSZXBvc2l0b3JpZXMiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UubXlseW4udGFza3MudWkvaWNvbnMvZXZpZXcxNi9yZXBvc2l0b3JpZXMuZ2lmIiB0b29sdGlwPSIiIGNhdGVnb3J5PSJNeWx5biIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLm15bHluLmludGVybmFsLnRhc2tzLnVpLnZpZXdzLlRhc2tSZXBvc2l0b3JpZXNWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpNeWx5bjwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVEzU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uub29tcGgucDIudWkuUmVwb3NpdG9yeUV4cGxvcmVyIiBsYWJlbD0iUmVwb3NpdG9yeSBFeHBsb3JlciIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5vb21waC5wMi51aS9pY29ucy9vYmoxNi9yZXBvc2l0b3J5LmdpZiIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iT29tcGgiIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC51aS5SZXBvc2l0b3J5RXhwbG9yZXIiLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2Uub29tcGgucDIudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOk9vbXBoPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUTNpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuYXBpZG9jcy5yY3Audmlld3MuYXBpZG9jcyIgbGFiZWw9IkF1Z21lbnRlZCBEb2NzIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5hcGlkb2NzLnJjcC9pY29ucy92aWV3MTYvYXBpZG9jcy5wbmciIHRvb2x0aXA9IiIgY2F0ZWdvcnk9IkNvZGUgUmVjb21tZW5kZXJzIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmluamVjdGlvbi5FeHRlbnNpb25GYWN0b3J5Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5hcGlkb2NzLnJjcCIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6Q29kZSBSZWNvbW1lbmRlcnM8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1RM3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwLnZpZXdzLnByb2plY3RDb29yZGluYXRlcyIgbGFiZWw9IlByb2plY3QgQ29vcmRpbmF0ZXMiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmNvb3JkaW5hdGVzLnJjcC9pY29ucy92aWV3MTYvZGVwaW5zcC5naWYiIHRvb2x0aXA9IiIgY2F0ZWdvcnk9IkNvZGUgUmVjb21tZW5kZXJzIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmluamVjdGlvbi5FeHRlbnNpb25GYWN0b3J5Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5jb29yZGluYXRlcy5yY3AiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkNvZGUgUmVjb21tZW5kZXJzPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUTRDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcC52aWV3cy5tb2RlbFJlcG9zaXRvcmllcyIgbGFiZWw9Ik1vZGVsIFJlcG9zaXRvcmllcyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcC9pY29ucy92aWV3MTYvZGVwaW5zcC5naWYiIHRvb2x0aXA9IiIgY2F0ZWdvcnk9IkNvZGUgUmVjb21tZW5kZXJzIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmluamVjdGlvbi5FeHRlbnNpb25GYWN0b3J5Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpDb2RlIFJlY29tbWVuZGVyczwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVE0U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3Audmlld3MuZGVwZW5kZW5jeU92ZXJ2aWV3IiBsYWJlbD0iRGVwZW5kZW5jeSBPdmVydmlldyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcC9pY29ucy92aWV3MTYvZGVwaW5zcC5naWYiIHRvb2x0aXA9IiIgY2F0ZWdvcnk9IkNvZGUgUmVjb21tZW5kZXJzIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmluamVjdGlvbi5FeHRlbnNpb25GYWN0b3J5Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpDb2RlIFJlY29tbWVuZGVyczwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVE0aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uuc2VhcmNoLlNlYXJjaFJlc3VsdFZpZXciIGxhYmVsPSJDbGFzc2ljIFNlYXJjaCIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zZWFyY2gvaWNvbnMvZnVsbC9ldmlldzE2L3NlYXJjaHJlcy5wbmciIHRvb2x0aXA9IiIgY2F0ZWdvcnk9IkdlbmVyYWwiIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5zZWFyY2guaW50ZXJuYWwudWkuU2VhcmNoUmVzdWx0VmlldyIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5zZWFyY2giLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1RNHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnNlYXJjaC51aS52aWV3cy5TZWFyY2hWaWV3IiBsYWJlbD0iU2VhcmNoIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnNlYXJjaC9pY29ucy9mdWxsL2V2aWV3MTYvc2VhcmNocmVzLnBuZyIgdG9vbHRpcD0iIiBhbGxvd011bHRpcGxlPSJ0cnVlIiBjYXRlZ29yeT0iR2VuZXJhbCIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLnNlYXJjaDIuaW50ZXJuYWwudWkuU2VhcmNoVmlldyIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5zZWFyY2giLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1RNUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnRlYW0uc3luYy52aWV3cy5TeW5jaHJvbml6ZVZpZXciIGxhYmVsPSJTeW5jaHJvbml6ZSIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS50ZWFtLnVpL2ljb25zL2Z1bGwvZXZpZXcxNi9zeW5jaF9zeW5jaC5wbmciIHRvb2x0aXA9IiIgYWxsb3dNdWx0aXBsZT0idHJ1ZSIgY2F0ZWdvcnk9IlRlYW0iIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS50ZWFtLmludGVybmFsLnVpLnN5bmNocm9uaXplLlN5bmNocm9uaXplVmlldyIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS50ZWFtLnVpIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpUZWFtPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUTVTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS50ZWFtLnVpLkdlbmVyaWNIaXN0b3J5VmlldyIgbGFiZWw9Ikhpc3RvcnkiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudGVhbS51aS9pY29ucy9mdWxsL2V2aWV3MTYvaGlzdG9yeV92aWV3LnBuZyIgdG9vbHRpcD0iIiBhbGxvd011bHRpcGxlPSJ0cnVlIiBjYXRlZ29yeT0iVGVhbSIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLnRlYW0uaW50ZXJuYWwudWkuaGlzdG9yeS5HZW5lcmljSGlzdG9yeVZpZXciLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UudGVhbS51aSIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6VGVhbTwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVE1aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudGlwcy5pZGUudGlwUGFydCIgbGFiZWw9IlRpcCBvZiB0aGUgRGF5IiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnRpcHMudWkvaWNvbnMvbGlnaHRidWxiLnBuZyIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iSGVscCIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudGlwcy5pZGUvb3JnLmVjbGlwc2UudGlwcy5pZGUuaW50ZXJuYWwuVGlwUGFydCI+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpIZWxwPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUTV5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pbnRyb3ZpZXciIGxhYmVsPSJXZWxjb21lIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVpL2ljb25zL2Z1bGwvZXZpZXcxNi9kZWZhdWx0dmlld19taXNjLnBuZyIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iR2VuZXJhbCIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLlZpZXdJbnRyb0FkYXB0ZXJQYXJ0Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUTZDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5icm93c2VyLnZpZXciIGxhYmVsPSJJbnRlcm5hbCBXZWIgQnJvd3NlciIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51aS5icm93c2VyL2ljb25zL29iajE2L2ludGVybmFsX2Jyb3dzZXIucG5nIiB0b29sdGlwPSIiIGFsbG93TXVsdGlwbGU9InRydWUiIGNhdGVnb3J5PSJHZW5lcmFsIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuYnJvd3Nlci5XZWJCcm93c2VyVmlldyIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS5icm93c2VyIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUTZTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5jaGVhdHNoZWV0cy52aWV3cy5DaGVhdFNoZWV0VmlldyIgbGFiZWw9IkNoZWF0IFNoZWV0cyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51aS5jaGVhdHNoZWV0cy9pY29ucy92aWV3MTYvY2hlYXRzaGVldF92aWV3LmdpZiIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iSGVscCIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLmNoZWF0c2hlZXRzLnZpZXdzLkNoZWF0U2hlZXRWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLmNoZWF0c2hlZXRzIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpIZWxwPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUTZpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5jb25zb2xlLkNvbnNvbGVWaWV3IiBsYWJlbD0iQ29uc29sZSIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51aS5jb25zb2xlL2ljb25zL2Z1bGwvY3ZpZXcxNi9jb25zb2xlX3ZpZXcucG5nIiB0b29sdGlwPSIiIGFsbG93TXVsdGlwbGU9InRydWUiIGNhdGVnb3J5PSJHZW5lcmFsIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuY29uc29sZS5Db25zb2xlVmlldyIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS5jb25zb2xlIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUTZ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9ncmVzc1ZpZXciIGxhYmVsPSJQcm9ncmVzcyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51aS5pZGUvaWNvbnMvZnVsbC9ldmlldzE2L3B2aWV3LnBuZyIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iR2VuZXJhbCIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLnByb2dyZXNzLlByb2dyZXNzVmlldyIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS5pZGUiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1RN0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlJlc291cmNlTmF2aWdhdG9yIiBsYWJlbD0iTmF2aWdhdG9yIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVpLmlkZS9pY29ucy9mdWxsL2V2aWV3MTYvZmlsZW5hdl9uYXYucG5nIiB0b29sdGlwPSIiIGNhdGVnb3J5PSJHZW5lcmFsIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkudmlld3MubmF2aWdhdG9yLlJlc291cmNlTmF2aWdhdG9yIi8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLmlkZSIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVE3U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuQm9va21hcmtWaWV3IiBsYWJlbD0iQm9va21hcmtzIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVpLmlkZS9pY29ucy9mdWxsL2V2aWV3MTYvYmttcmtfbmF2LnBuZyIgdG9vbHRpcD0iIiBhbGxvd011bHRpcGxlPSJ0cnVlIiBjYXRlZ29yeT0iR2VuZXJhbCIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLnZpZXdzLm1hcmtlcnMuQm9va21hcmtzVmlldyIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS5pZGUiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1RN2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlRhc2tMaXN0IiBsYWJlbD0iVGFza3MiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudWkuaWRlL2ljb25zL2Z1bGwvZXZpZXcxNi90YXNrc190c2sucG5nIiB0b29sdGlwPSIiIGFsbG93TXVsdGlwbGU9InRydWUiIGNhdGVnb3J5PSJHZW5lcmFsIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwudmlld3MubWFya2Vycy5UYXNrc1ZpZXciLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkuaWRlIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUTd5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9ibGVtVmlldyIgbGFiZWw9IlByb2JsZW1zIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVpLmlkZS9pY29ucy9mdWxsL2V2aWV3MTYvcHJvYmxlbXNfdmlldy5wbmciIHRvb2x0aXA9IiIgYWxsb3dNdWx0aXBsZT0idHJ1ZSIgY2F0ZWdvcnk9IkdlbmVyYWwiIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC52aWV3cy5tYXJrZXJzLlByb2JsZW1zVmlldyIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS5pZGUiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1ROEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLkFsbE1hcmtlcnNWaWV3IiBsYWJlbD0iTWFya2VycyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51aS5pZGUvaWNvbnMvZnVsbC9ldmlldzE2L3Byb2JsZW1zX3ZpZXcucG5nIiB0b29sdGlwPSIiIGFsbG93TXVsdGlwbGU9InRydWUiIGNhdGVnb3J5PSJHZW5lcmFsIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwudmlld3MubWFya2Vycy5BbGxNYXJrZXJzVmlldyIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS5pZGUiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1ROFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Qcm9qZWN0RXhwbG9yZXIiIGxhYmVsPSJQcm9qZWN0IEV4cGxvcmVyIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5yZXNvdXJjZXMvaWNvbnMvZnVsbC9ldmlldzE2L3Jlc291cmNlX3BlcnNwLnBuZyIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iR2VuZXJhbCIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5yZXNvdXJjZXMuUHJvamVjdEV4cGxvcmVyIi8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5yZXNvdXJjZXMiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1ROGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiIGxhYmVsPSJQcm9wZXJ0aWVzIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVpLnZpZXdzL2ljb25zL2Z1bGwvZXZpZXcxNi9wcm9wX3BzLnBuZyIgdG9vbHRpcD0iIiBhbGxvd011bHRpcGxlPSJ0cnVlIiBjYXRlZ29yeT0iR2VuZXJhbCIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldCIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS52aWV3cyIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVE4eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuQ29udGVudE91dGxpbmUiIGxhYmVsPSJPdXRsaW5lIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVpLnZpZXdzL2ljb25zL2Z1bGwvZXZpZXcxNi9vdXRsaW5lX2NvLnBuZyIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iR2VuZXJhbCIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lIi8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLnZpZXdzIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUTlDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5wZGUucnVudGltZS5Mb2dWaWV3IiBsYWJlbD0iRXJyb3IgTG9nIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVpLnZpZXdzLmxvZy9pY29ucy9ldmlldzE2L2Vycm9yX2xvZy5wbmciIHRvb2x0aXA9IiIgY2F0ZWdvcnk9IkdlbmVyYWwiIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC52aWV3cy5sb2cuTG9nVmlldyIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS52aWV3cy5sb2ciLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1ROVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5jb21tb24uc25pcHBldHMuaW50ZXJuYWwudWkuU25pcHBldHNWaWV3IiBsYWJlbD0iU25pcHBldHMiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5zbmlwcGV0cy9pY29ucy9zbmlwcGV0c192aWV3LmdpZiIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iR2VuZXJhbCIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5jb21tb24uc25pcHBldHMuaW50ZXJuYWwudWkuU25pcHBldHNWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5jb21tb24uc25pcHBldHMiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1ROWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudWkudmlld3MuYW5ub3RhdGlvbnMuWE1MQW5ub3RhdGlvbnNWaWV3IiBsYWJlbD0iRG9jdW1lbnRhdGlvbiIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS53c3QueG1sLnVpL2ljb25zL2Z1bGwvb2JqMTYvY29tbWVudF9vYmouZ2lmIiB0b29sdGlwPSIiIGNhdGVnb3J5PSJYTUwiIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnZpZXdzLmFubm90YXRpb25zLlhNTEFubm90YXRpb25zVmlldyIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpYTUw8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1ROXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudWkuY29udGVudG1vZGVsLnZpZXciIGxhYmVsPSJDb250ZW50IE1vZGVsIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLndzdC54bWwudWkvaWNvbnMvZnVsbC92aWV3MTYvaGllcmFyY2h5LmdpZiIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iWE1MIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC52aWV3cy5jb250ZW50bW9kZWwuQ29udGVudE1vZGVsVmlldyIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpYTUw8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1RLUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLmJ1aWxkcy5uYXZpZ2F0b3IuYnVpbGRzIiBsYWJlbD0iQnVpbGRzIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLm15bHluLmJ1aWxkcy51aS9pY29ucy9ldmlldzE2L2J1aWxkLXZpZXcucG5nIiB0b29sdGlwPSIiIGNhdGVnb3J5PSJNeWx5biIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLm15bHluLmludGVybmFsLmJ1aWxkcy51aS52aWV3LkJ1aWxkc1ZpZXciLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UubXlseW4uYnVpbGRzLnVpIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpNeWx5bjwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVEtU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLnNuaXBtYXRjaC5yY3Audmlld3Muc25pcHBldHMiIGxhYmVsPSJTbmlwcGV0cyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuc25pcG1hdGNoLnJjcC9pY29ucy92aWV3MTYvc25pcHBldHMucG5nIiB0b29sdGlwPSIiIGNhdGVnb3J5PSJDb2RlIFJlY29tbWVuZGVycyIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbmplY3Rpb24uRXh0ZW5zaW9uRmFjdG9yeSIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuc25pcG1hdGNoLnJjcCIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6Q29kZSBSZWNvbW1lbmRlcnM8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1RLWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnZpZXciIGxhYmVsPSJUQ1AvSVAgTW9uaXRvciIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci51aS9pY29ucy9jdmlldzE2L21vbml0b3JWaWV3LmdpZiIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iRGVidWciIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci51aS5pbnRlcm5hbC52aWV3Lk1vbml0b3JWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnVpIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpEZWJ1ZzwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVEteXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuVHlwZUhpZXJhcmNoeSIgbGFiZWw9IkhpZXJhcmNoeSIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS53c3QuanNkdC51aS9pY29ucy9mdWxsL2V2aWV3MTYvY2xhc3NfaGkuZ2lmIiB0b29sdGlwPSIiIGNhdGVnb3J5PSJKYXZhU2NyaXB0IiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmpzZHQuaW50ZXJuYWwudWkudHlwZWhpZXJhcmNoeS5UeXBlSGllcmFyY2h5Vmlld1BhcnQiLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkphdmFTY3JpcHQ8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1RX0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLlBhY2thZ2VFeHBsb3JlciIgbGFiZWw9IlNjcmlwdCBFeHBsb3JlciIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS53c3QuanNkdC51aS9pY29ucy9mdWxsL2V2aWV3MTYvcGFja2FnZS5naWYiIHRvb2x0aXA9IiIgY2F0ZWdvcnk9IkphdmFTY3JpcHQiIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QuanNkdC5pbnRlcm5hbC51aS5wYWNrYWdldmlldy5QYWNrYWdlRXhwbG9yZXJQYXJ0Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpKYXZhU2NyaXB0PC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUV9TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC5jYWxsaGllcmFyY2h5LnZpZXciIGxhYmVsPSJDYWxsIEhpZXJhcmNoeSIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS53c3QuanNkdC51aS9pY29ucy9mdWxsL2V2aWV3MTYvY2FsbF9oaWVyYXJjaHkuZ2lmIiB0b29sdGlwPSIiIGNhdGVnb3J5PSJKYXZhU2NyaXB0IiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmpzZHQuaW50ZXJuYWwudWkuY2FsbGhpZXJhcmNoeS5DYWxsSGllcmFyY2h5Vmlld1BhcnQiLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkphdmFTY3JpcHQ8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1RX2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLlNvdXJjZVZpZXciIGxhYmVsPSJEZWNsYXJhdGlvbiIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS53c3QuanNkdC51aS9pY29ucy9mdWxsL2V2aWV3MTYvc291cmNlLmdpZiIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iSmF2YVNjcmlwdCIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5qc2R0LmludGVybmFsLnVpLmluZm92aWV3cy5Tb3VyY2VWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpKYXZhU2NyaXB0PC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUV95eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5KYXZhZG9jVmlldyIgbGFiZWw9IkRvY3VtZW50YXRpb24iIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uud3N0LmpzZHQudWkvaWNvbnMvZnVsbC9ldmlldzE2L2phdmFkb2MuZ2lmIiB0b29sdGlwPSJKYXZhU2NyaXB0IERvY3VtZW50YXRpb24iIGNhdGVnb3J5PSJKYXZhU2NyaXB0IiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmpzZHQuaW50ZXJuYWwudWkuaW5mb3ZpZXdzLkphdmFkb2NWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpKYXZhU2NyaXB0PC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUkFDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLlNlcnZlcnNWaWV3IiBsYWJlbD0iU2VydmVycyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpL2ljb25zL2N2aWV3MTYvc2VydmVyc192aWV3LmdpZiIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iU2VydmVyIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS5pbnRlcm5hbC5jbmYuU2VydmVyc1ZpZXcyIi8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOlNlcnZlcjwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPHRyaW1Db250cmlidXRpb25zIHhtaTppZD0iX1ZKU2Q0TnJsRWVXeDFOQzkyTjRxUnciIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm5ld3MucmNwLnRyaW1Db25zdHJpYnV0aW9uLm5ld3MiIGNvbnRyaWJ1dG9yVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5uZXdzLnJjcCIgcGFyZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnRyaW0uc3RhdHVzIj4KKyAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6VG9vbENvbnRyb2wiIHhtaTppZD0iX2NrZkIwT0ZBRWVXZGI1eFpndjBEYnciIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm5ld3MucmNwLnRvb2xDb250cm9sLm5ld3MiIGNvbnRyaWJ1dG9yVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5uZXdzLnJjcCIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5uZXdzLnJjcC9vcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubmV3cy5yY3AudG9vbGJhci5OZXdzVG9vbENvbnRyb2wiLz4KKyAgPC90cmltQ29udHJpYnV0aW9ucz4KKyAgPHRyaW1Db250cmlidXRpb25zIHhtaTppZD0iXzJyMTBVRjl0RWVPLXlvakhfeTRUSkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuaWRlLmFwcGxpY2F0aW9uLnRyaW1jb250cmlidXRpb24uUXVpY2tBY2Nlc3MiIGNvbnRyaWJ1dG9yVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVpLmlkZS5hcHBsaWNhdGlvbiIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgcGFyZW50SWQ9Im9yZy5lY2xpcHNlLnVpLm1haW4udG9vbGJhciIgcG9zaXRpb25JblBhcmVudD0ibGFzdCI+CisgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OlRvb2xDb250cm9sIiB4bWk6aWQ9Il83NnVVQUY5dEVlTy15b2pIX3k0VEpBIiBlbGVtZW50SWQ9IlNwYWNlciBHbHVlIiBjb250cmlidXRvclVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51aS5pZGUuYXBwbGljYXRpb24iIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC9vcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC5MYXlvdXRNb2RpZmllclRvb2xDb250cm9sIj4KKyAgICAgIDx0YWdzPmdsdWU8L3RhZ3M+CisgICAgICA8dGFncz5tb3ZlX2FmdGVyOlBlcnNwZWN0aXZlU3BhY2VyPC90YWdzPgorICAgICAgPHRhZ3M+U0hPV19SRVNUT1JFX01FTlU8L3RhZ3M+CisgICAgPC9jaGlsZHJlbj4KKyAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6VG9vbENvbnRyb2wiIHhtaTppZD0iXzh0SlBjRjl0RWVPLXlvakhfeTRUSkEiIGVsZW1lbnRJZD0iU2VhcmNoRmllbGQiIGNvbnRyaWJ1dG9yVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVpLmlkZS5hcHBsaWNhdGlvbiIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5xdWlja2FjY2Vzcy5TZWFyY2hGaWVsZCI+CisgICAgICA8dGFncz5tb3ZlX2FmdGVyOlNwYWNlciBHbHVlPC90YWdzPgorICAgICAgPHRhZ3M+SElERUFCTEU8L3RhZ3M+CisgICAgICA8dGFncz5TSE9XX1JFU1RPUkVfTUVOVTwvdGFncz4KKyAgICA8L2NoaWxkcmVuPgorICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0ibWVudTpUb29sQ29udHJvbCIgeG1pOmlkPSJfOUxnbWNGOXRFZU8teW9qSF95NFRKQSIgZWxlbWVudElkPSJTZWFyY2gtUFMgR2x1ZSIgY29udHJpYnV0b3JVUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudWkuaWRlLmFwcGxpY2F0aW9uIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3Qvb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuTGF5b3V0TW9kaWZpZXJUb29sQ29udHJvbCI+CisgICAgICA8dGFncz5nbHVlPC90YWdzPgorICAgICAgPHRhZ3M+bW92ZV9hZnRlcjpTZWFyY2hGaWVsZDwvdGFncz4KKyAgICAgIDx0YWdzPlNIT1dfUkVTVE9SRV9NRU5VPC90YWdzPgorICAgIDwvY2hpbGRyZW4+CisgIDwvdHJpbUNvbnRyaWJ1dGlvbnM+CisgIDxzbmlwcGV0cyB4c2k6dHlwZT0iYWR2YW5jZWQ6UGVyc3BlY3RpdmUiIHhtaTppZD0iX0FHX2YyaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuanN0LmoyZWUuSjJFRVBlcnNwZWN0aXZlLiZsdDtKYXZhIEVFPiIgc2VsZWN0ZWRFbGVtZW50PSJfQUdfZjJ5eFFFZXlteWJ6c3VMOW5CQSIgbGFiZWw9IiZsdDtKYXZhIEVFPiIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5qc3QuajJlZS51aS9pY29ucy9mdWxsL2N2aWV3MTYvajJlZV9wZXJzcGVjdGl2ZS5naWYiPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9InBlcnNwLmhpZGRlbkl0ZW1zIiB2YWx1ZT0icGVyc3AuaGlkZVRvb2xiYXJTQzpwcmludCxwZXJzcC5oaWRlVG9vbGJhclNDOm9yZy5lY2xpcHNlLnVpLmVkaXQudW5kbyxwZXJzcC5oaWRlVG9vbGJhclNDOm9yZy5lY2xpcHNlLnVpLmVkaXQucmVkbyxwZXJzcC5oaWRlVG9vbGJhclNDOm9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC50b2dnbGVTaG93U2VsZWN0ZWRFbGVtZW50T25seSxwZXJzcC5oaWRlVG9vbGJhclNDOm9yZy5lY2xpcHNlLmRlYnVnLnVpLmNvbW1hbmRzLlJ1blRvTGluZSxwZXJzcC5oaWRlVG9vbGJhclNDOm9yZy5lY2xpcHNlLmpkdC51aS5hY3Rpb25zLk9wZW5Qcm9qZWN0V2l6YXJkLCIvPgorICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS5teWx5bi5kb2MuYWN0aW9uU2V0PC90YWdzPgorICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5uYXZpZ2F0aW9uPC90YWdzPgorICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS51aS5jaGVhdHNoZWV0cy5hY3Rpb25TZXQ8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLnJzZS5jb3JlLnNlYXJjaC5zZWFyY2hBY3Rpb25TZXQ8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLnNlYXJjaC5zZWFyY2hBY3Rpb25TZXQ8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5hY3Rpb25TZXQuYW5ub3RhdGlvbk5hdmlnYXRpb248L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5hY3Rpb25TZXQubmF2aWdhdGlvbjwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmFjdGlvblNldC5jb252ZXJ0TGluZURlbGltaXRlcnNUbzwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UudWkuZXh0ZXJuYWx0b29scy5FeHRlcm5hbFRvb2xzU2V0PC90YWdzPgorICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS51aS5hY3Rpb25TZXQua2V5QmluZGluZ3M8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLnVpLmFjdGlvblNldC5vcGVuRmlsZXM8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLndzdC5qc2R0LmNocm9taXVtLmRlYnVnLnVpLmFjdGlvblNldHM8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLmpzdC5qMmVlLkoyZWVNYWluQWN0aW9uU2V0PC90YWdzPgorICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS5qZHQudWkuSmF2YUFjdGlvblNldDwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UuZGVidWcudWkubGF1bmNoQWN0aW9uU2V0PC90YWdzPgorICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5kZWJ1Z0FjdGlvblNldDwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UudWkuTmF2aWdhdGVBY3Rpb25TZXQ8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Qcm9qZWN0RXhwbG9yZXI8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuU2VydmVyc1ZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLmRhdGF0b29scy5jb25uZWN0aXZpdHkuRGF0YVNvdXJjZUV4cGxvcmVyTmF2aWdhdG9yPC90YWdzPgorICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS51aS52aWV3cy5Cb29rbWFya1ZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLnVpLnZpZXdzLkNvbnRlbnRPdXRsaW5lPC90YWdzPgorICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0PC90YWdzPgorICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS51aS52aWV3cy5SZXNvdXJjZU5hdmlnYXRvcjwvdGFncz4KKyAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5zbmlwcGV0cy5pbnRlcm5hbC51aS5TbmlwcGV0c1ZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLnVpLnZpZXdzLkFsbE1hcmtlcnNWaWV3PC90YWdzPgorICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS52aWV3cy50YXNrczwvdGFncz4KKyAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2Uuc2VhcmNoLnVpLnZpZXdzLlNlYXJjaFZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLnVpLmNvbnNvbGUuQ29uc29sZVZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3Auc2hvd0luOm9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Qcm9qZWN0RXhwbG9yZXI8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci5leHBsb3JlcjwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5tMmUuY29yZS53aXphcmRzLk1hdmVuMlByb2plY3RXaXphcmQ8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3Auc2hvd0luOm9yZy5lY2xpcHNlLnRtLnRlcm1pbmFsLnZpZXcudWkuVGVybWluYWxzVmlldzwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5wZXJzcFNDOm9yZy5lY2xpcHNlLmRlYnVnLnVpLkRlYnVnUGVyc3BlY3RpdmU8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3AucGVyc3BTQzpvcmcuZWNsaXBzZS5qZHQudWkuSmF2YVBlcnNwZWN0aXZlPC90YWdzPgorICAgIDx0YWdzPnBlcnNwLnBlcnNwU0M6b3JnLmVjbGlwc2UudWkucmVzb3VyY2VQZXJzcGVjdGl2ZTwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5wZXJzcFNDOm9yZy5lY2xpcHNlLndzdC53ZWIudWkud2ViRGV2UGVyc3BlY3RpdmU8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UuanN0LmoyZWUudWkucHJvamVjdC5mYWNldC5FYXJQcm9qZWN0V2l6YXJkPC90YWdzPgorICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLmpzdC5zZXJ2bGV0LnVpLnByb2plY3QuZmFjZXQuV2ViUHJvamVjdFdpemFyZDwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5qc3QuZWpiLnVpLnByb2plY3QuZmFjZXQuRWpiUHJvamVjdFdpemFyZDwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5qc3QuajJlZS5qY2EudWkuaW50ZXJuYWwud2l6YXJkLkNvbm5lY3RvclByb2plY3RXaXphcmQ8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UuanN0LmoyZWUudWkucHJvamVjdC5mYWNldC5hcHBjbGllbnQuQXBwQ2xpZW50UHJvamVjdFdpemFyZDwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS53c3Qud2ViLnVpLmludGVybmFsLndpemFyZHMuU2ltcGxlV2ViUHJvamVjdFdpemFyZDwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5qcHQudWkud2l6YXJkLm5ld0pwYVByb2plY3Q8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UuanN0LnNlcnZsZXQudWkuaW50ZXJuYWwud2l6YXJkLkFkZFNlcnZsZXRXaXphcmQ8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UuanN0LmVqYi51aS5pbnRlcm5hbC53aXphcmQuQWRkU2Vzc2lvbkJlYW5XaXphcmQ8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UuanN0LmVqYi51aS5pbnRlcm5hbC53aXphcmQuQWRkTWVzc2FnZURyaXZlbkJlYW5XaXphcmQ8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UuanB0LnVpLndpemFyZC5uZXdFbnRpdHk8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQ8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UudWkud2l6YXJkcy5uZXcuZm9sZGVyPC90YWdzPgorICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLnVpLndpemFyZHMubmV3LmZpbGU8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuaW50ZXJuYWwud2ViYnJvd3Nlci5hY3Rpb25TZXQ8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLmRlYnVnLnVpLmJyZWFrcG9pbnRBY3Rpb25TZXQ8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLmVjbGVtbWEudWkuQ292ZXJhZ2VBY3Rpb25TZXQ8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3Auc2hvd0luOm9yZy5lY2xpcHNlLmVjbGVtbWEudWkuQ292ZXJhZ2VWaWV3PC90YWdzPgorICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLmpwdC5qcGEudWkud2l6YXJkLm5ld0pwYVByb2plY3Q8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3AucGVyc3BTQzpvcmcuZWNsaXBzZS5qcHQudWkuanBhUGVyc3BlY3RpdmU8L3RhZ3M+CisgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJiYXNpYzpQYXJ0U2FzaENvbnRhaW5lciIgeG1pOmlkPSJfQUdfZjJ5eFFFZXlteWJ6c3VMOW5CQSIgc2VsZWN0ZWRFbGVtZW50PSJfQUdfZjRTeFFFZXlteWJ6c3VMOW5CQSIgaG9yaXpvbnRhbD0idHJ1ZSI+CisgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlBhcnRTdGFjayIgeG1pOmlkPSJfQUdfZjNDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJ0b3BMZWZ0IiBjb250YWluZXJEYXRhPSIxOTI5IiBzZWxlY3RlZEVsZW1lbnQ9Il9BR19mM1N4UUVleW15YnpzdUw5bkJBIj4KKyAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUdfZjNTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuUHJvamVjdEV4cGxvcmVyIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUdfZjNpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5SZXNvdXJjZU5hdmlnYXRvciIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHX2YzeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLlR5cGVIaWVyYXJjaHkiIHRvQmVSZW5kZXJlZD0iZmFsc2UiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpKYXZhPC90YWdzPgorICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BR19mNEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlc1ZpZXciIHRvQmVSZW5kZXJlZD0iZmFsc2UiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpKYXZhIEJyb3dzaW5nPC90YWdzPgorICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgPC9jaGlsZHJlbj4KKyAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYmFzaWM6UGFydFNhc2hDb250YWluZXIiIHhtaTppZD0iX0FHX2Y0U3hRRWV5bXlienN1TDluQkEiIGNvbnRhaW5lckRhdGE9IjgwNzEiIHNlbGVjdGVkRWxlbWVudD0iX0FHX2Y0aXhRRWV5bXlienN1TDluQkEiPgorICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlBhcnRTYXNoQ29udGFpbmVyIiB4bWk6aWQ9Il9BR19mNGl4UUVleW15YnpzdUw5bkJBIiBjb250YWluZXJEYXRhPSI3NDU4IiBzZWxlY3RlZEVsZW1lbnQ9Il9BR19mNHl4UUVleW15YnpzdUw5bkJBIiBob3Jpem9udGFsPSJ0cnVlIj4KKyAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BR19mNHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXRvcnNzIiBjb250YWluZXJEYXRhPSI3ODQ3Ii8+CisgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJiYXNpYzpQYXJ0U3RhY2siIHhtaTppZD0iX0FHX2Y1Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0idG9wUmlnaHQiIGNvbnRhaW5lckRhdGE9IjIxNTMiIHNlbGVjdGVkRWxlbWVudD0iX0FHX2Y1U3hRRWV5bXlienN1TDluQkEiPgorICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUdfZjVTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Db250ZW50T3V0bGluZSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BR19mNWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnZpZXdzLnRhc2tzIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpNeWx5bjwvdGFncz4KKyAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJiYXNpYzpQYXJ0U3RhY2siIHhtaTppZD0iX0FHX2Y1eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iYm90dG9tUmlnaHQiIGNvbnRhaW5lckRhdGE9IjI1NDIiIHNlbGVjdGVkRWxlbWVudD0iX0FHX2Y3eXhRRWV5bXlienN1TDluQkEiPgorICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHX2Y2Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuQWxsTWFya2Vyc1ZpZXciIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHX2Y2U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuUHJvcGVydHlTaGVldCIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUdfZjZpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLlNlcnZlcnNWaWV3IiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOlNlcnZlcjwvdGFncz4KKyAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHX2Y2eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGF0YXRvb2xzLmNvbm5lY3Rpdml0eS5EYXRhU291cmNlRXhwbG9yZXJOYXZpZ2F0b3IiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6RGF0YSBNYW5hZ2VtZW50PC90YWdzPgorICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUdfZjdDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuY29tbW9uLnNuaXBwZXRzLmludGVybmFsLnVpLlNuaXBwZXRzVmlldyIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUdfZjdTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9ibGVtVmlldyIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUdfZjdpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5UYXNrTGlzdCIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUdfZjd5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5jb25zb2xlLkNvbnNvbGVWaWV3IiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BR19mOEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLkJvb2ttYXJrVmlldyIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUdfZjhTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9ncmVzc1ZpZXciIHRvQmVSZW5kZXJlZD0iZmFsc2UiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHX2Y4aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uuc2VhcmNoLnVpLnZpZXdzLlNlYXJjaFZpZXciIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgPC9jaGlsZHJlbj4KKyAgICA8L2NoaWxkcmVuPgorICA8L3NuaXBwZXRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZjh5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS53aW5kb3cuY3VzdG9taXplUGVyc3BlY3RpdmUiIGNvbnRyaWJ1dG9yVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnBsYXRmb3JtIiBjb21tYW5kTmFtZT0iQ3VzdG9taXplIFBlcnNwZWN0aXZlIiBkZXNjcmlwdGlvbj0iQ3VzdG9taXplIHRoZSBjdXJyZW50IHBlcnNwZWN0aXZlIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19mOUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5jb3JyZWN0aW9uLmlubGluZUxvY2FsLmFzc2lzdCIgY29tbWFuZE5hbWU9IlF1aWNrIEFzc2lzdCAtIElubGluZSBsb2NhbCB2YXJpYWJsZSIgZGVzY3JpcHRpb249Ikludm9rZXMgcXVpY2sgYXNzaXN0IGFuZCBzZWxlY3RzICdJbmxpbmUgbG9jYWwgdmFyaWFibGUnIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2Y5U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LnNlbGVjdC5wYWdlVXAiIGNvbW1hbmROYW1lPSJTZWxlY3QgUGFnZSBVcCIgZGVzY3JpcHRpb249IlNlbGVjdCB0byB0aGUgdG9wIG9mIHRoZSBwYWdlIiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2Y5aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LnRvZ2dsZVdvcmRXcmFwIiBjb21tYW5kTmFtZT0iVG9nZ2xlIFdvcmQgV3JhcCIgZGVzY3JpcHRpb249IlRvZ2dsZSB3b3JkIHdyYXAgaW4gdGhlIGN1cnJlbnQgdGV4dCBlZGl0b3IiIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZjl5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmhpc3RvcnkuUmVzZXRRdWlja2RpZmZCYXNlbGluZSIgY29tbWFuZE5hbWU9IlJlc2V0IHF1aWNrZGlmZiBiYXNlbGluZSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BR19mLUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuaGlzdG9yeS5SZXNldFF1aWNrZGlmZkJhc2VsaW5lVGFyZ2V0IiBuYW1lPSJSZXNldCB0YXJnZXQgKEhFQUQsIEhFQUReMSkiIG9wdGlvbmFsPSJmYWxzZSIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZi1TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5vb21waC5wMi51aS5TZWFyY2hSZXF1aXJlbWVudHMiIGNvbW1hbmROYW1lPSJTZWFyY2ggUmVxdWlyZW1lbnRzIiBjYXRlZ29yeT0iX0FIQlVPQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2YtaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmNvcnJlY3Rpb24uY29udmVydExvY2FsVG9GaWVsZC5hc3Npc3QiIGNvbW1hbmROYW1lPSJRdWljayBBc3Npc3QgLSBDb252ZXJ0IGxvY2FsIHZhcmlhYmxlIHRvIGZpZWxkIiBkZXNjcmlwdGlvbj0iSW52b2tlcyBxdWljayBhc3Npc3QgYW5kIHNlbGVjdHMgJ0NvbnZlcnQgbG9jYWwgdmFyaWFibGUgdG8gZmllbGQnIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2YteXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmNvcnJlY3Rpb24uYWRkVGhyb3dzRGVjbCIgY29tbWFuZE5hbWU9IlF1aWNrIEZpeCAtIEFkZCB0aHJvd3MgZGVjbGFyYXRpb24iIGRlc2NyaXB0aW9uPSJJbnZva2VzIHF1aWNrIGFzc2lzdCBhbmQgc2VsZWN0cyAnQWRkIHRocm93cyBkZWNsYXJhdGlvbiciIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZl9DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lY2xlbW1hLnVpLmp1bml0UGx1Z2luU2hvcnRjdXQuY292ZXJhZ2UiIGNvbW1hbmROYW1lPSJDb3ZlcmFnZSBKVW5pdCBQbHVnLWluIFRlc3QiIGRlc2NyaXB0aW9uPSJDb3ZlcmFnZSBKVW5pdCBQbHVnLWluIFRlc3QiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZl9TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS50bS50ZXJtaW5hbC5tYXhpbWl6ZSIgY29tbWFuZE5hbWU9Ik1heGltaXplIEFjdGl2ZSBWaWV3IG9yIEVkaXRvciIgY2F0ZWdvcnk9Il9BSEJVVXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19mX2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLmVkaXRvci5vcGVuRGlzY292ZXJlZFR5cGUiIGNvbW1hbmROYW1lPSJPcGVuIERpc2NvdmVyZWQgVHlwZSIgY2F0ZWdvcnk9Il9BSEJVUnl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19mX3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5kZWxldGVQcmV2aW91c1dvcmQiIGNvbW1hbmROYW1lPSJEZWxldGUgUHJldmlvdXMgV29yZCIgZGVzY3JpcHRpb249IkRlbGV0ZSB0aGUgcHJldmlvdXMgd29yZCIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nQUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5zZWFyY2guZGVjbGFyYXRpb25zLmluLndvcmtzcGFjZSIgY29tbWFuZE5hbWU9IkRlY2xhcmF0aW9uIGluIFdvcmtzcGFjZSIgZGVzY3JpcHRpb249IlNlYXJjaCBmb3IgZGVjbGFyYXRpb25zIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50IGluIHRoZSB3b3Jrc3BhY2UiIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ0FTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5jb21tYW5kcy5zaG93RWxlbWVudEluVHlwZUhpZXJhcmNoeVZpZXciIGNvbW1hbmROYW1lPSJTaG93IEphdmFTY3JpcHQgRWxlbWVudCBUeXBlIEhpZXJhcmNoeSIgZGVzY3JpcHRpb249IlNob3cgYSBKYXZhU2NyaXB0IGVsZW1lbnQgaW4gdGhlIFR5cGUgSGllcmFyY2h5IHZpZXciIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUdfZ0FpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJlbGVtZW50UmVmIiBuYW1lPSJKYXZhU2NyaXB0IGVsZW1lbnQgcmVmZXJlbmNlIiB0eXBlSWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmNvbW1hbmRzLmphdmFFbGVtZW50UmVmZXJlbmNlIiBvcHRpb25hbD0iZmFsc2UiLz4KKyAgPC9jb21tYW5kcz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dBeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmRlbGltaXRlci51bml4IiBjb21tYW5kTmFtZT0iQ29udmVydCBMaW5lIERlbGltaXRlcnMgdG8gVW5peCAoTEYsIFxuLCAwQSwgJiN4YjY7KSIgZGVzY3JpcHRpb249IkNvbnZlcnRzIHRoZSBsaW5lIGRlbGltaXRlcnMgdG8gVW5peCAoTEYsIFxuLCAwQSwgJiN4YjY7KSIgY2F0ZWdvcnk9Il9BSEJVTWl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nQkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLnNlYXJjaC5yZWZlcmVuY2VzLmluLndvcmtpbmcuc2V0IiBjb21tYW5kTmFtZT0iUmVmZXJlbmNlcyBpbiBXb3JraW5nIFNldCIgZGVzY3JpcHRpb249IlNlYXJjaCBmb3IgcmVmZXJlbmNlcyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpbiBhIHdvcmtpbmcgc2V0IiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dCU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLnNlYXJjaC5yZWFkLmFjY2Vzcy5pbi53b3JraW5nLnNldCIgY29tbWFuZE5hbWU9IlJlYWQgQWNjZXNzIGluIFdvcmtpbmcgU2V0IiBkZXNjcmlwdGlvbj0iU2VhcmNoIGZvciByZWFkIHJlZmVyZW5jZXMgdG8gdGhlIHNlbGVjdGVkIGVsZW1lbnQgaW4gYSB3b3JraW5nIHNldCIgY2F0ZWdvcnk9Il9BSEJVVkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nQml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuaGlzdG9yeS5FZGl0IiBjb21tYW5kTmFtZT0iRWRpdCBDb21taXQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ0J5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lcHAubXBjLnVpLmNvbW1hbmQuc2hvd01hcmtldHBsYWNlV2l6YXJkIiBjb21tYW5kTmFtZT0iRWNsaXBzZSBNYXJrZXRwbGFjZSIgZGVzY3JpcHRpb249IlNob3cgdGhlIEVjbGlwc2UgTWFya2V0cGxhY2Ugd2l6YXJkIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FHX2dDQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0idHJpZ2dlciIgbmFtZT0idHJpZ2dlciIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ0NTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC5qcy5ncnVudC5jb21tYW5kcy5ncnVudExhdW5jaCIgY29tbWFuZE5hbWU9IlJ1biBhcyBHcnVudCBUYXNrIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dDaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuYW50LnVpLnRvZ2dsZU1hcmtPY2N1cnJlbmNlcyIgY29tbWFuZE5hbWU9IlRvZ2dsZSBBbnQgTWFyayBPY2N1cnJlbmNlcyIgZGVzY3JpcHRpb249IlRvZ2dsZXMgbWFyayBvY2N1cnJlbmNlcyBpbiBBbnQgZWRpdG9ycyIgY2F0ZWdvcnk9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nQ3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRlLmFkZFRvV29ya2luZ1NldCIgY29tbWFuZE5hbWU9IkFkZCB0byBXb3JraW5nIFNldCIgZGVzY3JpcHRpb249IkFkZHMgdGhlIHNlbGVjdGVkIG9iamVjdCB0byBhIHdvcmtpbmcgc2V0LiIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nREN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LmNhbGxoaWVyYXJjaHkudmlldyIgY29tbWFuZE5hbWU9IkphdmFTY3JpcHQgQ2FsbCBIaWVyYXJjaHkiIGRlc2NyaXB0aW9uPSJTaG93IHRoZSBDYWxsIEhpZXJhcmNoeSB2aWV3IiBjYXRlZ29yeT0iX0FIQlVReXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dEU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGF0YXRvb2xzLmNvbm5lY3Rpdml0eS5jb21tYW5kcy5leHBvcnQiIGNvbW1hbmROYW1lPSJFeHBvcnQgUHJvZmlsZXMgQ29tbWFuZCIgZGVzY3JpcHRpb249IkNvbW1hbmQgdG8gZXhwb3J0IGNvbm5lY3Rpb24gcHJvZmlsZXMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ0RpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQuanVuaXQuanVuaXRTaG9ydGN1dC5kZWJ1ZyIgY29tbWFuZE5hbWU9IkRlYnVnIEpVbml0IFRlc3QiIGRlc2NyaXB0aW9uPSJEZWJ1ZyBKVW5pdCBUZXN0IiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dEeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4ud2lraXRleHQudWkuZWRpdG9yLnNob3dDaGVhdFNoZWV0Q29tbWFuZCIgY29tbWFuZE5hbWU9IlNob3cgTWFya3VwIENoZWF0IFNoZWV0IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dFQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudGVhbS51aS5UZWFtU3luY2hyb25pemluZ1BlcnNwZWN0aXZlIiBjb21tYW5kTmFtZT0iVGVhbSBTeW5jaHJvbml6aW5nIiBkZXNjcmlwdGlvbj0iT3BlbiB0aGUgVGVhbSBTeW5jaHJvbml6aW5nIFBlcnNwZWN0aXZlIiBjYXRlZ29yeT0iX0FIQlVWeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dFU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuYW50LnVpLm9wZW4uZGVjbGFyYXRpb24uY29tbWFuZCIgY29tbWFuZE5hbWU9Ik9wZW4gRGVjbGFyYXRpb24iIGRlc2NyaXB0aW9uPSJPcGVucyB0aGUgQW50IGVkaXRvciBvbiB0aGUgcmVmZXJlbmNlZCBlbGVtZW50IiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dFaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLnV0aWxzLnJjcC5jb21tYW5kcy5vcGVuQnJvd3NlckRpYWxvZyIgY29tbWFuZE5hbWU9Ik9wZW4gYSBXZWIgYnJvd3NlciIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BR19nRXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy51dGlscy5yY3AubGlua0NvbnRyaWJ1dGlvbi5ocmVmIiBuYW1lPSJVUkkiIG9wdGlvbmFsPSJmYWxzZSIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ0ZDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lcHAubXBjLnVpLmNvbW1hbmQuc2hvd0luc3RhbGxlZCIgY29tbWFuZE5hbWU9Ik1hbmFnZSBpbnN0YWxsZWQgcGx1Zy1pbnMiIGRlc2NyaXB0aW9uPSJVcGRhdGUgb3IgdW5pbnN0YWxsIHBsdWctaW5zIGluc3RhbGxlZCBmcm9tIHRoZSBNYXJrZXRwbGFjZSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nRlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5jcmVhdGUuZGVsZWdhdGUubWV0aG9kcyIgY29tbWFuZE5hbWU9IkdlbmVyYXRlIERlbGVnYXRlIE1ldGhvZHMiIGRlc2NyaXB0aW9uPSJBZGQgZGVsZWdhdGUgbWV0aG9kcyBmb3IgYSB0eXBlJ3MgZmllbGRzIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dGaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZ2VmLnVpLnBhbGV0dGVfdmlldyIgY29tbWFuZE5hbWU9IlBhbGV0dGUiIGNhdGVnb3J5PSJfQUhCVVF5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ0Z5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QueG1sLnZpZXdzLlhQYXRoVmlldy5wcmVmaXhlcyIgY29tbWFuZE5hbWU9IiZhbXA7RWRpdCBOYW1lc3BhY2UgUHJlZml4ZXMiIGNhdGVnb3J5PSJfQUhCVU95eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ0dDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsZWRpdG9yLnRvZ2dsZUNvbW1lbnRBY3Rpb24iIGNvbW1hbmROYW1lPSJUb2dnbGUgQ29tbWVudCIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nR1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLmNvbnRleHQudWkuY29tbWFuZHMudGFzay5jbGVhckNvbnRleHQiIGNvbW1hbmROYW1lPSJDbGVhciBDb250ZXh0IiBjYXRlZ29yeT0iX0FIQlVMQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dHaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLndyaXRlLmFjY2Vzcy5pbi53b3JraW5nLnNldCIgY29tbWFuZE5hbWU9IldyaXRlIEFjY2VzcyBpbiBXb3JraW5nIFNldCIgZGVzY3JpcHRpb249IlNlYXJjaCBmb3Igd3JpdGUgcmVmZXJlbmNlcyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpbiBhIHdvcmtpbmcgc2V0IiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dHeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLnJlYWQuYWNjZXNzLmluLmhpZXJhcmNoeSIgY29tbWFuZE5hbWU9IlJlYWQgQWNjZXNzIGluIEhpZXJhcmNoeSIgZGVzY3JpcHRpb249IlNlYXJjaCBmb3IgcmVhZCByZWZlcmVuY2VzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50IGluIGl0cyBoaWVyYXJjaHkiIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ0hDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5wdWxsLnVwIiBjb21tYW5kTmFtZT0iUHVsbCBVcCIgZGVzY3JpcHRpb249Ik1vdmUgbWVtYmVycyB0byBhIHN1cGVyY2xhc3MiIGNhdGVnb3J5PSJfQUhCVVFTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ0hTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5jb21tYW5kcy5Ub2dnbGVMaW5lQnJlYWtwb2ludCIgY29tbWFuZE5hbWU9IlRvZ2dsZSBMaW5lIEJyZWFrcG9pbnQiIGRlc2NyaXB0aW9uPSJDcmVhdGVzIG9yIHJlbW92ZXMgYSBsaW5lIGJyZWFrcG9pbnQiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ0hpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5jb21tYW5kLnNlYXJjaEZvclRhc2siIGNvbW1hbmROYW1lPSJTZWFyY2ggUmVwb3NpdG9yeSBmb3IgVGFzayIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nSHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLmZvbGRpbmcuY29sbGFwc2VNZW1iZXJzIiBjb21tYW5kTmFtZT0iQ29sbGFwc2UgTWVtYmVycyIgZGVzY3JpcHRpb249IkNvbGxhcHNlIGFsbCBtZW1iZXJzIiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dJQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmNvcnJlY3Rpb24uYWRkSW1wb3J0IiBjb21tYW5kTmFtZT0iUXVpY2sgRml4IC0gQWRkIGltcG9ydCIgZGVzY3JpcHRpb249Ikludm9rZXMgcXVpY2sgYXNzaXN0IGFuZCBzZWxlY3RzICdBZGQgaW1wb3J0JyIgY2F0ZWdvcnk9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nSVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLnNlYXJjaC53cml0ZS5hY2Nlc3MuaW4ucHJvamVjdCIgY29tbWFuZE5hbWU9IldyaXRlIEFjY2VzcyBpbiBQcm9qZWN0IiBkZXNjcmlwdGlvbj0iU2VhcmNoIGZvciB3cml0ZSByZWZlcmVuY2VzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50IGluIHRoZSBlbmNsb3NpbmcgcHJvamVjdCIgY2F0ZWdvcnk9Il9BSEJVVkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nSWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuaW50ZXJuYWwucmVmbG9nLkNoZWNrb3V0Q29tbWFuZCIgY29tbWFuZE5hbWU9IkNoZWNrIE91dCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nSXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQubW92ZSIgY29tbWFuZE5hbWU9Ik1vdmUuLi4iIGRlc2NyaXB0aW9uPSJNb3ZlIHRoZSBzZWxlY3RlZCBpdGVtIiBjYXRlZ29yeT0iX0FIQlVNaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dKQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLnJlZmFjdG9yLm1pZ3JhdGUuamFyIiBjb21tYW5kTmFtZT0iTWlncmF0ZSBKQVIgRmlsZSIgZGVzY3JpcHRpb249Ik1pZ3JhdGUgYSBKQVIgRmlsZSB0byBhIG5ldyB2ZXJzaW9uIiBjYXRlZ29yeT0iX0FIQlVUeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dKU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuY29tbWFuZC5tYXhpbWl6ZVBhcnQiIGNvbW1hbmROYW1lPSJNYXhpbWl6ZSBQYXJ0IiBkZXNjcmlwdGlvbj0iTWF4aW1pemUgUGFydCIgY2F0ZWdvcnk9Il9BSEJVUlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nSml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLnNob3cub3V0bGluZSIgY29tbWFuZE5hbWU9IlF1aWNrIE91dGxpbmUiIGRlc2NyaXB0aW9uPSJTaG93IHRoZSBxdWljayBvdXRsaW5lIGZvciB0aGUgZWRpdG9yIGlucHV0IiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dKeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuY29tbWFuZHMub3BlbkVsZW1lbnRJbkVkaXRvciIgY29tbWFuZE5hbWU9Ik9wZW4gSmF2YVNjcmlwdCBFbGVtZW50IiBkZXNjcmlwdGlvbj0iT3BlbiBhIEphdmFTY3JpcHQgZWxlbWVudCBpbiBpdHMgZWRpdG9yIiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FHX2dLQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iZWxlbWVudFJlZiIgbmFtZT0iSmF2YVNjcmlwdCBlbGVtZW50IHJlZmVyZW5jZSIgdHlwZUlkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5jb21tYW5kcy5qYXZhRWxlbWVudFJlZmVyZW5jZSIgb3B0aW9uYWw9ImZhbHNlIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nS1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLlR5cGVzVmlldyIgY29tbWFuZE5hbWU9IkphdmFTY3JpcHQgVHlwZXMiIGRlc2NyaXB0aW9uPSJTaG93IHRoZSBUeXBlcyB2aWV3IiBjYXRlZ29yeT0iX0FIQlVReXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dLaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuY2Z0LnNlcnZlci51aS5pbnRlcm5hbC5hY3Rpb25zLnNob3djb25zb2xldmlld2VyY29tbWFuZCIgY29tbWFuZE5hbWU9IlNob3cgUmVjZW50IExvZ3MiIGRlc2NyaXB0aW9uPSJTaG93IFJlY2VudCBMb2dzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dLeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuY29tcGFyZS5pZ25vcmVXaGl0ZVNwYWNlIiBjb21tYW5kTmFtZT0iSWdub3JlIFdoaXRlIFNwYWNlIiBkZXNjcmlwdGlvbj0iSWdub3JlIHdoaXRlIHNwYWNlIHdoZXJlIGFwcGxpY2FibGUiIGNhdGVnb3J5PSJfQUhCVVRDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ0xDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5lZGl0b3IuaW1wb3J0UHJvamVjdHMiIGNvbW1hbmROYW1lPSJJbXBvcnQgUHJvamVjdHMiIGNhdGVnb3J5PSJfQUhCVVJ5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ0xTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5zZWFyY2gud3JpdGUuYWNjZXNzLmluLmhpZXJhcmNoeSIgY29tbWFuZE5hbWU9IldyaXRlIEFjY2VzcyBpbiBIaWVyYXJjaHkiIGRlc2NyaXB0aW9uPSJTZWFyY2ggZm9yIHdyaXRlIHJlZmVyZW5jZXMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnQgaW4gaXRzIGhpZXJhcmNoeSIgY2F0ZWdvcnk9Il9BSEJVVkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nTGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVjbGVtbWEudWkuaGlkZVVudXNlZEVsZW1lbnRzIiBjb21tYW5kTmFtZT0iSGlkZSBVbnVzZWQgRWxlbWVudHMiIGNhdGVnb3J5PSJfQUhCVU1TeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ0x5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuZ2VuZXJhdGUuY29uc3RydWN0b3IudXNpbmcuZmllbGRzIiBjb21tYW5kTmFtZT0iR2VuZXJhdGUgQ29uc3RydWN0b3IgdXNpbmcgRmllbGRzIiBkZXNjcmlwdGlvbj0iQ2hvb3NlIGZpZWxkcyB0byBpbml0aWFsaXplIGFuZCBjb25zdHJ1Y3RvciBmcm9tIHN1cGVyY2xhc3MgdG8gY2FsbCAiIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ01DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLmRpc2FibGUuZ3JhbW1hci5jb25zdHJhaW50cyIgY29tbWFuZE5hbWU9IlR1cm4gb2ZmIEdyYW1tYXIgQ29uc3RyYWludHMiIGRlc2NyaXB0aW9uPSJUdXJuIG9mZiBncmFtbWFyIENvbnN0cmFpbnRzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dNU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmNvbW1hbmRzLnNob3dFbGVtZW50SW5UeXBlSGllcmFyY2h5VmlldyIgY29tbWFuZE5hbWU9IlNob3cgSmF2YSBFbGVtZW50IFR5cGUgSGllcmFyY2h5IiBkZXNjcmlwdGlvbj0iU2hvdyBhIEphdmEgZWxlbWVudCBpbiB0aGUgVHlwZSBIaWVyYXJjaHkgdmlldyIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BR19nTWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9ImVsZW1lbnRSZWYiIG5hbWU9IkphdmEgZWxlbWVudCByZWZlcmVuY2UiIHR5cGVJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmNvbW1hbmRzLmphdmFFbGVtZW50UmVmZXJlbmNlIiBvcHRpb25hbD0iZmFsc2UiLz4KKyAgPC9jb21tYW5kcz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dNeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdGUuZ29Ub1Jlc291cmNlIiBjb21tYW5kTmFtZT0iR28gdG8iIGRlc2NyaXB0aW9uPSJHbyB0byBhIHBhcnRpY3VsYXIgcmVzb3VyY2UgaW4gdGhlIGFjdGl2ZSB2aWV3IiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dOQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLm9wZW4uc3VwZXIuaW1wbGVtZW50YXRpb24iIGNvbW1hbmROYW1lPSJPcGVuIFN1cGVyIEltcGxlbWVudGF0aW9uIiBkZXNjcmlwdGlvbj0iT3BlbiB0aGUgSW1wbGVtZW50YXRpb24gaW4gdGhlIFN1cGVyIFR5cGUiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ05TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS53aW5kb3cucmVzZXRQZXJzcGVjdGl2ZSIgY29tbWFuZE5hbWU9IlJlc2V0IFBlcnNwZWN0aXZlIiBkZXNjcmlwdGlvbj0iUmVzZXQgdGhlIGN1cnJlbnQgcGVyc3BlY3RpdmUgdG8gaXRzIGRlZmF1bHQgc3RhdGUiIGNhdGVnb3J5PSJfQUhCVU15eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ05peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi53aWtpdGV4dC51aS5xdWlja091dGxpbmVDb21tYW5kIiBjb21tYW5kTmFtZT0iUXVpY2sgT3V0bGluZSIgZGVzY3JpcHRpb249Ik9wZW4gYSBwb3B1cCBkaWFsb2cgd2l0aCBhIHF1aWNrIG91dGxpbmUgb2YgdGhlIGN1cnJlbnQgZG9jdW1lbnQiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ055eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5zZWFyY2gucmVmZXJlbmNlcy5pbi5wcm9qZWN0IiBjb21tYW5kTmFtZT0iUmVmZXJlbmNlcyBpbiBQcm9qZWN0IiBkZXNjcmlwdGlvbj0iU2VhcmNoIGZvciByZWZlcmVuY2VzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50IGluIHRoZSBlbmNsb3NpbmcgcHJvamVjdCIgY2F0ZWdvcnk9Il9BSEJVVkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nT0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLk1lbWJlcnNWaWV3IiBjb21tYW5kTmFtZT0iSmF2YVNjcmlwdCBNZW1iZXJzIiBkZXNjcmlwdGlvbj0iU2hvdyB0aGUgTWVtYmVycyB2aWV3IiBjYXRlZ29yeT0iX0FIQlVReXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dPU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkucHJvamVjdC5idWlsZExhc3QiIGNvbW1hbmROYW1lPSJSZXBlYXQgV29ya2luZyBTZXQgQnVpbGQiIGRlc2NyaXB0aW9uPSJSZXBlYXQgdGhlIGxhc3Qgd29ya2luZyBzZXQgYnVpbGQiIGNhdGVnb3J5PSJfQUhCVVVpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ09peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5wcm9qZWN0LmJ1aWxkUHJvamVjdCIgY29tbWFuZE5hbWU9IkJ1aWxkIFByb2plY3QiIGRlc2NyaXB0aW9uPSJCdWlsZCB0aGUgc2VsZWN0ZWQgcHJvamVjdCIgY2F0ZWdvcnk9Il9BSEJVVWl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nT3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy51dGlscy5yY3AuY29tbWFuZHMub3BlbkJyb3dzZXIiIGNvbW1hbmROYW1lPSJPcGVuIGEgV2ViIGJyb3dzZXIiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUdfZ1BDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMudXRpbHMucmNwLmxpbmtDb250cmlidXRpb24uaHJlZiIgbmFtZT0iVVJJIiBvcHRpb25hbD0iZmFsc2UiLz4KKyAgPC9jb21tYW5kcz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dQU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuZGlzY292ZXJ5V2l6YXJkQ29tbWFuZCIgY29tbWFuZE5hbWU9IkRpc2NvdmVyeSBXaXphcmQiIGRlc2NyaXB0aW9uPSJzaG93cyB0aGUgY29ubmVjdG9yIGRpc2NvdmVyeSB3aXphcmQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ1BpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuZ290by50ZXh0U3RhcnQiIGNvbW1hbmROYW1lPSJUZXh0IFN0YXJ0IiBkZXNjcmlwdGlvbj0iR28gdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgdGV4dCIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nUHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVjbGVtbWEudWkubG9jYWxKYXZhU2hvcnRjdXQuY292ZXJhZ2UiIGNvbW1hbmROYW1lPSJDb3ZlcmFnZSBKYXZhIEFwcGxpY2F0aW9uIiBkZXNjcmlwdGlvbj0iQ292ZXJhZ2UgSmF2YSBBcHBsaWNhdGlvbiIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nUUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQucGFzdGUiIGNvbW1hbmROYW1lPSJQYXN0ZSIgZGVzY3JpcHRpb249IlBhc3RlIGZyb20gdGhlIGNsaXBib2FyZCIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGY0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLnNlYXJjaC5kZWNsYXJhdGlvbnMuaW4ud29ya2luZy5zZXQiIGNvbW1hbmROYW1lPSJEZWNsYXJhdGlvbiBpbiBXb3JraW5nIFNldCIgZGVzY3JpcHRpb249IlNlYXJjaCBmb3IgZGVjbGFyYXRpb25zIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50IGluIGEgd29ya2luZyBzZXQiIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRmNTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5lZGl0b3IucmVmcmVzaENhY2hlIiBjb21tYW5kTmFtZT0iUmVmcmVzaCBSZW1vdGUgQ2FjaGUiIGNhdGVnb3J5PSJfQUhCVVJ5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRmNpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5jb3JyZWN0aW9uLnF1YWxpZnlGaWVsZCIgY29tbWFuZE5hbWU9IlF1aWNrIEZpeCAtIFF1YWxpZnkgdmFyIGFjY2VzcyIgZGVzY3JpcHRpb249Ikludm9rZXMgcXVpY2sgYXNzaXN0IGFuZCBzZWxlY3RzICdRdWFsaWZ5IHZhciBhY2Nlc3MnIiBjYXRlZ29yeT0iX0FIQlVMU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZjeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmphdmFBcHBsZXRTaG9ydGN1dC5ydW4iIGNvbW1hbmROYW1lPSJSdW4gSmF2YSBBcHBsZXQiIGRlc2NyaXB0aW9uPSJSdW4gSmF2YSBBcHBsZXQiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRmRDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lY2xlbW1hLnVpLmV4cG9ydFNlc3Npb24iIGNvbW1hbmROYW1lPSJFeHBvcnQgU2Vzc2lvbi4uLiIgY2F0ZWdvcnk9Il9BSEJVTVN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGZFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRlLnByZXZpb3VzIiBjb21tYW5kTmFtZT0iUHJldmlvdXMiIGRlc2NyaXB0aW9uPSJOYXZpZ2F0ZSB0byB0aGUgcHJldmlvdXMgaXRlbSIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGZGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVjbGVtbWEudWkuc2NhbGFTaG9ydGN1dC5jb3ZlcmFnZSIgY29tbWFuZE5hbWU9IkNvdmVyYWdlIFNjYWxhIEFwcGxpY2F0aW9uIiBkZXNjcmlwdGlvbj0iQ292ZXJhZ2UgU2NhbGEgQXBwbGljYXRpb24iIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRmR5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uY2xlYW4iIGNvbW1hbmROYW1lPSJDbGVhbi4uLiIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGZUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQucmVuYW1lIiBjb21tYW5kTmFtZT0iUmVuYW1lIiBkZXNjcmlwdGlvbj0iUmVuYW1lIHRoZSBzZWxlY3RlZCBpdGVtIiBjYXRlZ29yeT0iX0FIQlVNaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZlU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkucHJvamVjdC5idWlsZEFsbCIgY29tbWFuZE5hbWU9IkJ1aWxkIEFsbCIgZGVzY3JpcHRpb249IkJ1aWxkIGFsbCBwcm9qZWN0cyIgY2F0ZWdvcnk9Il9BSEJVVWl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGZWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuaGlzdG9yeS5PcGVuSW5UZXh0RWRpdG9yQ29tbWFuZCIgY29tbWFuZE5hbWU9Ik9wZW4gaW4gVGV4dCBFZGl0b3IiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRmV5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lY2xlbW1hLnVpLmR1bXBFeGVjdXRpb25EYXRhIiBjb21tYW5kTmFtZT0iRHVtcCBFeGVjdXRpb24gRGF0YSIgY2F0ZWdvcnk9Il9BSEJVTVN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGZkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5jdXQubGluZS50by5iZWdpbm5pbmciIGNvbW1hbmROYW1lPSJDdXQgdG8gQmVnaW5uaW5nIG9mIExpbmUiIGRlc2NyaXB0aW9uPSJDdXQgdG8gdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgb2YgdGV4dCIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGZlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLnNlbGVjdC5lbmNsb3NpbmciIGNvbW1hbmROYW1lPSJTZWxlY3QgRW5jbG9zaW5nIEVsZW1lbnQiIGRlc2NyaXB0aW9uPSJFeHBhbmQgc2VsZWN0aW9uIHRvIGluY2x1ZGUgZW5jbG9zaW5nIGVsZW1lbnQiIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRmZpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5idWlsZHNoaXAudWkuY29tbWFuZHMucnVudGFza3MiIGNvbW1hbmROYW1lPSJSdW4gR3JhZGxlIFRhc2tzIiBkZXNjcmlwdGlvbj0iUnVucyBhbGwgdGhlIHNlbGVjdGVkIEdyYWRsZSB0YXNrcyIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGZnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS50b2dnbGVCcmVhZGNydW1iIiBjb21tYW5kTmFtZT0iVG9nZ2xlIEphdmEgRWRpdG9yIEJyZWFkY3J1bWIiIGRlc2NyaXB0aW9uPSJUb2dnbGUgdGhlIEphdmEgZWRpdG9yIGJyZWFkY3J1bWIiIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRmdDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0b3JzLnJldmlzaW9ucy5yZW5kZXJpbmcuY3ljbGUiIGNvbW1hbmROYW1lPSJDeWNsZSBSZXZpc2lvbiBDb2xvcmluZyBNb2RlIiBkZXNjcmlwdGlvbj0iQ3ljbGVzIHRocm91Z2ggdGhlIGF2YWlsYWJsZSBjb2xvcmluZyBtb2RlcyBmb3IgcmV2aXNpb25zIiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZnU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuYW50LnVpLnJlbmFtZUluRmlsZSIgY29tbWFuZE5hbWU9IlJlbmFtZSBJbiBGaWxlIiBkZXNjcmlwdGlvbj0iUmVuYW1lcyBhbGwgcmVmZXJlbmNlcyB3aXRoaW4gdGhlIHNhbWUgYnVpbGRmaWxlIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZnaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLm9wZW4udHlwZS5oaWVyYXJjaHkiIGNvbW1hbmROYW1lPSJPcGVuIFR5cGUgSGllcmFyY2h5IiBkZXNjcmlwdGlvbj0iT3BlbiBhIHR5cGUgaGllcmFyY2h5IG9uIHRoZSBzZWxlY3RlZCBlbGVtZW50IiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZneXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQuZGVidWcudWkuc2NyaXB0Lm9wZW5zb3VyY2UiIGNvbW1hbmROYW1lPSJPcGVuIFNvdXJjZSIgZGVzY3JpcHRpb249IlNob3dzIHRoZSBKYXZhU2NyaXB0IHNvdXJjZSBmb3IgdGhlIHNlbGVjdGVkIHNjcmlwdCBlbGVtZW50IiBjYXRlZ29yeT0iX0FIQlVTaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZoQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLmV4dHJhY3QuaW50ZXJmYWNlIiBjb21tYW5kTmFtZT0iRXh0cmFjdCBJbnRlcmZhY2UiIGRlc2NyaXB0aW9uPSJFeHRyYWN0IGEgc2V0IG9mIG1lbWJlcnMgaW50byBhIG5ldyBpbnRlcmZhY2UgYW5kIHRyeSB0byB1c2UgdGhlIG5ldyBpbnRlcmZhY2UiIGNhdGVnb3J5PSJfQUhCVVR5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRmhTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5sdGsudWkucmVmYWN0b3JpbmcuY29tbWFuZHMubW92ZVJlc291cmNlcyIgY29tbWFuZE5hbWU9Ik1vdmUgUmVzb3VyY2VzIiBkZXNjcmlwdGlvbj0iTW92ZSB0aGUgc2VsZWN0ZWQgcmVzb3VyY2VzIGFuZCBub3RpZnkgTFRLIHBhcnRpY2lwYW50cy4iIGNhdGVnb3J5PSJfQUhCVVdDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRmhpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5tMmUuYWN0aW9ucy5MaWZlQ3ljbGVHZW5lcmF0ZVNvdXJjZXMucnVuIiBjb21tYW5kTmFtZT0iUnVuIE1hdmVuIEdlbmVyYXRlIFNvdXJjZXMiIGRlc2NyaXB0aW9uPSJSdW4gTWF2ZW4gR2VuZXJhdGUgU291cmNlcyIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGaHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLmNvbW1hbmRzLlN0ZXBJbnRvIiBjb21tYW5kTmFtZT0iU3RlcCBJbnRvIiBkZXNjcmlwdGlvbj0iU3RlcCBpbnRvIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZpQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuanN0LndzLmpheHdzLnVpLmNvbmZpZ3VyZS5oYW5kbGVycyIgY29tbWFuZE5hbWU9IkNvbmZpZ3VyZSBIYW5kbGVycyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGaVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmU0LnVpLmltcG9ydGVyLm9wZW5EaXJlY3RvcnkiIGNvbW1hbmROYW1lPSJPcGVuIFByb2plY3RzIGZyb20gRmlsZSBTeXN0ZW0uLi4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRmlpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnN0cnVjdHVyZS5zZWxlY3QucHJldmlvdXMiIGNvbW1hbmROYW1lPSJTZWxlY3QgUHJldmlvdXMgRWxlbWVudCIgZGVzY3JpcHRpb249IkV4cGFuZCBzZWxlY3Rpb24gdG8gaW5jbHVkZSBwcmV2aW91cyBzaWJsaW5nIiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZpeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmNvbW1hbmRzLkFkZEV4Y2VwdGlvbkJyZWFrcG9pbnQiIGNvbW1hbmROYW1lPSJBZGQgSmF2YSBFeGNlcHRpb24gQnJlYWtwb2ludCIgZGVzY3JpcHRpb249IkFkZCBhIEphdmEgZXhjZXB0aW9uIGJyZWFrcG9pbnQiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRmpDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEub3Blbi5jYWxsLmhpZXJhcmNoeSIgY29tbWFuZE5hbWU9Ik9wZW4gQ2FsbCBIaWVyYXJjaHkiIGRlc2NyaXB0aW9uPSJPcGVuIGEgY2FsbCBoaWVyYXJjaHkgb24gdGhlIHNlbGVjdGVkIGVsZW1lbnQiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRmpTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLlJlcG9zaXRvcmllc1ZpZXdDbGVhckNyZWRlbnRpYWxzIiBjb21tYW5kTmFtZT0iQ2xlYXIgQ3JlZGVudGlhbHMiIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRmppeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5hZGQuaW1wb3J0IiBjb21tYW5kTmFtZT0iQWRkIEltcG9ydCIgZGVzY3JpcHRpb249IkNyZWF0ZSBpbXBvcnQgc3RhdGVtZW50IG9uIHNlbGVjdGlvbiIgY2F0ZWdvcnk9Il9BSEJVTFN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGanl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5jb21tYW5kcy5Ub2dnbGVUcmFjZXBvaW50IiBjb21tYW5kTmFtZT0iVG9nZ2xlIFRyYWNlcG9pbnQiIGRlc2NyaXB0aW9uPSJDcmVhdGVzIG9yIHJlbW92ZXMgYSB0cmFjZXBvaW50ICAiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRmtDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi53aWtpdGV4dC51aS5jb252ZXJ0VG9NYXJrdXBDb21tYW5kIiBjb21tYW5kTmFtZT0iR2VuZXJhdGUgTWFya3VwIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQUZrU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4ud2lraXRleHQudWkudGFyZ2V0TGFuZ3VhZ2UiIG5hbWU9IlRhcmdldExhbmd1YWdlIiBvcHRpb25hbD0iZmFsc2UiLz4KKyAgPC9jb21tYW5kcz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZraXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuYWRkLnVuaW1wbGVtZW50ZWQuY29uc3RydWN0b3JzIiBjb21tYW5kTmFtZT0iR2VuZXJhdGUgQ29uc3RydWN0b3JzIGZyb20gU3VwZXJjbGFzcyIgZGVzY3JpcHRpb249IkV2YWx1YXRlIGFuZCBhZGQgY29uc3RydWN0b3JzIGZyb20gc3VwZXJjbGFzcyIgY2F0ZWdvcnk9Il9BSEJVTFN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGa3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmNvbW1hbmQuc2hvd1Rvb2xUaXAiIGNvbW1hbmROYW1lPSJTaG93IFRvb2x0aXAgRGVzY3JpcHRpb24iIGNhdGVnb3J5PSJfQUhCVUxpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRmxDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC5kZWJ1Zy51aS5icmVha3BvaW50LnByb3BlcnRpZXMiIGNvbW1hbmROYW1lPSJKYXZhU2NyaXB0IEJyZWFrcG9pbnQgUHJvcGVydGllcyIgZGVzY3JpcHRpb249IlZpZXcgYW5kIGVkaXQgdGhlIHByb3BlcnRpZXMgZm9yIGEgZ2l2ZW4gSmF2YVNjcmlwdCBicmVha3BvaW50IiBjYXRlZ29yeT0iX0FIQlVTaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZsU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWNsZW1tYS51aS5qdW5pdFNob3J0Y3V0LmNvdmVyYWdlIiBjb21tYW5kTmFtZT0iQ292ZXJhZ2UgSlVuaXQgVGVzdCIgZGVzY3JpcHRpb249IkNvdmVyYWdlIEpVbml0IFRlc3QiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRmxpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi5jb250ZXh0LnVpLmNvbW1hbmRzLnRhc2suY29weUNvbnRleHQiIGNvbW1hbmROYW1lPSJDb3B5IENvbnRleHQiIGNhdGVnb3J5PSJfQUhCVUxDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRmx5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS50bS50ZXJtaW5hbC52aWV3LnVpLmNvbW1hbmQubGF1bmNoVG9vbGJhciIgY29tbWFuZE5hbWU9Ik9wZW4gTG9jYWwgVGVybWluYWwgb24gU2VsZWN0aW9uIiBjYXRlZ29yeT0iX0FIQlVTeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZtQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkud2luZG93LnNob3dWaWV3TWVudSIgY29tbWFuZE5hbWU9IlNob3cgVmlldyBNZW51IiBkZXNjcmlwdGlvbj0iU2hvdyB0aGUgdmlldyBtZW51IiBjYXRlZ29yeT0iX0FIQlVNeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZtU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLkNvbW1pdCIgY29tbWFuZE5hbWU9IkNvbW1pdC4uLiIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGbWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5pbmxpbmUiIGNvbW1hbmROYW1lPSJJbmxpbmUiIGRlc2NyaXB0aW9uPSJJbmxpbmUgYSBjb25zdGFudCwgbG9jYWwgdmFyaWFibGUgb3IgbWV0aG9kIiBjYXRlZ29yeT0iX0FIQlVUeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZteXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LnNoaWZ0UmlnaHQiIGNvbW1hbmROYW1lPSJTaGlmdCBSaWdodCIgZGVzY3JpcHRpb249IlNoaWZ0IGEgYmxvY2sgb2YgdGV4dCB0byB0aGUgcmlnaHQiIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRm5DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0ZS5iYWNrd2FyZEhpc3RvcnkiIGNvbW1hbmROYW1lPSJCYWNrd2FyZCBIaXN0b3J5IiBkZXNjcmlwdGlvbj0iTW92ZSBiYWNrd2FyZCBpbiB0aGUgZWRpdG9yIG5hdmlnYXRpb24gaGlzdG9yeSIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGblN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLnNlYXJjaC5pbXBsZW1lbnRvcnMuaW4ud29ya2luZy5zZXQiIGNvbW1hbmROYW1lPSJJbXBsZW1lbnRvcnMgaW4gV29ya2luZyBTZXQiIGRlc2NyaXB0aW9uPSJTZWFyY2ggZm9yIGltcGxlbWVudG9ycyBvZiB0aGUgc2VsZWN0ZWQgaW50ZXJmYWNlIGluIGEgd29ya2luZyBzZXQiIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRm5peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lY2xlbW1hLnVpLndvcmtiZW5jaFNob3J0Y3V0LmNvdmVyYWdlIiBjb21tYW5kTmFtZT0iQ292ZXJhZ2UgRWNsaXBzZSBBcHBsaWNhdGlvbiIgZGVzY3JpcHRpb249IkNvdmVyYWdlIEVjbGlwc2UgQXBwbGljYXRpb24iIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRm55eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQucmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNlIiBjb21tYW5kTmFtZT0iUmVtb3ZlIFRyYWlsaW5nIFdoaXRlc3BhY2UiIGRlc2NyaXB0aW9uPSJSZW1vdmVzIHRoZSB0cmFpbGluZyB3aGl0ZXNwYWNlIG9mIGVhY2ggbGluZSIgY2F0ZWdvcnk9Il9BSEJVTWl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGb0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQuZmluZEluY3JlbWVudGFsIiBjb21tYW5kTmFtZT0iSW5jcmVtZW50YWwgRmluZCIgZGVzY3JpcHRpb249IkluY3JlbWVudGFsIGZpbmQiIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRm9TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5jb3JyZWN0aW9uLmlubGluZUxvY2FsLmFzc2lzdCIgY29tbWFuZE5hbWU9IlF1aWNrIEFzc2lzdCAtIElubGluZSBsb2NhbCB2YXJpYWJsZSIgZGVzY3JpcHRpb249Ikludm9rZXMgcXVpY2sgYXNzaXN0IGFuZCBzZWxlY3RzICdJbmxpbmUgbG9jYWwgdmFyaWFibGUnIiBjYXRlZ29yeT0iX0FIQlVMU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZvaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuY29udmVydC5hbm9ueW1vdXMudG8ubmVzdGVkIiBjb21tYW5kTmFtZT0iQ29udmVydCBBbm9ueW1vdXMgQ2xhc3MgdG8gTmVzdGVkIiBkZXNjcmlwdGlvbj0iQ29udmVydCBhbiBhbm9ueW1vdXMgY2xhc3MgdG8gYSBuZXN0ZWQgY2xhc3MiIGNhdGVnb3J5PSJfQUhCVVFTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRm95eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qcHQuanBhLnVpLm5ld0VudGl0eSIgY29tbWFuZE5hbWU9IkpQQSBFbnRpdHkiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRnBDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuY29ycmVjdGlvbi5hc3NpZ25Ub0xvY2FsLmFzc2lzdCIgY29tbWFuZE5hbWU9IlF1aWNrIEFzc2lzdCAtIEFzc2lnbiB0byBsb2NhbCB2YXJpYWJsZSIgZGVzY3JpcHRpb249Ikludm9rZXMgcXVpY2sgYXNzaXN0IGFuZCBzZWxlY3RzICdBc3NpZ24gdG8gbG9jYWwgdmFyaWFibGUnIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZwU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5JbXBvcnRDaGFuZ2VkUHJvamVjdHNDb21tYW5kSWQiIGNvbW1hbmROYW1lPSJJbXBvcnQgQ2hhbmdlZCBQcm9qZWN0cyIgZGVzY3JpcHRpb249IkltcG9ydCBvciBjcmVhdGUgaW4gbG9jYWwgR2l0IHJlcG9zaXRvcnkiIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRnBpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lY2xlbW1hLnVpLmNvbW1hbmRzLk9wZW5Db3ZlcmFnZUNvbmZpZ3VyYXRpb24iIGNvbW1hbmROYW1lPSJDb3ZlcmFnZSBDb25maWd1cmF0aW9ucy4uLiIgZGVzY3JpcHRpb249IkNvdmVyYWdlIENvbmZpZ3VyYXRpb25zLi4uIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZweXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLnNlYXJjaC5yZXR1cm4uY29udGludWUudGFyZ2V0cyIgY29tbWFuZE5hbWU9IlNlYXJjaCBicmVhay9jb250aW51ZSBUYXJnZXQgT2NjdXJyZW5jZXMgaW4gRmlsZSIgZGVzY3JpcHRpb249IlNlYXJjaCBmb3IgYnJlYWsvY29udGludWUgdGFyZ2V0IG9jY3VycmVuY2VzIG9mIGEgc2VsZWN0ZWQgdGFyZ2V0IG5hbWUiIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRnFDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5mb3JtYXQiIGNvbW1hbmROYW1lPSJGb3JtYXQiIGRlc2NyaXB0aW9uPSJGb3JtYXQgdGhlIHNlbGVjdGVkIHRleHQiIGNhdGVnb3J5PSJfQUhCVUxTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRnFTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5jaGFuZ2UudHlwZSIgY29tbWFuZE5hbWU9IkdlbmVyYWxpemUgRGVjbGFyZWQgVHlwZSIgZGVzY3JpcHRpb249IkNoYW5nZSB0aGUgZGVjbGFyYXRpb24gb2YgYSBzZWxlY3RlZCB2YXJpYWJsZSB0byBhIG1vcmUgZ2VuZXJhbCB0eXBlIGNvbnNpc3RlbnQgd2l0aCB1c2FnZSIgY2F0ZWdvcnk9Il9BSEJVUVN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGcWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5jcmVhdGUuZ2V0dGVyLnNldHRlciIgY29tbWFuZE5hbWU9IkdlbmVyYXRlIEdldHRlcnMgYW5kIFNldHRlcnMiIGRlc2NyaXB0aW9uPSJHZW5lcmF0ZSBHZXR0ZXIgYW5kIFNldHRlciBtZXRob2RzIGZvciB0eXBlJ3MgZmllbGRzIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZxeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucGRlLnVpLmVkaXQudGV4dC5mb3JtYXQiIGNvbW1hbmROYW1lPSJGb3JtYXQgU291cmNlIiBkZXNjcmlwdGlvbj0iRm9ybWF0IGEgUERFIFNvdXJjZSBQYWdlIiBjYXRlZ29yeT0iX0FIQlVQaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZyQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnJlc3VsdC50ZXJtaW5hdGUiIGNvbW1hbmROYW1lPSJUZXJtaW5hdGUgUmVzdWx0IiBjYXRlZ29yeT0iX0FIQlVOQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZyU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLnNlbGVjdC5uZXh0IiBjb21tYW5kTmFtZT0iU2VsZWN0IE5leHQgRWxlbWVudCIgZGVzY3JpcHRpb249IkV4cGFuZCBzZWxlY3Rpb24gdG8gaW5jbHVkZSBuZXh0IHNpYmxpbmciIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRnJpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLlJlcG9zaXRvcmllc1ZpZXdOZXdSZW1vdGUiIGNvbW1hbmROYW1lPSJDcmVhdGUgUmVtb3RlLi4uIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZyeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuZ2VuZXJhdGUuaGFzaGNvZGUuZXF1YWxzIiBjb21tYW5kTmFtZT0iR2VuZXJhdGUgaGFzaENvZGUoKSBhbmQgZXF1YWxzKCkiIGRlc2NyaXB0aW9uPSJHZW5lcmF0ZXMgaGFzaENvZGUoKSBhbmQgZXF1YWxzKCkgZnVuY3Rpb25zIGZvciB0aGUgdHlwZSIgY2F0ZWdvcnk9Il9BSEJVTFN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGc0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLmNvbW1hbmRzLlJlc3RhcnQiIGNvbW1hbmROYW1lPSJSZXN0YXJ0IiBkZXNjcmlwdGlvbj0iUmVzdGFydCBhIHByb2Nlc3Mgb3IgZGVidWcgdGFyZ2V0IHdpdGhvdXQgdGVybWluYXRpbmcgYW5kIHJlLWxhdW5jaGluZyIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGc1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5kZWxldGUubGluZSIgY29tbWFuZE5hbWU9IkRlbGV0ZSBMaW5lIiBkZXNjcmlwdGlvbj0iRGVsZXRlIGEgbGluZSBvZiB0ZXh0IiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZzaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEub3JnYW5pemUuaW1wb3J0cyIgY29tbWFuZE5hbWU9Ik9yZ2FuaXplIEltcG9ydHMiIGRlc2NyaXB0aW9uPSJFdmFsdWF0ZSBhbGwgcmVxdWlyZWQgaW1wb3J0cyBhbmQgcmVwbGFjZSB0aGUgY3VycmVudCBpbXBvcnRzIiBjYXRlZ29yeT0iX0FIQlVMU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZzeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLnJlbW92ZS5ibG9jay5jb21tZW50IiBjb21tYW5kTmFtZT0iUmVtb3ZlIEJsb2NrIENvbW1lbnQiIGRlc2NyaXB0aW9uPSJSZW1vdmUgdGhlIGJsb2NrIGNvbW1lbnQgZW5jbG9zaW5nIHRoZSBzZWxlY3Rpb24iIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRnRDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEub3Blbi5pbXBsZW1lbnRhdGlvbiIgY29tbWFuZE5hbWU9Ik9wZW4gSW1wbGVtZW50YXRpb24iIGRlc2NyaXB0aW9uPSJPcGVucyB0aGUgSW1wbGVtZW50YXRpb25zIG9mIGEgbWV0aG9kIG9yIGEgdHlwZSBpbiBpdHMgaGllcmFyY2h5IiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZ0U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0Lmp1bml0LmdvdG9UZXN0IiBjb21tYW5kTmFtZT0iUmVmZXJyaW5nIFRlc3RzIiBkZXNjcmlwdGlvbj0iUmVmZXJyaW5nIFRlc3RzIiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZ0aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLmZpbmQuYnJva2VuLm5scy5rZXlzIiBjb21tYW5kTmFtZT0iRmluZCBCcm9rZW4gRXh0ZXJuYWxpemVkIFN0cmluZ3MiIGRlc2NyaXB0aW9uPSJGaW5kcyB1bmRlZmluZWQsIGR1cGxpY2F0ZSBhbmQgdW51c2VkIGV4dGVybmFsaXplZCBzdHJpbmcga2V5cyBpbiBwcm9wZXJ0eSBmaWxlcyIgY2F0ZWdvcnk9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGdHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVjbGVtbWEudWkub3BlblNlc3Npb25FeGVjdXRpb25EYXRhIiBjb21tYW5kTmFtZT0iT3BlbiBFeGVjdXRpb24gRGF0YSIgY2F0ZWdvcnk9Il9BSEJVTVN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGdUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5jb21tYW5kcy5zaG93RWxlbWVudEluUGFja2FnZVZpZXciIGNvbW1hbmROYW1lPSJTaG93IEphdmEgRWxlbWVudCBpbiBQYWNrYWdlIEV4cGxvcmVyIiBkZXNjcmlwdGlvbj0iU2VsZWN0IEphdmEgZWxlbWVudCBpbiB0aGUgUGFja2FnZSBFeHBsb3JlciB2aWV3IiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQUZ1U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iZWxlbWVudFJlZiIgbmFtZT0iSmF2YSBlbGVtZW50IHJlZmVyZW5jZSIgdHlwZUlkPSJvcmcuZWNsaXBzZS5qZHQudWkuY29tbWFuZHMuamF2YUVsZW1lbnRSZWZlcmVuY2UiIG9wdGlvbmFsPSJmYWxzZSIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRnVpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5lZGl0b3IucGVyZm9ybURyb3Bkb3duIiBjb21tYW5kTmFtZT0iUGVyZm9ybSBEcm9wZG93biIgY2F0ZWdvcnk9Il9BSEJVUnl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGdXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5jb21tYW5kcy5JbnN0YW5jZUNvdW50IiBjb21tYW5kTmFtZT0iSW5zdGFuY2UgQ291bnQiIGRlc2NyaXB0aW9uPSJWaWV3IHRoZSBpbnN0YW5jZSBjb3VudCBvZiB0aGUgc2VsZWN0ZWQgdHlwZSBsb2FkZWQgaW4gdGhlIHRhcmdldCBWTSIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGdkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLmNyZWF0ZS5nZXR0ZXIuc2V0dGVyIiBjb21tYW5kTmFtZT0iR2VuZXJhdGUgR2V0dGVycyBhbmQgU2V0dGVycyIgZGVzY3JpcHRpb249IkdlbmVyYXRlIEdldHRlciBhbmQgU2V0dGVyIGZ1bmN0aW9ucyBmb3IgdHlwZSdzIHZhcnMiIGNhdGVnb3J5PSJfQUhCVUxTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRnZTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LmZpbmRSZXBsYWNlIiBjb21tYW5kTmFtZT0iRmluZCBhbmQgUmVwbGFjZSIgZGVzY3JpcHRpb249IkZpbmQgYW5kIHJlcGxhY2UgdGV4dCIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGdml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkudGVhbS5NZXJnZVRvb2wiIGNvbW1hbmROYW1lPSJNZXJnZSBUb29sIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZ2eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucGRlLnVpLmFkZEFsbFBsdWdpbnNUb0phdmFTZWFyY2giIGNvbW1hbmROYW1lPSJBZGQgQWxsIFBsdWctaW5zIHRvIEphdmEgU2VhcmNoIiBkZXNjcmlwdGlvbj0iQWRkcyBhbGwgcGx1Zy1pbnMgaW4gdGhlIHRhcmdldCBwbGF0Zm9ybSB0byBqYXZhIHNlYXJjaCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGd0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuY29tbWFuZC5zaGFyZVByb2plY3QiIGNvbW1hbmROYW1lPSJTaGFyZSB3aXRoIEdpdCIgZGVzY3JpcHRpb249IlNoYXJlIHRoZSBwcm9qZWN0IHVzaW5nIEdpdCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEFGd1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuY29tbWFuZC5wcm9qZWN0TmFtZVBhcmFtZXRlciIgbmFtZT0iUHJvamVjdCIgb3B0aW9uYWw9ImZhbHNlIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGd2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5jb252ZXJ0LmFub255bW91cy50by5uZXN0ZWQiIGNvbW1hbmROYW1lPSJDb252ZXJ0IEFub255bW91cyBDbGFzcyB0byBOZXN0ZWQiIGRlc2NyaXB0aW9uPSJDb252ZXJ0IGFuIGFub255bW91cyBjbGFzcyB0byBhIG5lc3RlZCBjbGFzcyIgY2F0ZWdvcnk9Il9BSEJVVHl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGd3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnBkZS51aS5xdWlja091dGxpbmUiIGNvbW1hbmROYW1lPSJRdWljayBPdXRsaW5lIiBkZXNjcmlwdGlvbj0iT3BlbiBhIHF1aWNrIG91dGxpbmUgcG9wdXAgZGlhbG9nIGZvciBhIGdpdmVuIGVkaXRvciBpbnB1dCIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGeEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLndpbmRvdy5mdWxsc2NyZWVubW9kZSIgY29tbWFuZE5hbWU9IlRvZ2dsZSBGdWxsIFNjcmVlbiIgZGVzY3JpcHRpb249IlRvZ2dsZXMgdGhlIHdpbmRvdyBiZXR3ZWVuIGZ1bGwgc2NyZWVuIGFuZCBub3JtYWwiIGNhdGVnb3J5PSJfQUhCVU15eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRnhTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnVpLnNkay5pbnN0YWxsYXRpb25EZXRhaWxzIiBjb21tYW5kTmFtZT0iSW5zdGFsbGF0aW9uIERldGFpbHMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRnhpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS50ZWFtLnVpLnN5bmNocm9uaXplQWxsIiBjb21tYW5kTmFtZT0iU3luY2hyb25pemUuLi4iIGRlc2NyaXB0aW9uPSJTeW5jaHJvbml6ZSByZXNvdXJjZXMgaW4gdGhlIHdvcmtzcGFjZSB3aXRoIGFub3RoZXIgbG9jYXRpb24iIGNhdGVnb3J5PSJfQUhCVVFpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRnh5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5tMmUucHJvZmlsZXMudWkuY29tbWFuZHMuc2VsZWN0TWF2ZW5Qcm9maWxlQ29tbWFuZCIgY29tbWFuZE5hbWU9IlNlbGVjdCBNYXZlbiBQcm9maWxlcyIgY2F0ZWdvcnk9Il9BSEJVTXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGeUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLndpbmRvdy5uZXh0RWRpdG9yIiBjb21tYW5kTmFtZT0iTmV4dCBFZGl0b3IiIGRlc2NyaXB0aW9uPSJTd2l0Y2ggdG8gdGhlIG5leHQgZWRpdG9yIiBjYXRlZ29yeT0iX0FIQlVNeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZ5U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5pbnRlcm5hbC5yZWZsb2cuQ29weUNvbW1hbmQiIGNvbW1hbmROYW1lPSJDb3B5IENvbW1pdCBJZCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGeWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmNvbW1hbmQubmV3LnN1YnRhc2siIGNvbW1hbmROYW1lPSJOZXcgU3VidGFzayIgY2F0ZWdvcnk9Il9BSEJVTGl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGeXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLkphdmFCcm93c2luZ1BlcnNwZWN0aXZlIiBjb21tYW5kTmFtZT0iSmF2YVNjcmlwdCBCcm93c2luZyIgZGVzY3JpcHRpb249IlNob3cgdGhlIEphdmFTY3JpcHQgQnJvd3NpbmcgcGVyc3BlY3RpdmUiIGNhdGVnb3J5PSJfQUhCVVZ5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRnpDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5oZWxwLmhlbHBDb250ZW50cyIgY29tbWFuZE5hbWU9IkhlbHAgQ29udGVudHMiIGRlc2NyaXB0aW9uPSJPcGVuIHRoZSBoZWxwIGNvbnRlbnRzIiBjYXRlZ29yeT0iX0FIQlVVU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZ6U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEucmVtb3ZlLmJsb2NrLmNvbW1lbnQiIGNvbW1hbmROYW1lPSJSZW1vdmUgQmxvY2sgQ29tbWVudCIgZGVzY3JpcHRpb249IlJlbW92ZSB0aGUgYmxvY2sgY29tbWVudCBlbmNsb3NpbmcgdGhlIHNlbGVjdGlvbiIgY2F0ZWdvcnk9Il9BSEJVTFN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGeml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkudGVhbS5SZXNldCIgY29tbWFuZE5hbWU9IlJlc2V0Li4uIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZ6eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC5kZWxldGUiIGNvbW1hbmROYW1lPSJEZWxldGUiIGRlc2NyaXB0aW9uPSJEZWxldGUgdGhlIHNlbGVjdGlvbiIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGMEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5kZWxldGUubGluZS50by5iZWdpbm5pbmciIGNvbW1hbmROYW1lPSJEZWxldGUgdG8gQmVnaW5uaW5nIG9mIExpbmUiIGRlc2NyaXB0aW9uPSJEZWxldGUgdG8gdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgb2YgdGV4dCIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGMFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkudGVhbS5SZW5hbWVCcmFuY2giIGNvbW1hbmROYW1lPSJSZW5hbWUgQnJhbmNoLi4uIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUYwaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLlN5bmNocm9uaXplIiBjb21tYW5kTmFtZT0iU3luY2hyb25pemUiIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRjB5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLmRlY2xhcmF0aW9ucy5pbi53b3JraW5nLnNldCIgY29tbWFuZE5hbWU9IkRlY2xhcmF0aW9uIGluIFdvcmtpbmcgU2V0IiBkZXNjcmlwdGlvbj0iU2VhcmNoIGZvciBkZWNsYXJhdGlvbnMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnQgaW4gYSB3b3JraW5nIHNldCIgY2F0ZWdvcnk9Il9BSEJVVkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGMUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLnJlZmFjdG9yLnF1aWNrTWVudSIgY29tbWFuZE5hbWU9IlNob3cgUmVmYWN0b3IgUXVpY2sgTWVudSIgZGVzY3JpcHRpb249IlNob3dzIHRoZSByZWZhY3RvciBxdWljayBtZW51IiBjYXRlZ29yeT0iX0FIQlVRU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUYxU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC5maW5kUHJldmlvdXMiIGNvbW1hbmROYW1lPSJGaW5kIFByZXZpb3VzIiBkZXNjcmlwdGlvbj0iRmluZCBwcmV2aW91cyBpdGVtIiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUYxaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuY29tbWFuZHMuVG9nZ2xlQnJlYWtwb2ludCIgY29tbWFuZE5hbWU9IlRvZ2dsZSBCcmVha3BvaW50IiBkZXNjcmlwdGlvbj0iQ3JlYXRlcyBvciByZW1vdmVzIGEgYnJlYWtwb2ludCIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGMXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuY29tbWl0LlJldmVydCIgY29tbWFuZE5hbWU9IlJldmVydCBDb21taXQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRjJDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmNvbW1pdC5TdGFzaERyb3AiIGNvbW1hbmROYW1lPSJEZWxldGUgU3Rhc2hlZCBDb21taXQuLi4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRjJTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5jb21tYW5kLm9wZW5UYXNrIiBjb21tYW5kTmFtZT0iT3BlbiBUYXNrIiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUYyaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LnNjcm9sbC5saW5lVXAiIGNvbW1hbmROYW1lPSJTY3JvbGwgTGluZSBVcCIgZGVzY3JpcHRpb249IlNjcm9sbCB1cCBvbmUgbGluZSBvZiB0ZXh0IiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUYyeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLnNlbGVjdC5sYXN0IiBjb21tYW5kTmFtZT0iUmVzdG9yZSBMYXN0IFNlbGVjdGlvbiIgZGVzY3JpcHRpb249IlJlc3RvcmUgbGFzdCBzZWxlY3Rpb24iIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRjNDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi5qYXZhLnVpLmVkaXRvci5mb2xkaW5nLmF1dG8iIGNvbW1hbmROYW1lPSJUb2dnbGUgQWN0aXZlIEZvbGRpbmciIGRlc2NyaXB0aW9uPSJUb2dnbGUgQWN0aXZlIEZvbGRpbmciIGNhdGVnb3J5PSJfQUhCVVNTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRjNTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5wZGUucnVudGltZS5zcHkuY29tbWFuZHMuc3B5Q29tbWFuZCIgY29tbWFuZE5hbWU9IlBsdWctaW4gU2VsZWN0aW9uIFNweSIgZGVzY3JpcHRpb249IlNob3cgdGhlIFBsdWctaW4gU3B5IiBjYXRlZ29yeT0iX0FIQlVXeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUYzaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuY2xlYW4udXAiIGNvbW1hbmROYW1lPSJDbGVhbiBVcCIgZGVzY3JpcHRpb249IlNvbHZlIHByb2JsZW1zIGFuZCBpbXByb3ZlIGNvZGUgc3R5bGUgb24gc2VsZWN0ZWQgcmVzb3VyY2VzIiBjYXRlZ29yeT0iX0FIQlVMU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUYzeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmZvbGRpbmcudG9nZ2xlIiBjb21tYW5kTmFtZT0iVG9nZ2xlIEZvbGRpbmciIGRlc2NyaXB0aW9uPSJUb2dnbGVzIGZvbGRpbmcgaW4gdGhlIGN1cnJlbnQgZWRpdG9yIiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUY0Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LnRvZ2dsZVNob3dXaGl0ZXNwYWNlQ2hhcmFjdGVycyIgY29tbWFuZE5hbWU9IlNob3cgV2hpdGVzcGFjZSBDaGFyYWN0ZXJzIiBkZXNjcmlwdGlvbj0iU2hvd3Mgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGluIGN1cnJlbnQgdGV4dCBlZGl0b3IiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRjRTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5maWxlLnJldmVydCIgY29tbWFuZE5hbWU9IlJldmVydCIgZGVzY3JpcHRpb249IlJldmVydCB0byB0aGUgbGFzdCBzYXZlZCBzdGF0ZSIgY2F0ZWdvcnk9Il9BSEJVTWl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGNGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm9vbXBoLnVpLlRvZ2dsZU9mZmxpbmVNb2RlIiBjb21tYW5kTmFtZT0iVG9nZ2xlIE9mZmxpbmUgTW9kZSIgY2F0ZWdvcnk9Il9BSEJVUHl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGNHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLmVkaXRvci5vcGVuTG9nIiBjb21tYW5kTmFtZT0iT3BlbiBTZXR1cCBMb2ciIGNhdGVnb3J5PSJfQUhCVVJ5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRjVDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5wcm9qZWN0LmJ1aWxkQXV0b21hdGljYWxseSIgY29tbWFuZE5hbWU9IkJ1aWxkIEF1dG9tYXRpY2FsbHkiIGRlc2NyaXB0aW9uPSJUb2dnbGUgdGhlIHdvcmtzcGFjZSBidWlsZCBhdXRvbWF0aWNhbGx5IGZ1bmN0aW9uIiBjYXRlZ29yeT0iX0FIQlVVaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUY1U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZmlsZS5pbXBvcnQiIGNvbW1hbmROYW1lPSJJbXBvcnQiIGRlc2NyaXB0aW9uPSJJbXBvcnQiIGNhdGVnb3J5PSJfQUhCVU1peFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBRjVpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJpbXBvcnRXaXphcmRJZCIgbmFtZT0iSW1wb3J0IFdpemFyZCIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRjV5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmhpc3RvcnkuTWVyZ2UiIGNvbW1hbmROYW1lPSJNZXJnZSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGNkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLndpbmRvdy5zd2l0Y2hUb0VkaXRvciIgY29tbWFuZE5hbWU9IlN3aXRjaCB0byBFZGl0b3IiIGRlc2NyaXB0aW9uPSJTd2l0Y2ggdG8gYW4gZWRpdG9yIiBjYXRlZ29yeT0iX0FIQlVNeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUY2U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuZmluZC5icm9rZW4ubmxzLmtleXMiIGNvbW1hbmROYW1lPSJGaW5kIEJyb2tlbiBFeHRlcm5hbGl6ZWQgU3RyaW5ncyIgZGVzY3JpcHRpb249IkZpbmRzIHVuZGVmaW5lZCwgZHVwbGljYXRlIGFuZCB1bnVzZWQgZXh0ZXJuYWxpemVkIHN0cmluZyBrZXlzIGluIHByb3BlcnR5IGZpbGVzIiBjYXRlZ29yeT0iX0FIQlVMU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUY2aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuaGVscC5keW5hbWljSGVscCIgY29tbWFuZE5hbWU9IlNob3cgQ29udGV4dHVhbCBIZWxwIiBkZXNjcmlwdGlvbj0iT3BlbiB0aGUgY29udGV4dHVhbCBoZWxwIiBjYXRlZ29yeT0iX0FIQlVVU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUY2eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLmNvbW1lbnQiIGNvbW1hbmROYW1lPSJDb21tZW50IiBkZXNjcmlwdGlvbj0iVHVybiB0aGUgc2VsZWN0ZWQgbGluZXMgaW50byBKYXZhIGNvbW1lbnRzIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUY3Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuY29tbWFuZC5hY3RpdmF0ZVRhc2siIGNvbW1hbmROYW1lPSJBY3RpdmF0ZSBUYXNrIiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUY3U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5oaXN0b3J5LkNyZWF0ZVRhZyIgY29tbWFuZE5hbWU9IkNyZWF0ZSBUYWcuLi4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRjdpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLm9jY3VycmVuY2VzLmluLmZpbGUucXVpY2tNZW51IiBjb21tYW5kTmFtZT0iU2hvdyBPY2N1cnJlbmNlcyBpbiBGaWxlIFF1aWNrIE1lbnUiIGRlc2NyaXB0aW9uPSJTaG93cyB0aGUgT2NjdXJyZW5jZXMgaW4gRmlsZSBxdWljayBtZW51IiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUY3eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuZ290by5uZXh0Lm1lbWJlciIgY29tbWFuZE5hbWU9IkdvIHRvIE5leHQgTWVtYmVyIiBkZXNjcmlwdGlvbj0iTW92ZSB0aGUgY2FyZXQgdG8gdGhlIG5leHQgbWVtYmVyIG9mIHRoZSBKYXZhU2NyaXB0IGZpbGUiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRjhDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQudG9nZ2xlSW5zZXJ0TW9kZSIgY29tbWFuZE5hbWU9IlRvZ2dsZSBJbnNlcnQgTW9kZSIgZGVzY3JpcHRpb249IlRvZ2dsZSBpbnNlcnQgbW9kZSIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGOFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuUmVwb3NpdG9yaWVzVmlld0RlbGV0ZSIgY29tbWFuZE5hbWU9IkRlbGV0ZSBSZXBvc2l0b3J5IiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUY4aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZmlsZS5jbG9zZVBhcnQiIGNvbW1hbmROYW1lPSJDbG9zZSBQYXJ0IiBkZXNjcmlwdGlvbj0iQ2xvc2UgdGhlIGFjdGl2ZSB3b3JrYmVuY2ggcGFydCIgY2F0ZWdvcnk9Il9BSEJVTXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGOHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXRvcnMucmV2aXNpb25zLmlkLnRvZ2dsZSIgY29tbWFuZE5hbWU9IlRvZ2dsZSBSZXZpc2lvbiBJZCBEaXNwbGF5IiBkZXNjcmlwdGlvbj0iVG9nZ2xlcyB0aGUgZGlzcGxheSBvZiB0aGUgcmV2aXNpb24gaWQiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRjlDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5wcm9qZWN0LmNsZWFuQWN0aW9uIiBjb21tYW5kTmFtZT0iQnVpbGQgQ2xlYW4iIGRlc2NyaXB0aW9uPSJEaXNjYXJkIG9sZCBidWlsdCBzdGF0ZSIgY2F0ZWdvcnk9Il9BSEJVVWl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGOVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRlLmJhY2siIGNvbW1hbmROYW1lPSJCYWNrIiBkZXNjcmlwdGlvbj0iTmF2aWdhdGUgYmFjayIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGOWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5zZWxlY3Qud29yZE5leHQiIGNvbW1hbmROYW1lPSJTZWxlY3QgTmV4dCBXb3JkIiBkZXNjcmlwdGlvbj0iU2VsZWN0IHRoZSBuZXh0IHdvcmQiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRjl5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuSmF2YUJyb3dzaW5nUGVyc3BlY3RpdmUiIGNvbW1hbmROYW1lPSJKYXZhIEJyb3dzaW5nIiBkZXNjcmlwdGlvbj0iU2hvdyB0aGUgSmF2YSBCcm93c2luZyBwZXJzcGVjdGl2ZSIgY2F0ZWdvcnk9Il9BSEJVVnl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGLUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5nb3RvLnBhZ2VEb3duIiBjb21tYW5kTmFtZT0iUGFnZSBEb3duIiBkZXNjcmlwdGlvbj0iR28gZG93biBvbmUgcGFnZSIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGLVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLnNlYXJjaC5pbXBsZW1lbnRvcnMuaW4ucHJvamVjdCIgY29tbWFuZE5hbWU9IkltcGxlbWVudG9ycyBpbiBQcm9qZWN0IiBkZXNjcmlwdGlvbj0iU2VhcmNoIGZvciBpbXBsZW1lbnRvcnMgb2YgdGhlIHNlbGVjdGVkIGludGVyZmFjZSBpbiB0aGUgZW5jbG9zaW5nIHByb2plY3QiIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRi1peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50ZWFtLnVpLmNvbW1hbmRzLkNvcHlDb21taXRNZXNzYWdlIiBjb21tYW5kTmFtZT0iQ29weSBDb21taXQgTWVzc2FnZSBmb3IgVGFzayIgZGVzY3JpcHRpb249IkNvcGllcyBhIGNvbW1pdCBtZXNzYWdlIGZvciB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHRhc2sgdG8gdGhlIGNsaXBib2FyZC4iIGNhdGVnb3J5PSJfQUhCVUxpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRi15eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lY2xlbW1hLnVpLnJlbGF1bmNoU2Vzc2lvbiIgY29tbWFuZE5hbWU9IlJlbGF1bmNoIENvdmVyYWdlIFNlc3Npb24iIGNhdGVnb3J5PSJfQUhCVU1TeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRl9DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uR2FyYmFnZUNvbGxlY3QiIGNvbW1hbmROYW1lPSJDb2xsZWN0IEdhcmJhZ2UiIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRl9TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmhpc3RvcnkuQ29tcGFyZVdpdGhXb3JraW5nVHJlZSIgY29tbWFuZE5hbWU9IkNvbXBhcmUgd2l0aCBXb3JraW5nIFRyZWUiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRl9peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uQnJhbmNoIiBjb21tYW5kTmFtZT0iQnJhbmNoIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZfeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuUHJvamVjdHNWaWV3IiBjb21tYW5kTmFtZT0iSmF2YVNjcmlwdCBQcm9qZWN0cyIgZGVzY3JpcHRpb249IlNob3cgdGhlIFByb2plY3RzIHZpZXciIGNhdGVnb3J5PSJfQUhCVVF5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0FDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnByZXZpb3VzU2libGluZyIgY29tbWFuZE5hbWU9IlByZXZpb3VzIFNpYmxpbmciIGRlc2NyaXB0aW9uPSJHbyB0byBQcmV2aW91cyBTaWJsaW5nIiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdBU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5SZXBvc2l0b3JpZXNWaWV3Q29uZmlndXJlUHVzaCIgY29tbWFuZE5hbWU9IkNvbmZpZ3VyZSBQdXNoLi4uIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdBaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC5maW5kSW5jcmVtZW50YWxSZXZlcnNlIiBjb21tYW5kTmFtZT0iSW5jcmVtZW50YWwgRmluZCBSZXZlcnNlIiBkZXNjcmlwdGlvbj0iSW5jcmVtZW50YWwgZmluZCByZXZlcnNlIiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdBeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZXBwLm1wYy51aS5jb21tYW5kLmltcG9ydEZhdm9yaXRlc1dpemFyZCIgY29tbWFuZE5hbWU9IkltcG9ydCBNYXJrZXRwbGFjZSBGYXZvcml0ZXMiIGRlc2NyaXB0aW9uPSJJbXBvcnQgYW5vdGhlciB1c2VyJ3MgTWFya2V0cGxhY2UgRmF2b3JpdGVzIExpc3QiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBR0JDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJmYXZvcml0ZXNVcmwiIG5hbWU9ImZhdm9yaXRlc1VybCIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0JTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5pbnRyb2R1Y2UuZmFjdG9yeSIgY29tbWFuZE5hbWU9IkludHJvZHVjZSBGYWN0b3J5IiBkZXNjcmlwdGlvbj0iSW50cm9kdWNlIGEgZmFjdG9yeSBmdW5jdGlvbiB0byBlbmNhcHN1bGF0ZSBpbnZvY2F0aW9uIG9mIHRoZSBzZWxlY3RlZCBjb25zdHJ1Y3RvciIgY2F0ZWdvcnk9Il9BSEJVUVN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHQml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmFudC51aS5hbnRTaG9ydGN1dC5ydW4iIGNvbW1hbmROYW1lPSJSdW4gQW50IEJ1aWxkIiBkZXNjcmlwdGlvbj0iUnVuIEFudCBCdWlsZCIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHQnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmNvcnJlY3Rpb24uY29udmVydEFub255bW91c1RvTG9jYWwuYXNzaXN0IiBjb21tYW5kTmFtZT0iUXVpY2sgQXNzaXN0IC0gQ29udmVydCBhbm9ueW1vdXMgdG8gbG9jYWwgY2xhc3MiIGRlc2NyaXB0aW9uPSJJbnZva2VzIHF1aWNrIGFzc2lzdCBhbmQgc2VsZWN0cyAnQ29udmVydCBhbm9ueW1vdXMgdG8gbG9jYWwgY2xhc3MnIiBjYXRlZ29yeT0iX0FIQlVMU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdDQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLnN0YXNoLmFwcGx5IiBjb21tYW5kTmFtZT0iQXBwbHkgU3Rhc2hlZCBDaGFuZ2VzIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdDU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmNvbW1hbmRzLkluc3BlY3QiIGNvbW1hbmROYW1lPSJJbnNwZWN0IiBkZXNjcmlwdGlvbj0iSW5zcGVjdCByZXN1bHQgb2YgZXZhbHVhdGluZyBzZWxlY3RlZCB0ZXh0IiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdDaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmdvdG8uY29sdW1uTmV4dCIgY29tbWFuZE5hbWU9Ik5leHQgQ29sdW1uIiBkZXNjcmlwdGlvbj0iR28gdG8gdGhlIG5leHQgY29sdW1uIiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdDeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5oaXN0b3J5LlNxdWFzaCIgY29tbWFuZE5hbWU9IlNxdWFzaCBDb21taXRzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdEQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uuc2VhcmNoLnVpLnBlcmZvcm1UZXh0U2VhcmNoV29ya2luZ1NldCIgY29tbWFuZE5hbWU9IkZpbmQgVGV4dCBpbiBXb3JraW5nIFNldCIgZGVzY3JpcHRpb249IlNlYXJjaGVzIHRoZSBmaWxlcyBpbiB0aGUgd29ya2luZyBzZXQgZm9yIHNwZWNpZmljIHRleHQuIiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdEU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLm9jY3VycmVuY2VzLmluLmZpbGUucXVpY2tNZW51IiBjb21tYW5kTmFtZT0iU2hvdyBPY2N1cnJlbmNlcyBpbiBGaWxlIFF1aWNrIE1lbnUiIGRlc2NyaXB0aW9uPSJTaG93cyB0aGUgT2NjdXJyZW5jZXMgaW4gRmlsZSBxdWljayBtZW51IiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdEaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmdvdG8ud29yZE5leHQiIGNvbW1hbmROYW1lPSJOZXh0IFdvcmQiIGRlc2NyaXB0aW9uPSJHbyB0byB0aGUgbmV4dCB3b3JkIiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdEeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuY29ycmVjdGlvbi5jb252ZXJ0TG9jYWxUb0ZpZWxkLmFzc2lzdCIgY29tbWFuZE5hbWU9IlF1aWNrIEFzc2lzdCAtIENvbnZlcnQgbG9jYWwgdmFyaWFibGUgdG8gdmFyIiBkZXNjcmlwdGlvbj0iSW52b2tlcyBxdWljayBhc3Npc3QgYW5kIHNlbGVjdHMgJ0NvbnZlcnQgbG9jYWwgdmFyaWFibGUgdG8gdmFyJyIgY2F0ZWdvcnk9Il9BSEJVTFN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHRUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLm1vdmUuZWxlbWVudCIgY29tbWFuZE5hbWU9Ik1vdmUgLSBSZWZhY3RvcmluZyAiIGRlc2NyaXB0aW9uPSJNb3ZlIHRoZSBzZWxlY3RlZCBlbGVtZW50IHRvIGEgbmV3IGxvY2F0aW9uIiBjYXRlZ29yeT0iX0FIQlVRU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdFU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucXVpY2tkaWZmLnRvZ2dsZSIgY29tbWFuZE5hbWU9IlF1aWNrIERpZmYgVG9nZ2xlIiBkZXNjcmlwdGlvbj0iVG9nZ2xlcyBxdWljayBkaWZmIGluZm9ybWF0aW9uIGRpc3BsYXkgb24gdGhlIGxpbmUgbnVtYmVyIHJ1bGVyIiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdFaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmRlbGV0ZU5leHQiIGNvbW1hbmROYW1lPSJEZWxldGUgTmV4dCIgZGVzY3JpcHRpb249IkRlbGV0ZSB0aGUgbmV4dCBjaGFyYWN0ZXIiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0V5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLkZldGNoR2Vycml0Q2hhbmdlIiBjb21tYW5kTmFtZT0iRmV0Y2ggRnJvbSBHZXJyaXQiIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0ZDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lY2xlbW1hLnVpLmp1bml0UkFQU2hvcnRjdXQuY292ZXJhZ2UiIGNvbW1hbmROYW1lPSJDb3ZlcmFnZSBSQVAgSlVuaXQgVGVzdCIgZGVzY3JpcHRpb249IkNvdmVyYWdlIFJBUCBKVW5pdCBUZXN0IiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdGU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuY29tbWFuZC5TeW5jaHJvbml6ZUFsbCIgY29tbWFuZE5hbWU9IlN5bmNocm9uaXplIENoYW5nZWQiIGNhdGVnb3J5PSJfQUhCVUxpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0ZpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuY29tbWFuZHMuV2F0Y2giIGNvbW1hbmROYW1lPSJXYXRjaCIgZGVzY3JpcHRpb249IkNyZWF0ZSBuZXcgd2F0Y2ggZXhwcmVzc2lvbiIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHRnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuaGlzdG9yeS5SZXdvcmQiIGNvbW1hbmROYW1lPSJSZXdvcmQgQ29tbWl0IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdHQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4ud2lraXRleHQuY29udGV4dC51aS5lZGl0b3IuZm9sZGluZy5hdXRvIiBjb21tYW5kTmFtZT0iVG9nZ2xlIEFjdGl2ZSBGb2xkaW5nIiBkZXNjcmlwdGlvbj0iVG9nZ2xlIEFjdGl2ZSBGb2xkaW5nIiBjYXRlZ29yeT0iX0FIQlVNQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdHU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLk9wZW5Db21taXQiIGNvbW1hbmROYW1lPSJPcGVuIEdpdCBDb21taXQiIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0dpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmVyLnN0b3AiIGNvbW1hbmROYW1lPSJTdG9wIiBkZXNjcmlwdGlvbj0iU3RvcCB0aGUgc2VydmVyIiBjYXRlZ29yeT0iX0FIQlVMeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdHeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuaGVscC5kaXNwbGF5SGVscCIgY29tbWFuZE5hbWU9IkRpc3BsYXkgSGVscCIgZGVzY3JpcHRpb249IkRpc3BsYXkgYSBIZWxwIHRvcGljIiBjYXRlZ29yeT0iX0FIQlVVU3hRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQUdIQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iaHJlZiIgbmFtZT0iSGVscCB0b3BpYyBocmVmIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHSFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5zZWxlY3QucGFnZURvd24iIGNvbW1hbmROYW1lPSJTZWxlY3QgUGFnZSBEb3duIiBkZXNjcmlwdGlvbj0iU2VsZWN0IHRvIHRoZSBib3R0b20gb2YgdGhlIHBhZ2UiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0hpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5sdGsudWkucmVmYWN0b3IuY3JlYXRlLnJlZmFjdG9yaW5nLnNjcmlwdCIgY29tbWFuZE5hbWU9IkNyZWF0ZSBTY3JpcHQiIGRlc2NyaXB0aW9uPSJDcmVhdGUgYSByZWZhY3RvcmluZyBzY3JpcHQgZnJvbSByZWZhY3RvcmluZ3Mgb24gdGhlIGxvY2FsIHdvcmtzcGFjZSIgY2F0ZWdvcnk9Il9BSEJVVHl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHSHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5qb2luLmxpbmVzIiBjb21tYW5kTmFtZT0iSm9pbiBMaW5lcyIgZGVzY3JpcHRpb249IkpvaW4gbGluZXMgb2YgdGV4dCIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHSUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxlZGl0b3Iuc2F2ZUFzVGVtcGxhdGVBY3Rpb24iIGNvbW1hbmROYW1lPSJTYXZlIGFzIFRlbXBsYXRlIiBjYXRlZ29yeT0iX0FIQlVWaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdJU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLm9wZW4uZWRpdG9yIiBjb21tYW5kTmFtZT0iT3BlbiBEZWNsYXJhdGlvbiIgZGVzY3JpcHRpb249Ik9wZW4gYW4gZWRpdG9yIG9uIHRoZSBzZWxlY3RlZCBlbGVtZW50IiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdJaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkud2luZG93LnNob3dDb250ZXh0TWVudSIgY29tbWFuZE5hbWU9IlNob3cgQ29udGV4dCBNZW51IiBkZXNjcmlwdGlvbj0iU2hvdyB0aGUgY29udGV4dCBtZW51IiBjYXRlZ29yeT0iX0FIQlVNeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdJeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLmV4dHJhY3QubG9jYWwudmFyaWFibGUiIGNvbW1hbmROYW1lPSJFeHRyYWN0IExvY2FsIFZhcmlhYmxlIiBkZXNjcmlwdGlvbj0iRXh0cmFjdHMgYW4gZXhwcmVzc2lvbiBpbnRvIGEgbmV3IGxvY2FsIHZhcmlhYmxlIGFuZCB1c2VzIHRoZSBuZXcgbG9jYWwgdmFyaWFibGUiIGNhdGVnb3J5PSJfQUhCVVR5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0pDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5vb21waC5wMi51aS5FeHBsb3JlUmVwb3NpdG9yeSIgY29tbWFuZE5hbWU9IkV4cGxvcmUgUmVwb3NpdG9yeSIgY2F0ZWdvcnk9Il9BSEJVT0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHSlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkudGVhbS5JbnN0YWxsTGZzTG9jYWwiIGNvbW1hbmROYW1lPSJFbmFibGUgTEZTIGxvY2FsbHkiIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0ppeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5sdGsudWkucmVmYWN0b3Iuc2hvdy5yZWZhY3RvcmluZy5oaXN0b3J5IiBjb21tYW5kTmFtZT0iT3BlbiBSZWZhY3RvcmluZyBIaXN0b3J5ICIgZGVzY3JpcHRpb249Ik9wZW5zIHRoZSByZWZhY3RvcmluZyBoaXN0b3J5IiBjYXRlZ29yeT0iX0FIQlVUeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdKeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLnNlYXJjaC5yZWFkLmFjY2Vzcy5pbi5oaWVyYXJjaHkiIGNvbW1hbmROYW1lPSJSZWFkIEFjY2VzcyBpbiBIaWVyYXJjaHkiIGRlc2NyaXB0aW9uPSJTZWFyY2ggZm9yIHJlYWQgcmVmZXJlbmNlcyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpbiBpdHMgaGllcmFyY2h5IiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdLQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLmNvcnJlY3Rpb24uYXNzaXN0LnByb3Bvc2FscyIgY29tbWFuZE5hbWU9IlF1aWNrIEZpeCIgZGVzY3JpcHRpb249IlN1Z2dlc3QgcG9zc2libGUgZml4ZXMgZm9yIGEgcHJvYmxlbSIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHS1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLmxvZy5qZHQuc2hvd2luY29uc29sZSIgY29tbWFuZE5hbWU9IiZhbXA7U2hvdyBJbiBDb25zb2xlIiBkZXNjcmlwdGlvbj0iU2hvdyBTdGFjayBUcmFjZSBpbiBDb25zb2xlIFZpZXciIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0tpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEucHVzaC5kb3duIiBjb21tYW5kTmFtZT0iUHVzaCBEb3duIiBkZXNjcmlwdGlvbj0iTW92ZSBtZW1iZXJzIHRvIHN1YmNsYXNzZXMiIGNhdGVnb3J5PSJfQUhCVVR5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0t5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS53aW5kb3cubmV4dFBlcnNwZWN0aXZlIiBjb21tYW5kTmFtZT0iTmV4dCBQZXJzcGVjdGl2ZSIgZGVzY3JpcHRpb249IlN3aXRjaCB0byB0aGUgbmV4dCBwZXJzcGVjdGl2ZSIgY2F0ZWdvcnk9Il9BSEJVTXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHTEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmNvbW1hbmQuVXBkYXRlUmVwb3NpdG9yeUNvbmZpZ3VyYXRpb24iIGNvbW1hbmROYW1lPSJVcGRhdGUgUmVwb3NpdG9yeSBDb25maWd1cmF0aW9uIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdMU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5jb21taXQuU3Rhc2hBcHBseSIgY29tbWFuZE5hbWU9IkFwcGx5IFN0YXNoZWQgQ2hhbmdlcyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHTGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5zZWFyY2gud3JpdGUuYWNjZXNzLmluLndvcmtpbmcuc2V0IiBjb21tYW5kTmFtZT0iV3JpdGUgQWNjZXNzIGluIFdvcmtpbmcgU2V0IiBkZXNjcmlwdGlvbj0iU2VhcmNoIGZvciB3cml0ZSByZWZlcmVuY2VzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50IGluIGEgd29ya2luZyBzZXQiIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0x5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmhpc3RvcnkuU2hvd1ZlcnNpb25zIiBjb21tYW5kTmFtZT0iT3BlbiB0aGlzIFZlcnNpb24iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBR01DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmhpc3RvcnkuQ29tcGFyZU1vZGUiIG5hbWU9IkNvbXBhcmUgbW9kZSIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR01TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0ZS5uZXh0VGFiIiBjb21tYW5kTmFtZT0iTmV4dCBUYWIiIGRlc2NyaXB0aW9uPSJTd2l0Y2ggdG8gdGhlIG5leHQgdGFiIiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdNaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkud2luZG93LnF1aWNrQWNjZXNzIiBjb21tYW5kTmFtZT0iUXVpY2sgQWNjZXNzIiBkZXNjcmlwdGlvbj0iUXVpY2tseSBhY2Nlc3MgVUkgZWxlbWVudHMiIGNhdGVnb3J5PSJfQUhCVU15eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR015eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuc2hvd0luZm9ybWF0aW9uIiBjb21tYW5kTmFtZT0iU2hvdyBUb29sdGlwIERlc2NyaXB0aW9uIiBkZXNjcmlwdGlvbj0iRGlzcGxheXMgaW5mb3JtYXRpb24gZm9yIHRoZSBjdXJyZW50IGNhcmV0IGxvY2F0aW9uIGluIGEgZm9jdXNlZCBob3ZlciIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHTkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5hZGQuaW1wb3J0IiBjb21tYW5kTmFtZT0iQWRkIEltcG9ydCIgZGVzY3JpcHRpb249IkNyZWF0ZSBpbXBvcnQgc3RhdGVtZW50IG9uIHNlbGVjdGlvbiIgY2F0ZWdvcnk9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHTlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmNvbW1hbmQuYXR0YWNobWVudC5vcGVuIiBjb21tYW5kTmFtZT0iT3BlbiBBdHRhY2htZW50IiBjYXRlZ29yeT0iX0FIQlVSU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdOaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuY29ycmVjdGlvbi5leHRyYWN0TG9jYWwuYXNzaXN0IiBjb21tYW5kTmFtZT0iUXVpY2sgQXNzaXN0IC0gRXh0cmFjdCBsb2NhbCB2YXJpYWJsZSIgZGVzY3JpcHRpb249Ikludm9rZXMgcXVpY2sgYXNzaXN0IGFuZCBzZWxlY3RzICdFeHRyYWN0IGxvY2FsIHZhcmlhYmxlJyIgY2F0ZWdvcnk9Il9BSEJVTFN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHTnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmNvcnJlY3Rpb24ucmVuYW1lSW5GaWxlLmFzc2lzdCIgY29tbWFuZE5hbWU9IlF1aWNrIEFzc2lzdCAtIFJlbmFtZSBpbiBmaWxlIiBkZXNjcmlwdGlvbj0iSW52b2tlcyBxdWljayBhc3Npc3QgYW5kIHNlbGVjdHMgJ1JlbmFtZSBpbiBmaWxlJyIgY2F0ZWdvcnk9Il9BSEJVTFN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHT0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLmNvbW1hbmRzLnRvZ2dsZU1lbW9yeU1vbml0b3JzUGFuZSIgY29tbWFuZE5hbWU9IlRvZ2dsZSBNZW1vcnkgTW9uaXRvcnMgUGFuZSIgZGVzY3JpcHRpb249IlRvZ2dsZSB2aXNpYmlsaXR5IG9mIHRoZSBNZW1vcnkgTW9uaXRvcnMgUGFuZSIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHT1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuQ29uZmlndXJlVXBzdHJlYW1GZXRjaCIgY29tbWFuZE5hbWU9IkNvbmZpZ3VyZSBVcHN0cmVhbSBGZXRjaCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHT2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5zZWFyY2guaW1wbGVtZW50b3JzLmluLndvcmtpbmcuc2V0IiBjb21tYW5kTmFtZT0iSW1wbGVtZW50b3JzIGluIFdvcmtpbmcgU2V0IiBkZXNjcmlwdGlvbj0iU2VhcmNoIGZvciBpbXBsZW1lbnRvcnMgb2YgdGhlIHNlbGVjdGVkIGludGVyZmFjZSBpbiBhIHdvcmtpbmcgc2V0IiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdPeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLkRpc2NhcmQiIGNvbW1hbmROYW1lPSJSZXBsYWNlIHdpdGggRmlsZSBpbiBJbmRleCIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHUEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxlZGl0b3IucmVmcmVzaEZyb21EYXRhYmFzZUFjdGlvbiIgY29tbWFuZE5hbWU9IlJlZnJlc2ggZnJvbSBEYXRhYmFzZSIgY2F0ZWdvcnk9Il9BSEJVVml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHUFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxlZGl0b3IuRXhlY3V0ZUFzT25lU3RhdGVtZW50QWN0aW9uIiBjb21tYW5kTmFtZT0iRXhlY3V0ZSBTZWxlY3RlZCBUZXh0IEFzIE9uZSBTdGF0ZW1lbnQiIGNhdGVnb3J5PSJfQUhCVVZpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR1BpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLlJlcG9zaXRvcmllc1ZpZXdDcmVhdGVCcmFuY2giIGNvbW1hbmROYW1lPSJDcmVhdGUgQnJhbmNoLi4uIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdQeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuY2Z0LnNlcnZlci51aS5pbnRlcm5hbC5hY3Rpb25zLnB1c2hjb21tYW5kIiBjb21tYW5kTmFtZT0iUHVzaCIgZGVzY3JpcHRpb249IlB1c2ggYXBwbGljYXRpb24iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR1FDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kYXRhdG9vbHMuY29ubmVjdGl2aXR5LmNvbW1hbmRzLmFkZHJlcG9zaXRvcnkiIGNvbW1hbmROYW1lPSJOZXcgUmVwb3NpdG9yeSBQcm9maWxlIENvbW1hbmQiIGRlc2NyaXB0aW9uPSJDb21tYW5kIHRvIGNyZWF0ZSBhIG5ldyByZXBvc2l0b3J5IHByb2ZpbGUiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR1FTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLlJlcG9zaXRvcmllc1ZpZXdDb3B5UGF0aCIgY29tbWFuZE5hbWU9IkNvcHkgUGF0aCB0byBDbGlwYm9hcmQiIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR1FpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5lZGl0b3IucGVyZm9ybS5zdGFydHVwIiBjb21tYW5kTmFtZT0iUGVyZm9ybSBTZXR1cCBUYXNrcyAoU3RhcnR1cCkiIGNhdGVnb3J5PSJfQUhCVVJ5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR1F5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5KYXZhUGVyc3BlY3RpdmUiIGNvbW1hbmROYW1lPSJKYXZhU2NyaXB0IiBkZXNjcmlwdGlvbj0iU2hvdyB0aGUgSmF2YVNjcmlwdCBwZXJzcGVjdGl2ZSIgY2F0ZWdvcnk9Il9BSEJVVnl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHUkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5zaG93UnVsZXJBbm5vdGF0aW9uSW5mb3JtYXRpb24iIGNvbW1hbmROYW1lPSJTaG93IFJ1bGVyIEFubm90YXRpb24gVG9vbHRpcCIgZGVzY3JpcHRpb249IkRpc3BsYXlzIGFubm90YXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBjYXJldCBsaW5lIGluIGEgZm9jdXNlZCBob3ZlciIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHUlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpzdC5qc3AudWkuYWRkLmltcG9ydHMiIGNvbW1hbmROYW1lPSJBZGQgSW0mYW1wO3BvcnQiIGRlc2NyaXB0aW9uPSJDcmVhdGUgaW1wb3J0IGRlY2xhcmF0aW9uIGZvciBzZWxlY3Rpb24iIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR1JpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5tb2RpZnkubWV0aG9kLnBhcmFtZXRlcnMiIGNvbW1hbmROYW1lPSJDaGFuZ2UgRnVuY3Rpb24gU2lnbmF0dXJlIiBkZXNjcmlwdGlvbj0iQ2hhbmdlIGZ1bmN0aW9uIHNpZ25hdHVyZSBpbmNsdWRlcyBwYXJhbWV0ZXIgbmFtZXMgYW5kIHBhcmFtZXRlciBvcmRlciIgY2F0ZWdvcnk9Il9BSEJVUVN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHUnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpwdC5qcGEuZWNsaXBzZWxpbmsudWkudXBncmFkZVRvRWNsaXBzZUxpbmtNYXBwaW5nRmlsZSIgY29tbWFuZE5hbWU9IlVwZ3JhZGUgdG8gRWNsaXBzZUxpbmsgTWFwcGluZyBGaWxlIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdTQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuYnJvd3Nlci5vcGVuQnJvd3NlciIgY29tbWFuZE5hbWU9Ik9wZW4gQnJvd3NlciIgZGVzY3JpcHRpb249Ik9wZW5zIHRoZSBkZWZhdWx0IHdlYiBicm93c2VyLiIgY2F0ZWdvcnk9Il9BSEJVTXl4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEFHU1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9InVybCIgbmFtZT0iVVJMIi8+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBR1NpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJicm93c2VySWQiIG5hbWU9IkJyb3dzZXIgSWQiLz4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEFHU3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im5hbWUiIG5hbWU9IkJyb3dzZXIgTmFtZSIvPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQUdUQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0idG9vbHRpcCIgbmFtZT0iQnJvd3NlciBUb29sdGlwIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHVFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLmV4dHJhY3QuY29uc3RhbnQiIGNvbW1hbmROYW1lPSJFeHRyYWN0IENvbnN0YW50IiBkZXNjcmlwdGlvbj0iRXh0cmFjdHMgYSBjb25zdGFudCBpbnRvIGEgbmV3IHN0YXRpYyB2YXIgYW5kIHVzZXMgdGhlIG5ldyBzdGF0aWMgdmFyIiBjYXRlZ29yeT0iX0FIQlVRU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdUaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnJlc3VsdC5yZW1vdmVBbGxJbnN0YW5jZXMiIGNvbW1hbmROYW1lPSJSZW1vdmUgQWxsIFZpc2libGUgUmVzdWx0cyIgY2F0ZWdvcnk9Il9BSEJVTkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHVHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5zZWFyY2guaW1wbGVtZW50Lm9jY3VycmVuY2VzIiBjb21tYW5kTmFtZT0iU2VhcmNoIEltcGxlbWVudCBPY2N1cnJlbmNlcyBpbiBGaWxlIiBkZXNjcmlwdGlvbj0iU2VhcmNoIGZvciBpbXBsZW1lbnQgb2NjdXJyZW5jZXMgb2YgYSBzZWxlY3RlZCB0eXBlIiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdVQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5oaXN0b3J5LkRlbGV0ZUJyYW5jaCIgY29tbWFuZE5hbWU9IkRlbGV0ZSBCcmFuY2giIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR1VTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuY29udGVudEFzc2lzdC5jb250ZXh0SW5mb3JtYXRpb24iIGNvbW1hbmROYW1lPSJDb250ZXh0IEluZm9ybWF0aW9uIiBkZXNjcmlwdGlvbj0iU2hvdyBDb250ZXh0IEluZm9ybWF0aW9uIiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdVaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZmlsZS5zYXZlQXMiIGNvbW1hbmROYW1lPSJTYXZlIEFzIiBkZXNjcmlwdGlvbj0iU2F2ZSB0aGUgY3VycmVudCBjb250ZW50cyB0byBhbm90aGVyIGxvY2F0aW9uIiBjYXRlZ29yeT0iX0FIQlVNaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdVeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLnJlYWQuYWNjZXNzLmluLndvcmtzcGFjZSIgY29tbWFuZE5hbWU9IlJlYWQgQWNjZXNzIGluIFdvcmtzcGFjZSIgZGVzY3JpcHRpb249IlNlYXJjaCBmb3IgcmVhZCByZWZlcmVuY2VzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50IGluIHRoZSB3b3Jrc3BhY2UiIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR1ZDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS53aW5kb3cucHJldmlvdXNQZXJzcGVjdGl2ZSIgY29tbWFuZE5hbWU9IlByZXZpb3VzIFBlcnNwZWN0aXZlIiBkZXNjcmlwdGlvbj0iU3dpdGNoIHRvIHRoZSBwcmV2aW91cyBwZXJzcGVjdGl2ZSIgY2F0ZWdvcnk9Il9BSEJVTXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHVlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLndpbmRvdy5zcGxpdEVkaXRvciIgY29tbWFuZE5hbWU9IlRvZ2dsZSBTcGxpdCBFZGl0b3IiIGRlc2NyaXB0aW9uPSJTcGxpdCBvciBqb2luIHRoZSBjdXJyZW50bHkgYWN0aXZlIGVkaXRvci4iIGNhdGVnb3J5PSJfQUhCVU15eFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBR1ZpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJTcGxpdHRlci5pc0hvcml6b250YWwiIG5hbWU9Ik9yaWVudGF0aW9uIiBvcHRpb25hbD0iZmFsc2UiLz4KKyAgPC9jb21tYW5kcz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdWeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdGUuY29sbGFwc2VBbGwiIGNvbW1hbmROYW1lPSJDb2xsYXBzZSBBbGwiIGRlc2NyaXB0aW9uPSJDb2xsYXBzZSB0aGUgY3VycmVudCB0cmVlIiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdXQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuY29tcGFyZS5jb3B5QWxsUmlnaHRUb0xlZnQiIGNvbW1hbmROYW1lPSJDb3B5IEFsbCBmcm9tIFJpZ2h0IHRvIExlZnQiIGRlc2NyaXB0aW9uPSJDb3B5IEFsbCBDaGFuZ2VzIGZyb20gUmlnaHQgdG8gTGVmdCIgY2F0ZWdvcnk9Il9BSEJVVEN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHV1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmNvbW1hbmQuZGVhY3RpdmF0ZVNlbGVjdGVkVGFzayIgY29tbWFuZE5hbWU9IkRlYWN0aXZhdGUgU2VsZWN0ZWQgVGFzayIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHV2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLndpbmRvdy5sb2NrVG9vbEJhciIgY29tbWFuZE5hbWU9IlRvZ2dsZSBMb2NrIFRvb2xiYXJzIiBkZXNjcmlwdGlvbj0iVG9nZ2xlIHRoZSBMb2NrIG9uIHRoZSBUb29sYmFycyIgY2F0ZWdvcnk9Il9BSEJVTXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHV3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLmNvbW1hbmRzLkRpc2Nvbm5lY3QiIGNvbW1hbmROYW1lPSJEaXNjb25uZWN0IiBkZXNjcmlwdGlvbj0iRGlzY29ubmVjdCIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHWEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLmV4dHJhY3QuaW50ZXJmYWNlIiBjb21tYW5kTmFtZT0iRXh0cmFjdCBJbnRlcmZhY2UiIGRlc2NyaXB0aW9uPSJFeHRyYWN0IGEgc2V0IG9mIG1lbWJlcnMgaW50byBhIG5ldyBpbnRlcmZhY2UgYW5kIHRyeSB0byB1c2UgdGhlIG5ldyBpbnRlcmZhY2UiIGNhdGVnb3J5PSJfQUhCVVFTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR1hTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLndyaXRlLmFjY2Vzcy5pbi53b3Jrc3BhY2UiIGNvbW1hbmROYW1lPSJXcml0ZSBBY2Nlc3MgaW4gV29ya3NwYWNlIiBkZXNjcmlwdGlvbj0iU2VhcmNoIGZvciB3cml0ZSByZWZlcmVuY2VzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50IGluIHRoZSB3b3Jrc3BhY2UiIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR1hpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0ZS5yZW1vdmVGcm9tV29ya2luZ1NldCIgY29tbWFuZE5hbWU9IlJlbW92ZSBGcm9tIFdvcmtpbmcgU2V0IiBkZXNjcmlwdGlvbj0iUmVtb3ZlcyB0aGUgc2VsZWN0ZWQgb2JqZWN0IGZyb20gYSB3b3JraW5nIHNldC4iIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR1h5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5wZGUudWkuY3JlYXRlQW50QnVpbGRGaWxlIiBjb21tYW5kTmFtZT0iQ3JlYXRlIEFudCBCdWlsZCBGaWxlIiBkZXNjcmlwdGlvbj0iQ3JlYXRlcyBhbiBBbnQgYnVpbGQgZmlsZSBmb3IgdGhlIGN1cnJlbnQgcHJvamVjdCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHWUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmNvbW1hbmQub3BlblNlbGVjdGVkVGFzayIgY29tbWFuZE5hbWU9Ik9wZW4gU2VsZWN0ZWQgVGFzayIgY2F0ZWdvcnk9Il9BSEJVTGl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHWVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmNvcnJlY3Rpb24uY2hhbmdlVG9TdGF0aWMiIGNvbW1hbmROYW1lPSJRdWljayBGaXggLSBDaGFuZ2UgdG8gc3RhdGljIGFjY2VzcyIgZGVzY3JpcHRpb249Ikludm9rZXMgcXVpY2sgYXNzaXN0IGFuZCBzZWxlY3RzICdDaGFuZ2UgdG8gc3RhdGljIGFjY2VzcyciIGNhdGVnb3J5PSJfQUhCVUxTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR1lpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kYXRhdG9vbHMuZW5hYmxlbWVudC5zeWJhc2UuYXNhLnNjaGVtYW9iamVjdGVkaXRvci5leGFtcGxlcy50YWJsZXNjaGVtYWVkaXRvci5jb3B5Y29sdW1uIiBjb21tYW5kTmFtZT0iQ29weSIgY2F0ZWdvcnk9Il9BSEJVVGl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHWXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuUmVwb3NpdG9yaWVzTGlua1dpdGhTZWxlY3Rpb24iIGNvbW1hbmROYW1lPSJMaW5rIHdpdGggU2VsZWN0aW9uIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdaQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4uY29udGV4dC51aS5jb21tYW5kcy50b2dnbGUuZm9jdXMuYWN0aXZlLnZpZXciIGNvbW1hbmROYW1lPSJGb2N1cyBvbiBBY3RpdmUgVGFzayIgZGVzY3JpcHRpb249IlRvZ2dsZSB0aGUgZm9jdXMgb24gYWN0aXZlIHRhc2sgZm9yIHRoZSBhY3RpdmUgdmlldyIgY2F0ZWdvcnk9Il9BSEJVTEN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHWlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmlkZS5kZWxldGVDb21wbGV0ZWQiIGNvbW1hbmROYW1lPSJEZWxldGUgQ29tcGxldGVkIFRhc2tzIiBkZXNjcmlwdGlvbj0iRGVsZXRlIHRoZSB0YXNrcyBtYXJrZWQgYXMgY29tcGxldGVkIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdaaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuY29tbWFuZC5nb1RvTmV4dFVucmVhZCIgY29tbWFuZE5hbWU9IkdvIFRvIE5leHQgVW5yZWFkIFRhc2siIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR1p5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsZWRpdG9yLmRlYnVnQWN0aW9uIiBjb21tYW5kTmFtZT0iRGVidWciIGNhdGVnb3J5PSJfQUhCVVZpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2FDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuYWRkLmphdmFkb2MuY29tbWVudCIgY29tbWFuZE5hbWU9IkFkZCBKYXZhZG9jIENvbW1lbnQiIGRlc2NyaXB0aW9uPSJBZGQgYSBKYXZhZG9jIGNvbW1lbnQgc3R1YiB0byB0aGUgbWVtYmVyIGVsZW1lbnQiIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2FTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5jZnQuc2VydmVyLnVpLmNsb25lc2VydmVyY29tbWFuZCIgY29tbWFuZE5hbWU9IkNsb25lIFNlcnZlciIgZGVzY3JpcHRpb249IkNsb25lIFNlcnZlciIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHYWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuUmViYXNlSW50ZXJhY3RpdmVDdXJyZW50IiBjb21tYW5kTmFtZT0iUmViYXNlIEludGVyYWN0aXZlIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdheXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuY29ycmVjdGlvbi5hZGRDYXN0IiBjb21tYW5kTmFtZT0iUXVpY2sgRml4IC0gQWRkIGNhc3QiIGRlc2NyaXB0aW9uPSJJbnZva2VzIHF1aWNrIGFzc2lzdCBhbmQgc2VsZWN0cyAnQWRkIGNhc3QnIiBjYXRlZ29yeT0iX0FIQlVMU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdiQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkud2luZG93Lm9wZW5FZGl0b3JEcm9wRG93biIgY29tbWFuZE5hbWU9IlF1aWNrIFN3aXRjaCBFZGl0b3IiIGRlc2NyaXB0aW9uPSJPcGVuIHRoZSBlZGl0b3IgZHJvcCBkb3duIGxpc3QiIGNhdGVnb3J5PSJfQUhCVU15eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2JTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qcHQuamF4Yi51aS5nZW5lcmF0ZUpheGJDbGFzc2VzIiBjb21tYW5kTmFtZT0iSkFYQiBDbGFzc2VzLi4uIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdiaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmRlbGV0ZU5leHRXb3JkIiBjb21tYW5kTmFtZT0iRGVsZXRlIE5leHQgV29yZCIgZGVzY3JpcHRpb249IkRlbGV0ZSB0aGUgbmV4dCB3b3JkIiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdieXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucGRlLnVpLm9wZW5EZXBlbmRlbmNpZXMiIGNvbW1hbmROYW1lPSJPcGVuIFBsdWctaW4gRGVwZW5kZW5jaWVzIiBkZXNjcmlwdGlvbj0iT3BlbnMgdGhlIHBsdWctaW4gZGVwZW5kZW5jaWVzIHZpZXcgZm9yIHRoZSBjdXJyZW50IHBsdWctaW4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2NDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEudG9nZ2xlTWFya09jY3VycmVuY2VzIiBjb21tYW5kTmFtZT0iVG9nZ2xlIE1hcmsgT2NjdXJyZW5jZXMiIGRlc2NyaXB0aW9uPSJUb2dnbGVzIG1hcmsgb2NjdXJyZW5jZXMgaW4gSmF2YSBlZGl0b3JzIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdjU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5Ta2lwUmViYXNlIiBjb21tYW5kTmFtZT0iU2tpcCBjb21taXQgYW5kIGNvbnRpbnVlIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdjaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLnJlcGxhY2UuaW52b2NhdGlvbnMiIGNvbW1hbmROYW1lPSJSZXBsYWNlIEludm9jYXRpb25zIiBkZXNjcmlwdGlvbj0iUmVwbGFjZSBpbnZvY2F0aW9ucyBvZiB0aGUgc2VsZWN0ZWQgbWV0aG9kIiBjYXRlZ29yeT0iX0FIQlVUeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdjeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLnNlYXJjaC5kZWNsYXJhdGlvbnMuaW4uaGllcmFyY2h5IiBjb21tYW5kTmFtZT0iRGVjbGFyYXRpb24gaW4gSGllcmFyY2h5IiBkZXNjcmlwdGlvbj0iU2VhcmNoIGZvciBkZWNsYXJhdGlvbnMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnQgaW4gaXRzIGhpZXJhcmNoeSIgY2F0ZWdvcnk9Il9BSEJVVkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHZEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuaGlzdG9yeS5TZXRRdWlja2RpZmZCYXNlbGluZSIgY29tbWFuZE5hbWU9IlNldCBxdWlja2RpZmYgYmFzZWxpbmUiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2RTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnVuZG8iIGNvbW1hbmROYW1lPSJVbmRvIiBkZXNjcmlwdGlvbj0iVW5kbyB0aGUgbGFzdCBvcGVyYXRpb24iIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2RpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5maWxlLm5ld1F1aWNrTWVudSIgY29tbWFuZE5hbWU9Ik5ldyBtZW51IiBkZXNjcmlwdGlvbj0iT3BlbiB0aGUgTmV3IG1lbnUiIGNhdGVnb3J5PSJfQUhCVU1peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2R5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5jb3JyZWN0aW9uLmFkZFN1cHByZXNzV2FybmluZ3MiIGNvbW1hbmROYW1lPSJRdWljayBGaXggLSBBZGQgQFN1cHByZXNzV2FybmluZ3MiIGRlc2NyaXB0aW9uPSJJbnZva2VzIHF1aWNrIGZpeCBhbmQgc2VsZWN0cyAnQWRkIEBTdXBwcmVzc1dhcm5pbmdzJyAiIGNhdGVnb3J5PSJfQUhCVUxTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2VDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5hY3Rpb25zLldhdGNoQ29tbWFuZCIgY29tbWFuZE5hbWU9IldhdGNoIiBkZXNjcmlwdGlvbj0iQ3JlYXRlIGEgd2F0Y2ggZXhwcmVzc2lvbiBmcm9tIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBhbmQgYWRkIGl0IHRvIHRoZSBFeHByZXNzaW9ucyB2aWV3IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdlU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZmlsZS5vcGVuV29ya3NwYWNlIiBjb21tYW5kTmFtZT0iU3dpdGNoIFdvcmtzcGFjZSIgZGVzY3JpcHRpb249Ik9wZW4gdGhlIHdvcmtzcGFjZSBzZWxlY3Rpb24gZGlhbG9nIiBjYXRlZ29yeT0iX0FIQlVNaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdlaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LnJlbW92ZS5vY2N1cnJlbmNlLmFubm90YXRpb25zIiBjb21tYW5kTmFtZT0iUmVtb3ZlIE9jY3VycmVuY2UgQW5ub3RhdGlvbnMiIGRlc2NyaXB0aW9uPSJSZW1vdmVzIHRoZSBvY2N1cnJlbmNlIGFubm90YXRpb25zIGZyb20gdGhlIGN1cnJlbnQgZWRpdG9yIiBjYXRlZ29yeT0iX0FIQlVMU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdleXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZmlsZS5jbG9zZUFsbCIgY29tbWFuZE5hbWU9IkNsb3NlIEFsbCIgZGVzY3JpcHRpb249IkNsb3NlIGFsbCBlZGl0b3JzIiBjYXRlZ29yeT0iX0FIQlVNaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdmQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLm5hdmlnYXRlLm9wZW4udHlwZSIgY29tbWFuZE5hbWU9Ik9wZW4gVHlwZSIgZGVzY3JpcHRpb249Ik9wZW4gYSB0eXBlIGluIGEgSmF2YSBlZGl0b3IiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2ZTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LmN1dCIgY29tbWFuZE5hbWU9IkN1dCIgZGVzY3JpcHRpb249IkN1dCB0aGUgc2VsZWN0aW9uIHRvIHRoZSBjbGlwYm9hcmQiIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2ZpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuaW50cm9kdWNlLmluZGlyZWN0aW9uIiBjb21tYW5kTmFtZT0iSW50cm9kdWNlIEluZGlyZWN0aW9uIiBkZXNjcmlwdGlvbj0iSW50cm9kdWNlIGFuIGluZGlyZWN0aW9uIHRvIGVuY2Fwc3VsYXRlIGludm9jYXRpb25zIG9mIGEgc2VsZWN0ZWQgbWV0aG9kIiBjYXRlZ29yeT0iX0FIQlVUeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdmeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLk1lcmdlIiBjb21tYW5kTmFtZT0iTWVyZ2UiIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2dDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5sdGsudWkucmVmYWN0b3IuYXBwbHkucmVmYWN0b3Jpbmcuc2NyaXB0IiBjb21tYW5kTmFtZT0iQXBwbHkgU2NyaXB0IiBkZXNjcmlwdGlvbj0iUGVyZm9ybSByZWZhY3RvcmluZ3MgZnJvbSBhIHJlZmFjdG9yaW5nIHNjcmlwdCBvbiB0aGUgbG9jYWwgd29ya3NwYWNlIiBjYXRlZ29yeT0iX0FIQlVUeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdnU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLlJlcGxhY2VXaXRoUmVmIiBjb21tYW5kTmFtZT0iUmVwbGFjZSB3aXRoIGJyYW5jaCwgdGFnLCBvciByZWZlcmVuY2UiIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2dpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5jb21tYW5kLnN1Ym1pdFRhc2siIGNvbW1hbmROYW1lPSJTdWJtaXQgVGFzayIgZGVzY3JpcHRpb249IlN1Ym1pdHMgdGhlIGN1cnJlbnRseSBvcGVuIHRhc2siIGNhdGVnb3J5PSJfQUhCVVJTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2d5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lY2xlbW1hLnVpLnRlc3ROZ1N1aXRlU2hvcnRjdXQuY292ZXJhZ2UiIGNvbW1hbmROYW1lPSJDb3ZlcmFnZSBUZXN0TkcgU3VpdGUiIGRlc2NyaXB0aW9uPSJDb3ZlcmFnZSBUZXN0TkcgU3VpdGUiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2hDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuZXh0cmFjdC5zdXBlcmNsYXNzIiBjb21tYW5kTmFtZT0iRXh0cmFjdCBTdXBlcmNsYXNzIiBkZXNjcmlwdGlvbj0iRXh0cmFjdCBhIHNldCBvZiBtZW1iZXJzIGludG8gYSBuZXcgc3VwZXJjbGFzcyBhbmQgdHJ5IHRvIHVzZSB0aGUgbmV3IHN1cGVyY2xhc3MiIGNhdGVnb3J5PSJfQUhCVVR5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2hTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnJlbG9hZC5kZXBlbmRlbmNpZXMiIGNvbW1hbmROYW1lPSJSZWxvYWQgRGVwZW5kZW5jaWVzIiBkZXNjcmlwdGlvbj0iUmVsb2FkIERlcGVuZGVuY2llcyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHaGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuZ2VuZXJhdGUueG1sIiBjb21tYW5kTmFtZT0iJmFtcDtYTUwgRmlsZS4uLiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHaHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC50b2dnbGVTaG93U2VsZWN0ZWRFbGVtZW50T25seSIgY29tbWFuZE5hbWU9IlNob3cgU2VsZWN0ZWQgRWxlbWVudCBPbmx5IiBkZXNjcmlwdGlvbj0iU2hvdyBTZWxlY3RlZCBFbGVtZW50IE9ubHkiIGNhdGVnb3J5PSJfQUhCVU15eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2lDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5jb3JyZWN0aW9uLmFkZEltcG9ydCIgY29tbWFuZE5hbWU9IlF1aWNrIEZpeCAtIEFkZCBpbXBvcnQiIGRlc2NyaXB0aW9uPSJJbnZva2VzIHF1aWNrIGFzc2lzdCBhbmQgc2VsZWN0cyAnQWRkIGltcG9ydCciIGNhdGVnb3J5PSJfQUhCVUxTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2lTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQuanVuaXQuanVuaXRTaG9ydGN1dC5yZXJ1bkZhaWxlZEZpcnN0IiBjb21tYW5kTmFtZT0iUmVydW4gSlVuaXQgVGVzdCAtIEZhaWx1cmVzIEZpcnN0IiBkZXNjcmlwdGlvbj0iUmVydW4gSlVuaXQgVGVzdCAtIEZhaWx1cmVzIEZpcnN0IiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdpaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZmlsZS5leHBvcnQiIGNvbW1hbmROYW1lPSJFeHBvcnQiIGRlc2NyaXB0aW9uPSJFeHBvcnQiIGNhdGVnb3J5PSJfQUhCVU1peFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBR2l5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJleHBvcnRXaXphcmRJZCIgbmFtZT0iRXhwb3J0IFdpemFyZCIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2pDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QueHNkLnVpLnJlZmFjdG9yLm1ha2VUeXBlR2xvYmFsIiBjb21tYW5kTmFtZT0iTWFrZSAmYW1wO0Fub255bW91cyBUeXBlIEdsb2JhbCIgZGVzY3JpcHRpb249IlByb21vdGVzIGFub255bW91cyB0eXBlIHRvIGdsb2JhbCBsZXZlbCBhbmQgcmVwbGFjZXMgaXRzIHJlZmVyZW5jZXMiIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2pTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLmltcGxlbWVudG9ycy5pbi5wcm9qZWN0IiBjb21tYW5kTmFtZT0iSW1wbGVtZW50b3JzIGluIFByb2plY3QiIGRlc2NyaXB0aW9uPSJTZWFyY2ggZm9yIGltcGxlbWVudG9ycyBvZiB0aGUgc2VsZWN0ZWQgaW50ZXJmYWNlIGluIHRoZSBlbmNsb3NpbmcgcHJvamVjdCIgY2F0ZWdvcnk9Il9BSEJVVkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHaml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkudGVhbS5BcHBseVBhdGNoIiBjb21tYW5kTmFtZT0iQXBwbHkgUGF0Y2giIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2p5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuSmF2YVBlcnNwZWN0aXZlIiBjb21tYW5kTmFtZT0iSmF2YSIgZGVzY3JpcHRpb249IlNob3cgdGhlIEphdmEgcGVyc3BlY3RpdmUiIGNhdGVnb3J5PSJfQUhCVVZ5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2tDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuaW5kZW50IiBjb21tYW5kTmFtZT0iQ29ycmVjdCBJbmRlbnRhdGlvbiIgZGVzY3JpcHRpb249IkNvcnJlY3RzIHRoZSBpbmRlbnRhdGlvbiBvZiB0aGUgc2VsZWN0ZWQgbGluZXMiIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2tTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5pZGUuY29weUNvbmZpZ0NvbW1hbmQiIGNvbW1hbmROYW1lPSJDb3B5IENvbmZpZ3VyYXRpb24gRGF0YSBUbyBDbGlwYm9hcmQiIGRlc2NyaXB0aW9uPSJDb3BpZXMgdGhlIGNvbmZpZ3VyYXRpb24gZGF0YSAoc3lzdGVtIHByb3BlcnRpZXMsIGluc3RhbGxlZCBidW5kbGVzLCBldGMpIHRvIHRoZSBjbGlwYm9hcmQuIiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdraXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdGUuZm9yd2FyZEhpc3RvcnkiIGNvbW1hbmROYW1lPSJGb3J3YXJkIEhpc3RvcnkiIGRlc2NyaXB0aW9uPSJNb3ZlIGZvcndhcmQgaW4gdGhlIGVkaXRvciBuYXZpZ2F0aW9uIGhpc3RvcnkiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2t5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5zZWFyY2gudWkucGVyZm9ybVRleHRTZWFyY2hQcm9qZWN0IiBjb21tYW5kTmFtZT0iRmluZCBUZXh0IGluIFByb2plY3QiIGRlc2NyaXB0aW9uPSJTZWFyY2hlcyB0aGUgZmlsZXMgaW4gdGhlIHByb2plY3QgZm9yIHNwZWNpZmljIHRleHQuIiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdsQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkucHJvamVjdC5yZWJ1aWxkQWxsIiBjb21tYW5kTmFtZT0iUmVidWlsZCBBbGwiIGRlc2NyaXB0aW9uPSJSZWJ1aWxkIGFsbCBwcm9qZWN0cyIgY2F0ZWdvcnk9Il9BSEJVVWl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzZ0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmdlZi56b29tX2luIiBjb21tYW5kTmFtZT0iWm9vbSBJbiIgZGVzY3JpcHRpb249Ilpvb20gSW4iIGNhdGVnb3J5PSJfQUhCVVdTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc2dTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEucXVpY2suZm9ybWF0IiBjb21tYW5kTmFtZT0iRm9ybWF0IEVsZW1lbnQiIGRlc2NyaXB0aW9uPSJGb3JtYXQgZW5jbG9zaW5nIHRleHQgZWxlbWVudCIgY2F0ZWdvcnk9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzZ2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5vcGVuTG9jYWxGaWxlIiBjb21tYW5kTmFtZT0iT3BlbiBGaWxlLi4uIiBkZXNjcmlwdGlvbj0iT3BlbiBhIGZpbGUiIGNhdGVnb3J5PSJfQUhCVU1peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc2d5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uRGlzY29ubmVjdCIgY29tbWFuZE5hbWU9IkRpc2Nvbm5lY3QiIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc2hDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuc2VsZWN0LnByZXZpb3VzIiBjb21tYW5kTmFtZT0iU2VsZWN0IFByZXZpb3VzIEVsZW1lbnQiIGRlc2NyaXB0aW9uPSJFeHBhbmQgc2VsZWN0aW9uIHRvIGluY2x1ZGUgcHJldmlvdXMgc2libGluZyIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzaFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnBkZS51aS5leHRlcm5hbGl6ZVN0cmluZ3MiIGNvbW1hbmROYW1lPSJFeHRlcm5hbGl6ZSBTdHJpbmdzIGluIFBsdWctaW5zIiBkZXNjcmlwdGlvbj0iRXh0cmFjdCB0cmFuc2xhdGFibGUgc3RyaW5ncyBmcm9tIHBsdWctaW4gZmlsZXMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc2hpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5maWxlLnJlZnJlc2giIGNvbW1hbmROYW1lPSJSZWZyZXNoIiBkZXNjcmlwdGlvbj0iUmVmcmVzaCB0aGUgc2VsZWN0ZWQgaXRlbXMiIGNhdGVnb3J5PSJfQUhCVU1peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc2h5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kYXRhdG9vbHMuY29ubmVjdGl2aXR5LmNvbW1hbmRzLnNob3djYXRlZ29yeSIgY29tbWFuZE5hbWU9IlNob3cgQ2F0ZWdvcnkiIGRlc2NyaXB0aW9uPSJTaG93IENhdGVnb3J5IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXNpQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5SZXBvc2l0b3JpZXNWaWV3Q2hhbmdlQ3JlZGVudGlhbHMiIGNvbW1hbmROYW1lPSJDaGFuZ2UgQ3JlZGVudGlhbHMiIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc2lTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuY29ycmVjdGlvbi5leHRyYWN0TWV0aG9kSW5wbGFjZS5hc3Npc3QiIGNvbW1hbmROYW1lPSJRdWljayBBc3Npc3QgLSBFeHRyYWN0IG1ldGhvZCIgZGVzY3JpcHRpb249Ikludm9rZXMgcXVpY2sgYXNzaXN0IGFuZCBzZWxlY3RzICdFeHRyYWN0IHRvIG1ldGhvZCciIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc2lpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5vb21waC5wMi51aS5TZWFyY2hSZXBvc2l0b3JpZXMiIGNvbW1hbmROYW1lPSJTZWFyY2ggUmVwb3NpdG9yaWVzIiBjYXRlZ29yeT0iX0FIQlVPQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXNpeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkud2luZG93LmNsb3NlQWxsUGVyc3BlY3RpdmVzIiBjb21tYW5kTmFtZT0iQ2xvc2UgQWxsIFBlcnNwZWN0aXZlcyIgZGVzY3JpcHRpb249IkNsb3NlIGFsbCBvcGVuIHBlcnNwZWN0aXZlcyIgY2F0ZWdvcnk9Il9BSEJVTXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzakN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmNvcnJlY3Rpb24uYWRkVGhyb3dzRGVjbCIgY29tbWFuZE5hbWU9IlF1aWNrIEZpeCAtIEFkZCB0aHJvd3MgZGVjbGFyYXRpb24iIGRlc2NyaXB0aW9uPSJJbnZva2VzIHF1aWNrIGFzc2lzdCBhbmQgc2VsZWN0cyAnQWRkIHRocm93cyBkZWNsYXJhdGlvbiciIGNhdGVnb3J5PSJfQUhCVUxTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc2pTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5jb21tYW5kLmRpc2Nvbm5lY3RlZCIgY29tbWFuZE5hbWU9IkRpc2Nvbm5lY3RlZCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzaml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5zZWxlY3QubGluZVN0YXJ0IiBjb21tYW5kTmFtZT0iU2VsZWN0IExpbmUgU3RhcnQiIGRlc2NyaXB0aW9uPSJTZWxlY3QgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZSBvZiB0ZXh0IiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXNqeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5jb21taXQuUmV3b3JkIiBjb21tYW5kTmFtZT0iUmV3b3JkIENvbW1pdCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFza0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLnRvZ2dsZU1hcmtPY2N1cnJlbmNlcyIgY29tbWFuZE5hbWU9IlRvZ2dsZSBNYXJrIE9jY3VycmVuY2VzIiBkZXNjcmlwdGlvbj0iVG9nZ2xlcyBtYXJrIG9jY3VycmVuY2VzIGluIEphdmFTY3JpcHQgZWRpdG9ycyIgY2F0ZWdvcnk9Il9BSEJVTFN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFza1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXRvcnMubGluZU51bWJlclRvZ2dsZSIgY29tbWFuZE5hbWU9IlNob3cgTGluZSBOdW1iZXJzIiBkZXNjcmlwdGlvbj0iVG9nZ2xlIGRpc3BsYXkgb2YgbGluZSBudW1iZXJzIiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXNraXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuaW5mZXIudHlwZS5hcmd1bWVudHMiIGNvbW1hbmROYW1lPSJJbmZlciBHZW5lcmljIFR5cGUgQXJndW1lbnRzIiBkZXNjcmlwdGlvbj0iSW5mZXIgdHlwZSBhcmd1bWVudHMgZm9yIHJlZmVyZW5jZXMgdG8gZ2VuZXJpYyBjbGFzc2VzIGFuZCByZW1vdmUgdW5uZWNlc3NhcnkgY2FzdHMiIGNhdGVnb3J5PSJfQUhCVVFTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc2t5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qcHQuanBhLnVpLnBlcnNpc3RlbnRBdHRyaWJ1dGVNYXBBcyIgY29tbWFuZE5hbWU9Ik1hcCBBcyIgY2F0ZWdvcnk9Il9BSEJVUEN4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEFzbEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9InNwZWNpZmllZFBlcnNpc3RlbnRBdHRyaWJ1dGVNYXBwaW5nS2V5IiBuYW1lPSJzcGVjaWZpZWQgbWFwcGluZyBrZXkiIG9wdGlvbmFsPSJmYWxzZSIvPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXNsU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iZGVmYXVsdFBlcnNpc3RlbnRBdHRyaWJ1dGVNYXBwaW5nS2V5IiBuYW1lPSJkZWZhdWx0IG1hcHBpbmcga2V5IiBvcHRpb25hbD0iZmFsc2UiLz4KKyAgPC9jb21tYW5kcz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXNsaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MuaW5kZXgudWkuY29tbWFuZC5SZXNldEluZGV4IiBjb21tYW5kTmFtZT0iUmVmcmVzaCBTZWFyY2ggSW5kZXgiIGNhdGVnb3J5PSJfQUhCVUxpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc2x5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLlJlcG9zaXRvcmllc1RvZ2dsZUJyYW5jaENvbW1pdCIgY29tbWFuZE5hbWU9IlRvZ2dsZSBMYXRlc3QgQnJhbmNoIENvbW1pdCIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzbUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnRtLnRlcm1pbmFsLnBhc3RlIiBjb21tYW5kTmFtZT0iUGFzdGUiIGNhdGVnb3J5PSJfQUhCVVV5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc21TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmhpc3RvcnkuUHVzaENvbW1pdCIgY29tbWFuZE5hbWU9IlB1c2ggQ29tbWl0Li4uIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXNtaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuY29ycmVjdGlvbi5hc3NpZ25Ub0ZpZWxkLmFzc2lzdCIgY29tbWFuZE5hbWU9IlF1aWNrIEFzc2lzdCAtIEFzc2lnbiB0byB2YXIiIGRlc2NyaXB0aW9uPSJJbnZva2VzIHF1aWNrIGFzc2lzdCBhbmQgc2VsZWN0cyAnQXNzaWduIHRvIHZhciciIGNhdGVnb3J5PSJfQUhCVUxTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc215eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qcHQuanBhLnVpLmNvbnZlcnRKYXZhR2VuZXJhdG9ycyIgY29tbWFuZE5hbWU9Ik1vdmUgSmF2YSBHZW5lcmF0b3JzIHRvIFhNTC4uLiIgY2F0ZWdvcnk9Il9BSEJVT2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzbkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmlkZS5zaG93SW5TeXN0ZW1FeHBsb3JlciIgY29tbWFuZE5hbWU9IlNob3cgSW4gKFN5c3RlbSBFeHBsb3JlcikiIGRlc2NyaXB0aW9uPSJTaG93IGluIHN5c3RlbSdzIGV4cGxvcmVyIChmaWxlIG1hbmFnZXIpIiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXNuU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuaWRlLnNob3dJblN5c3RlbUV4cGxvcmVyLnBhdGgiIG5hbWU9IlJlc291cmNlIFN5c3RlbSBQYXRoIFBhcmFtZXRlciIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc25peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5jb21tYW5kLm5ldy5sb2NhbC50YXNrIiBjb21tYW5kTmFtZT0iTmV3IExvY2FsIFRhc2siIGNhdGVnb3J5PSJfQUhCVUxpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc255eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuc2VsZWN0LmxpbmVEb3duIiBjb21tYW5kTmFtZT0iU2VsZWN0IExpbmUgRG93biIgZGVzY3JpcHRpb249IkV4dGVuZCB0aGUgc2VsZWN0aW9uIHRvIHRoZSBuZXh0IGxpbmUgb2YgdGV4dCIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzb0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5zb3J0Lm1lbWJlcnMiIGNvbW1hbmROYW1lPSJTb3J0IE1lbWJlcnMiIGRlc2NyaXB0aW9uPSJTb3J0IGFsbCBtZW1iZXJzIHVzaW5nIHRoZSBtZW1iZXIgb3JkZXIgcHJlZmVyZW5jZSIgY2F0ZWdvcnk9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzb1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5sb3dlckNhc2UiIGNvbW1hbmROYW1lPSJUbyBMb3dlciBDYXNlIiBkZXNjcmlwdGlvbj0iQ2hhbmdlcyB0aGUgc2VsZWN0aW9uIHRvIGxvd2VyIGNhc2UiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc29peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kYXRhdG9vbHMuY29ubmVjdGl2aXR5LmNvbW1hbmRzLmFkZHByb2ZpbGUiIGNvbW1hbmROYW1lPSJOZXcgQ29ubmVjdGlvbiBQcm9maWxlIENvbW1hbmQiIGRlc2NyaXB0aW9uPSJDb21tYW5kIHRvIGNyZWF0ZSBhIG5ldyBjb25uZWN0aW9uIHByb2ZpbGUiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBc295eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kYXRhdG9vbHMuY29ubmVjdGl2aXR5LnVpLmlnbm9yZUNhdGVnb3J5IiBuYW1lPSJpZ25vcmVDYXRlZ29yeSIvPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXNwQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGF0YXRvb2xzLmNvbm5lY3Rpdml0eS51aS51c2VTZWxlY3Rpb24iIG5hbWU9InVzZVNlbGVjdGlvbiIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc3BTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uQ29tcGFyZVdpdGhJbmRleCIgY29tbWFuZE5hbWU9IkNvbXBhcmUgd2l0aCBJbmRleCIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzcGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm0yZS5kaXNjb3ZlcnkudWkiIGNvbW1hbmROYW1lPSJtMmUgTWFya2V0cGxhY2UiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc3B5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuem9vbU91dCIgY29tbWFuZE5hbWU9Ilpvb20gT3V0IiBkZXNjcmlwdGlvbj0iWm9vbSBvdXQgdGV4dCwgZGVjcmVhc2UgZGVmYXVsdCBmb250IHNpemUgZm9yIHRleHQgZWRpdG9ycyIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzcUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmNvbW1hbmQubWFya1Rhc2tJbmNvbXBsZXRlIiBjb21tYW5kTmFtZT0iTWFyayBUYXNrIEluY29tcGxldGUiIGNhdGVnb3J5PSJfQUhCVUxpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc3FTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5maWxlLnNhdmUiIGNvbW1hbmROYW1lPSJTYXZlIiBkZXNjcmlwdGlvbj0iU2F2ZSB0aGUgY3VycmVudCBjb250ZW50cyIgY2F0ZWdvcnk9Il9BSEJVTWl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzcWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5jb3JyZWN0aW9uLmFzc2lnbkFsbFBhcmFtc1RvTmV3RmllbGRzLmFzc2lzdCIgY29tbWFuZE5hbWU9IlF1aWNrIEFzc2lzdCAtIEFzc2lnbiBhbGwgcGFyYW1ldGVycyB0byBuZXcgZmllbGRzIiBkZXNjcmlwdGlvbj0iSW52b2tlcyBxdWljayBhc3Npc3QgYW5kIHNlbGVjdHMgJ0Fzc2lnbiBhbGwgcGFyYW1ldGVycyB0byBuZXcgZmllbGRzJyIgY2F0ZWdvcnk9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzcXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5zZWFyY2gucmVmZXJlbmNlcy5pbi5wcm9qZWN0IiBjb21tYW5kTmFtZT0iUmVmZXJlbmNlcyBpbiBQcm9qZWN0IiBkZXNjcmlwdGlvbj0iU2VhcmNoIGZvciByZWZlcmVuY2VzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50IGluIHRoZSBlbmNsb3NpbmcgcHJvamVjdCIgY2F0ZWdvcnk9Il9BSEJVVkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzckN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLmludHJvZHVjZS5pbmRpcmVjdGlvbiIgY29tbWFuZE5hbWU9IkludHJvZHVjZSBJbmRpcmVjdGlvbiIgZGVzY3JpcHRpb249IkludHJvZHVjZSBhbiBpbmRpcmVjdGlvbiB0byBlbmNhcHN1bGF0ZSBpbnZvY2F0aW9ucyBvZiBhIHNlbGVjdGVkIGZ1bmN0aW9uIiBjYXRlZ29yeT0iX0FIQlVRU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXNyU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLm9jY3VycmVuY2VzLmluLmZpbGUiIGNvbW1hbmROYW1lPSJTZWFyY2ggQWxsIE9jY3VycmVuY2VzIGluIEZpbGUiIGRlc2NyaXB0aW9uPSJTZWFyY2ggZm9yIGFsbCBvY2N1cnJlbmNlcyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpbiBpdHMgZGVjbGFyaW5nIGZpbGUiIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc3JpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5zcGVjaWZpY19jb250ZW50X2Fzc2lzdC5jb21tYW5kIiBjb21tYW5kTmFtZT0iQ29udGVudCBBc3Npc3QiIGRlc2NyaXB0aW9uPSJBIHBhcmFtZXRlcml6YWJsZSBjb21tYW5kIHRoYXQgaW52b2tlcyBjb250ZW50IGFzc2lzdCB3aXRoIGEgc2luZ2xlIGNvbXBsZXRpb24gcHJvcG9zYWwgY2F0ZWdvcnkiIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBc3J5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5zcGVjaWZpY19jb250ZW50X2Fzc2lzdC5jYXRlZ29yeV9pZCIgbmFtZT0idHlwZSIgb3B0aW9uYWw9ImZhbHNlIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzc0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmNvbW1hbmQubWFya1Rhc2tSZWFkR29Ub05leHRVbnJlYWQiIGNvbW1hbmROYW1lPSJNYXJrIFRhc2sgUmVhZCBhbmQgR28gVG8gTmV4dCBVbnJlYWQgVGFzayIgY2F0ZWdvcnk9Il9BSEJVTGl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzc1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnRlYW0udWkuYXBwbHlQYXRjaCIgY29tbWFuZE5hbWU9IkFwcGx5IFBhdGNoLi4uIiBkZXNjcmlwdGlvbj0iQXBwbHkgYSBwYXRjaCB0byBvbmUgb3IgbW9yZSB3b3Jrc3BhY2UgcHJvamVjdHMuIiBjYXRlZ29yeT0iX0FIQlVRaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXNzaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuYnVpbGRzaGlwLnVpLmNvbW1hbmRzLnJ1bmRlZmF1bHR0YXNrcyIgY29tbWFuZE5hbWU9IlJ1biBHcmFkbGUgRGVmYXVsdCBUYXNrcyIgZGVzY3JpcHRpb249IlJ1bnMgdGhlIGRlZmF1bHQgdGFza3Mgb2YgdGhlIHNlbGVjdGVkIEdyYWRsZSBwcm9qZWN0IiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXNzeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuanB0LmpwYS51aS5nZW5lcmF0ZUVudGl0aWVzIiBjb21tYW5kTmFtZT0iR2VuZXJhdGUgRW50aXRpZXMgZnJvbSBUYWJsZXMuLi4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc3RDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuc2VsZWN0LmxpbmVFbmQiIGNvbW1hbmROYW1lPSJTZWxlY3QgTGluZSBFbmQiIGRlc2NyaXB0aW9uPSJTZWxlY3QgdG8gdGhlIGVuZCBvZiB0aGUgbGluZSBvZiB0ZXh0IiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXN0U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWNsZW1tYS51aS5yZW1vdmVBY3RpdmVTZXNzaW9uIiBjb21tYW5kTmFtZT0iUmVtb3ZlIEFjdGl2ZSBTZXNzaW9uIiBjYXRlZ29yeT0iX0FIQlVNU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXN0aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuY29tbWFuZC5tYXJrVGFza1JlYWQiIGNvbW1hbmROYW1lPSJNYXJrIFRhc2sgUmVhZCIgY2F0ZWdvcnk9Il9BSEJVTGl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzdHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5tb3ZlLmVsZW1lbnQiIGNvbW1hbmROYW1lPSJNb3ZlIC0gUmVmYWN0b3JpbmcgIiBkZXNjcmlwdGlvbj0iTW92ZSB0aGUgc2VsZWN0ZWQgZWxlbWVudCB0byBhIG5ldyBsb2NhdGlvbiIgY2F0ZWdvcnk9Il9BSEJVVHl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzdUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5zZWxlY3Qud29yZFByZXZpb3VzIiBjb21tYW5kTmFtZT0iU2VsZWN0IFByZXZpb3VzIFdvcmQiIGRlc2NyaXB0aW9uPSJTZWxlY3QgdGhlIHByZXZpb3VzIHdvcmQiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc3VTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5pbmRlbnQiIGNvbW1hbmROYW1lPSJJbmRlbnQgTGluZSIgZGVzY3JpcHRpb249IkluZGVudHMgdGhlIGN1cnJlbnQgbGluZSIgY2F0ZWdvcnk9Il9BSEJVTFN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzdWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLnF1aWNrLmZvcm1hdCIgY29tbWFuZE5hbWU9IkZvcm1hdCBFbGVtZW50IiBkZXNjcmlwdGlvbj0iRm9ybWF0IGVuY2xvc2luZyB0ZXh0IGVsZW1lbnQiIGNhdGVnb3J5PSJfQUhCVUxTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc3V5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qc3QucGFnZWRlc2lnbmVyLnZlcnRpY2FsIiBjb21tYW5kTmFtZT0iVmVydGljYWwgTGF5b3V0IiBjYXRlZ29yeT0iX0FIQlVSQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXN2Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuY29tbWFuZHMuU3RlcE92ZXIiIGNvbW1hbmROYW1lPSJTdGVwIE92ZXIiIGRlc2NyaXB0aW9uPSJTdGVwIG92ZXIiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc3ZTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qcHQuanBhLnVpLmFkZFRvUGVyc2lzdGVuY2VVbml0IiBjb21tYW5kTmFtZT0iQWRkIHRvIFBlcnNpc3RlbmNlIFVuaXQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc3ZpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5jb21wYXJlLnNlbGVjdFByZXZpb3VzQ2hhbmdlIiBjb21tYW5kTmFtZT0iU2VsZWN0IFByZXZpb3VzIENoYW5nZSIgZGVzY3JpcHRpb249IlNlbGVjdCBQcmV2aW91cyBDaGFuZ2UiIGNhdGVnb3J5PSJfQUhCVVRDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc3Z5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5maWxlLmV4aXQiIGNvbW1hbmROYW1lPSJFeGl0IiBkZXNjcmlwdGlvbj0iRXhpdCB0aGUgYXBwbGljYXRpb24iIGNhdGVnb3J5PSJfQUhCVU1peFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBc3dDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJtYXlQcm9tcHQiIG5hbWU9Im1heSBwcm9tcHQiLz4KKyAgPC9jb21tYW5kcz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXN3U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLkNvbXBhcmVXaXRoSGVhZCIgY29tbWFuZE5hbWU9IkNvbXBhcmUgd2l0aCBIRUFEIFJldmlzaW9uIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXN3aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLkNvbXBhcmVXaXRoQ29tbWl0IiBjb21tYW5kTmFtZT0iQ29tcGFyZSB3aXRoIENvbW1pdC4uLiIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzd3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuUmVwb3NpdG9yaWVzVmlld09wZW4iIGNvbW1hbmROYW1lPSJPcGVuIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXN4Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuY29tbWFuZC5kZWFjdGl2YXRlQWxsVGFza3MiIGNvbW1hbmROYW1lPSJEZWFjdGl2YXRlIFRhc2siIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc3hTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uU2hvd0hpc3RvcnkiIGNvbW1hbmROYW1lPSJTaG93IGluIEhpc3RvcnkiIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc3hpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5zdXJyb3VuZC53aXRoLnF1aWNrTWVudSIgY29tbWFuZE5hbWU9IlN1cnJvdW5kIFdpdGggUXVpY2sgTWVudSIgZGVzY3JpcHRpb249IlNob3dzIHRoZSBTdXJyb3VuZCBXaXRoIHF1aWNrIG1lbnUiIGNhdGVnb3J5PSJfQUhCVUxTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc3h5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5tMmUuY29yZS51aS5jb21tYW5kLnVwZGF0ZVByb2plY3QiIGNvbW1hbmROYW1lPSJVcGRhdGUgUHJvamVjdCIgZGVzY3JpcHRpb249IlVwZGF0ZSBNYXZlbiBQcm9qZWN0IGNvbmZpZ3VyYXRpb24gYW5kIGRlcGVuZGVuY2llcyIgY2F0ZWdvcnk9Il9BSEJVTXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzeUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnRvb2xzLmxheW91dC5zcHkuY29tbWFuZHMubGF5b3V0U3B5Q29tbWFuZCIgY29tbWFuZE5hbWU9IkxheW91dCBTcHkiIGRlc2NyaXB0aW9uPSJTaG93IHRoZSBMYXlvdXQgU3B5IiBjYXRlZ29yeT0iX0FIQlVXeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXN5U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLlNpbXBsZVB1c2giIGNvbW1hbmROYW1lPSJQdXNoIHRvIFVwc3RyZWFtIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXN5aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0icmVmcmVzaC5zY2hlbWEuZWRpdG9yLmFjdGlvbi5pZCIgY29tbWFuZE5hbWU9IlJlZnJlc2ggZnJvbSBTZXJ2ZXIiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc3l5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5jb21tYW5kcy5hZGRNZW1vcnlNb25pdG9yIiBjb21tYW5kTmFtZT0iQWRkIE1lbW9yeSBCbG9jayIgZGVzY3JpcHRpb249IkFkZCBtZW1vcnkgYmxvY2siIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc3pDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5wZGUudWkub3JnYW5pemVNYW5pZmVzdCIgY29tbWFuZE5hbWU9Ik9yZ2FuaXplIE1hbmlmZXN0cyIgZGVzY3JpcHRpb249IkNsZWFucyB1cCBwbHVnLWluIG1hbmlmZXN0IGZpbGVzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXN6U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkubmF2aWdhdGUuZ290b3R5cGUiIGNvbW1hbmROYW1lPSJHbyB0byBUeXBlIiBkZXNjcmlwdGlvbj0iR28gdG8gVHlwZSIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzeml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC5qdW5pdC5qdW5pdFNob3J0Y3V0LnJ1biIgY29tbWFuZE5hbWU9IlJ1biBKVW5pdCBUZXN0IiBkZXNjcmlwdGlvbj0iUnVuIEpVbml0IFRlc3QiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc3p5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qcHQuanBhLnVpLmNvbnZlcnRKYXZhUXVlcmllcyIgY29tbWFuZE5hbWU9Ik1vdmUgSmF2YSBRdWVyaWVzIHRvIFhNTC4uLiIgY2F0ZWdvcnk9Il9BSEJVT2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzMEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuUHVzaEhlYWRUb0dlcnJpdCIgY29tbWFuZE5hbWU9IlB1c2ggQ3VycmVudCBIZWFkIHRvIEdlcnJpdCIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzMFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQuc2VsZWN0QWxsIiBjb21tYW5kTmFtZT0iU2VsZWN0IEFsbCIgZGVzY3JpcHRpb249IlNlbGVjdCBhbGwiIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBczBpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lY2xlbW1hLnVpLnN3dEJvdEp1bml0U2hvcnRjdXQuY292ZXJhZ2UiIGNvbW1hbmROYW1lPSJDb3ZlcmFnZSBTV1RCb3QgVGVzdCIgZGVzY3JpcHRpb249IkNvdmVyYWdlIFNXVEJvdCBUZXN0IiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXMweXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLnNob3cub3V0bGluZSIgY29tbWFuZE5hbWU9IlF1aWNrIE91dGxpbmUiIGRlc2NyaXB0aW9uPSJTaG93IHRoZSBxdWljayBvdXRsaW5lIGZvciB0aGUgZWRpdG9yIGlucHV0IiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXMxQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuanN0LmpzcC51aS5yZWZhY3Rvci5tb3ZlIiBjb21tYW5kTmFtZT0iTW92ZSIgZGVzY3JpcHRpb249Ik1vdmUgYSBKYXZhIEVsZW1lbnQgdG8gYW5vdGhlciBwYWNrYWdlIiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXMxU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLmdvdG8ubmV4dC5tZW1iZXIiIGNvbW1hbmROYW1lPSJHbyB0byBOZXh0IE1lbWJlciIgZGVzY3JpcHRpb249Ik1vdmUgdGhlIGNhcmV0IHRvIHRoZSBuZXh0IG1lbWJlciBvZiB0aGUgY29tcGlsYXRpb24gdW5pdCIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzMWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnByb2plY3QucmVidWlsZFByb2plY3QiIGNvbW1hbmROYW1lPSJSZWJ1aWxkIFByb2plY3QiIGRlc2NyaXB0aW9uPSJSZWJ1aWxkIHRoZSBzZWxlY3RlZCBwcm9qZWN0cyIgY2F0ZWdvcnk9Il9BSEJVVWl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzMXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRhdGF0b29scy5lbmFibGVtZW50LnN5YmFzZS5hc2Euc2NoZW1hb2JqZWN0ZWRpdG9yLmV4YW1wbGVzLnRhYmxlc2NoZW1hZWRpdG9yLnBhc3RlY29sdW1uIiBjb21tYW5kTmFtZT0iUGFzdGUiIGNhdGVnb3J5PSJfQUhCVVRpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBczJDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5tMmUuY29yZS5wb21GaWxlQWN0aW9uLnJ1biIgY29tbWFuZE5hbWU9IlJ1biBNYXZlbiBCdWlsZCIgZGVzY3JpcHRpb249IlJ1biBNYXZlbiBCdWlsZCIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzMlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVjbGVtbWEudWkubGlua1dpdGhTZWxlY3Rpb24iIGNvbW1hbmROYW1lPSJMaW5rIHdpdGggQ3VycmVudCBTZWxlY3Rpb24iIGNhdGVnb3J5PSJfQUhCVU1TeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBczJpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5tMmUuYWN0aW9ucy5MaWZlQ3ljbGVJbnN0YWxsLnJ1biIgY29tbWFuZE5hbWU9IlJ1biBNYXZlbiBJbnN0YWxsIiBkZXNjcmlwdGlvbj0iUnVuIE1hdmVuIEluc3RhbGwiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBczJ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsZWRpdG9yLkV4ZWN1dGVDdXJyZW50QWN0aW9uIiBjb21tYW5kTmFtZT0iRXhlY3V0ZSBDdXJyZW50IFRleHQiIGNhdGVnb3J5PSJfQUhCVVZpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBczNDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuY29weUxpbmVEb3duIiBjb21tYW5kTmFtZT0iQ29weSBMaW5lcyIgZGVzY3JpcHRpb249IkR1cGxpY2F0ZXMgdGhlIHNlbGVjdGVkIGxpbmVzIGFuZCBtb3ZlcyB0aGUgc2VsZWN0aW9uIHRvIHRoZSBjb3B5IiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXMzU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uub29tcGguc2V0dXAuZWRpdG9yLnBlcmZvcm0iIGNvbW1hbmROYW1lPSJQZXJmb3JtIFNldHVwIFRhc2tzIiBjYXRlZ29yeT0iX0FIQlVSeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXMzaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuaGVscC5pbnN0YWxsYXRpb25EaWFsb2ciIGNvbW1hbmROYW1lPSJJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24iIGRlc2NyaXB0aW9uPSJPcGVuIHRoZSBpbnN0YWxsYXRpb24gZGlhbG9nIiBjYXRlZ29yeT0iX0FIQlVVU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXMzeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkucmVmYWN0b3IuY3JlYXRlLnJlZmFjdG9yaW5nLnNjcmlwdCIgY29tbWFuZE5hbWU9IkNyZWF0ZSBTY3JpcHQiIGRlc2NyaXB0aW9uPSJDcmVhdGUgYSByZWZhY3RvcmluZyBzY3JpcHQgZnJvbSByZWZhY3RvcmluZ3Mgb24gdGhlIGxvY2FsIHdvcmtzcGFjZSIgY2F0ZWdvcnk9Il9BSEJVUVN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzNEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLm9wZW4udHlwZS5oaWVyYXJjaHkiIGNvbW1hbmROYW1lPSJPcGVuIFR5cGUgSGllcmFyY2h5IiBkZXNjcmlwdGlvbj0iT3BlbiBhIHR5cGUgaGllcmFyY2h5IG9uIHRoZSBzZWxlY3RlZCBlbGVtZW50IiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXM0U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuY29tbWFuZHMuVG9nZ2xlU3RlcEZpbHRlcnMiIGNvbW1hbmROYW1lPSJVc2UgU3RlcCBGaWx0ZXJzIiBkZXNjcmlwdGlvbj0iVG9nZ2xlcyBlbmFibGVtZW50IG9mIGRlYnVnIHN0ZXAgZmlsdGVycyIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzNGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5nb3RvLmxpbmVVcCIgY29tbWFuZE5hbWU9IkxpbmUgVXAiIGRlc2NyaXB0aW9uPSJHbyB1cCBvbmUgbGluZSBvZiB0ZXh0IiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXM0eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmdvdG8ud2luZG93U3RhcnQiIGNvbW1hbmROYW1lPSJXaW5kb3cgU3RhcnQiIGRlc2NyaXB0aW9uPSJHbyB0byB0aGUgc3RhcnQgb2YgdGhlIHdpbmRvdyIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzNUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmNmdC5zZXJ2ZXIudWkudXBkYXRlcGFzc3dvcmRjb21tYW5kIiBjb21tYW5kTmFtZT0iVXBkYXRlIFBhc3N3b3JkLi4uIiBkZXNjcmlwdGlvbj0iVXBkYXRlIFBhc3N3b3JkIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXM1U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmNvcnJlY3Rpb24uYWRkQmxvY2suYXNzaXN0IiBjb21tYW5kTmFtZT0iUXVpY2sgQXNzaXN0IC0gUmVwbGFjZSBzdGF0ZW1lbnQgd2l0aCBibG9jayIgZGVzY3JpcHRpb249Ikludm9rZXMgcXVpY2sgYXNzaXN0IGFuZCBzZWxlY3RzICdSZXBsYWNlIHN0YXRlbWVudCB3aXRoIGJsb2NrJyIgY2F0ZWdvcnk9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzNWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLmNvbW1vbnMudWkuY29tbWFuZC5BZGRSZXBvc2l0b3J5IiBjb21tYW5kTmFtZT0iQWRkIFJlcG9zaXRvcnkiIGNhdGVnb3J5PSJfQUhCVVBTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBczV5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuc2VsZWN0LmVuY2xvc2luZyIgY29tbWFuZE5hbWU9IlNlbGVjdCBFbmNsb3NpbmcgRWxlbWVudCIgZGVzY3JpcHRpb249IkV4cGFuZCBzZWxlY3Rpb24gdG8gaW5jbHVkZSBlbmNsb3NpbmcgZWxlbWVudCIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzNkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmFudC51aS5hbnRTaG9ydGN1dC5kZWJ1ZyIgY29tbWFuZE5hbWU9IkRlYnVnIEFudCBCdWlsZCIgZGVzY3JpcHRpb249IkRlYnVnIEFudCBCdWlsZCIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzNlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmNvcnJlY3Rpb24uYWRkTm9uTkxTIiBjb21tYW5kTmFtZT0iUXVpY2sgRml4IC0gQWRkIG5vbi1OTFMgdGFnIiBkZXNjcmlwdGlvbj0iSW52b2tlcyBxdWljayBhc3Npc3QgYW5kIHNlbGVjdHMgJ0FkZCBub24tTkxTIHRhZyciIGNhdGVnb3J5PSJfQUhCVUxTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBczZpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uQXNzdW1lVW5jaGFuZ2VkIiBjb21tYW5kTmFtZT0iQXNzdW1lIFVuY2hhbmdlZCIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzNnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLndpbmRvdy5jbG9zZVBlcnNwZWN0aXZlIiBjb21tYW5kTmFtZT0iQ2xvc2UgUGVyc3BlY3RpdmUiIGRlc2NyaXB0aW9uPSJDbG9zZSB0aGUgY3VycmVudCBwZXJzcGVjdGl2ZSIgY2F0ZWdvcnk9Il9BSEJVTXl4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEFzN0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLndpbmRvdy5jbG9zZVBlcnNwZWN0aXZlLnBlcnNwZWN0aXZlSWQiIG5hbWU9IlBlcnNwZWN0aXZlIElkIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzN1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLmFkZC5ibG9jay5jb21tZW50IiBjb21tYW5kTmFtZT0iQWRkIEJsb2NrIENvbW1lbnQiIGRlc2NyaXB0aW9uPSJFbmNsb3NlIHRoZSBzZWxlY3Rpb24gd2l0aCBhIGJsb2NrIGNvbW1lbnQiIGNhdGVnb3J5PSJfQUhCVUxTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBczdpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLm5leHRTaWJsaW5nIiBjb21tYW5kTmFtZT0iTmV4dCBTaWJsaW5nIiBkZXNjcmlwdGlvbj0iR28gdG8gTmV4dCBTaWJsaW5nIiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXM3eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuZXh0cmFjdC5sb2NhbC52YXJpYWJsZSIgY29tbWFuZE5hbWU9IkV4dHJhY3QgTG9jYWwgVmFyaWFibGUiIGRlc2NyaXB0aW9uPSJFeHRyYWN0cyBhbiBleHByZXNzaW9uIGludG8gYSBuZXcgbG9jYWwgdmFyaWFibGUgYW5kIHVzZXMgdGhlIG5ldyBsb2NhbCB2YXJpYWJsZSIgY2F0ZWdvcnk9Il9BSEJVUVN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzOEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLm5hdmlnYXRlLm9wZW4udHlwZSIgY29tbWFuZE5hbWU9Ik9wZW4gVHlwZSIgZGVzY3JpcHRpb249Ik9wZW4gYSB0eXBlIGluIGEgSmF2YVNjcmlwdCBlZGl0b3IiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBczhTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5jaGVhdHNoZWV0cy5vcGVuQ2hlYXRTaGVldFVSTCIgY29tbWFuZE5hbWU9Ik9wZW4gQ2hlYXQgU2hlZXQgZnJvbSBVUkwiIGRlc2NyaXB0aW9uPSJPcGVuIGEgQ2hlYXQgU2hlZXQgZnJvbSBmaWxlIGF0IGEgc3BlY2lmaWVkIFVSTC4iIGNhdGVnb3J5PSJfQUhCVVVTeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBczhpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJjaGVhdFNoZWV0SWQiIG5hbWU9IklkZW50aWZpZXIiIG9wdGlvbmFsPSJmYWxzZSIvPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXM4eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ibmFtZSIgbmFtZT0iTmFtZSIgb3B0aW9uYWw9ImZhbHNlIi8+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBczlDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJ1cmwiIG5hbWU9IlVSTCIgb3B0aW9uYWw9ImZhbHNlIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzOVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9InJldmVydC5zY2hlbWEuZWRpdG9yLmFjdGlvbi5pZCIgY29tbWFuZE5hbWU9IlJldmVydCBPYmplY3QiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBczlpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpLmxhdW5jaHNob3J0Y3V0LmRlYnVnIiBjb21tYW5kTmFtZT0iRGVidWcgWFNMVCBUcmFuc2Zvcm1hdGlvbiIgZGVzY3JpcHRpb249IkNyZWF0ZSBhIGNvbmZpZ3VyYXRpb24gdG8gZGVidWcgYW4gWFNMVCB0cmFuc2Zvcm1hdGlvbiIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzOXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkudGVhbS5QdXNoQnJhbmNoIiBjb21tYW5kTmFtZT0iUHVzaCBCcmFuY2guLi4iIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBcy1DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5tMmUuY29yZS51aS5jb21tYW5kLmFkZERlcGVuZGVuY3kiIGNvbW1hbmROYW1lPSJBZGQgTWF2ZW4gRGVwZW5kZW5jeSIgZGVzY3JpcHRpb249IkFkZCBNYXZlbiBEZXBlbmRlbmN5IiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXMtU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmNvbW1hbmRzLkV4ZWN1dGUiIGNvbW1hbmROYW1lPSJFeGVjdXRlIiBkZXNjcmlwdGlvbj0iRXZhbHVhdGUgc2VsZWN0ZWQgdGV4dCIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzLWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5hZGQuYmxvY2suY29tbWVudCIgY29tbWFuZE5hbWU9IkFkZCBCbG9jayBDb21tZW50IiBkZXNjcmlwdGlvbj0iRW5jbG9zZSB0aGUgc2VsZWN0aW9uIHdpdGggYSBibG9jayBjb21tZW50IiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXMteXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuanB0LmpwYS5jb3JlLnN5bmNocm9uaXplQ2xhc3NlcyIgY29tbWFuZE5hbWU9IlN5bmNocm9uaXplIENsYXNzIExpc3QiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc19DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC5jaHJvbWl1bS5kZWJ1Zy51aS5icmVha3BvaW50LnByb3BlcnRpZXMiIGNvbW1hbmROYW1lPSJCcmVha3BvaW50IFByb3BlcnRpZXMuLi4iIGRlc2NyaXB0aW9uPSJNb2RpZnkgYnJlYWtwb2ludCBwcm9wZXJ0aWVzIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXNfU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkubmF2aWdhdGUuZ290b3BhY2thZ2UiIGNvbW1hbmROYW1lPSJHbyB0byBGb2xkZXIiIGRlc2NyaXB0aW9uPSJHbyB0byBGb2xkZXIiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc19peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLnJlYWQuYWNjZXNzLmluLnByb2plY3QiIGNvbW1hbmROYW1lPSJSZWFkIEFjY2VzcyBpbiBQcm9qZWN0IiBkZXNjcmlwdGlvbj0iU2VhcmNoIGZvciByZWFkIHJlZmVyZW5jZXMgdG8gdGhlIHNlbGVjdGVkIGVsZW1lbnQgaW4gdGhlIGVuY2xvc2luZyBwcm9qZWN0IiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXNfeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZmlsZS5jbG9zZUFsbFNhdmVkIiBjb21tYW5kTmFtZT0iQ2xvc2UgQWxsIFNhdmVkIiBkZXNjcmlwdGlvbj0iQ2xvc2UgYWxsIHNhdmVkIGVkaXRvcnMiIGNhdGVnb3J5PSJfQUhCVU1peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdEFDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmVyLmxhdW5jaFNob3J0Y3V0LnJ1biIgY29tbWFuZE5hbWU9IlJ1biBvbiBTZXJ2ZXIiIGRlc2NyaXB0aW9uPSJSdW4gdGhlIGN1cnJlbnQgc2VsZWN0aW9uIG9uIGEgc2VydmVyIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRBU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEubW92ZS5pbm5lci50by50b3AubGV2ZWwiIGNvbW1hbmROYW1lPSJDb252ZXJ0IE1lbWJlciBUeXBlIHRvIFRvcCBMZXZlbCIgZGVzY3JpcHRpb249IkNvbnZlcnQgbWVtYmVyIHR5cGUgdG8gdG9wIGxldmVsIiBjYXRlZ29yeT0iX0FIQlVRU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRBaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC5yZWRvIiBjb21tYW5kTmFtZT0iUmVkbyIgZGVzY3JpcHRpb249IlJlZG8gdGhlIGxhc3Qgb3BlcmF0aW9uIiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRBeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZlci5sYXVuY2hTaG9ydGN1dC5kZWJ1ZyIgY29tbWFuZE5hbWU9IkRlYnVnIG9uIFNlcnZlciIgZGVzY3JpcHRpb249IkRlYnVnIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBvbiBhIHNlcnZlciIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0QkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm0yZS5lZGl0b3IuUmVuYW1lQXJ0aWZhY3RBY3Rpb24iIGNvbW1hbmROYW1lPSJSZW5hbWUgTWF2ZW4gQXJ0aWZhY3QuLi4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdEJTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0ZS5zZWxlY3RXb3JraW5nU2V0cyIgY29tbWFuZE5hbWU9IlNlbGVjdCBXb3JraW5nIFNldHMiIGRlc2NyaXB0aW9uPSJTZWxlY3QgdGhlIHdvcmtpbmcgc2V0cyB0aGF0IGFyZSBhcHBsaWNhYmxlIGZvciB0aGlzIHdpbmRvdy4iIGNhdGVnb3J5PSJfQUhCVU15eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdEJpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsZWRpdG9yLkV4ZWN1dGVTUUxBY3Rpb24iIGNvbW1hbmROYW1lPSJFeGVjdXRlIEFsbCIgY2F0ZWdvcnk9Il9BSEJVVml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0Qnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5yZW5hbWUuZWxlbWVudCIgY29tbWFuZE5hbWU9IlJlbmFtZSAtIFJlZmFjdG9yaW5nICIgZGVzY3JpcHRpb249IlJlbmFtZSB0aGUgc2VsZWN0ZWQgZWxlbWVudCIgY2F0ZWdvcnk9Il9BSEJVVHl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0Q0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMudWkucmVtb3ZlLmZpbHRlcnMiIGNvbW1hbmROYW1lPSJSZW1vdmUgJmFtcDtBUEkgUHJvYmxlbSBGaWx0ZXJzLi4uIiBkZXNjcmlwdGlvbj0iUmVtb3ZlIEFQSSBwcm9ibGVtIGZpbHRlcnMgZm9yIHRoaXMgcHJvamVjdCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0Q1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnRtLnRlcm1pbmFsLnZpZXcudWkuY29tbWFuZC5uZXd2aWV3IiBjb21tYW5kTmFtZT0iTmV3IFRlcm1pbmFsIFZpZXciIGNhdGVnb3J5PSJfQUhCVVN5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdENpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuZXh0ZXJuYWxpemUuc3RyaW5ncyIgY29tbWFuZE5hbWU9IkV4dGVybmFsaXplIFN0cmluZ3MiIGRlc2NyaXB0aW9uPSJGaW5kcyBhbGwgc3RyaW5ncyB0aGF0IGFyZSBub3QgZXh0ZXJuYWxpemVkIGFuZCBtb3ZlcyB0aGVtIGludG8gYSBzZXBhcmF0ZSBwcm9wZXJ0eSBmaWxlIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRDeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuY29ycmVjdGlvbi5leHRyYWN0Q29uc3RhbnQuYXNzaXN0IiBjb21tYW5kTmFtZT0iUXVpY2sgQXNzaXN0IC0gRXh0cmFjdCBjb25zdGFudCIgZGVzY3JpcHRpb249Ikludm9rZXMgcXVpY2sgYXNzaXN0IGFuZCBzZWxlY3RzICdFeHRyYWN0IGNvbnN0YW50JyIgY2F0ZWdvcnk9Il9BSEJVTFN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0REN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuaGlzdG9yeS5DaGVycnlQaWNrIiBjb21tYW5kTmFtZT0iQ2hlcnJ5IFBpY2siIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdERTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5maWxlLmNsb3NlIiBjb21tYW5kTmFtZT0iQ2xvc2UiIGRlc2NyaXB0aW9uPSJDbG9zZSB0aGUgYWN0aXZlIGVkaXRvciIgY2F0ZWdvcnk9Il9BSEJVTWl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0RGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5zdXJyb3VuZC53aXRoLnRyeS5jYXRjaCIgY29tbWFuZE5hbWU9IlN1cnJvdW5kIHdpdGggdHJ5L2NhdGNoIEJsb2NrIiBkZXNjcmlwdGlvbj0iU3Vycm91bmQgdGhlIHNlbGVjdGVkIHRleHQgd2l0aCBhIHRyeS9jYXRjaCBibG9jayIgY2F0ZWdvcnk9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0RHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5nb3RvLnByZXZpb3VzLm1lbWJlciIgY29tbWFuZE5hbWU9IkdvIHRvIFByZXZpb3VzIE1lbWJlciIgZGVzY3JpcHRpb249Ik1vdmUgdGhlIGNhcmV0IHRvIHRoZSBwcmV2aW91cyBtZW1iZXIgb2YgdGhlIGNvbXBpbGF0aW9uIHVuaXQiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdEVDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmhpc3RvcnkuUmVzZXQiIGNvbW1hbmROYW1lPSJSZXNldC4uLiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEF0RVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuaGlzdG9yeS5SZXNldE1vZGUiIG5hbWU9IlJlc2V0IG1vZGUiIG9wdGlvbmFsPSJmYWxzZSIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdEVpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0ZS5wcmV2aW91c1N1YlRhYiIgY29tbWFuZE5hbWU9IlByZXZpb3VzIFN1Yi1UYWIiIGRlc2NyaXB0aW9uPSJTd2l0Y2ggdG8gdGhlIHByZXZpb3VzIHN1Yi10YWIiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdEV5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuZ2VuZXJhdGUuaGFzaGNvZGUuZXF1YWxzIiBjb21tYW5kTmFtZT0iR2VuZXJhdGUgaGFzaENvZGUoKSBhbmQgZXF1YWxzKCkiIGRlc2NyaXB0aW9uPSJHZW5lcmF0ZXMgaGFzaENvZGUoKSBhbmQgZXF1YWxzKCkgbWV0aG9kcyBmb3IgdGhlIHR5cGUiIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdEZDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC5qcy5ndWxwLmNvbW1hbmRzLmd1bHBMYXVuY2giIGNvbW1hbmROYW1lPSJSdW4gYXMgR3VscCBUYXNrIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRGU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdGUuc2hvd0luIiBjb21tYW5kTmFtZT0iU2hvdyBJbiIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEF0Rml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRlLnNob3dJbi50YXJnZXRJZCIgbmFtZT0iU2hvdyBJbiBUYXJnZXQgSWQiIG9wdGlvbmFsPSJmYWxzZSIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdEZ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJzZWQudGFibGV0cmVlLmNvbGxhcHNlQWxsIiBjb21tYW5kTmFtZT0iQ29sbGFwc2UgQWxsIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRHQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5SZXBvc2l0b3JpZXNWaWV3UmVtb3ZlUmVtb3RlIiBjb21tYW5kTmFtZT0iRGVsZXRlIFJlbW90ZSIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0R1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmRpYWxvZ3Mub3BlbklucHV0RGlhbG9nIiBjb21tYW5kTmFtZT0iT3BlbiBJbnB1dCBEaWFsb2ciIGRlc2NyaXB0aW9uPSJPcGVuIGFuIElucHV0IERpYWxvZyIgY2F0ZWdvcnk9Il9BSEJVTnl4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEF0R2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9InRpdGxlIiBuYW1lPSJUaXRsZSIvPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXRHeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ibWVzc2FnZSIgbmFtZT0iTWVzc2FnZSIvPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXRIQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iaW5pdGlhbFZhbHVlIiBuYW1lPSJJbml0aWFsIFZhbHVlIi8+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBdEhTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJjYW5jZWxSZXR1cm5zIiBuYW1lPSJSZXR1cm4gVmFsdWUgb24gQ2FuY2VsIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0SGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuUmViYXNlQ3VycmVudCIgY29tbWFuZE5hbWU9IlJlYmFzZSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0SHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5hZGQudW5pbXBsZW1lbnRlZC5jb25zdHJ1Y3RvcnMiIGNvbW1hbmROYW1lPSJHZW5lcmF0ZSBDb25zdHJ1Y3RvcnMgZnJvbSBTdXBlcmNsYXNzIiBkZXNjcmlwdGlvbj0iRXZhbHVhdGUgYW5kIGFkZCBjb25zdHJ1Y3RvcnMgZnJvbSBzdXBlcmNsYXNzIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRJQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuY29tbWFuZC5tYXJrVGFza0NvbXBsZXRlIiBjb21tYW5kTmFtZT0iTWFyayBUYXNrIENvbXBsZXRlIiBjYXRlZ29yeT0iX0FIQlVMaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRJU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LnNlbGVjdC53aW5kb3dTdGFydCIgY29tbWFuZE5hbWU9IlNlbGVjdCBXaW5kb3cgU3RhcnQiIGRlc2NyaXB0aW9uPSJTZWxlY3QgdG8gdGhlIHN0YXJ0IG9mIHRoZSB3aW5kb3ciIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdElpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuc291cmNlLnF1aWNrTWVudSIgY29tbWFuZE5hbWU9IlNob3cgU291cmNlIFF1aWNrIE1lbnUiIGRlc2NyaXB0aW9uPSJTaG93cyB0aGUgc291cmNlIHF1aWNrIG1lbnUiIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdEl5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLmRlY2xhcmF0aW9ucy5pbi5wcm9qZWN0IiBjb21tYW5kTmFtZT0iRGVjbGFyYXRpb24gaW4gUHJvamVjdCIgZGVzY3JpcHRpb249IlNlYXJjaCBmb3IgZGVjbGFyYXRpb25zIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50IGluIHRoZSBlbmNsb3NpbmcgcHJvamVjdCIgY2F0ZWdvcnk9Il9BSEJVVkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0SkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuaGlzdG9yeS5SZXZlcnQiIGNvbW1hbmROYW1lPSJSZXZlcnQgQ29tbWl0IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRKU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5SZXBvc2l0b3JpZXNWaWV3SW1wb3J0UHJvamVjdHMiIGNvbW1hbmROYW1lPSJJbXBvcnQgUHJvamVjdHMuLi4iIGRlc2NyaXB0aW9uPSJJbXBvcnQgb3IgY3JlYXRlIGluIGxvY2FsIEdpdCByZXBvc2l0b3J5IiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRKaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWNsZW1tYS51aS5jb21tYW5kcy5Db3ZlcmFnZUxhc3QiIGNvbW1hbmROYW1lPSJDb3ZlcmFnZSIgZGVzY3JpcHRpb249IkNvdmVyYWdlIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRKeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuY29tcGFyZS5jb3B5QWxsTGVmdFRvUmlnaHQiIGNvbW1hbmROYW1lPSJDb3B5IEFsbCBmcm9tIExlZnQgdG8gUmlnaHQiIGRlc2NyaXB0aW9uPSJDb3B5IEFsbCBDaGFuZ2VzIGZyb20gTGVmdCB0byBSaWdodCIgY2F0ZWdvcnk9Il9BSEJVVEN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0S0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRhdGF0b29scy5lbmFibGVtZW50LnN5YmFzZS5hc2Euc2NoZW1hb2JqZWN0ZWRpdG9yLmV4YW1wbGVzLnRhYmxlc2NoZW1hZWRpdG9yLmN1dGNvbHVtbiIgY29tbWFuZE5hbWU9IkN1dCIgY2F0ZWdvcnk9Il9BSEJVVGl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0S1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LmRlYnVnLnVpLmV2YWx1YXRlLmNvbW1hbmQiIGNvbW1hbmROYW1lPSJFdmFsdWF0ZSIgZGVzY3JpcHRpb249IkV2YWx1YXRlcyB0aGUgc2VsZWN0ZWQgdGV4dCBpbiB0aGUgSmF2YVNjcmlwdCBlZGl0b3IiIGNhdGVnb3J5PSJfQUhCVVNpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdEtpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuc3Vycm91bmQud2l0aC5xdWlja01lbnUiIGNvbW1hbmROYW1lPSJTdXJyb3VuZCBXaXRoIFF1aWNrIE1lbnUiIGRlc2NyaXB0aW9uPSJTaG93cyB0aGUgU3Vycm91bmQgV2l0aCBxdWljayBtZW51IiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRLeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uuc2VhcmNoLnVpLm9wZW5GaWxlU2VhcmNoUGFnZSIgY29tbWFuZE5hbWU9IkZpbGUgU2VhcmNoIiBkZXNjcmlwdGlvbj0iT3BlbiB0aGUgU2VhcmNoIGRpYWxvZydzIGZpbGUgc2VhcmNoIHBhZ2UiIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdExDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLmltcGxlbWVudG9ycy5pbi53b3Jrc3BhY2UiIGNvbW1hbmROYW1lPSJJbXBsZW1lbnRvcnMgaW4gV29ya3NwYWNlIiBkZXNjcmlwdGlvbj0iU2VhcmNoIGZvciBpbXBsZW1lbnRvcnMgb2YgdGhlIHNlbGVjdGVkIGludGVyZmFjZSIgY2F0ZWdvcnk9Il9BSEJVVkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0TFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuUmVwb3NpdG9yaWVzVmlld0FkZFJlcG9zaXRvcnkiIGNvbW1hbmROYW1lPSJBZGQgYSBHaXQgUmVwb3NpdG9yeSIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0TGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5icmVha3BvaW50LnByb3BlcnRpZXMiIGNvbW1hbmROYW1lPSJKYXZhIEJyZWFrcG9pbnQgUHJvcGVydGllcyIgZGVzY3JpcHRpb249IlZpZXcgYW5kIGVkaXQgdGhlIHByb3BlcnRpZXMgZm9yIGEgZ2l2ZW4gSmF2YSBicmVha3BvaW50IiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRMeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLm5hdmlnYXRlLm9wZW4udHlwZS5pbi5oaWVyYXJjaHkiIGNvbW1hbmROYW1lPSJPcGVuIFR5cGUgaW4gSGllcmFyY2h5IiBkZXNjcmlwdGlvbj0iT3BlbiBhIHR5cGUgaW4gdGhlIHR5cGUgaGllcmFyY2h5IHZpZXciIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdE1DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5jb21tYW5kLnRhc2suY2xlYXJBY3RpdmVUaW1lIiBjb21tYW5kTmFtZT0iQ2xlYXIgQWN0aXZlIFRpbWUiIGNhdGVnb3J5PSJfQUhCVUxpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdE1TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5pZGUuY29weUJ1aWxkSWRDb21tYW5kIiBjb21tYW5kTmFtZT0iQ29weSBCdWlsZCBJZCBJbmZvcm1hdGlvbiBUbyBDbGlwYm9hcmQiIGRlc2NyaXB0aW9uPSJDb3BpZXMgdGhlIGJ1aWxkIGlkZW50aWZpY2F0aW9uIGluZm9ybWF0aW9uIHRvIHRoZSBjbGlwYm9hcmQuIiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRNaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuYnVpbGRzaGlwLnVpLmNvbW1hbmRzLnJlZnJlc2hwcm9qZWN0IiBjb21tYW5kTmFtZT0iUmVmcmVzaCBHcmFkbGUgUHJvamVjdCIgZGVzY3JpcHRpb249IlN5bmNocm9uaXplcyB0aGUgR3JhZGxlIGJ1aWxkcyBvZiB0aGUgc2VsZWN0ZWQgcHJvamVjdHMgd2l0aCB0aGUgd29ya3NwYWNlIiBjYXRlZ29yeT0iX0FIQlVLaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRNeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LnNlbGVjdC50ZXh0RW5kIiBjb21tYW5kTmFtZT0iU2VsZWN0IFRleHQgRW5kIiBkZXNjcmlwdGlvbj0iU2VsZWN0IHRvIHRoZSBlbmQgb2YgdGhlIHRleHQiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdE5DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi5jb250ZXh0LnVpLmNvbW1hbmRzLnRhc2suYXR0YWNoQ29udGV4dCIgY29tbWFuZE5hbWU9IkF0dGFjaCBDb250ZXh0IiBjYXRlZ29yeT0iX0FIQlVMQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXROU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC52aWV3cy5YUGF0aFZpZXcucHJvY2Vzc29yLnhwYXRocHJvY2Vzc29yIiBjb21tYW5kTmFtZT0iWFBhdGggUHJvY2Vzc29yIiBjYXRlZ29yeT0iX0FIQlVPeXhRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXROaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuY29tbWFuZHMucmFkaW9TdGF0ZVBhcmFtZXRlciIgbmFtZT0iU3RhdGUiIG9wdGlvbmFsPSJmYWxzZSIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdE55eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuZ290by53b3JkUHJldmlvdXMiIGNvbW1hbmROYW1lPSJQcmV2aW91cyBXb3JkIiBkZXNjcmlwdGlvbj0iR28gdG8gdGhlIHByZXZpb3VzIHdvcmQiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdE9DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS50bS50ZXJtaW5hbC5jb25uZWN0b3IubG9jYWwuY29tbWFuZC5sYXVuY2giIGNvbW1hbmROYW1lPSJPcGVuIExvY2FsIFRlcm1pbmFsIG9uIFNlbGVjdGlvbiIgY2F0ZWdvcnk9Il9BSEJVU3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0T1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLndpbmRvdy5wcmVmZXJlbmNlcyIgY29tbWFuZE5hbWU9IlByZWZlcmVuY2VzIiBkZXNjcmlwdGlvbj0iT3BlbiB0aGUgcHJlZmVyZW5jZXMgZGlhbG9nIiBjYXRlZ29yeT0iX0FIQlVNeXhRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXRPaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0icHJlZmVyZW5jZVBhZ2VJZCIgbmFtZT0iUHJlZmVyZW5jZSBQYWdlIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0T3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm0yZS5zb3VyY2Vsb29rdXAudWkub3BlblNvdXJjZUxvb2t1cEluZm9EaWFsb2ciIGNvbW1hbmROYW1lPSJTb3VyY2UgTG9va3VwIEluZm8iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdFBDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmNvbW1pdC5TcXVhc2giIGNvbW1hbmROYW1lPSJTcXVhc2ggQ29tbWl0cyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0UFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQuY29weSIgY29tbWFuZE5hbWU9IkNvcHkiIGRlc2NyaXB0aW9uPSJDb3B5IHRoZSBzZWxlY3Rpb24gdG8gdGhlIGNsaXBib2FyZCIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0UGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLndpbmRvdy5uZXh0VmlldyIgY29tbWFuZE5hbWU9Ik5leHQgVmlldyIgZGVzY3JpcHRpb249IlN3aXRjaCB0byB0aGUgbmV4dCB2aWV3IiBjYXRlZ29yeT0iX0FIQlVNeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRQeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC5yZXZlcnRUb1NhdmVkIiBjb21tYW5kTmFtZT0iUmV2ZXJ0IHRvIFNhdmVkIiBkZXNjcmlwdGlvbj0iUmV2ZXJ0IHRvIHRoZSBsYXN0IHNhdmVkIHN0YXRlIiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRRQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5OZXdQcm9wZXJ0eVNoZWV0Q29tbWFuZCIgY29tbWFuZE5hbWU9IlByb3BlcnRpZXMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdFFTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5jb21tYW5kcy5SdW5Ub0xpbmUiIGNvbW1hbmROYW1lPSJSdW4gdG8gTGluZSIgZGVzY3JpcHRpb249IlJlc3VtZSBhbmQgYnJlYWsgd2hlbiBleGVjdXRpb24gcmVhY2hlcyB0aGUgY3VycmVudCBsaW5lIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRRaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkubmF2aWdhdGUuamF2YS5vcGVuLnN0cnVjdHVyZSIgY29tbWFuZE5hbWU9Ik9wZW4gU3RydWN0dXJlIiBkZXNjcmlwdGlvbj0iU2hvdyB0aGUgc3RydWN0dXJlIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50IiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRReXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucGRlLnVpLkVxdWlub3hMYXVuY2hTaG9ydGN1dC5kZWJ1ZyIgY29tbWFuZE5hbWU9IkRlYnVnIE9TR2kgRnJhbWV3b3JrIiBkZXNjcmlwdGlvbj0iRGVidWcgT1NHaSBGcmFtZXdvcmsiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdFJDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLlJlcG9zaXRvcmllc1ZpZXdQYXN0ZSIgY29tbWFuZE5hbWU9IlBhc3RlIFJlcG9zaXRvcnkgUGF0aCBvciBVUkkiIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdFJTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuc2hvd0NoYW5nZVJ1bGVySW5mb3JtYXRpb24iIGNvbW1hbmROYW1lPSJTaG93IFF1aWNrIERpZmYgUnVsZXIgVG9vbHRpcCIgZGVzY3JpcHRpb249IkRpc3BsYXlzIHF1aWNrIGRpZmYgb3IgcmV2aXNpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBjYXJldCBsaW5lIGluIGEgZm9jdXNlZCBob3ZlciIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0Uml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC51cHBlckNhc2UiIGNvbW1hbmROYW1lPSJUbyBVcHBlciBDYXNlIiBkZXNjcmlwdGlvbj0iQ2hhbmdlcyB0aGUgc2VsZWN0aW9uIHRvIHVwcGVyIGNhc2UiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdFJ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uQ29uZmlndXJlRmV0Y2giIGNvbW1hbmROYW1lPSJDb25maWd1cmUgVXBzdHJlYW0gRmV0Y2giIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdFNDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0ZS5nb0ludG8iIGNvbW1hbmROYW1lPSJHbyBJbnRvIiBkZXNjcmlwdGlvbj0iTmF2aWdhdGUgaW50byB0aGUgc2VsZWN0ZWQgaXRlbSIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0U1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuQ29uZmlndXJlVXBzdHJlYW1QdXNoIiBjb21tYW5kTmFtZT0iQ29uZmlndXJlIFVwc3RyZWFtIFB1c2giIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdFNpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5jb21tYW5kcy5PcGVuUnVuQ29uZmlndXJhdGlvbnMiIGNvbW1hbmROYW1lPSJSdW4uLi4iIGRlc2NyaXB0aW9uPSJPcGVuIHJ1biBsYXVuY2ggY29uZmlndXJhdGlvbiBkaWFsb2ciIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdFN5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuc2VsZWN0LndpbmRvd0VuZCIgY29tbWFuZE5hbWU9IlNlbGVjdCBXaW5kb3cgRW5kIiBkZXNjcmlwdGlvbj0iU2VsZWN0IHRvIHRoZSBlbmQgb2YgdGhlIHdpbmRvdyIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0VEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVjbGVtbWEudWkucmVzZXRPbkR1bXAiIGNvbW1hbmROYW1lPSJSZXNldCBvbiBEdW1wIiBjYXRlZ29yeT0iX0FIQlVNU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRUU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkud2luZG93Lm1pbmltaXplUGFydCIgY29tbWFuZE5hbWU9Ik1pbmltaXplIEFjdGl2ZSBWaWV3IG9yIEVkaXRvciIgZGVzY3JpcHRpb249Ik1pbmltaXplcyB0aGUgYWN0aXZlIHZpZXcgb3IgZWRpdG9yIiBjYXRlZ29yeT0iX0FIQlVNeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRUaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudG0udGVybWluYWwuY29tbWFuZDEiIGNvbW1hbmROYW1lPSJUZXJtaW5hbCB2aWV3IGluc2VydCIgY2F0ZWdvcnk9Il9BSEJVVXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0VHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkudGVhbS5VbnRyYWNrIiBjb21tYW5kTmFtZT0iVW50cmFjayIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0VUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuYWRkLmJsb2NrLmNvbW1lbnQiIGNvbW1hbmROYW1lPSJBZGQgQmxvY2sgQ29tbWVudCIgZGVzY3JpcHRpb249IkFkZCBCbG9jayBDb21tZW50IiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRVU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkud2luZG93LnNob3dTeXN0ZW1NZW51IiBjb21tYW5kTmFtZT0iU2hvdyBTeXN0ZW0gTWVudSIgZGVzY3JpcHRpb249IlNob3cgdGhlIHN5c3RlbSBtZW51IiBjYXRlZ29yeT0iX0FIQlVNeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRVaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmNvbW1hbmRzLkFsbEluc3RhbmNlcyIgY29tbWFuZE5hbWU9IkFsbCBJbnN0YW5jZXMiIGRlc2NyaXB0aW9uPSJWaWV3IGFsbCBpbnN0YW5jZXMgb2YgdGhlIHNlbGVjdGVkIHR5cGUgbG9hZGVkIGluIHRoZSB0YXJnZXQgVk0iIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdFV5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmhpc3RvcnkuT3BlbkluQ29tbWl0Vmlld2VyQ29tbWFuZCIgY29tbWFuZE5hbWU9Ik9wZW4gaW4gQ29tbWl0IFZpZXdlciIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0VkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS50b2dnbGUuY29tbWVudCIgY29tbWFuZE5hbWU9IlRvZ2dsZSBDb21tZW50IiBkZXNjcmlwdGlvbj0iVG9nZ2xlIGNvbW1lbnQgdGhlIHNlbGVjdGVkIGxpbmVzIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRWU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubTJlLmFjdGlvbnMuTGlmZUN5Y2xlVGVzdC5ydW4iIGNvbW1hbmROYW1lPSJSdW4gTWF2ZW4gVGVzdCIgZGVzY3JpcHRpb249IlJ1biBNYXZlbiBUZXN0IiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRWaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS5sYXVuY2hzaG9ydGN1dC5ydW4iIGNvbW1hbmROYW1lPSJSdW4gWFNMVCBUcmFuc2Zvcm1hdGlvbiIgZGVzY3JpcHRpb249IkNyZWF0ZSBhIGNvbmZpZ3VyYXRpb24gdG8gZGVidWcgYW4gWFNMVCB0cmFuc2Zvcm1hdGlvbiIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0Vnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmNmdC5zZXJ2ZXIudWkuaW50ZXJuYWwuYWN0aW9ucy5yZW1hcHRvcHJvamVjdGNvbW1hbmQiIGNvbW1hbmROYW1lPSJMaW5rIHdpdGggUHJvamVjdCIgZGVzY3JpcHRpb249IkxpbmsgdGhlIGNsb3VkIGFwcGxpY2F0aW9uIHdpdGggdGhlIHByb2plY3QuIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRXQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkud2luZG93LnNhdmVQZXJzcGVjdGl2ZSIgY29tbWFuZE5hbWU9IlNhdmUgUGVyc3BlY3RpdmUgQXMiIGRlc2NyaXB0aW9uPSJTYXZlIHRoZSBjdXJyZW50IHBlcnNwZWN0aXZlIiBjYXRlZ29yeT0iX0FIQlVNeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRXU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEudXNlLnN1cGVydHlwZSIgY29tbWFuZE5hbWU9IlVzZSBTdXBlcnR5cGUgV2hlcmUgUG9zc2libGUiIGRlc2NyaXB0aW9uPSJDaGFuZ2Ugb2NjdXJyZW5jZXMgb2YgYSB0eXBlIHRvIHVzZSBhIHN1cGVydHlwZSBpbnN0ZWFkIiBjYXRlZ29yeT0iX0FIQlVRU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRXaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmNvcnJlY3Rpb24uYXNzaWduUGFyYW1Ub0ZpZWxkLmFzc2lzdCIgY29tbWFuZE5hbWU9IlF1aWNrIEFzc2lzdCAtIEFzc2lnbiBwYXJhbWV0ZXIgdG8gZmllbGQiIGRlc2NyaXB0aW9uPSJJbnZva2VzIHF1aWNrIGFzc2lzdCBhbmQgc2VsZWN0cyAnQXNzaWduIHBhcmFtZXRlciB0byBmaWVsZCciIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdFd5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmNvbW1hbmQuY29uZmlndXJlVHJhY2UiIGNvbW1hbmROYW1lPSJDb25maWd1cmUgR2l0IERlYnVnIFRyYWNlIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRYQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLm1vdmUuaW5uZXIudG8udG9wLmxldmVsIiBjb21tYW5kTmFtZT0iTW92ZSBUeXBlIHRvIE5ldyBGaWxlIiBkZXNjcmlwdGlvbj0iTW92ZSBUeXBlIHRvIE5ldyBGaWxlIiBjYXRlZ29yeT0iX0FIQlVUeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRYU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdGUubGlua1dpdGhFZGl0b3IiIGNvbW1hbmROYW1lPSJUb2dnbGUgTGluayB3aXRoIEVkaXRvciIgZGVzY3JpcHRpb249IlRvZ2dsZXMgbGlua2luZyBvZiBhIHZpZXcncyBzZWxlY3Rpb24gd2l0aCB0aGUgYWN0aXZlIGVkaXRvcidzIHNlbGVjdGlvbiIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0WGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkub3Blbi5maWxlLmZyb20uc291cmNlIiBjb21tYW5kTmFtZT0iT3BlbiBTZWxlY3Rpb24iIGRlc2NyaXB0aW9uPSJPcGVuIGFuIGVkaXRvciBvbiB0aGUgc2VsZWN0ZWQgbGluayIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0WHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5vcGVuLmhpZXJhcmNoeSIgY29tbWFuZE5hbWU9IlF1aWNrIEhpZXJhcmNoeSIgZGVzY3JpcHRpb249IlNob3cgdGhlIHF1aWNrIGhpZXJhcmNoeSBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudCIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0WUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC50b2dnbGVCbG9ja1NlbGVjdGlvbk1vZGUiIGNvbW1hbmROYW1lPSJUb2dnbGUgQmxvY2sgU2VsZWN0aW9uIiBkZXNjcmlwdGlvbj0iVG9nZ2xlIGJsb2NrIC8gY29sdW1uIHNlbGVjdGlvbiBpbiB0aGUgY3VycmVudCB0ZXh0IGVkaXRvciIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0WVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuZ290by5tYXRjaGluZy5icmFja2V0IiBjb21tYW5kTmFtZT0iTWF0Y2hpbmcgQ2hhcmFjdGVyIiBkZXNjcmlwdGlvbj0iR28gdG8gTWF0Y2hpbmcgQ2hhcmFjdGVyIiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRZaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLnJlZmFjdG9yLnF1aWNrTWVudSIgY29tbWFuZE5hbWU9IlNob3cgUmVmYWN0b3IgUXVpY2sgTWVudSIgZGVzY3JpcHRpb249IlNob3dzIHRoZSByZWZhY3RvciBxdWljayBtZW51IiBjYXRlZ29yeT0iX0FIQlVUeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRZeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLkNvbXBhcmVJbmRleFdpdGhIZWFkIiBjb21tYW5kTmFtZT0iQ29tcGFyZSBGaWxlIGluIEluZGV4IHdpdGggSEVBRCBSZXZpc2lvbiIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0WkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5vdmVycmlkZS5tZXRob2RzIiBjb21tYW5kTmFtZT0iT3ZlcnJpZGUvSW1wbGVtZW50IE1ldGhvZHMiIGRlc2NyaXB0aW9uPSJPdmVycmlkZSBvciBpbXBsZW1lbnQgbWV0aG9kcyBmcm9tIHN1cGVyIHR5cGVzIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRaU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLnJlZmVyZW5jZXMuaW4ud29ya3NwYWNlIiBjb21tYW5kTmFtZT0iUmVmZXJlbmNlcyBpbiBXb3Jrc3BhY2UiIGRlc2NyaXB0aW9uPSJTZWFyY2ggZm9yIHJlZmVyZW5jZXMgdG8gdGhlIHNlbGVjdGVkIGVsZW1lbnQgaW4gdGhlIHdvcmtzcGFjZSIgY2F0ZWdvcnk9Il9BSEJVVkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0Wml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpwdC5qYXhiLmVjbGlwc2VsaW5rLnVpLmNvbW1hbmQuYWRkRWNsaXBzZUxpbmtKYXhiUHJvcGVydHkiIGNvbW1hbmROYW1lPSJBZGQgRWNsaXBzZUxpbmsgSkFYQiBwcm9wZXJ0eSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0Wnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLndpa2l0ZXh0LnVpLmNvbnZlcnRUb0RvY2Jvb2tDb21tYW5kIiBjb21tYW5kTmFtZT0iR2VuZXJhdGUgRG9jYm9vayIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0YUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnBhcnQubmV4dFBhZ2UiIGNvbW1hbmROYW1lPSJOZXh0IFBhZ2UiIGRlc2NyaXB0aW9uPSJTd2l0Y2ggdG8gdGhlIG5leHQgcGFnZSIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0YVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5jaGFuZ2UudHlwZSIgY29tbWFuZE5hbWU9IkdlbmVyYWxpemUgRGVjbGFyZWQgVHlwZSIgZGVzY3JpcHRpb249IkNoYW5nZSB0aGUgZGVjbGFyYXRpb24gb2YgYSBzZWxlY3RlZCB2YXJpYWJsZSB0byBhIG1vcmUgZ2VuZXJhbCB0eXBlIGNvbnNpc3RlbnQgd2l0aCB1c2FnZSIgY2F0ZWdvcnk9Il9BSEJVVHl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0YWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuaGlzdG9yeS5DcmVhdGVCcmFuY2giIGNvbW1hbmROYW1lPSJDcmVhdGUgQnJhbmNoIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRheXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuZm9sZGluZy5jb2xsYXBzZUNvbW1lbnRzIiBjb21tYW5kTmFtZT0iQ29sbGFwc2UgQ29tbWVudHMiIGRlc2NyaXB0aW9uPSJDb2xsYXBzZSBhbGwgY29tbWVudHMiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdGJDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLlJlcG9zaXRvcmllc1ZpZXdDbG9uZSIgY29tbWFuZE5hbWU9IkNsb25lIGEgR2l0IFJlcG9zaXRvcnkiIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdGJTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuY2xlYXIubWFyayIgY29tbWFuZE5hbWU9IkNsZWFyIE1hcmsiIGRlc2NyaXB0aW9uPSJDbGVhciB0aGUgbWFyayIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0Yml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkucXVpY2tfb3V0bGluZSIgY29tbWFuZE5hbWU9IlF1aWNrIE91dGxpbmUiIGRlc2NyaXB0aW9uPSJTaG93IHRoZSBxdWljayBvdXRsaW5lIGZvciB0aGUgZWRpdG9yIGlucHV0IiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRieXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuaW5saW5lIiBjb21tYW5kTmFtZT0iSW5saW5lIiBkZXNjcmlwdGlvbj0iSW5saW5lIGEgY29uc3RhbnQsIGxvY2FsIHZhcmlhYmxlIG9yIGZ1bmN0aW9uIiBjYXRlZ29yeT0iX0FIQlVRU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRjQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5SZXBvc2l0b3JpZXNWaWV3UmVtb3ZlIiBjb21tYW5kTmFtZT0iUmVtb3ZlIFJlcG9zaXRvcnkiIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdGNTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5QYWNrYWdlc1ZpZXciIGNvbW1hbmROYW1lPSJKYXZhU2NyaXB0IEZvbGRlcnMiIGRlc2NyaXB0aW9uPSJTaG93IHRoZSBGb2xkZXJzIHZpZXciIGNhdGVnb3J5PSJfQUhCVVF5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdGNpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5hbnQudWkub3BlbkV4dGVybmFsRG9jIiBjb21tYW5kTmFtZT0iT3BlbiBFeHRlcm5hbCBEb2N1bWVudGF0aW9uIiBkZXNjcmlwdGlvbj0iT3BlbiB0aGUgRXh0ZXJuYWwgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGN1cnJlbnQgdGFzayBpbiB0aGUgQW50IGVkaXRvciIgY2F0ZWdvcnk9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0Y3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuUmVwb3NpdG9yaWVzVmlld0NyZWF0ZVJlcG9zaXRvcnkiIGNvbW1hbmROYW1lPSJDcmVhdGUgYSBSZXBvc2l0b3J5IiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRkQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLnNlYXJjaC53cml0ZS5hY2Nlc3MuaW4uaGllcmFyY2h5IiBjb21tYW5kTmFtZT0iV3JpdGUgQWNjZXNzIGluIEhpZXJhcmNoeSIgZGVzY3JpcHRpb249IlNlYXJjaCBmb3Igd3JpdGUgcmVmZXJlbmNlcyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpbiBpdHMgaGllcmFyY2h5IiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRkU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLlB1c2hUYWdzIiBjb21tYW5kTmFtZT0iUHVzaCBUYWdzLi4uIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRkaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5Db250aW51ZVJlYmFzZSIgY29tbWFuZE5hbWU9IkNvbnRpbnVlIFJlYmFzZSIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0ZHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmNmdC5zZXJ2ZXIudWkuZGlzY29ubmVjdGNvbW1hbmQiIGNvbW1hbmROYW1lPSJEaXNjb25uZWN0IiBkZXNjcmlwdGlvbj0iRGlzY29ubmVjdCBTZXJ2ZXIiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdGVDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5oZWxwLnVpLmNsb3NlVHJheSIgY29tbWFuZE5hbWU9IkNsb3NlIFVzZXIgQXNzaXN0YW5jZSBUcmF5IiBkZXNjcmlwdGlvbj0iQ2xvc2UgdGhlIHVzZXIgYXNzaXN0YW5jZSB0cmF5IGNvbnRhaW5pbmcgY29udGV4dCBoZWxwIGluZm9ybWF0aW9uIGFuZCBjaGVhdCBzaGVldHMuIiBjYXRlZ29yeT0iX0FIQlVVU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRlU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5oaXN0b3J5LkNyZWF0ZVBhdGNoIiBjb21tYW5kTmFtZT0iQ3JlYXRlIFBhdGNoIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRlaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuY29tbWFuZHMuUmVzdW1lIiBjb21tYW5kTmFtZT0iUmVzdW1lIiBkZXNjcmlwdGlvbj0iUmVzdW1lIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRleXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEudG9nZ2xlLmNvbW1lbnQiIGNvbW1hbmROYW1lPSJUb2dnbGUgQ29tbWVudCIgZGVzY3JpcHRpb249IlRvZ2dsZSBjb21tZW50IHRoZSBzZWxlY3RlZCBsaW5lcyIgY2F0ZWdvcnk9Il9BSEJVTFN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0ZkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLmNvbnRleHQudWkuY29tbWFuZHMub3Blbi5jb250ZXh0LmRpYWxvZyIgY29tbWFuZE5hbWU9IlNob3cgQ29udGV4dCBRdWljayBWaWV3IiBkZXNjcmlwdGlvbj0iU2hvdyBDb250ZXh0IFF1aWNrIFZpZXciIGNhdGVnb3J5PSJfQUhCVUxDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdGZTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5maWxlLnJlc3RhcnRXb3JrYmVuY2giIGNvbW1hbmROYW1lPSJSZXN0YXJ0IiBkZXNjcmlwdGlvbj0iUmVzdGFydCB0aGUgd29ya2JlbmNoIiBjYXRlZ29yeT0iX0FIQlVNaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRmaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLnJlYWQuYWNjZXNzLmluLnByb2plY3QiIGNvbW1hbmROYW1lPSJSZWFkIEFjY2VzcyBpbiBQcm9qZWN0IiBkZXNjcmlwdGlvbj0iU2VhcmNoIGZvciByZWFkIHJlZmVyZW5jZXMgdG8gdGhlIHNlbGVjdGVkIGVsZW1lbnQgaW4gdGhlIGVuY2xvc2luZyBwcm9qZWN0IiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRmeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLkNvbXBhcmVXaXRoUmVmIiBjb21tYW5kTmFtZT0iQ29tcGFyZSB3aXRoIEJyYW5jaCwgVGFnIG9yIFJlZmVyZW5jZS4uLiIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0Z0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLmNvbnRleHQudWkuY29tbWFuZHMuYXR0YWNobWVudC5yZXRyaWV2ZUNvbnRleHQiIGNvbW1hbmROYW1lPSJSZXRyaWV2ZSBDb250ZXh0IEF0dGFjaG1lbnQiIGNhdGVnb3J5PSJfQUhCVUxDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdGdTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQudG9nZ2xlT3ZlcndyaXRlIiBjb21tYW5kTmFtZT0iVG9nZ2xlIE92ZXJ3cml0ZSIgZGVzY3JpcHRpb249IlRvZ2dsZSBvdmVyd3JpdGUgbW9kZSIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0Z2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5wdWxsLnVwIiBjb21tYW5kTmFtZT0iUHVsbCBVcCIgZGVzY3JpcHRpb249Ik1vdmUgbWVtYmVycyB0byBhIHN1cGVyY2xhc3MiIGNhdGVnb3J5PSJfQUhCVVR5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdGd5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuZm9sZGluZy5jb2xsYXBzZV9hbGwiIGNvbW1hbmROYW1lPSJDb2xsYXBzZSBBbGwiIGRlc2NyaXB0aW9uPSJDb2xsYXBzZXMgYWxsIGZvbGRlZCByZWdpb25zIiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRoQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuc3Vycm91bmQud2l0aC50cnkuY2F0Y2giIGNvbW1hbmROYW1lPSJTdXJyb3VuZCB3aXRoIHRyeS9jYXRjaCBCbG9jayIgZGVzY3JpcHRpb249IlN1cnJvdW5kIHRoZSBzZWxlY3RlZCB0ZXh0IHdpdGggYSB0cnkvY2F0Y2ggYmxvY2siIGNhdGVnb3J5PSJfQUhCVUxTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdGhTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5jb21tYW5kLlJlZnJlc2hSZXBvc2l0b3J5VGFza3MiIGNvbW1hbmROYW1lPSJTeW5jaHJvbml6ZSBDaGFuZ2VkIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRoaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuY29tbWFuZHMuVG9nZ2xlV2F0Y2hwb2ludCIgY29tbWFuZE5hbWU9IlRvZ2dsZSBXYXRjaHBvaW50IiBkZXNjcmlwdGlvbj0iQ3JlYXRlcyBvciByZW1vdmVzIGEgd2F0Y2hwb2ludCIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0aHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVxdWlub3gucDIudWkuZGlzY292ZXJ5LmNvbW1hbmRzLlNob3dSZXBvc2l0b3J5Q2F0YWxvZyIgY29tbWFuZE5hbWU9IlNob3cgUmVwb3NpdG9yeSBDYXRhbG9nIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXRpQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZXF1aW5veC5wMi51aS5kaXNjb3ZlcnkuY29tbWFuZHMuUmVwb3NpdG9yeVBhcmFtZXRlciIgbmFtZT0iUDIgUmVwb3NpdG9yeSBVUkkiLz4KKyAgPC9jb21tYW5kcz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRpU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuY29tbWFuZHMuY2xvc2VSZW5kZXJpbmciIGNvbW1hbmROYW1lPSJDbG9zZSBSZW5kZXJpbmciIGRlc2NyaXB0aW9uPSJDbG9zZSB0aGUgc2VsZWN0ZWQgcmVuZGVyaW5nLiIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0aWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuUmVwb3NpdG9yaWVzVmlld09wZW5JbkVkaXRvciIgY29tbWFuZE5hbWU9Ik9wZW4gaW4gRWRpdG9yIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRpeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuaW50cm9kdWNlLnBhcmFtZXRlciIgY29tbWFuZE5hbWU9IkludHJvZHVjZSBQYXJhbWV0ZXIiIGRlc2NyaXB0aW9uPSJJbnRyb2R1Y2UgYSBuZXcgZnVuY3Rpb24gcGFyYW1ldGVyIGJhc2VkIG9uIHRoZSBzZWxlY3RlZCBleHByZXNzaW9uIiBjYXRlZ29yeT0iX0FIQlVRU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRqQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLnN1Ym1vZHVsZS51cGRhdGUiIGNvbW1hbmROYW1lPSJVcGRhdGUgU3VibW9kdWxlIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRqU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuY29tbWFuZHMuUHJvZmlsZUxhc3QiIGNvbW1hbmROYW1lPSJQcm9maWxlIiBkZXNjcmlwdGlvbj0iTGF1bmNoIGluIHByb2ZpbGUgbW9kZSIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0aml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkudGVhbS5QdWxsIiBjb21tYW5kTmFtZT0iUHVsbCIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0anl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLlR5cGVIaWVyYXJjaHkiIGNvbW1hbmROYW1lPSJKYXZhU2NyaXB0IFR5cGUgSGllcmFyY2h5IiBkZXNjcmlwdGlvbj0iU2hvdyB0aGUgVHlwZSBIaWVyYXJjaHkgdmlldyIgY2F0ZWdvcnk9Il9BSEJVUXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0a0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5zd2FwLm1hcmsiIGNvbW1hbmROYW1lPSJTd2FwIE1hcmsiIGRlc2NyaXB0aW9uPSJTd2FwIHRoZSBtYXJrIHdpdGggdGhlIGN1cnNvciBwb3NpdGlvbiIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0a1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5jb3JyZWN0aW9uLmFkZENhc3QiIGNvbW1hbmROYW1lPSJRdWljayBGaXggLSBBZGQgY2FzdCIgZGVzY3JpcHRpb249Ikludm9rZXMgcXVpY2sgYXNzaXN0IGFuZCBzZWxlY3RzICdBZGQgY2FzdCciIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdGtpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi5jb250ZXh0LnVpLmNvbW1hbmRzLmludGVyZXN0LmluY3JlbWVudCIgY29tbWFuZE5hbWU9Ik1ha2UgTGFuZG1hcmsiIGRlc2NyaXB0aW9uPSJNYWtlIExhbmRtYXJrIiBjYXRlZ29yeT0iX0FIQlVMQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRreXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuYWRkLmphdmFkb2MuY29tbWVudCIgY29tbWFuZE5hbWU9IkFkZCBKU0RvYyBDb21tZW50IiBkZXNjcmlwdGlvbj0iQWRkIGEgSlNEb2MgY29tbWVudCBzdHViIHRvIHRoZSBtZW1iZXIgZWxlbWVudCIgY2F0ZWdvcnk9Il9BSEJVTFN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0bEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLm9wZW4uaGllcmFyY2h5IiBjb21tYW5kTmFtZT0iUXVpY2sgSGllcmFyY2h5IiBkZXNjcmlwdGlvbj0iU2hvdyB0aGUgcXVpY2sgaGllcmFyY2h5IG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50IiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRsU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5SZXBvc2l0b3JpZXNWaWV3Q29uZmlndXJlRmV0Y2giIGNvbW1hbmROYW1lPSJDb25maWd1cmUgRmV0Y2guLi4iIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdGxpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLnVpLmNvbnZlcnQuamF2YWRvY3MiIGNvbW1hbmROYW1lPSJDb252ZXJ0IEFQSSBUb29scyAmYW1wO0phdmFkb2MgVGFncy4uLiIgZGVzY3JpcHRpb249IlN0YXJ0cyBhIHdpemFyZCB0aGF0IHdpbGwgYWxsb3cgeW91IHRvIGNvbnZlcnQgZXhpc3RpbmcgSmF2YWRvYyB0YWdzIHRvIGFubm90YXRpb25zIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRseXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLm9wZW4uZXh0ZXJuYWwuamF2YWRvYyIgY29tbWFuZE5hbWU9Ik9wZW4gQXR0YWNoZWQgSmF2YWRvYyIgZGVzY3JpcHRpb249Ik9wZW4gdGhlIGF0dGFjaGVkIEphdmFkb2Mgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnQgaW4gYSBicm93c2VyIiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRtQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucGRlLnVpLkVxdWlub3hMYXVuY2hTaG9ydGN1dC5ydW4iIGNvbW1hbmROYW1lPSJSdW4gT1NHaSBGcmFtZXdvcmsiIGRlc2NyaXB0aW9uPSJSdW4gT1NHaSBGcmFtZXdvcmsiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdG1TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuc2hpZnRMZWZ0IiBjb21tYW5kTmFtZT0iU2hpZnQgTGVmdCIgZGVzY3JpcHRpb249IlNoaWZ0IGEgYmxvY2sgb2YgdGV4dCB0byB0aGUgbGVmdCIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0bWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuc3RydWN0dXJlLnNlbGVjdC5uZXh0IiBjb21tYW5kTmFtZT0iU2VsZWN0IE5leHQgRWxlbWVudCIgZGVzY3JpcHRpb249IkV4cGFuZCBzZWxlY3Rpb24gdG8gaW5jbHVkZSBuZXh0IHNpYmxpbmciIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdG15eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uUHVzaCIgY29tbWFuZE5hbWU9IlB1c2guLi4iIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdG5DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuY29tbWFuZHMuQWRkQ2xhc3NQcmVwYXJlQnJlYWtwb2ludCIgY29tbWFuZE5hbWU9IkFkZCBDbGFzcyBMb2FkIEJyZWFrcG9pbnQiIGRlc2NyaXB0aW9uPSJBZGQgYSBjbGFzcyBsb2FkIGJyZWFrcG9pbnQiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdG5TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qcHQuanBhLnVpLmNvbnZlcnRKYXZhUHJvamVjdFRvSnBhIiBjb21tYW5kTmFtZT0iQ29udmVydCB0byBKUEEgUHJvamVjdC4uLiIgY2F0ZWdvcnk9Il9BSEJVTWl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0bml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVtZi5jb2RlZ2VuLmVjb3JlLnVpLkdlbmVyYXRlIiBjb21tYW5kTmFtZT0iR2VuZXJhdGUgQ29kZSIgZGVzY3JpcHRpb249IkdlbmVyYXRlIGNvZGUgZm9yIHRoZSBFTUYgbW9kZWxzIGluIHRoZSB3b3Jrc3BhY2UiIGNhdGVnb3J5PSJfQUhCVVVDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdG55eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5nZW5lcmF0ZS5qYXZhZG9jIiBjb21tYW5kTmFtZT0iR2VuZXJhdGUgSlNEb2MiIGRlc2NyaXB0aW9uPSJHZW5lcmF0ZXMgSlNEb2MgZm9yIGEgc2VsZWN0YWJsZSBzZXQgb2YgSmF2YVNjcmlwdCByZXNvdXJjZXMiIGNhdGVnb3J5PSJfQUhCVVVpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdG9DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uc3Rhc2guZHJvcCIgY29tbWFuZE5hbWU9IkRlbGV0ZSBTdGFzaGVkIENvbW1pdC4uLiIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0b1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLkRlYnVnUGVyc3BlY3RpdmUiIGNvbW1hbmROYW1lPSJEZWJ1ZyIgZGVzY3JpcHRpb249Ik9wZW4gdGhlIGRlYnVnIHBlcnNwZWN0aXZlIiBjYXRlZ29yeT0iX0FIQlVWeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRvaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudGlwcy5pZGUuY29tbWFuZC5vcGVuIiBjb21tYW5kTmFtZT0iVGlwIG9mIHRoZSBEYXkiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdG95eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5zb3VyY2UucXVpY2tNZW51IiBjb21tYW5kTmFtZT0iU2hvdyBTb3VyY2UgUXVpY2sgTWVudSIgZGVzY3JpcHRpb249IlNob3dzIHRoZSBzb3VyY2UgcXVpY2sgbWVudSIgY2F0ZWdvcnk9Il9BSEJVTFN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0cEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5zcGVjaWZpY19jb250ZW50X2Fzc2lzdC5jb21tYW5kIiBjb21tYW5kTmFtZT0iQ29udGVudCBBc3Npc3QiIGRlc2NyaXB0aW9uPSJBIHBhcmFtZXRlcml6YWJsZSBjb21tYW5kIHRoYXQgaW52b2tlcyBjb250ZW50IGFzc2lzdCB3aXRoIGEgc2luZ2xlIGNvbXBsZXRpb24gcHJvcG9zYWwgY2F0ZWdvcnkiIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBdHBTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuc3BlY2lmaWNfY29udGVudF9hc3Npc3QuY2F0ZWdvcnlfaWQiIG5hbWU9InR5cGUiIG9wdGlvbmFsPSJmYWxzZSIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdHBpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLnJlZmVyZW5jZXMuaW4uaGllcmFyY2h5IiBjb21tYW5kTmFtZT0iUmVmZXJlbmNlcyBpbiBIaWVyYXJjaHkiIGRlc2NyaXB0aW9uPSJTZWFyY2ggZm9yIHJlZmVyZW5jZXMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnQgaW4gaXRzIGhpZXJhcmNoeSIgY2F0ZWdvcnk9Il9BSEJVVkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0cHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRlLmV4cGFuZEFsbCIgY29tbWFuZE5hbWU9IkV4cGFuZCBBbGwiIGRlc2NyaXB0aW9uPSJFeHBhbmQgdGhlIGN1cnJlbnQgdHJlZSIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0cUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmZpbGUuc2F2ZUFsbCIgY29tbWFuZE5hbWU9IlNhdmUgQWxsIiBkZXNjcmlwdGlvbj0iU2F2ZSBhbGwgY3VycmVudCBjb250ZW50cyIgY2F0ZWdvcnk9Il9BSEJVTWl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0cVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5zZWFyY2gubWV0aG9kLmV4aXRzIiBjb21tYW5kTmFtZT0iU2VhcmNoIE1ldGhvZCBFeGl0IE9jY3VycmVuY2VzIGluIEZpbGUiIGRlc2NyaXB0aW9uPSJTZWFyY2ggZm9yIG1ldGhvZCBleGl0IG9jY3VycmVuY2VzIG9mIGEgc2VsZWN0ZWQgcmV0dXJuIHR5cGUiIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdHFpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5nb3RvLm1hdGNoaW5nLmJyYWNrZXQiIGNvbW1hbmROYW1lPSJHbyB0byBNYXRjaGluZyBCcmFja2V0IiBkZXNjcmlwdGlvbj0iTW92ZXMgdGhlIGN1cnNvciB0byB0aGUgbWF0Y2hpbmcgYnJhY2tldCIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0cXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5mb2xkaW5nLmNvbGxhcHNlTWVtYmVycyIgY29tbWFuZE5hbWU9IkNvbGxhcHNlIE1lbWJlcnMiIGRlc2NyaXB0aW9uPSJDb2xsYXBzZSBhbGwgbWVtYmVycyIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0ckN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmZpbGUuY2xvc2VPdGhlcnMiIGNvbW1hbmROYW1lPSJDbG9zZSBPdGhlcnMiIGRlc2NyaXB0aW9uPSJDbG9zZSBhbGwgZWRpdG9ycyBleGNlcHQgdGhlIG9uZSB0aGF0IGlzIGFjdGl2ZSIgY2F0ZWdvcnk9Il9BSEJVTWl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0clN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLnJlbmFtZS5lbGVtZW50IiBjb21tYW5kTmFtZT0iUmVuYW1lIC0gUmVmYWN0b3JpbmcgIiBkZXNjcmlwdGlvbj0iUmVuYW1lIHRoZSBzZWxlY3RlZCBlbGVtZW50IiBjYXRlZ29yeT0iX0FIQlVRU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRyaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdG9ycy5xdWlja2RpZmYucmV2ZXJ0TGluZSIgY29tbWFuZE5hbWU9IlJldmVydCBMaW5lIiBkZXNjcmlwdGlvbj0iUmV2ZXJ0IHRoZSBjdXJyZW50IGxpbmUiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdHJ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5jb21tYW5kcy5PcGVuRGVidWdDb25maWd1cmF0aW9ucyIgY29tbWFuZE5hbWU9IkRlYnVnLi4uIiBkZXNjcmlwdGlvbj0iT3BlbiBkZWJ1ZyBsYXVuY2ggY29uZmlndXJhdGlvbiBkaWFsb2ciIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdHNDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qcHQuanBhLmVjbGlwc2VsaW5rLnVpLmdlbmVyYXRlRHluYW1pY0VudGl0aWVzIiBjb21tYW5kTmFtZT0iR2VuZXJhdGUgRHluYW1pYyBFbnRpdGllcyBmcm9tIFRhYmxlcy4uLiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0c1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkudGVhbS5TaW1wbGVGZXRjaCIgY29tbWFuZE5hbWU9IkZldGNoIGZyb20gVXBzdHJlYW0iIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdHNpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5tMmUuc291cmNlbG9va3VwLnVpLmltcG9ydEJpbmFyeVByb2plY3QiIGNvbW1hbmROYW1lPSJJbXBvcnQgQmluYXJ5IFByb2plY3QiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdHN5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS53aW5kb3cucHJldmlvdXNFZGl0b3IiIGNvbW1hbmROYW1lPSJQcmV2aW91cyBFZGl0b3IiIGRlc2NyaXB0aW9uPSJTd2l0Y2ggdG8gdGhlIHByZXZpb3VzIGVkaXRvciIgY2F0ZWdvcnk9Il9BSEJVTXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0dEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5jb3B5LnF1YWxpZmllZC5uYW1lIiBjb21tYW5kTmFtZT0iQ29weSBRdWFsaWZpZWQgTmFtZSIgZGVzY3JpcHRpb249IkNvcHkgYSBmdWxseSBxdWFsaWZpZWQgbmFtZSB0byB0aGUgc3lzdGVtIGNsaXBib2FyZCIgY2F0ZWdvcnk9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0dFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5wcm9tb3RlLmxvY2FsLnZhcmlhYmxlIiBjb21tYW5kTmFtZT0iQ29udmVydCBMb2NhbCBWYXJpYWJsZSB0byBGaWVsZCIgZGVzY3JpcHRpb249IkNvbnZlcnQgYSBsb2NhbCB2YXJpYWJsZSB0byBhIGZpZWxkIiBjYXRlZ29yeT0iX0FIQlVUeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXR0aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0Lnpvb21JbiIgY29tbWFuZE5hbWU9Ilpvb20gSW4iIGRlc2NyaXB0aW9uPSJab29tIGluIHRleHQsIGluY3JlYXNlIGRlZmF1bHQgZm9udCBzaXplIGZvciB0ZXh0IGVkaXRvcnMiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdHR5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5pZGUuT3Blbk1hcmtlcnNWaWV3IiBjb21tYW5kTmFtZT0iT3BlbiBBbm90aGVyIiBkZXNjcmlwdGlvbj0iT3BlbiBhbm90aGVyIHZpZXciIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdHVDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5QYWNrYWdlRXhwbG9yZXIiIGNvbW1hbmROYW1lPSJKYXZhU2NyaXB0IFNjcmlwdCBFeHBsb3JlciIgZGVzY3JpcHRpb249IlNob3cgdGhlIFNjcmlwdCBFeHBsb3JlciIgY2F0ZWdvcnk9Il9BSEJVUXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0dVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5jb3JyZWN0aW9uLmNoYW5nZVRvU3RhdGljIiBjb21tYW5kTmFtZT0iUXVpY2sgRml4IC0gQ2hhbmdlIHRvIHN0YXRpYyBhY2Nlc3MiIGRlc2NyaXB0aW9uPSJJbnZva2VzIHF1aWNrIGFzc2lzdCBhbmQgc2VsZWN0cyAnQ2hhbmdlIHRvIHN0YXRpYyBhY2Nlc3MnIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXR1aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuY29tbWFuZHMubmV3UmVuZGVyaW5nIiBjb21tYW5kTmFtZT0iTmV3IFJlbmRlcmluZyIgZGVzY3JpcHRpb249IkFkZCBhIG5ldyByZW5kZXJpbmcuIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXR1eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkucHJvamVjdC5jbG9zZVVucmVsYXRlZFByb2plY3RzIiBjb21tYW5kTmFtZT0iQ2xvc2UgVW5yZWxhdGVkIFByb2plY3RzIiBkZXNjcmlwdGlvbj0iQ2xvc2UgdW5yZWxhdGVkIHByb2plY3RzIiBjYXRlZ29yeT0iX0FIQlVVaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXR2Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLnNlbGYuZW5jYXBzdWxhdGUuZmllbGQiIGNvbW1hbmROYW1lPSJFbmNhcHN1bGF0ZSBGaWVsZCIgZGVzY3JpcHRpb249IkNyZWF0ZSBnZXR0aW5nIGFuZCBzZXR0aW5nIG1ldGhvZHMgZm9yIHRoZSBmaWVsZCBhbmQgdXNlIG9ubHkgdGhvc2UgdG8gYWNjZXNzIHRoZSBmaWVsZCIgY2F0ZWdvcnk9Il9BSEJVVHl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0dlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmlkZS5tYXJrZXJzLmNvcHlNYXJrZXJSZXNvdXJjZVF1YWxpZmllZE5hbWUiIGNvbW1hbmROYW1lPSJDb3B5IFJlc291cmNlIFF1YWxpZmllZCBOYW1lIFRvIENsaXBib2FyZCIgZGVzY3JpcHRpb249IkNvcGllcyBtYXJrZXJzIHJlc291cmNlIHF1YWxpZmllZCBuYW1lIHRvIHRoZSBjbGlwYm9hcmQiIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdHZpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5wZGUudWkucnVudGltZVdvcmtiZW5jaFNob3J0Y3V0LnJ1biIgY29tbWFuZE5hbWU9IlJ1biBFY2xpcHNlIEFwcGxpY2F0aW9uIiBkZXNjcmlwdGlvbj0iUnVuIEVjbGlwc2UgQXBwbGljYXRpb24iIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdHZ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5zZWFyY2gudWkucGVyZm9ybVRleHRTZWFyY2hXb3Jrc3BhY2UiIGNvbW1hbmROYW1lPSJGaW5kIFRleHQgaW4gV29ya3NwYWNlIiBkZXNjcmlwdGlvbj0iU2VhcmNoZXMgdGhlIGZpbGVzIGluIHRoZSB3b3Jrc3BhY2UgZm9yIHNwZWNpZmljIHRleHQuIiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXR3Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuZXh0cmFjdC5zdXBlcmNsYXNzIiBjb21tYW5kTmFtZT0iRXh0cmFjdCBTdXBlcmNsYXNzIiBkZXNjcmlwdGlvbj0iRXh0cmFjdCBhIHNldCBvZiBtZW1iZXJzIGludG8gYSBuZXcgc3VwZXJjbGFzcyBhbmQgdHJ5IHRvIHVzZSB0aGUgbmV3IHN1cGVyY2xhc3MiIGNhdGVnb3J5PSJfQUhCVVFTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdHdTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnJlbW92ZS5ibG9jay5jb21tZW50IiBjb21tYW5kTmFtZT0iUmVtb3ZlIEJsb2NrIENvbW1lbnQiIGRlc2NyaXB0aW9uPSJSZW1vdmUgQmxvY2sgQ29tbWVudCIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0d2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnBkZS5ydW50aW1lLnNweS5jb21tYW5kcy5tZW51U3B5Q29tbWFuZCIgY29tbWFuZE5hbWU9IlBsdWctaW4gTWVudSBTcHkiIGRlc2NyaXB0aW9uPSJTaG93IHRoZSBQbHVnLWluIFNweSIgY2F0ZWdvcnk9Il9BSEJVV3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0d3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpwdC5qcGEudWkuZW50aXR5TWFwcGluZ3NBZGRQZXJzaXN0ZW50Q2xhc3MiIGNvbW1hbmROYW1lPSJBZGQgQ2xhc3MuLi4iIGNhdGVnb3J5PSJfQUhCVVBDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdHhDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5nZW5lcmF0ZS5jb25zdHJ1Y3Rvci51c2luZy5maWVsZHMiIGNvbW1hbmROYW1lPSJHZW5lcmF0ZSBDb25zdHJ1Y3RvciB1c2luZyBWYXJzIiBkZXNjcmlwdGlvbj0iQ2hvb3NlIHZhcnMgdG8gaW5pdGlhbGl6ZSBhbmQgY29uc3RydWN0b3IgZnJvbSBzdXBlcmNsYXNzIHRvIGNhbGwgIiBjYXRlZ29yeT0iX0FIQlVMU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXR4U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLm5hdmlnYXRlLmdvdG90eXBlIiBjb21tYW5kTmFtZT0iR28gdG8gVHlwZSIgZGVzY3JpcHRpb249IkdvIHRvIFR5cGUiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdHhpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5tMmUuY29yZS51aS5jb21tYW5kLm9wZW5Qb20iIGNvbW1hbmROYW1lPSJPcGVuIE1hdmVuIFBPTSIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0eHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5pbmRleC5yZWJ1aWxkIiBjb21tYW5kTmFtZT0iUmVidWlsZCBKYXZhIEluZGV4IiBkZXNjcmlwdGlvbj0iUmVidWlsZHMgdGhlIEphdmEgaW5kZXggZGF0YWJhc2UiIGNhdGVnb3J5PSJfQUhCVVVpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdHlDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LmFkZEJvb2ttYXJrIiBjb21tYW5kTmFtZT0iQWRkIEJvb2ttYXJrIiBkZXNjcmlwdGlvbj0iQWRkIGEgYm9va21hcmsiIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdHlTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QueHNkLnVpLnJlZmFjdG9yLnJlbmFtZS5lbGVtZW50IiBjb21tYW5kTmFtZT0iJmFtcDtSZW5hbWUgWFNEIGVsZW1lbnQiIGRlc2NyaXB0aW9uPSJSZW5hbWUgWFNEIGVsZW1lbnQiIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdHlpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuc2V0Lm1hcmsiIGNvbW1hbmROYW1lPSJTZXQgTWFyayIgZGVzY3JpcHRpb249IlNldCB0aGUgbWFyayIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0eXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmNvbW1hbmQuZ29Ub1ByZXZpb3VzVW5yZWFkIiBjb21tYW5kTmFtZT0iR28gVG8gUHJldmlvdXMgVW5yZWFkIFRhc2siIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdHpDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5zZWxlY3QubmV4dCIgY29tbWFuZE5hbWU9IlNlbGVjdCBOZXh0IEVsZW1lbnQiIGRlc2NyaXB0aW9uPSJFeHBhbmQgc2VsZWN0aW9uIHRvIGluY2x1ZGUgbmV4dCBzaWJsaW5nIiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXR6U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmNvcnJlY3Rpb24uc3BsaXRKb2luVmFyaWFibGVEZWNsYXJhdGlvbi5hc3Npc3QiIGNvbW1hbmROYW1lPSJRdWljayBBc3Npc3QgLSBTcGxpdC9Kb2luIHZhcmlhYmxlIGRlY2xhcmF0aW9uIiBkZXNjcmlwdGlvbj0iSW52b2tlcyBxdWljayBhc3Npc3QgYW5kIHNlbGVjdHMgJ1NwbGl0L0pvaW4gdmFyaWFibGUgZGVjbGFyYXRpb24nIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXR6aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3Muc2hvd1ZpZXciIGNvbW1hbmROYW1lPSJTaG93IFZpZXciIGRlc2NyaXB0aW9uPSJTaG93cyBhIHBhcnRpY3VsYXIgdmlldyIgY2F0ZWdvcnk9Il9BSEJVUXl4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEF0enl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLnNob3dWaWV3LnZpZXdJZCIgbmFtZT0iVmlldyIvPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXQwQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3Muc2hvd1ZpZXcuc2Vjb25kYXJ5SWQiIG5hbWU9IlNlY29uZGFyeSBJZCIvPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXQwU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3Muc2hvd1ZpZXcubWFrZUZhc3QiIG5hbWU9IkFzIEZhc3RWaWV3Ii8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0MGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkudGVhbS5JZ25vcmUiIGNvbW1hbmROYW1lPSJJZ25vcmUiIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdDB5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmNvbW1pdC5FZGl0IiBjb21tYW5kTmFtZT0iRWRpdCBDb21taXQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdDFDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0ZS5zaG93UmVzb3VyY2VCeVBhdGgiIGNvbW1hbmROYW1lPSJTaG93IFJlc291cmNlIGluIE5hdmlnYXRvciIgZGVzY3JpcHRpb249IlNob3cgYSByZXNvdXJjZSBpbiB0aGUgTmF2aWdhdG9yIGdpdmVuIGl0cyBwYXRoIiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXQxU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0icmVzb3VyY2VQYXRoIiBuYW1lPSJSZXNvdXJjZSBQYXRoIiB0eXBlSWQ9Im9yZy5lY2xpcHNlLnVpLmlkZS5yZXNvdXJjZVBhdGgiIG9wdGlvbmFsPSJmYWxzZSIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdDFpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5jb21tYW5kcy5Ta2lwQWxsQnJlYWtwb2ludHMiIGNvbW1hbmROYW1lPSJTa2lwIEFsbCBCcmVha3BvaW50cyIgZGVzY3JpcHRpb249IlNldHMgd2hldGhlciBvciBub3QgYW55IGJyZWFrcG9pbnQgc2hvdWxkIHN1c3BlbmQgZXhlY3V0aW9uIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXQxeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWNsZW1tYS51aS5zZWxlY3RSb290RWxlbWVudHMiIGNvbW1hbmROYW1lPSJTZWxlY3QgUm9vdCBFbGVtZW50cyIgY2F0ZWdvcnk9Il9BSEJVTVN4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEF0MkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9InR5cGUiIG5hbWU9InR5cGUiIG9wdGlvbmFsPSJmYWxzZSIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdDJTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuZGVsaW1pdGVyLndpbmRvd3MiIGNvbW1hbmROYW1lPSJDb252ZXJ0IExpbmUgRGVsaW1pdGVycyB0byBXaW5kb3dzIChDUkxGLCBcclxuLCAwRDBBLCAmI3hhNDsmI3hiNjspIiBkZXNjcmlwdGlvbj0iQ29udmVydHMgdGhlIGxpbmUgZGVsaW1pdGVycyB0byBXaW5kb3dzIChDUkxGLCBcclxuLCAwRDBBLCAmI3hhNDsmI3hiNjspIiBjYXRlZ29yeT0iX0FIQlVNaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXQyaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC5maW5kTmV4dCIgY29tbWFuZE5hbWU9IkZpbmQgTmV4dCIgZGVzY3JpcHRpb249IkZpbmQgbmV4dCBpdGVtIiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXQyeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkud2luZG93LmhpZGV0cmltYmFycyIgY29tbWFuZE5hbWU9IlRvZ2dsZSB2aXNpYmlsaXR5IG9mIHRoZSB3aW5kb3cgdG9vbGJhcnMiIGRlc2NyaXB0aW9uPSJUb2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIHRvb2xiYXJzIG9mIHRoZSBjdXJyZW50IHdpbmRvdyIgY2F0ZWdvcnk9Il9BSEJVTXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0M0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLnNlYXJjaC5kZWNsYXJhdGlvbnMuaW4ud29ya3NwYWNlIiBjb21tYW5kTmFtZT0iRGVjbGFyYXRpb24gaW4gV29ya3NwYWNlIiBkZXNjcmlwdGlvbj0iU2VhcmNoIGZvciBkZWNsYXJhdGlvbnMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnQgaW4gdGhlIHdvcmtzcGFjZSIgY2F0ZWdvcnk9Il9BSEJVVkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0M1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLm9wZW4uc3VwZXIuaW1wbGVtZW50YXRpb24iIGNvbW1hbmROYW1lPSJPcGVuIFN1cGVyIEltcGxlbWVudGF0aW9uIiBkZXNjcmlwdGlvbj0iT3BlbiB0aGUgSW1wbGVtZW50YXRpb24gaW4gdGhlIFN1cGVyIFR5cGUiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdDNpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5wZGUudWkub3BlblBsdWdpbkFydGlmYWN0IiBjb21tYW5kTmFtZT0iT3BlbiBQbHVnLWluIEFydGlmYWN0IiBkZXNjcmlwdGlvbj0iT3BlbiBhIHBsdWctaW4gYXJ0aWZhY3QgaW4gdGhlIG1hbmlmZXN0IGVkaXRvciIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0M3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuZGVidWciIGNvbW1hbmROYW1lPSJEZWJ1ZyIgZGVzY3JpcHRpb249IkRlYnVnIHNlcnZlciIgY2F0ZWdvcnk9Il9BSEJVTHl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0NEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRlLm5leHRTdWJUYWIiIGNvbW1hbmROYW1lPSJOZXh0IFN1Yi1UYWIiIGRlc2NyaXB0aW9uPSJTd2l0Y2ggdG8gdGhlIG5leHQgc3ViLXRhYiIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0NFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5pbnRyb2R1Y2UucGFyYW1ldGVyIiBjb21tYW5kTmFtZT0iSW50cm9kdWNlIFBhcmFtZXRlciIgZGVzY3JpcHRpb249IkludHJvZHVjZSBhIG5ldyBtZXRob2QgcGFyYW1ldGVyIGJhc2VkIG9uIHRoZSBzZWxlY3RlZCBleHByZXNzaW9uIiBjYXRlZ29yeT0iX0FIQlVUeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXQ0aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuY29tbWFuZC5hZGRUYXNrUmVwb3NpdG9yeSIgY29tbWFuZE5hbWU9IkFkZCBUYXNrIFJlcG9zaXRvcnkuLi4iIGNhdGVnb3J5PSJfQUhCVUxpeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBdDR5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJjb25uZWN0b3JLaW5kIiBuYW1lPSJSZXBvc2l0b3J5IFR5cGUiLz4KKyAgPC9jb21tYW5kcz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXQ1Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWNsZW1tYS51aS5yZW1vdmVBbGxTZXNzaW9ucyIgY29tbWFuZE5hbWU9IlJlbW92ZSBBbGwgU2Vzc2lvbnMiIGNhdGVnb3J5PSJfQUhCVU1TeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdDVTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkubG9jYWxKYXZhU2hvcnRjdXQucnVuIiBjb21tYW5kTmFtZT0iUnVuIEphdmEgQXBwbGljYXRpb24iIGRlc2NyaXB0aW9uPSJSdW4gSmF2YSBBcHBsaWNhdGlvbiIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0NWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQuYWRkVGFzayIgY29tbWFuZE5hbWU9IkFkZCBUYXNrLi4uIiBkZXNjcmlwdGlvbj0iQWRkIGEgdGFzayIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0NXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnBkZS51cGRhdGVVbml0VmVyc2lvbnMiIGNvbW1hbmROYW1lPSJVcGRhdGUgSVUgVmVyc2lvbnMgZnJvbSBSZXBvc2l0b3JpZXMiIGRlc2NyaXB0aW9uPSJVcGRhdGUgdG8gbGF0ZXN0IElVIHZlcnNpb25zIiBjYXRlZ29yeT0iX0FIQlVQaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXQ2Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5zdHJ1Y3R1cmUuc2VsZWN0LmVuY2xvc2luZyIgY29tbWFuZE5hbWU9IlNlbGVjdCBFbmNsb3NpbmcgRWxlbWVudCIgZGVzY3JpcHRpb249IkV4cGFuZCBzZWxlY3Rpb24gdG8gaW5jbHVkZSBlbmNsb3NpbmcgZWxlbWVudCIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0NlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLnJlZmFjdG9yLnJlbmFtZS5lbGVtZW50IiBjb21tYW5kTmFtZT0iUmVuYW1lIFdTREwgY29tcG9uZW50IiBkZXNjcmlwdGlvbj0iUmVuYW1lcyBXU0RMIGNvbXBvbmVudCIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0Nml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmNoZWF0c2hlZXRzLm9wZW5DaGVhdFNoZWV0IiBjb21tYW5kTmFtZT0iT3BlbiBDaGVhdCBTaGVldCIgZGVzY3JpcHRpb249Ik9wZW4gYSBDaGVhdCBTaGVldC4iIGNhdGVnb3J5PSJfQUhCVVVTeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBdDZ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJjaGVhdFNoZWV0SWQiIG5hbWU9IklkZW50aWZpZXIiLz4KKyAgPC9jb21tYW5kcz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXQ3Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkudmlld1NvdXJjZS5jb21tYW5kIiBjb21tYW5kTmFtZT0iVmlldyBVbmZvcm1hdHRlZCBUZXh0IiBjYXRlZ29yeT0iX0FIQlVMaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXQ3U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0Lm1vdmVMaW5lRG93biIgY29tbWFuZE5hbWU9Ik1vdmUgTGluZXMgRG93biIgZGVzY3JpcHRpb249Ik1vdmVzIHRoZSBzZWxlY3RlZCBsaW5lcyBkb3duIiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXQ3aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuU291cmNlVmlldyIgY29tbWFuZE5hbWU9IkphdmFTY3JpcHQgRGVjbGFyYXRpb24iIGRlc2NyaXB0aW9uPSJTaG93IHRoZSBEZWNsYXJhdGlvbiB2aWV3IiBjYXRlZ29yeT0iX0FIQlVReXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXQ3eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZXF1aW5veC5wMi51aS5zZGsudXBkYXRlIiBjb21tYW5kTmFtZT0iQ2hlY2sgZm9yIFVwZGF0ZXMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdDhDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5wZGUudWkuc2VhcmNoVGFyZ2V0UmVwb3NpdG9yaWVzIiBjb21tYW5kTmFtZT0iQWRkIEFydGlmYWN0IHRvIFRhcmdldCBQbGF0Zm9ybSIgZGVzY3JpcHRpb249IkFkZCBhbiBhcnRpZmFjdCB0byB5b3VyIHRhcmdldCBwbGF0Zm9ybSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEF0OFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnBkZS51aS5zZWFyY2hUYXJnZXRSZXBvc2l0b3JpZXMudGVybSIgbmFtZT0iVGhlIGluaXRpYWwgc2VhcmNoIHBhdHRlcm4gZm9yIHRoZSBhcnRpZmFjdCBzZWFyY2ggZGlhbG9nIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0OGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5nb3RvLnRleHRFbmQiIGNvbW1hbmROYW1lPSJUZXh0IEVuZCIgZGVzY3JpcHRpb249IkdvIHRvIHRoZSBlbmQgb2YgdGhlIHRleHQiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdDh5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuZ290by5tYXRjaGluZy5icmFja2V0IiBjb21tYW5kTmFtZT0iR28gdG8gTWF0Y2hpbmcgQnJhY2tldCIgZGVzY3JpcHRpb249Ik1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIG1hdGNoaW5nIGJyYWNrZXQiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdDlDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5wYXJ0LnByZXZpb3VzUGFnZSIgY29tbWFuZE5hbWU9IlByZXZpb3VzIFBhZ2UiIGRlc2NyaXB0aW9uPSJTd2l0Y2ggdG8gdGhlIHByZXZpb3VzIHBhZ2UiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdDlTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5vdmVycmlkZS5tZXRob2RzIiBjb21tYW5kTmFtZT0iT3ZlcnJpZGUvSW1wbGVtZW50IEZ1bmN0aW9ucyIgZGVzY3JpcHRpb249Ik92ZXJyaWRlIG9yIGltcGxlbWVudCBmdW5jdGlvbnMgZnJvbSBzdXBlciB0eXBlcyIgY2F0ZWdvcnk9Il9BSEJVTFN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0OWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnByb2plY3QuY2xvc2VQcm9qZWN0IiBjb21tYW5kTmFtZT0iQ2xvc2UgUHJvamVjdCIgZGVzY3JpcHRpb249IkNsb3NlIHRoZSBzZWxlY3RlZCBwcm9qZWN0IiBjYXRlZ29yeT0iX0FIQlVVaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXQ5eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLlB1bGxXaXRoT3B0aW9ucyIgY29tbWFuZE5hbWU9IlB1bGwuLi4iIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdC1DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5yZWZhY3Rvci5taWdyYXRlLmphciIgY29tbWFuZE5hbWU9Ik1pZ3JhdGUgSkFSIEZpbGUiIGRlc2NyaXB0aW9uPSJNaWdyYXRlIGEgSkFSIEZpbGUgdG8gYSBuZXcgdmVyc2lvbiIgY2F0ZWdvcnk9Il9BSEJVUVN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0LVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLm9wZW4uZWRpdG9yIiBjb21tYW5kTmFtZT0iT3BlbiBEZWNsYXJhdGlvbiIgZGVzY3JpcHRpb249Ik9wZW4gYW4gZWRpdG9yIG9uIHRoZSBzZWxlY3RlZCBlbGVtZW50IiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXQtaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZlci5wdWJsaXNoIiBjb21tYW5kTmFtZT0iUHVibGlzaCIgZGVzY3JpcHRpb249IlB1Ymxpc2ggdG8gc2VydmVyIiBjYXRlZ29yeT0iX0FIQlVMeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXQteXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLmludHJvZHVjZS5mYWN0b3J5IiBjb21tYW5kTmFtZT0iSW50cm9kdWNlIEZhY3RvcnkiIGRlc2NyaXB0aW9uPSJJbnRyb2R1Y2UgYSBmYWN0b3J5IG1ldGhvZCB0byBlbmNhcHN1bGF0ZSBpbnZvY2F0aW9uIG9mIHRoZSBzZWxlY3RlZCBjb25zdHJ1Y3RvciIgY2F0ZWdvcnk9Il9BSEJVVHl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0X0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnBkZS51aS51cGRhdGVDbGFzc3BhdGgiIGNvbW1hbmROYW1lPSJVcGRhdGUgQ2xhc3NwYXRoIiBkZXNjcmlwdGlvbj0iVXBkYXRlcyB0aGUgcGx1Zy1pbiBjbGFzc3BhdGggZnJvbSBsYXRlc3Qgc2V0dGluZ3MiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdF9TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmNvbW1pdC5DaGVycnlQaWNrIiBjb21tYW5kTmFtZT0iQ2hlcnJ5IFBpY2siIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdF9peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEudXNlLnN1cGVydHlwZSIgY29tbWFuZE5hbWU9IlVzZSBTdXBlcnR5cGUgV2hlcmUgUG9zc2libGUiIGRlc2NyaXB0aW9uPSJDaGFuZ2Ugb2NjdXJyZW5jZXMgb2YgYSB0eXBlIHRvIHVzZSBhIHN1cGVydHlwZSBpbnN0ZWFkIiBjYXRlZ29yeT0iX0FIQlVUeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRfeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuY29tbWFuZC5tYXJrVGFza1VucmVhZCIgY29tbWFuZE5hbWU9Ik1hcmsgVGFzayBVbnJlYWQiIGNhdGVnb3J5PSJfQUhCVUxpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdUFDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5zZWFyY2gudWkucGVyZm9ybVRleHRTZWFyY2hGaWxlIiBjb21tYW5kTmFtZT0iRmluZCBUZXh0IGluIEZpbGUiIGRlc2NyaXB0aW9uPSJTZWFyY2hlcyB0aGUgZmlsZXMgaW4gdGhlIGZpbGUgZm9yIHNwZWNpZmljIHRleHQuIiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVBU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5zdHJ1Y3R1cmUuc2VsZWN0Lmxhc3QiIGNvbW1hbmROYW1lPSJSZXN0b3JlIExhc3QgU2VsZWN0aW9uIiBkZXNjcmlwdGlvbj0iUmVzdG9yZSBsYXN0IHNlbGVjdGlvbiIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1QWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLnNvcnQubWVtYmVycyIgY29tbWFuZE5hbWU9IlNvcnQgTWVtYmVycyIgZGVzY3JpcHRpb249IlNvcnQgYWxsIG1lbWJlcnMgdXNpbmcgdGhlIG1lbWJlciBvcmRlciBwcmVmZXJlbmNlIiBjYXRlZ29yeT0iX0FIQlVMU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVBeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmN1dC5saW5lIiBjb21tYW5kTmFtZT0iQ3V0IExpbmUiIGRlc2NyaXB0aW9uPSJDdXQgYSBsaW5lIG9mIHRleHQsIG9yIG11bHRpcGxlIGxpbmVzIHdoZW4gaW52b2tlZCBhZ2FpbiB3aXRob3V0IGludGVycnVwdGlvbiIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1QkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnRtLnRlcm1pbmFsLnZpZXcudWkuY29tbWFuZC5sYXVuY2giIGNvbW1hbmROYW1lPSJPcGVuIFRlcm1pbmFsIG9uIFNlbGVjdGlvbiIgY2F0ZWdvcnk9Il9BSEJVU3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1QlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5mb2xkaW5nLmV4cGFuZF9hbGwiIGNvbW1hbmROYW1lPSJFeHBhbmQgQWxsIiBkZXNjcmlwdGlvbj0iRXhwYW5kcyBhbGwgZm9sZGVkIHJlZ2lvbnMiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdUJpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5jb21tYW5kcy5zaG93RWxlbWVudEluUGFja2FnZVZpZXciIGNvbW1hbmROYW1lPSJTaG93IEphdmFTY3JpcHQgRWxlbWVudCBpbiBTY3JpcHQgRXhwbG9yZXIiIGRlc2NyaXB0aW9uPSJTZWxlY3QgSmF2YVNjcmlwdCBlbGVtZW50IGluIHRoZSBTY3JpcHQgRXhwbG9yZXIgdmlldyIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEF1Qnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9ImVsZW1lbnRSZWYiIG5hbWU9IkphdmFTY3JpcHQgZWxlbWVudCByZWZlcmVuY2UiIHR5cGVJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuY29tbWFuZHMuamF2YUVsZW1lbnRSZWZlcmVuY2UiIG9wdGlvbmFsPSJmYWxzZSIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdUNDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QueHNkLnVpLnJlZmFjdG9yLm1ha2VFbGVtZW50R2xvYmFsIiBjb21tYW5kTmFtZT0iTWFrZSBMb2NhbCBFbGVtZW50ICZhbXA7R2xvYmFsIiBkZXNjcmlwdGlvbj0iUHJvbW90ZXMgbG9jYWwgZWxlbWVudCB0byBnbG9iYWwgbGV2ZWwgYW5kIHJlcGxhY2VzIGl0cyByZWZlcmVuY2VzIiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVDU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmNvcnJlY3Rpb24uZW5jYXBzdWxhdGVGaWVsZC5hc3Npc3QiIGNvbW1hbmROYW1lPSJRdWljayBBc3Npc3QgLSBDcmVhdGUgZ2V0dGVyL3NldHRlciBmb3IgZmllbGQiIGRlc2NyaXB0aW9uPSJJbnZva2VzIHF1aWNrIGFzc2lzdCBhbmQgc2VsZWN0cyAnQ3JlYXRlIGdldHRlci9zZXR0ZXIgZm9yIGZpZWxkJyIgY2F0ZWdvcnk9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1Q2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLmVkaXRvci5vcGVuRWRpdG9yRHJvcGRvd24iIGNvbW1hbmROYW1lPSJPcGVuIFNldHVwIEVkaXRvciIgY2F0ZWdvcnk9Il9BSEJVUnl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1Q3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmhlbHAucXVpY2tTdGFydEFjdGlvbiIgY29tbWFuZE5hbWU9IldlbGNvbWUiIGRlc2NyaXB0aW9uPSJTaG93IGhlbHAgZm9yIGJlZ2lubmluZyB1c2VycyIgY2F0ZWdvcnk9Il9BSEJVVVN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1REN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkudGVhbS5SZXBsYWNlV2l0aFByZXZpb3VzIiBjb21tYW5kTmFtZT0iUmVwbGFjZSB3aXRoIFByZXZpb3VzIFJldmlzaW9uIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVEU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubTJlLnNvdXJjZWxvb2t1cC51aS5vcGVuUG9tIiBjb21tYW5kTmFtZT0iT3BlbiBQb20iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdURpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5xdWVzdGlvbm5haXJlIiBjb21tYW5kTmFtZT0iQ29uZmlndXJhdGlvbiBRdWVzdGlvbm5haXJlIiBkZXNjcmlwdGlvbj0iUmV2aWV3IHRoZSBJREUncyBtb3N0IGZpZXJjZWx5IGNvbnRlc3RlZCBwcmVmZXJlbmNlcyIgY2F0ZWdvcnk9Il9BSEJVUnl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1RHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLndpbmRvdy5oaWRlU2hvd0VkaXRvcnMiIGNvbW1hbmROYW1lPSJUb2dnbGUgU2hhcmVkIEFyZWEgVmlzaWJpbGl0eSIgZGVzY3JpcHRpb249IlRvZ2dsZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIHNoYXJlZCBhcmVhIiBjYXRlZ29yeT0iX0FIQlVNeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVFQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmZvbGRpbmcucmVzdG9yZSIgY29tbWFuZE5hbWU9IlJlc2V0IFN0cnVjdHVyZSIgZGVzY3JpcHRpb249IlJlc2V0cyB0aGUgZm9sZGluZyBzdHJ1Y3R1cmUiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdUVTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5oZWxwLnVpLmluZGV4Y29tbWFuZCIgY29tbWFuZE5hbWU9IkluZGV4IiBkZXNjcmlwdGlvbj0iU2hvdyBLZXl3b3JkIEluZGV4IiBjYXRlZ29yeT0iX0FIQlVVU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVFaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLmNsZWFuLnVwIiBjb21tYW5kTmFtZT0iQ2xlYW4gVXAiIGRlc2NyaXB0aW9uPSJTb2x2ZSBwcm9ibGVtcyBhbmQgaW1wcm92ZSBjb2RlIHN0eWxlIG9uIHNlbGVjdGVkIHJlc291cmNlcyIgY2F0ZWdvcnk9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1RXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxlZGl0b3IuR290b01hdGNoaW5nVG9rZW5BY3Rpb24iIGNvbW1hbmROYW1lPSJHb3RvIE1hdGNoaW5nIFRva2VuIiBjYXRlZ29yeT0iX0FIQlVWaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVGQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucGRlLmFwaS50b29scy51aS5zZXR1cC5wcm9qZWN0cyIgY29tbWFuZE5hbWU9IkFQSSAmYW1wO1Rvb2xzIFNldHVwLi4uIiBkZXNjcmlwdGlvbj0iQ29uZmlndXJlIHByb2plY3RzIGZvciBBUEkgdXNhZ2UgYW5kIGNvbXBhdGliaWxpdHkgY2hlY2tzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVGU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuY3JlYXRlLmRlbGVnYXRlLm1ldGhvZHMiIGNvbW1hbmROYW1lPSJHZW5lcmF0ZSBEZWxlZ2F0ZSBGdW5jdGlvbnMiIGRlc2NyaXB0aW9uPSJBZGQgZGVsZWdhdGUgZnVuY3Rpb25zIGZvciBhIHR5cGUncyB2YXJzIiBjYXRlZ29yeT0iX0FIQlVMU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVGaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmxvY2FsSmF2YVNob3J0Y3V0LmRlYnVnIiBjb21tYW5kTmFtZT0iRGVidWcgSmF2YSBBcHBsaWNhdGlvbiIgZGVzY3JpcHRpb249IkRlYnVnIEphdmEgQXBwbGljYXRpb24iIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdUZ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0ZS5mb3J3YXJkIiBjb21tYW5kTmFtZT0iRm9yd2FyZCIgZGVzY3JpcHRpb249Ik5hdmlnYXRlIGZvcndhcmQiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdUdDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5idWlsZHNoaXAudWkuY29tbWFuZHMub3BlbmJ1aWxkc2NyaXB0IiBjb21tYW5kTmFtZT0iT3BlbiBHcmFkbGUgQnVpbGQgU2NyaXB0IiBkZXNjcmlwdGlvbj0iT3BlbnMgdGhlIEdyYWRsZSBidWlsZCBzY3JpcHQgZm9yIHRoZSBzZWxlY3RlZCBHcmFkbGUgcHJvamVjdCIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1R1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpwdC5qcGEuZWNsaXBzZWxpbmsudWkuY29udmVydEphdmFDb252ZXJ0ZXJzIiBjb21tYW5kTmFtZT0iTW92ZSBKYXZhIENvbnZlcnRlcnMgdG8gWE1MLi4uIiBjYXRlZ29yeT0iX0FIQlVPaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVHaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuc2VsZWN0Lmxhc3QiIGNvbW1hbmROYW1lPSJSZXN0b3JlIExhc3QgU2VsZWN0aW9uIiBkZXNjcmlwdGlvbj0iUmVzdG9yZSBsYXN0IHNlbGVjdGlvbiIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1R3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmJ1aWxkc2hpcC51aS5jb21tYW5kcy5vcGVucnVuY29uZmlndXJhdGlvbiIgY29tbWFuZE5hbWU9Ik9wZW4gR3JhZGxlIFJ1biBDb25maWd1cmF0aW9uIiBkZXNjcmlwdGlvbj0iT3BlbnMgdGhlIFJ1biBDb25maWd1cmF0aW9uIGZvciB0aGUgc2VsZWN0ZWQgR3JhZGxlIHRhc2tzIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVIQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5oaXN0b3J5LkRlbGV0ZVRhZyIgY29tbWFuZE5hbWU9IiZhbXA7RGVsZXRlIFRhZyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1SFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQucmVtb3ZlLm9jY3VycmVuY2UuYW5ub3RhdGlvbnMiIGNvbW1hbmROYW1lPSJSZW1vdmUgT2NjdXJyZW5jZSBBbm5vdGF0aW9ucyIgZGVzY3JpcHRpb249IlJlbW92ZXMgdGhlIG9jY3VycmVuY2UgYW5ub3RhdGlvbnMgZnJvbSB0aGUgY3VycmVudCBlZGl0b3IiIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdUhpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5jZnQuc2VydmVyLnVpLmludGVybmFsLmFjdGlvbnMudW5tYXBwcm9qZWN0Y29tbWFuZCIgY29tbWFuZE5hbWU9IlVubGluayBQcm9qZWN0IiBkZXNjcmlwdGlvbj0iVW5saW5rIHRoZSBjbG91ZCBhcHBsaWNhdGlvbiBhbmQgdGhlIHByb2plY3QuIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVIeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkud2luZG93LnBpbkVkaXRvciIgY29tbWFuZE5hbWU9IlBpbiBFZGl0b3IiIGRlc2NyaXB0aW9uPSJQaW4gdGhlIGN1cnJlbnQgZWRpdG9yIiBjYXRlZ29yeT0iX0FIQlVNeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVJQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuc2hvdy5pbi5wYWNrYWdlLnZpZXciIGNvbW1hbmROYW1lPSJTaG93IGluIFNjcmlwdCBFeHBsb3JlciIgZGVzY3JpcHRpb249IlNob3cgdGhlIHNlbGVjdGVkIGVsZW1lbnQgaW4gdGhlIFNjcmlwdCBFeHBsb3JlciIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1SVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5nb3RvLnBhZ2VVcCIgY29tbWFuZE5hbWU9IlBhZ2UgVXAiIGRlc2NyaXB0aW9uPSJHbyB1cCBvbmUgcGFnZSIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1SWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkudGVhbS5zdWJtb2R1bGUuc3luYyIgY29tbWFuZE5hbWU9IlN5bmMgU3VibW9kdWxlIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVJeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLkRlbGV0ZUJyYW5jaCIgY29tbWFuZE5hbWU9IkRlbGV0ZSBCcmFuY2giIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdUpDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS50bS50ZXJtaW5hbC5jb3B5IiBjb21tYW5kTmFtZT0iQ29weSIgY2F0ZWdvcnk9Il9BSEJVVXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1SlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5nb3RvLmNvbHVtblByZXZpb3VzIiBjb21tYW5kTmFtZT0iUHJldmlvdXMgQ29sdW1uIiBkZXNjcmlwdGlvbj0iR28gdG8gdGhlIHByZXZpb3VzIGNvbHVtbiIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1Sml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmNvbXBhcmUuc2VsZWN0TmV4dENoYW5nZSIgY29tbWFuZE5hbWU9IlNlbGVjdCBOZXh0IENoYW5nZSIgZGVzY3JpcHRpb249IlNlbGVjdCBOZXh0IENoYW5nZSIgY2F0ZWdvcnk9Il9BSEJVVEN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1Snl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmNvcnJlY3Rpb24uc3BsaXRKb2luVmFyaWFibGVEZWNsYXJhdGlvbi5hc3Npc3QiIGNvbW1hbmROYW1lPSJRdWljayBBc3Npc3QgLSBTcGxpdC9Kb2luIHZhcmlhYmxlIGRlY2xhcmF0aW9uIiBkZXNjcmlwdGlvbj0iSW52b2tlcyBxdWljayBhc3Npc3QgYW5kIHNlbGVjdHMgJ1NwbGl0L0pvaW4gdmFyaWFibGUgZGVjbGFyYXRpb24nIiBjYXRlZ29yeT0iX0FIQlVMU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVLQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuY29ycmVjdGlvbi5hc3NpZ25QYXJhbVRvRmllbGQuYXNzaXN0IiBjb21tYW5kTmFtZT0iUXVpY2sgQXNzaXN0IC0gQXNzaWduIHBhcmFtZXRlciB0byB2YXIiIGRlc2NyaXB0aW9uPSJJbnZva2VzIHF1aWNrIGFzc2lzdCBhbmQgc2VsZWN0cyAnQXNzaWduIHBhcmFtZXRlciB0byB2YXInIiBjYXRlZ29yeT0iX0FIQlVMU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVLU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubHRrLnVpLnJlZmFjdG9yaW5nLmNvbW1hbmRzLnJlbmFtZVJlc291cmNlIiBjb21tYW5kTmFtZT0iUmVuYW1lIFJlc291cmNlIiBkZXNjcmlwdGlvbj0iUmVuYW1lIHRoZSBzZWxlY3RlZCByZXNvdXJjZSBhbmQgbm90aWZ5IExUSyBwYXJ0aWNpcGFudHMuIiBjYXRlZ29yeT0iX0FIQlVXQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVLaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucGRlLnVpLmltcG9ydEZyb21SZXBvc2l0b3J5IiBjb21tYW5kTmFtZT0iSW1wb3J0IFBsdWctaW4gZnJvbSBhIFJlcG9zaXRvcnkiIGRlc2NyaXB0aW9uPSJJbXBvcnRzIGEgcGx1Zy1pbiBmcm9tIGEgc291cmNlIHJlcG9zaXRvcnkiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdUt5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uUmViYXNlIiBjb21tYW5kTmFtZT0iUmViYXNlIG9uIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVMQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5jb21taXQuU2hvd0luSGlzdG9yeSIgY29tbWFuZE5hbWU9IlNob3cgaW4gSGlzdG9yeSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1TFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmNvbW1hbmQucHJldmlvdXNUYXNrIiBjb21tYW5kTmFtZT0iUHJldmlvdXMgVGFzayBDb21tYW5kIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVMaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZmlsZS5wcm9wZXJ0aWVzIiBjb21tYW5kTmFtZT0iUHJvcGVydGllcyIgZGVzY3JpcHRpb249IkRpc3BsYXkgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHNlbGVjdGVkIGl0ZW0iIGNhdGVnb3J5PSJfQUhCVU1peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdUx5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5jb3B5LnF1YWxpZmllZC5uYW1lIiBjb21tYW5kTmFtZT0iQ29weSBRdWFsaWZpZWQgTmFtZSIgZGVzY3JpcHRpb249IkNvcHkgYSBmdWxseSBxdWFsaWZpZWQgbmFtZSB0byB0aGUgc3lzdGVtIGNsaXBib2FyZCIgY2F0ZWdvcnk9Il9BSEJVTFN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1TUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmNmdC5zZXJ2ZXIudWkuaW50ZXJuYWwuYWN0aW9ucy51cGRhdGVyZXN0YXJ0bW9kdWxlY29tbWFuZCIgY29tbWFuZE5hbWU9IlVwZGF0ZSBhbmQgUmVzdGFydCIgZGVzY3JpcHRpb249Ij1VcGRhdGUgYW5kIFJlc3RhcnQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdU1TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uUmVwbGFjZVdpdGhIZWFkIiBjb21tYW5kTmFtZT0iUmVwbGFjZSB3aXRoIEhFQUQgcmV2aXNpb24iIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdU1peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuY29ycmVjdGlvbi5yZW5hbWVJbkZpbGUuYXNzaXN0IiBjb21tYW5kTmFtZT0iUXVpY2sgQXNzaXN0IC0gUmVuYW1lIGluIGZpbGUiIGRlc2NyaXB0aW9uPSJJbnZva2VzIHF1aWNrIGFzc2lzdCBhbmQgc2VsZWN0cyAnUmVuYW1lIGluIGZpbGUnIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVNeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLnV0aWxzLnJjcC5jb21tYW5kcy5vcGVuUHJlZmVyZW5jZXMiIGNvbW1hbmROYW1lPSJPcGVuIHRoZSBwcmVmZXJlbmNlcyBkaWFsb2ciIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBdU5DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMudXRpbHMucmNwLmxpbmtDb250cmlidXRpb24uaHJlZiIgbmFtZT0iVVJJIiBvcHRpb25hbD0iZmFsc2UiLz4KKyAgPC9jb21tYW5kcz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVOU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLnJlZmVyZW5jZXMuaW4uaGllcmFyY2h5IiBjb21tYW5kTmFtZT0iUmVmZXJlbmNlcyBpbiBIaWVyYXJjaHkiIGRlc2NyaXB0aW9uPSJTZWFyY2ggZm9yIHJlZmVyZW5jZXMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnQgaW4gaXRzIGhpZXJhcmNoeSIgY2F0ZWdvcnk9Il9BSEJVVkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1Tml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmFjdGl2ZUNvbnRleHRJbmZvIiBjb21tYW5kTmFtZT0iU2hvdyBhY3RpdmVDb250ZXh0IEluZm8iIGNhdGVnb3J5PSJfQUhCVU15eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdU55eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5jb21tYW5kLm1hcmtUYXNrUmVhZEdvVG9QcmV2aW91c1VucmVhZCIgY29tbWFuZE5hbWU9Ik1hcmsgVGFzayBSZWFkIGFuZCBHbyBUbyBQcmV2aW91cyBVbnJlYWQgVGFzayIgY2F0ZWdvcnk9Il9BSEJVTGl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1T0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLm9wZW4uY2FsbC5oaWVyYXJjaHkiIGNvbW1hbmROYW1lPSJPcGVuIENhbGwgSGllcmFyY2h5IiBkZXNjcmlwdGlvbj0iT3BlbiBhIGNhbGwgaGllcmFyY2h5IG9uIHRoZSBzZWxlY3RlZCBlbGVtZW50IiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVPU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLmV4dHJhY3QuY29uc3RhbnQiIGNvbW1hbmROYW1lPSJFeHRyYWN0IENvbnN0YW50IiBkZXNjcmlwdGlvbj0iRXh0cmFjdHMgYSBjb25zdGFudCBpbnRvIGEgbmV3IHN0YXRpYyBmaWVsZCBhbmQgdXNlcyB0aGUgbmV3IHN0YXRpYyBmaWVsZCIgY2F0ZWdvcnk9Il9BSEJVVHl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1T2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5zZWxlY3QudGV4dFN0YXJ0IiBjb21tYW5kTmFtZT0iU2VsZWN0IFRleHQgU3RhcnQiIGRlc2NyaXB0aW9uPSJTZWxlY3QgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgdGV4dCIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1T3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuY2xlYW51cC5kb2N1bWVudCIgY29tbWFuZE5hbWU9IkNsZWFudXAgRG9jdW1lbnQuLi4iIGRlc2NyaXB0aW9uPSJDbGVhbnVwIGRvY3VtZW50IiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVQQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLkNvbmZpZ3VyZVB1c2giIGNvbW1hbmROYW1lPSJDb25maWd1cmUgVXBzdHJlYW0gUHVzaCIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1UFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLmNvbW1hbmQubmV4dHBhZ2UiIGNvbW1hbmROYW1lPSJOZXh0IFBhZ2Ugb2YgTWVtb3J5IiBkZXNjcmlwdGlvbj0iTG9hZCBuZXh0IHBhZ2Ugb2YgbWVtb3J5IiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVQaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuY29tbWFuZC5nb3RvYWRkcmVzcyIgY29tbWFuZE5hbWU9IkdvIHRvIEFkZHJlc3MiIGRlc2NyaXB0aW9uPSJHbyB0byBBZGRyZXNzIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVQeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkud2luZG93Lm1heGltaXplUGFydCIgY29tbWFuZE5hbWU9Ik1heGltaXplIEFjdGl2ZSBWaWV3IG9yIEVkaXRvciIgZGVzY3JpcHRpb249IlRvZ2dsZXMgbWF4aW1pemUvcmVzdG9yZSBzdGF0ZSBvZiBhY3RpdmUgdmlldyBvciBlZGl0b3IiIGNhdGVnb3J5PSJfQUhCVU15eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdVFDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuY29ycmVjdGlvbi5xdWFsaWZ5RmllbGQiIGNvbW1hbmROYW1lPSJRdWljayBGaXggLSBRdWFsaWZ5IGZpZWxkIGFjY2VzcyIgZGVzY3JpcHRpb249Ikludm9rZXMgcXVpY2sgYXNzaXN0IGFuZCBzZWxlY3RzICdRdWFsaWZ5IGZpZWxkIGFjY2VzcyciIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdVFTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS53aW5kb3cubmV3RWRpdG9yIiBjb21tYW5kTmFtZT0iQ2xvbmUgRWRpdG9yIiBkZXNjcmlwdGlvbj0iT3BlbiBhbm90aGVyIGVkaXRvciBvbiB0aGUgYWN0aXZlIGVkaXRvcidzIGlucHV0IiBjYXRlZ29yeT0iX0FIQlVNeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVRaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5mb3JtYXQiIGNvbW1hbmROYW1lPSJGb3JtYXQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdVF5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5zZWFyY2gudWkub3BlblNlYXJjaERpYWxvZyIgY29tbWFuZE5hbWU9Ik9wZW4gU2VhcmNoIERpYWxvZyIgZGVzY3JpcHRpb249Ik9wZW4gdGhlIFNlYXJjaCBkaWFsb2ciIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdVJDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuY29udGVudEFzc2lzdC5wcm9wb3NhbHMiIGNvbW1hbmROYW1lPSJDb250ZW50IEFzc2lzdCIgZGVzY3JpcHRpb249IkNvbnRlbnQgQXNzaXN0IiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVSU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuZXh0ZXJuYWxpemUuc3RyaW5ncyIgY29tbWFuZE5hbWU9IkV4dGVybmFsaXplIFN0cmluZ3MiIGRlc2NyaXB0aW9uPSJGaW5kcyBhbGwgc3RyaW5ncyB0aGF0IGFyZSBub3QgZXh0ZXJuYWxpemVkIGFuZCBtb3ZlcyB0aGVtIGludG8gYSBzZXBhcmF0ZSBwcm9wZXJ0eSBmaWxlIiBjYXRlZ29yeT0iX0FIQlVMU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVSaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdGUudXAiIGNvbW1hbmROYW1lPSJVcCIgZGVzY3JpcHRpb249Ik5hdmlnYXRlIHVwIG9uZSBsZXZlbCIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1Unl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLndpbmRvdy5hY3RpdmF0ZUVkaXRvciIgY29tbWFuZE5hbWU9IkFjdGl2YXRlIEVkaXRvciIgZGVzY3JpcHRpb249IkFjdGl2YXRlIHRoZSBlZGl0b3IiIGNhdGVnb3J5PSJfQUhCVU15eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdVNDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5tMmUuY29yZS51aS5jb21tYW5kLmFkZFBsdWdpbiIgY29tbWFuZE5hbWU9IkFkZCBNYXZlbiBQbHVnaW4iIGRlc2NyaXB0aW9uPSJBZGQgTWF2ZW4gUGx1Z2luIiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVTU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ic2VkLnRhYmxldHJlZS5leHBhbmRBbGwiIGNvbW1hbmROYW1lPSJFeHBhbmQgQWxsIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVTaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLm1vZGlmeS5tZXRob2QucGFyYW1ldGVycyIgY29tbWFuZE5hbWU9IkNoYW5nZSBNZXRob2QgU2lnbmF0dXJlIiBkZXNjcmlwdGlvbj0iQ2hhbmdlIG1ldGhvZCBzaWduYXR1cmUgaW5jbHVkZXMgcGFyYW1ldGVyIG5hbWVzIGFuZCBwYXJhbWV0ZXIgb3JkZXIiIGNhdGVnb3J5PSJfQUhCVVR5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdVN5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuZGVsZXRlLmxpbmUudG8uZW5kIiBjb21tYW5kTmFtZT0iRGVsZXRlIHRvIEVuZCBvZiBMaW5lIiBkZXNjcmlwdGlvbj0iRGVsZXRlIHRvIHRoZSBlbmQgb2YgYSBsaW5lIG9mIHRleHQiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdVRDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmNvbW1pdC5DcmVhdGVCcmFuY2giIGNvbW1hbmROYW1lPSJDcmVhdGUgQnJhbmNoLi4uIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVUU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWNsZW1tYS51aS5tZXJnZVNlc3Npb25zIiBjb21tYW5kTmFtZT0iTWVyZ2UgU2Vzc2lvbnMiIGNhdGVnb3J5PSJfQUhCVU1TeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdVRpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuY29ycmVjdGlvbi5leHRyYWN0TG9jYWwuYXNzaXN0IiBjb21tYW5kTmFtZT0iUXVpY2sgQXNzaXN0IC0gRXh0cmFjdCBsb2NhbCB2YXJpYWJsZSAocmVwbGFjZSBhbGwgb2NjdXJyZW5jZXMpIiBkZXNjcmlwdGlvbj0iSW52b2tlcyBxdWljayBhc3Npc3QgYW5kIHNlbGVjdHMgJ0V4dHJhY3QgbG9jYWwgdmFyaWFibGUgKHJlcGxhY2UgYWxsIG9jY3VycmVuY2VzKSciIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdVR5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5jb21tYW5kcy5UZXJtaW5hdGUiIGNvbW1hbmROYW1lPSJUZXJtaW5hdGUiIGRlc2NyaXB0aW9uPSJUZXJtaW5hdGUiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdVVDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uU2hvd1JlcG9zaXRvcmllc1ZpZXciIGNvbW1hbmROYW1lPSJTaG93IEdpdCBSZXBvc2l0b3JpZXMgVmlldyIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1VVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmhlbHAudWkuaWdub3JlTWlzc2luZ1BsYWNlaG9sZGVycyIgY29tbWFuZE5hbWU9IkRvIG5vdCB3YXJuIG9mIG1pc3NpbmcgZG9jdW1lbnRhdGlvbiIgZGVzY3JpcHRpb249IlNldHMgdGhlIGhlbHAgcHJlZmVyZW5jZXMgdG8gbm8gbG9uZ2VyIHJlcG9ydCBhIHdhcm5pbmcgYWJvdXQgdGhlIGN1cnJlbnQgc2V0IG9mIG1pc3NpbmcgZG9jdW1lbnRzLiIgY2F0ZWdvcnk9Il9BSEJVVVN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1VWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmNvbXBhcmUuY29tcGFyZVdpdGhPdGhlciIgY29tbWFuZE5hbWU9IkNvbXBhcmUgV2l0aCBPdGhlciBSZXNvdXJjZSIgZGVzY3JpcHRpb249IkNvbXBhcmUgcmVzb3VyY2VzLCBjbGlwYm9hcmQgY29udGVudHMgb3IgZWRpdG9ycyIgY2F0ZWdvcnk9Il9BSEJVVEN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1VXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLm9wZW4uZXh0ZXJuYWwuamF2YWRvYyIgY29tbWFuZE5hbWU9Ik9wZW4gRXh0ZXJuYWwgSlNEb2MiIGRlc2NyaXB0aW9uPSJPcGVuIHRoZSBKU0RvYyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpbiBhbiBleHRlcm5hbCBicm93c2VyIiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVWQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuY2Z0LnNlcnZlci51aS5jb25uZWN0Y29tbWFuZCIgY29tbWFuZE5hbWU9IkNvbm5lY3QiIGRlc2NyaXB0aW9uPSJDb25uZWN0IHRvIFNlcnZlciIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1VlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkudGVhbS5DcmVhdGVQYXRjaCIgY29tbWFuZE5hbWU9IkNyZWF0ZSBQYXRjaCIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1Vml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXRvcnMucmV2aXNpb25zLmF1dGhvci50b2dnbGUiIGNvbW1hbmROYW1lPSJUb2dnbGUgUmV2aXNpb24gQXV0aG9yIERpc3BsYXkiIGRlc2NyaXB0aW9uPSJUb2dnbGVzIHRoZSBkaXNwbGF5IG9mIHRoZSByZXZpc2lvbiBhdXRob3IiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdVZ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuZ290by53aW5kb3dFbmQiIGNvbW1hbmROYW1lPSJXaW5kb3cgRW5kIiBkZXNjcmlwdGlvbj0iR28gdG8gdGhlIGVuZCBvZiB0aGUgd2luZG93IiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVXQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuanB0LmpwYS5lY2xpcHNlbGluay51aS5wZXJzaXN0ZW50VHlwZUFkZFZpcnR1YWxBdHRyaWJ1dGUiIGNvbW1hbmROYW1lPSJBZGQgVmlydHVhbCBBdHRyaWJ1dGUuLi4iIGNhdGVnb3J5PSJfQUhCVVBDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdVdTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5wZXJzcGVjdGl2ZXMuc2hvd1BlcnNwZWN0aXZlIiBjb21tYW5kTmFtZT0iU2hvdyBQZXJzcGVjdGl2ZSIgZGVzY3JpcHRpb249IlNob3cgYSBwYXJ0aWN1bGFyIHBlcnNwZWN0aXZlIiBjYXRlZ29yeT0iX0FIQlVWeXhRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXVXaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkucGVyc3BlY3RpdmVzLnNob3dQZXJzcGVjdGl2ZS5wZXJzcGVjdGl2ZUlkIiBuYW1lPSJQYXJhbWV0ZXIiLz4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEF1V3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnBlcnNwZWN0aXZlcy5zaG93UGVyc3BlY3RpdmUubmV3V2luZG93IiBuYW1lPSJJbiBOZXcgV2luZG93Ii8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1WEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpwdC5qcGEuZWNsaXBzZWxpbmsudWkubmV3RHluYW1pY0VudGl0eSIgY29tbWFuZE5hbWU9IkVjbGlwc2VMaW5rIER5bmFtaWMgRW50aXR5IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVYU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmdvdG8ubGluZSIgY29tbWFuZE5hbWU9IkdvIHRvIExpbmUiIGRlc2NyaXB0aW9uPSJHbyB0byBhIHNwZWNpZmllZCBsaW5lIG9mIHRleHQiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdVhpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0b3JzLnF1aWNrZGlmZi5yZXZlcnQiIGNvbW1hbmROYW1lPSJSZXZlcnQgTGluZXMiIGRlc2NyaXB0aW9uPSJSZXZlcnQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLCBibG9jayBvciBkZWxldGVkIGxpbmVzIiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVYeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLmltcGxlbWVudC5vY2N1cnJlbmNlcyIgY29tbWFuZE5hbWU9IlNlYXJjaCBJbXBsZW1lbnQgT2NjdXJyZW5jZXMgaW4gRmlsZSIgZGVzY3JpcHRpb249IlNlYXJjaCBmb3IgaW1wbGVtZW50IG9jY3VycmVuY2VzIG9mIGEgc2VsZWN0ZWQgdHlwZSIgY2F0ZWdvcnk9Il9BSEJVVkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1WUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5qYXZhQXBwbGV0U2hvcnRjdXQuZGVidWciIGNvbW1hbmROYW1lPSJEZWJ1ZyBKYXZhIEFwcGxldCIgZGVzY3JpcHRpb249IkRlYnVnIEphdmEgQXBwbGV0IiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVZU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS5nb3RvTWF0Y2hpbmdUYWciIGNvbW1hbmROYW1lPSJNYXRjaGluZyBUYWciIGRlc2NyaXB0aW9uPSJHbyB0byBNYXRjaGluZyBUYWciIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdVlpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuc2VsZWN0LmxpbmVVcCIgY29tbWFuZE5hbWU9IlNlbGVjdCBMaW5lIFVwIiBkZXNjcmlwdGlvbj0iRXh0ZW5kIHRoZSBzZWxlY3Rpb24gdG8gdGhlIHByZXZpb3VzIGxpbmUgb2YgdGV4dCIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1WXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxlZGl0b3Iuc2F2ZVRvRGF0YWJhc2VBY3Rpb24iIGNvbW1hbmROYW1lPSJTYXZlIHRvIERhdGFiYXNlIiBjYXRlZ29yeT0iX0FIQlVWaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVaQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLnN1Ym1vZHVsZS5hZGQiIGNvbW1hbmROYW1lPSJBZGQgU3VibW9kdWxlIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVaU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmN1dC5saW5lLnRvLmVuZCIgY29tbWFuZE5hbWU9IkN1dCB0byBFbmQgb2YgTGluZSIgZGVzY3JpcHRpb249IkN1dCB0byB0aGUgZW5kIG9mIGEgbGluZSBvZiB0ZXh0IiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVaaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmNvcnJlY3Rpb24uY29udmVydEFub255bW91c1RvTG9jYWwuYXNzaXN0IiBjb21tYW5kTmFtZT0iUXVpY2sgQXNzaXN0IC0gQ29udmVydCBhbm9ueW1vdXMgdG8gbG9jYWwgY2xhc3MiIGRlc2NyaXB0aW9uPSJJbnZva2VzIHF1aWNrIGFzc2lzdCBhbmQgc2VsZWN0cyAnQ29udmVydCBhbm9ueW1vdXMgdG8gbG9jYWwgY2xhc3MnIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVaeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuY29tcGFyZS5jb3B5TGVmdFRvUmlnaHQiIGNvbW1hbmROYW1lPSJDb3B5IGZyb20gTGVmdCB0byBSaWdodCIgZGVzY3JpcHRpb249IkNvcHkgQ3VycmVudCBDaGFuZ2UgZnJvbSBMZWZ0IHRvIFJpZ2h0IiBjYXRlZ29yeT0iX0FIQlVUQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVhQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkucHJvamVjdC5vcGVuUHJvamVjdCIgY29tbWFuZE5hbWU9Ik9wZW4gUHJvamVjdCIgZGVzY3JpcHRpb249Ik9wZW4gYSBwcm9qZWN0IiBjYXRlZ29yeT0iX0FIQlVVaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVhU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5oaXN0b3J5LlNob3dCbGFtZSIgY29tbWFuZE5hbWU9IlNob3cgUmV2aXNpb24gSW5mb3JtYXRpb24iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdWFpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuY29ycmVjdGlvbi5hZGRTdXBwcmVzc1dhcm5pbmdzIiBjb21tYW5kTmFtZT0iUXVpY2sgRml4IC0gQWRkIEBTdXBwcmVzc1dhcm5pbmdzIiBkZXNjcmlwdGlvbj0iSW52b2tlcyBxdWljayBmaXggYW5kIHNlbGVjdHMgJ0FkZCBAU3VwcHJlc3NXYXJuaW5ncycgIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVheXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuanB0LmpwYS51aS5wZXJzaXN0ZW50QXR0cmlidXRlQWRkVG9YbWwiIGNvbW1hbmROYW1lPSJBZGQgQXR0cmlidXRlIHRvIFhNTCIgY2F0ZWdvcnk9Il9BSEJVUEN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1YkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnRpcHMuaWRlLmNvbW1hbmQudHJpbS5vcGVuIiBjb21tYW5kTmFtZT0iVGlwIG9mIHRoZSBEYXkiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdWJTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5wdXNoLmRvd24iIGNvbW1hbmROYW1lPSJQdXNoIERvd24iIGRlc2NyaXB0aW9uPSJNb3ZlIG1lbWJlcnMgdG8gc3ViY2xhc3NlcyIgY2F0ZWdvcnk9Il9BSEJVUVN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1Yml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5zZWFyY2gud3JpdGUuYWNjZXNzLmluLnByb2plY3QiIGNvbW1hbmROYW1lPSJXcml0ZSBBY2Nlc3MgaW4gUHJvamVjdCIgZGVzY3JpcHRpb249IlNlYXJjaCBmb3Igd3JpdGUgcmVmZXJlbmNlcyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpbiB0aGUgZW5jbG9zaW5nIHByb2plY3QiIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdWJ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lY2xlbW1hLnVpLnNlbGVjdENvdW50ZXJzIiBjb21tYW5kTmFtZT0iU2VsZWN0IENvdW50ZXJzIiBjYXRlZ29yeT0iX0FIQlVNU3hRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXVjQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0idHlwZSIgbmFtZT0idHlwZSIgb3B0aW9uYWw9ImZhbHNlIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1Y1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnByb2plY3QucHJvcGVydGllcyIgY29tbWFuZE5hbWU9IlByb3BlcnRpZXMiIGRlc2NyaXB0aW9uPSJEaXNwbGF5IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBzZWxlY3RlZCBpdGVtJ3MgcHJvamVjdCAiIGNhdGVnb3J5PSJfQUhCVVVpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdWNpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmhpc3RvcnkuQ29tcGFyZVZlcnNpb25zSW5UcmVlIiBjb21tYW5kTmFtZT0iQ29tcGFyZSBpbiBUcmVlIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVjeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuanB0LmpwYS51aS5wZXJzaXN0ZW50VHlwZU1hcEFzIiBjb21tYW5kTmFtZT0iTWFwIEFzIiBjYXRlZ29yeT0iX0FIQlVQQ3hRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXVkQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0icGVyc2lzdGVudFR5cGVNYXBwaW5nS2V5IiBuYW1lPSJtYXBwaW5nIGtleSIgb3B0aW9uYWw9ImZhbHNlIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1ZFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmNvbW1vbi5jb250cmlidXRlIiBjb21tYW5kTmFtZT0iQ29udHJpYnV0ZSIgZGVzY3JpcHRpb249IkNvbnRyaWJ1dGUgdG8gdGhlIGRldmVsb3BtZW50IGFuZCBzdWNjZXNzIG9mIHRoZSBFY2xpcHNlIElERSEiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdWRpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsZWRpdG9yLkRNTERpYWxvZ1NlbGVjdGlvbkFjdGlvbiIgY29tbWFuZE5hbWU9IkVkaXQgaW4gU1FMIFF1ZXJ5IEJ1aWxkZXIuLi4iIGNhdGVnb3J5PSJfQUhCVVZpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdWR5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuc2VsZWN0LmNvbHVtblByZXZpb3VzIiBjb21tYW5kTmFtZT0iU2VsZWN0IFByZXZpb3VzIENvbHVtbiIgZGVzY3JpcHRpb249IlNlbGVjdCB0aGUgcHJldmlvdXMgY29sdW1uIiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVlQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuanB0LmRid3MudWkuZ2VuZXJhdGVEYndzIiBjb21tYW5kTmFtZT0iR2VuZXJhdGUgRGF0YWJhc2UgV2ViIFNlcnZpY2VzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVlU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucGRlLnVpLmp1bml0V29ya2JlbmNoU2hvcnRjdXQuZGVidWciIGNvbW1hbmROYW1lPSJEZWJ1ZyBKVW5pdCBQbHVnLWluIFRlc3QiIGRlc2NyaXB0aW9uPSJEZWJ1ZyBKVW5pdCBQbHVnLWluIFRlc3QiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdWVpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuY29ycmVjdGlvbi5leHRyYWN0TG9jYWxOb3RSZXBsYWNlT2NjdXJyZW5jZXMuYXNzaXN0IiBjb21tYW5kTmFtZT0iUXVpY2sgQXNzaXN0IC0gRXh0cmFjdCBsb2NhbCB2YXJpYWJsZSIgZGVzY3JpcHRpb249Ikludm9rZXMgcXVpY2sgYXNzaXN0IGFuZCBzZWxlY3RzICdFeHRyYWN0IGxvY2FsIHZhcmlhYmxlJyIgY2F0ZWdvcnk9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1ZXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxlZGl0b3IuYXR0YWNoUHJvZmlsZUFjdGlvbiIgY29tbWFuZE5hbWU9IlNldCBDb25uZWN0aW9uIEluZm9ybWF0aW9uIiBjYXRlZ29yeT0iX0FIQlVWaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVmQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5SZXBvc2l0b3JpZXNUb2dnbGVCcmFuY2hIaWVyYXJjaHkiIGNvbW1hbmROYW1lPSJUb2dnbGUgQnJhbmNoIFJlcHJlc2VudGF0aW9uIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVmU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubHRrLnVpLnJlZmFjdG9yaW5nLmNvbW1hbmRzLmRlbGV0ZVJlc291cmNlcyIgY29tbWFuZE5hbWU9IkRlbGV0ZSBSZXNvdXJjZXMiIGRlc2NyaXB0aW9uPSJEZWxldGUgdGhlIHNlbGVjdGVkIHJlc291cmNlcyBhbmQgbm90aWZ5IExUSyBwYXJ0aWNpcGFudHMuIiBjYXRlZ29yeT0iX0FIQlVXQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVmaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZmlsZS5wcmludCIgY29tbWFuZE5hbWU9IlByaW50IiBkZXNjcmlwdGlvbj0iUHJpbnQiIGNhdGVnb3J5PSJfQUhCVU1peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdWZ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuY29tbWFuZHMuQWxsUmVmZXJlbmNlcyIgY29tbWFuZE5hbWU9IkFsbCBSZWZlcmVuY2VzIiBkZXNjcmlwdGlvbj0iSW5zcGVjdCBhbGwgcmVmZXJlbmNlcyB0byB0aGUgc2VsZWN0ZWQgb2JqZWN0IiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVnQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0Lmp1bml0Lmp1bml0U2hvcnRjdXQucmVydW5MYXN0IiBjb21tYW5kTmFtZT0iUmVydW4gSlVuaXQgVGVzdCIgZGVzY3JpcHRpb249IlJlcnVuIEpVbml0IFRlc3QiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdWdTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmZvcm1hdC5hY3RpdmUuZWxlbWVudHMiIGNvbW1hbmROYW1lPSJGb3JtYXQgQWN0aXZlIEVsZW1lbnRzIiBkZXNjcmlwdGlvbj0iRm9ybWF0IGFjdGl2ZSBlbGVtZW50cyIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1Z2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRhdGF0b29scy5jb25uZWN0aXZpdHkuY29tbWFuZHMuaW1wb3J0IiBjb21tYW5kTmFtZT0iSW1wb3J0IFByb2ZpbGVzIENvbW1hbmQiIGRlc2NyaXB0aW9uPSJDb21tYW5kIHRvIGltcG9ydCBjb25uZWN0aW9uIHByb2ZpbGVzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVneXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LnNob3dSdWxlckNvbnRleHRNZW51IiBjb21tYW5kTmFtZT0iU2hvdyBSdWxlciBDb250ZXh0IE1lbnUiIGRlc2NyaXB0aW9uPSJTaG93IHRoZSBjb250ZXh0IG1lbnUgZm9yIHRoZSBydWxlciIgY2F0ZWdvcnk9Il9BSEJVTXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1aEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5zZWFyY2gucmVmZXJlbmNlcy5pbi53b3JraW5nLnNldCIgY29tbWFuZE5hbWU9IlJlZmVyZW5jZXMgaW4gV29ya2luZyBTZXQiIGRlc2NyaXB0aW9uPSJTZWFyY2ggZm9yIHJlZmVyZW5jZXMgdG8gdGhlIHNlbGVjdGVkIGVsZW1lbnQgaW4gYSB3b3JraW5nIHNldCIgY2F0ZWdvcnk9Il9BSEJVVkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1aFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmNvbW1hbmQudGFzay5jbGVhck91dGdvaW5nIiBjb21tYW5kTmFtZT0iQ2xlYXIgT3V0Z29pbmcgQ2hhbmdlcyIgY2F0ZWdvcnk9Il9BSEJVTGl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1aGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5mb2xkaW5nLmNvbGxhcHNlIiBjb21tYW5kTmFtZT0iQ29sbGFwc2UiIGRlc2NyaXB0aW9uPSJDb2xsYXBzZXMgdGhlIGZvbGRlZCByZWdpb24gYXQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVoeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZXBwLm1wYy51aS5jb21tYW5kLnNob3dGYXZvcml0ZXMiIGNvbW1hbmROYW1lPSJFY2xpcHNlIE1hcmtldHBsYWNlIEZhdm9yaXRlcyIgZGVzY3JpcHRpb249Ik9wZW4gTWFya2V0cGxhY2UgRmF2b3JpdGVzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVpQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LnNtYXJ0RW50ZXJJbnZlcnNlIiBjb21tYW5kTmFtZT0iSW5zZXJ0IExpbmUgQWJvdmUgQ3VycmVudCBMaW5lIiBkZXNjcmlwdGlvbj0iQWRkcyBhIG5ldyBsaW5lIGFib3ZlIHRoZSBjdXJyZW50IGxpbmUiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdWlTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS53aW5kb3cuc3B5IiBjb21tYW5kTmFtZT0iU2hvdyBDb250cmlidXRpbmcgUGx1Zy1pbiIgZGVzY3JpcHRpb249IlNob3dzIGNvbnRyaWJ1dGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBlbGVtZW50IiBjYXRlZ29yeT0iX0FIQlVNeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVpaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuaGVscC5oZWxwU2VhcmNoIiBjb21tYW5kTmFtZT0iSGVscCBTZWFyY2giIGRlc2NyaXB0aW9uPSJPcGVuIHRoZSBoZWxwIHNlYXJjaCIgY2F0ZWdvcnk9Il9BSEJVVVN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1aXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5pbmZlci50eXBlLmFyZ3VtZW50cyIgY29tbWFuZE5hbWU9IkluZmVyIEdlbmVyaWMgVHlwZSBBcmd1bWVudHMiIGRlc2NyaXB0aW9uPSJJbmZlciB0eXBlIGFyZ3VtZW50cyBmb3IgcmVmZXJlbmNlcyB0byBnZW5lcmljIGNsYXNzZXMgYW5kIHJlbW92ZSB1bm5lY2Vzc2FyeSBjYXN0cyIgY2F0ZWdvcnk9Il9BSEJVVHl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1akN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5nb3RvLmxpbmVEb3duIiBjb21tYW5kTmFtZT0iTGluZSBEb3duIiBkZXNjcmlwdGlvbj0iR28gZG93biBvbmUgbGluZSBvZiB0ZXh0IiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVqU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5jb21taXQuQ2hlY2tvdXQiIGNvbW1hbmROYW1lPSJDaGVjayBPdXQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdWppeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5tMmUuYWN0aW9ucy5MaWZlQ3ljbGVDbGVhbi5ydW4iIGNvbW1hbmROYW1lPSJSdW4gTWF2ZW4gQ2xlYW4iIGRlc2NyaXB0aW9uPSJSdW4gTWF2ZW4gQ2xlYW4iIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdWp5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuZ290b0xhc3RFZGl0UG9zaXRpb24iIGNvbW1hbmROYW1lPSJMYXN0IEVkaXQgTG9jYXRpb24iIGRlc2NyaXB0aW9uPSJMYXN0IGVkaXQgbG9jYXRpb24iIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdWtDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQub3Blbi5oeXBlcmxpbmsiIGNvbW1hbmROYW1lPSJPcGVuIEh5cGVybGluayIgZGVzY3JpcHRpb249Ik9wZW5zIHRoZSBoeXBlcmxpbmsgYXQgdGhlIGNhcmV0IGxvY2F0aW9uIG9yIG9wZW5zIGEgY2hvb3NlciBpZiBtb3JlIHRoYW4gb25lIGh5cGVybGluayBpcyBhdmFpbGFibGUiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdWtTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi53aWtpdGV4dC51aS5jb252ZXJ0VG9FY2xpcHNlSGVscENvbW1hbmQiIGNvbW1hbmROYW1lPSJHZW5lcmF0ZSBFY2xpcHNlIEhlbHAgKCouaHRtbCBhbmQgKi10b2MueG1sKSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1a2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLnNlYXJjaC5leGNlcHRpb24ub2NjdXJyZW5jZXMiIGNvbW1hbmROYW1lPSJTZWFyY2ggRXhjZXB0aW9uIE9jY3VycmVuY2VzIGluIEZpbGUiIGRlc2NyaXB0aW9uPSJTZWFyY2ggZm9yIGV4Y2VwdGlvbiBvY2N1cnJlbmNlcyBvZiBhIHNlbGVjdGVkIGV4Y2VwdGlvbiB0eXBlIiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVreXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuY29tbWFuZC5wcmV2cGFnZSIgY29tbWFuZE5hbWU9IlByZXZpb3VzIFBhZ2Ugb2YgTWVtb3J5IiBkZXNjcmlwdGlvbj0iTG9hZCBwcmV2aW91cyBwYWdlIG9mIG1lbW9yeSIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1bEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5jb21tYW5kcy5Gb3JjZVJldHVybiIgY29tbWFuZE5hbWU9IkZvcmNlIFJldHVybiIgZGVzY3JpcHRpb249IkZvcmNlcyByZXR1cm4gZnJvbSBtZXRob2Qgd2l0aCB2YWx1ZSBvZiBzZWxlY3RlZCBleHByZXNzaW9uICIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1bFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmlkZS5jb25maWd1cmVGaWx0ZXJzIiBjb21tYW5kTmFtZT0iRmlsdGVycy4uLiIgZGVzY3JpcHRpb249IkNvbmZpZ3VyZSB0aGUgZmlsdGVycyB0byBhcHBseSB0byB0aGUgbWFya2VycyB2aWV3IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVsaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWNsZW1tYS51aS5pbXBvcnRTZXNzaW9uIiBjb21tYW5kTmFtZT0iSW1wb3J0IFNlc3Npb24uLi4iIGNhdGVnb3J5PSJfQUhCVU1TeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdWx5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0ZS5wcmV2aW91c1RhYiIgY29tbWFuZE5hbWU9IlByZXZpb3VzIFRhYiIgZGVzY3JpcHRpb249IlN3aXRjaCB0byB0aGUgcHJldmlvdXMgdGFiIiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVtQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLmRlY2xhcmF0aW9ucy5pbi5oaWVyYXJjaHkiIGNvbW1hbmROYW1lPSJEZWNsYXJhdGlvbiBpbiBIaWVyYXJjaHkiIGRlc2NyaXB0aW9uPSJTZWFyY2ggZm9yIGRlY2xhcmF0aW9ucyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpbiBpdHMgaGllcmFyY2h5IiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVtU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZGlhbG9ncy5vcGVuTWVzc2FnZURpYWxvZyIgY29tbWFuZE5hbWU9Ik9wZW4gTWVzc2FnZSBEaWFsb2ciIGRlc2NyaXB0aW9uPSJPcGVuIGEgTWVzc2FnZSBEaWFsb2ciIGNhdGVnb3J5PSJfQUhCVU55eFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBdW1peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJ0aXRsZSIgbmFtZT0iVGl0bGUiLz4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEF1bXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im1lc3NhZ2UiIG5hbWU9Ik1lc3NhZ2UiLz4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEF1bkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9ImltYWdlVHlwZSIgbmFtZT0iSW1hZ2UgVHlwZSBDb25zdGFudCIgdHlwZUlkPSJvcmcuZWNsaXBzZS51aS5kaWFsb2dzLkludGVnZXIiLz4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEF1blN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9ImRlZmF1bHRJbmRleCIgbmFtZT0iRGVmYXVsdCBCdXR0b24gSW5kZXgiIHR5cGVJZD0ib3JnLmVjbGlwc2UudWkuZGlhbG9ncy5JbnRlZ2VyIi8+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBdW5peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJidXR0b25MYWJlbDAiIG5hbWU9IkZpcnN0IEJ1dHRvbiBMYWJlbCIvPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXVueXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iYnV0dG9uTGFiZWwxIiBuYW1lPSJTZWNvbmQgQnV0dG9uIExhYmVsIi8+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBdW9DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJidXR0b25MYWJlbDIiIG5hbWU9IlRoaXJkIEJ1dHRvbiBMYWJlbCIvPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXVvU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iYnV0dG9uTGFiZWwzIiBuYW1lPSJGb3VydGggQnV0dG9uIExhYmVsIi8+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBdW9peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJjYW5jZWxSZXR1cm5zIiBuYW1lPSJSZXR1cm4gVmFsdWUgb24gQ2FuY2VsIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1b3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmdlbmVyaWNlZGl0b3IuZmluZFJlZmVyZW5jZXMiIGNvbW1hbmROYW1lPSJGaW5kIFJlZmVyZW5jZXMiIGRlc2NyaXB0aW9uPSJGaW5kIG90aGVyIGNvZGUgaXRlbXMgcmVmZXJlbmNpbmcgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgaXRlbS4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdXBDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuZ290by5saW5lRW5kIiBjb21tYW5kTmFtZT0iTGluZSBFbmQiIGRlc2NyaXB0aW9uPSJHbyB0byB0aGUgZW5kIG9mIHRoZSBsaW5lIG9mIHRleHQiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdXBTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmNvbW1pdC5DcmVhdGVUYWciIGNvbW1hbmROYW1lPSJDcmVhdGUgVGFnLi4uIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVwaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuZXh0cmFjdC5tZXRob2QiIGNvbW1hbmROYW1lPSJFeHRyYWN0IEZ1bmN0aW9uIiBkZXNjcmlwdGlvbj0iRXh0cmFjdCBhIHNldCBvZiBzdGF0ZW1lbnRzIG9yIGFuIGV4cHJlc3Npb24gaW50byBhIG5ldyBmdW5jdGlvbiBhbmQgdXNlIHRoZSBuZXcgZnVuY3Rpb24iIGNhdGVnb3J5PSJfQUhCVVFTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdXB5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qcHQuanBhLnVpLmdlbmVyYXRlRERMIiBjb21tYW5kTmFtZT0iR2VuZXJhdGUgVGFibGVzIGZyb20gRW50aXRpZXMuLi4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdXFDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnJlZmVyZW5jZWRGaWxlRXJyb3JzIiBjb21tYW5kTmFtZT0iU2hvdyBEZXRhaWxzLi4uIiBkZXNjcmlwdGlvbj0iU2hvdyBEZXRhaWxzLi4uIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVxU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGVkaXRvci5ydW5BY3Rpb24iIGNvbW1hbmROYW1lPSJSdW4iIGNhdGVnb3J5PSJfQUhCVVZpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdXFpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5jb21tYW5kcy5SdW5MYXN0IiBjb21tYW5kTmFtZT0iUnVuIiBkZXNjcmlwdGlvbj0iTGF1bmNoIGluIHJ1biBtb2RlIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVxeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZXh0ZXJuYWxUb29scy5jb21tYW5kcy5PcGVuRXh0ZXJuYWxUb29sc0NvbmZpZ3VyYXRpb25zIiBjb21tYW5kTmFtZT0iRXh0ZXJuYWwgVG9vbHMuLi4iIGRlc2NyaXB0aW9uPSJPcGVuIGV4dGVybmFsIHRvb2xzIGxhdW5jaCBjb25maWd1cmF0aW9uIGRpYWxvZyIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1ckN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5jb21tYW5kLk9wZW5Gcm9tQ2xpcGJvYXJkIiBjb21tYW5kTmFtZT0iT3BlbiBmcm9tIENsaXBib2FyZCIgZGVzY3JpcHRpb249Ik9wZW5zIGEgSmF2YSBlbGVtZW50IG9yIGEgSmF2YSBzdGFjayB0cmFjZSBmcm9tIGNsaXBib2FyZCIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1clN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnBkZS51aS5pbnRlcm5hdGlvbmFsaXplIiBjb21tYW5kTmFtZT0iSW50ZXJuYXRpb25hbGl6ZSBQbHVnLWlucyIgZGVzY3JpcHRpb249IlNldHMgdXAgaW50ZXJuYXRpb25hbGl6YXRpb24gZm9yIGEgcGx1Zy1pbiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1cml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5kZWxldGVQcmV2aW91cyIgY29tbWFuZE5hbWU9IkRlbGV0ZSBQcmV2aW91cyIgZGVzY3JpcHRpb249IkRlbGV0ZSB0aGUgcHJldmlvdXMgY2hhcmFjdGVyIiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVyeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLkNvbXBhcmVXaXRoUHJldmlvdXMiIGNvbW1hbmROYW1lPSJDb21wYXJlIHdpdGggUHJldmlvdXMgUmV2aXNpb24iIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdXNDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuc2VsZWN0LmNvbHVtbk5leHQiIGNvbW1hbmROYW1lPSJTZWxlY3QgTmV4dCBDb2x1bW4iIGRlc2NyaXB0aW9uPSJTZWxlY3QgdGhlIG5leHQgY29sdW1uIiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVzU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLnNlYXJjaC5yZWFkLmFjY2Vzcy5pbi53b3Jrc3BhY2UiIGNvbW1hbmROYW1lPSJSZWFkIEFjY2VzcyBpbiBXb3Jrc3BhY2UiIGRlc2NyaXB0aW9uPSJTZWFyY2ggZm9yIHJlYWQgcmVmZXJlbmNlcyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpbiB0aGUgd29ya3NwYWNlIiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVzaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLmltcGxlbWVudG9ycy5pbi53b3Jrc3BhY2UiIGNvbW1hbmROYW1lPSJJbXBsZW1lbnRvcnMgaW4gV29ya3NwYWNlIiBkZXNjcmlwdGlvbj0iU2VhcmNoIGZvciBpbXBsZW1lbnRvcnMgb2YgdGhlIHNlbGVjdGVkIGludGVyZmFjZSIgY2F0ZWdvcnk9Il9BSEJVVkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1c3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLmNvbW1hbmRzLlRlcm1pbmF0ZUFuZFJlbGF1bmNoIiBjb21tYW5kTmFtZT0iVGVybWluYXRlIGFuZCBSZWxhdW5jaCIgZGVzY3JpcHRpb249IlRlcm1pbmF0ZSBhbmQgUmVsYXVuY2giIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdXRDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuSmF2YUhpZXJhcmNoeVBlcnNwZWN0aXZlIiBjb21tYW5kTmFtZT0iSmF2YSBUeXBlIEhpZXJhcmNoeSIgZGVzY3JpcHRpb249IlNob3cgdGhlIEphdmEgVHlwZSBIaWVyYXJjaHkgcGVyc3BlY3RpdmUiIGNhdGVnb3J5PSJfQUhCVVZ5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdXRTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5zZWFyY2guZGVjbGFyYXRpb25zLmluLnByb2plY3QiIGNvbW1hbmROYW1lPSJEZWNsYXJhdGlvbiBpbiBQcm9qZWN0IiBkZXNjcmlwdGlvbj0iU2VhcmNoIGZvciBkZWNsYXJhdGlvbnMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnQgaW4gdGhlIGVuY2xvc2luZyBwcm9qZWN0IiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXV0aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLnN1cnJvdW5kLndpdGgudHJ5Lm11bHRpY2F0Y2giIGNvbW1hbmROYW1lPSJTdXJyb3VuZCB3aXRoIHRyeS9tdWx0aS1jYXRjaCBCbG9jayIgZGVzY3JpcHRpb249IlN1cnJvdW5kIHRoZSBzZWxlY3RlZCB0ZXh0IHdpdGggYSB0cnkvbXVsdGktY2F0Y2ggYmxvY2siIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdXR5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uVGFnIiBjb21tYW5kTmFtZT0iVGFnIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXV1Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLk5vQXNzdW1lVW5jaGFuZ2VkIiBjb21tYW5kTmFtZT0iTm8gQXNzdW1lIFVuY2hhbmdlZCIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1dVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLkphdmFkb2NWaWV3IiBjb21tYW5kTmFtZT0iRG9jdW1lbnRhdGlvbiIgZGVzY3JpcHRpb249IlNob3cgdGhlIEphdmFTY3JpcHQgRG9jdW1lbnRhdGlvbiB2aWV3IiBjYXRlZ29yeT0iX0FIQlVReXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXV1aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuY29tbWFuZHMuUmVtb3ZlQWxsQnJlYWtwb2ludHMiIGNvbW1hbmROYW1lPSJSZW1vdmUgQWxsIEJyZWFrcG9pbnRzIiBkZXNjcmlwdGlvbj0iUmVtb3ZlcyBhbGwgYnJlYWtwb2ludHMiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdXV5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IucmVzb3VyY2VzLm5lc3RlZC5jaGFuZ2VQcm9qZWN0UHJlc2VudGF0aW9uIiBjb21tYW5kTmFtZT0iUCZhbXA7cm9qZWN0cyBQcmVzZW50YXRpb24iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBdXZDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IucmVzb3VyY2VzLm5lc3RlZC5lbmFibGVkIiBuYW1lPSImYW1wO0hpZXJhcmNoaWNhbCIvPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXV2U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuY29tbWFuZHMucmFkaW9TdGF0ZVBhcmFtZXRlciIgbmFtZT0iTmVzdGVkIFByb2plY3QgdmlldyAtIFJhZGlvIFN0YXRlIiBvcHRpb25hbD0iZmFsc2UiLz4KKyAgPC9jb21tYW5kcz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXV2aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkud2luZG93LnNob3dLZXlBc3Npc3QiIGNvbW1hbmROYW1lPSJTaG93IEtleSBBc3Npc3QiIGRlc2NyaXB0aW9uPSJTaG93IHRoZSBrZXkgYXNzaXN0IGRpYWxvZyIgY2F0ZWdvcnk9Il9BSEJVTXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1dnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmdlbmVyaWNlZGl0b3IudG9nZ2xlaGlnaGxpZ2h0IiBjb21tYW5kTmFtZT0iVG9nZ2xlIEhpZ2hsaWdodCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1d0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5pbnRyb2R1Y2UucGFyYW1ldGVyLm9iamVjdCIgY29tbWFuZE5hbWU9IkludHJvZHVjZSBQYXJhbWV0ZXIgT2JqZWN0IiBkZXNjcmlwdGlvbj0iSW50cm9kdWNlIGEgcGFyYW1ldGVyIG9iamVjdCB0byBhIHNlbGVjdGVkIG1ldGhvZCIgY2F0ZWdvcnk9Il9BSEJVVHl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1d1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmdlZi56b29tX291dCIgY29tbWFuZE5hbWU9Ilpvb20gT3V0IiBkZXNjcmlwdGlvbj0iWm9vbSBPdXQiIGNhdGVnb3J5PSJfQUhCVVdTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdXdpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuY29tbWFuZHMub3BlbkVsZW1lbnRJbkVkaXRvciIgY29tbWFuZE5hbWU9Ik9wZW4gSmF2YSBFbGVtZW50IiBkZXNjcmlwdGlvbj0iT3BlbiBhIEphdmEgZWxlbWVudCBpbiBpdHMgZWRpdG9yIiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXV3eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iZWxlbWVudFJlZiIgbmFtZT0iSmF2YSBlbGVtZW50IHJlZmVyZW5jZSIgdHlwZUlkPSJvcmcuZWNsaXBzZS5qZHQudWkuY29tbWFuZHMuamF2YUVsZW1lbnRSZWZlcmVuY2UiIG9wdGlvbmFsPSJmYWxzZSIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdXhDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS51bmNvbW1lbnQiIGNvbW1hbmROYW1lPSJVbmNvbW1lbnQiIGRlc2NyaXB0aW9uPSJVbmNvbW1lbnQgdGhlIHNlbGVjdGVkIEphdmFTY3JpcHQgY29tbWVudCBsaW5lcyIgY2F0ZWdvcnk9Il9BSEJVTFN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1eFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5yZXN1bHQucmVtb3ZlSW5zdGFuY2UiIGNvbW1hbmROYW1lPSJSZW1vdmUgUmVzdWx0IiBjYXRlZ29yeT0iX0FIQlVOQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXV4aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLkFkZFRvSW5kZXgiIGNvbW1hbmROYW1lPSJBZGQgdG8gSW5kZXgiIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdXh5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi5kaXNjb3ZlcnkudWkuZGlzY292ZXJ5V2l6YXJkQ29tbWFuZCIgY29tbWFuZE5hbWU9IkRpc2NvdmVyeSBXaXphcmQiIGRlc2NyaXB0aW9uPSJzaG93cyB0aGUgY29ubmVjdG9yIGRpc2NvdmVyeSB3aXphcmQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdXlDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5zZWFyY2gucmVhZC5hY2Nlc3MuaW4ud29ya2luZy5zZXQiIGNvbW1hbmROYW1lPSJSZWFkIEFjY2VzcyBpbiBXb3JraW5nIFNldCIgZGVzY3JpcHRpb249IlNlYXJjaCBmb3IgcmVhZCByZWZlcmVuY2VzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50IGluIGEgd29ya2luZyBzZXQiIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdXlTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qcHQuanBhLnVpLnBlcnNpc3RlbnRBdHRyaWJ1dGVBZGRUb1htbEFuZE1hcCIgY29tbWFuZE5hbWU9IkFkZCBBdHRyaWJ1dGUgdG8gWE1MIGFuZCBNYXAuLi4iIGNhdGVnb3J5PSJfQUhCVVBDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdXlpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5idWlsZHNoaXAudWkuY29tbWFuZHMucmVmcmVzaHRhc2t2aWV3IiBjb21tYW5kTmFtZT0iUmVmcmVzaCBWaWV3IChHcmFkbGUgVGFza3MpIiBkZXNjcmlwdGlvbj0iUmVmcmVzaGVzIHRoZSBHcmFkbGUgVGFza3MgdmlldyIgY2F0ZWdvcnk9Il9BSEJVUXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1eXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudG9nZ2xlLmNvbW1lbnQiIGNvbW1hbmROYW1lPSJUb2dnbGUgQ29tbWVudCIgZGVzY3JpcHRpb249IlRvZ2dsZSBDb21tZW50IiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXV6Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuaGVscC50aXBzQW5kVHJpY2tzQWN0aW9uIiBjb21tYW5kTmFtZT0iVGlwcyBhbmQgVHJpY2tzIiBkZXNjcmlwdGlvbj0iT3BlbiB0aGUgdGlwcyBhbmQgdHJpY2tzIGhlbHAgcGFnZSIgY2F0ZWdvcnk9Il9BSEJVVVN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1elN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5mb3JtYXQiIGNvbW1hbmROYW1lPSJGb3JtYXQiIGRlc2NyaXB0aW9uPSJGb3JtYXQgdGhlIHNlbGVjdGVkIHRleHQiIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdXppeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuc21hcnRFbnRlciIgY29tbWFuZE5hbWU9Ikluc2VydCBMaW5lIEJlbG93IEN1cnJlbnQgTGluZSIgZGVzY3JpcHRpb249IkFkZHMgYSBuZXcgbGluZSBiZWxvdyB0aGUgY3VycmVudCBsaW5lIiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXV6eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuc2VsZWN0LnByZXZpb3VzIiBjb21tYW5kTmFtZT0iU2VsZWN0IFByZXZpb3VzIEVsZW1lbnQiIGRlc2NyaXB0aW9uPSJFeHBhbmQgc2VsZWN0aW9uIHRvIGluY2x1ZGUgcHJldmlvdXMgc2libGluZyIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1MEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5nb3RvLmxpbmVTdGFydCIgY29tbWFuZE5hbWU9IkxpbmUgU3RhcnQiIGRlc2NyaXB0aW9uPSJHbyB0byB0aGUgc3RhcnQgb2YgdGhlIGxpbmUgb2YgdGV4dCIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1MFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLmVkaXRvci5zeW5jaHJvbml6ZVByZWZlcmVuY2VzIiBjb21tYW5kTmFtZT0iU3luY2hyb25pemUgUHJlZmVyZW5jZXMiIGNhdGVnb3J5PSJfQUhCVVJ5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdTBpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLmNtbmQuY29udGVudG1vZGVsLnN5Y2giIGNvbW1hbmROYW1lPSJTeW5jaCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1MHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuUmVwb3NpdG9yaWVzVmlld0NvbmZpZ3VyZUJyYW5jaCIgY29tbWFuZE5hbWU9IkNvbmZpZ3VyZSBCcmFuY2giIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdTFDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5jb21tYW5kcy5TdXNwZW5kIiBjb21tYW5kTmFtZT0iU3VzcGVuZCIgZGVzY3JpcHRpb249IlN1c3BlbmQiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdTFTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuaGlwcGllQ29tcGxldGlvbiIgY29tbWFuZE5hbWU9IldvcmQgQ29tcGxldGlvbiIgZGVzY3JpcHRpb249IkNvbnRleHQgaW5zZW5zaXRpdmUgY29tcGxldGlvbiIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1MWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC54c2QudWkucmVmYWN0b3IucmVuYW1lVGFyZ2V0TmFtZXNwYWNlIiBjb21tYW5kTmFtZT0iUmVuYW1lIFRhcmdldCBOYW1lc3BhY2UiIGRlc2NyaXB0aW9uPSJDaGFuZ2VzIHRoZSB0YXJnZXQgbmFtZXNwYWNlIG9mIHRoZSBzY2hlbWEiIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdTF5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuZm9sZGluZy5jb2xsYXBzZUNvbW1lbnRzIiBjb21tYW5kTmFtZT0iQ29sbGFwc2UgQ29tbWVudHMiIGRlc2NyaXB0aW9uPSJDb2xsYXBzZSBhbGwgY29tbWVudHMiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdTJDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS50ZWFtLnVpLnN5bmNocm9uaXplTGFzdCIgY29tbWFuZE5hbWU9IlJlcGVhdCBsYXN0IHN5bmNocm9uaXphdGlvbiIgZGVzY3JpcHRpb249IlJlcGVhdCB0aGUgbGFzdCBzeW5jaHJvbml6YXRpb24iIGNhdGVnb3J5PSJfQUhCVVFpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdTJTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZ2VuZXJhdGUuamF2YWRvYyIgY29tbWFuZE5hbWU9IkdlbmVyYXRlIEphdmFkb2MiIGRlc2NyaXB0aW9uPSJHZW5lcmF0ZXMgSmF2YWRvYyBmb3IgYSBzZWxlY3RhYmxlIHNldCBvZiBKYXZhIHJlc291cmNlcyIgY2F0ZWdvcnk9Il9BSEJVVWl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1Mml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuUmVwb3NpdG9yaWVzVmlld0NvbmZpZ3VyZUdlcnJpdFJlbW90ZSIgY29tbWFuZE5hbWU9IkdlcnJpdCBDb25maWd1cmF0aW9uLi4uIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXUyeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmNvbW1hbmRzLlN0ZXBJbnRvU2VsZWN0aW9uIiBjb21tYW5kTmFtZT0iU3RlcCBJbnRvIFNlbGVjdGlvbiIgZGVzY3JpcHRpb249IlN0ZXAgaW50byB0aGUgY3VycmVudCBzZWxlY3RlZCBzdGF0ZW1lbnQiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdTNDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5idWlsZHNoaXAudWkuc2hvcnRjdXQudGVzdC5ydW4iIGNvbW1hbmROYW1lPSJSdW4gR3JhZGxlIFRlc3QiIGRlc2NyaXB0aW9uPSJSdW4gR3JhZGxlIHRlc3QgYmFzZWQgb24gdGhlIGN1cnJlbnQgc2VsZWN0aW9uIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXUzU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuaWRlLmNvbmZpZ3VyZUNvbHVtbnMiIGNvbW1hbmROYW1lPSJDb25maWd1cmUgQ29sdW1ucy4uLiIgZGVzY3JpcHRpb249IkNvbmZpZ3VyZSB0aGUgY29sdW1ucyBpbiB0aGUgbWFya2VycyB2aWV3IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXUzaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLlJlcGxhY2VXaXRoQ29tbWl0IiBjb21tYW5kTmFtZT0iUmVwbGFjZSB3aXRoIGNvbW1pdCIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1M3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpzdC5wYWdlZGVzaWduZXIuZGVzaWduIiBjb21tYW5kTmFtZT0iR3JhcGhpY2FsIERlc2lnbmVyIiBjYXRlZ29yeT0iX0FIQlVSQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXU0Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudG0udGVybWluYWwucXVpY2thY2Nlc3MiIGNvbW1hbmROYW1lPSJRdWljayBBY2Nlc3MiIGNhdGVnb3J5PSJfQUhCVVV5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdTRTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5jb21tYW5kcy5EZWJ1Z0xhc3QiIGNvbW1hbmROYW1lPSJEZWJ1ZyIgZGVzY3JpcHRpb249IkxhdW5jaCBpbiBkZWJ1ZyBtb2RlIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXU0aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4ud2lraXRleHQudWkuY29udmVydFRvSHRtbENvbW1hbmQiIGNvbW1hbmROYW1lPSJHZW5lcmF0ZSBIVE1MIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXU0eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucGRlLnVpLm9wZW5NYW5pZmVzdCIgY29tbWFuZE5hbWU9Ik9wZW4gTWFuaWZlc3QiIGRlc2NyaXB0aW9uPSJPcGVuIHRoZSBwbHVnLWluIG1hbmlmZXN0IiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXU1Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkud2luZG93LnByZXZpb3VzVmlldyIgY29tbWFuZE5hbWU9IlByZXZpb3VzIFZpZXciIGRlc2NyaXB0aW9uPSJTd2l0Y2ggdG8gdGhlIHByZXZpb3VzIHZpZXciIGNhdGVnb3J5PSJfQUhCVU15eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdTVTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5zZWxmLmVuY2Fwc3VsYXRlLmZpZWxkIiBjb21tYW5kTmFtZT0iRW5jYXBzdWxhdGUgVmFyIiBkZXNjcmlwdGlvbj0iQ3JlYXRlIGdldHRpbmcgYW5kIHNldHRpbmcgZnVuY3Rpb25zIGZvciB0aGUgdmFyIGFuZCB1c2Ugb25seSB0aG9zZSB0byBhY2Nlc3MgdGhlIHZhciIgY2F0ZWdvcnk9Il9BSEJVUVN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1NWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5nZW5lcmF0ZS50b3N0cmluZyIgY29tbWFuZE5hbWU9IkdlbmVyYXRlIHRvU3RyaW5nKCkiIGRlc2NyaXB0aW9uPSJHZW5lcmF0ZXMgdGhlIHRvU3RyaW5nKCkgbWV0aG9kIGZvciB0aGUgdHlwZSIgY2F0ZWdvcnk9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1NXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuaGlzdG9yeS5Db21wYXJlV2l0aEhlYWQiIGNvbW1hbmROYW1lPSJDb21wYXJlIHdpdGggSEVBRCBSZXZpc2lvbiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1NkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5vcmdhbml6ZS5pbXBvcnRzIiBjb21tYW5kTmFtZT0iT3JnYW5pemUgSW1wb3J0cyIgZGVzY3JpcHRpb249IkV2YWx1YXRlIGFsbCByZXF1aXJlZCBpbXBvcnRzIGFuZCByZXBsYWNlIHRoZSBjdXJyZW50IGltcG9ydHMiIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdTZTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5pZGUubWFya2Vycy5jb3B5RGVzY3JpcHRpb24iIGNvbW1hbmROYW1lPSJDb3B5IERlc2NyaXB0aW9uIFRvIENsaXBib2FyZCIgZGVzY3JpcHRpb249IkNvcGllcyBtYXJrZXJzIGRlc2NyaXB0aW9uIGZpZWxkIHRvIHRoZSBjbGlwYm9hcmQiIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdTZpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5jb21tYW5kcy5Ecm9wVG9GcmFtZSIgY29tbWFuZE5hbWU9IkRyb3AgdG8gRnJhbWUiIGRlc2NyaXB0aW9uPSJEcm9wIHRvIEZyYW1lIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXU2eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEucHJvbW90ZS5sb2NhbC52YXJpYWJsZSIgY29tbWFuZE5hbWU9IkNvbnZlcnQgTG9jYWwgVmFyaWFibGUgdG8gVmFyIiBkZXNjcmlwdGlvbj0iQ29udmVydCBhIGxvY2FsIHZhcmlhYmxlIHRvIGEgdmFyIiBjYXRlZ29yeT0iX0FIQlVRU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXU3Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucGRlLmFwaS50b29scy51aS5jb21wYXJlLnRvLmJhc2VsaW5lIiBjb21tYW5kTmFtZT0iQVBJIEJhc2VsaW5lLi4uIiBkZXNjcmlwdGlvbj0iQWxsb3dzIHRvIGNvbXBhcmUgdGhlIHNlbGVjdGVkIHJlc291cmNlIHdpdGggdGhlIGN1cnJlbnQgYmFzZWxpbmUiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdTdTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5wZGUudWkuaW1hZ2Vicm93c2VyLnNhdmVUb1dvcmtzcGFjZSIgY29tbWFuZE5hbWU9IlNhdmUgSW1hZ2UiIGRlc2NyaXB0aW9uPSJTYXZlIHRoZSBzZWxlY3RlZCBpbWFnZSBpbnRvIGEgcHJvamVjdCBpbiB0aGUgd29ya3NwYWNlIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXU3aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmNvbW1hbmRzLkRpc3BsYXkiIGNvbW1hbmROYW1lPSJEaXNwbGF5IiBkZXNjcmlwdGlvbj0iRGlzcGxheSByZXN1bHQgb2YgZXZhbHVhdGluZyBzZWxlY3RlZCB0ZXh0IiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXU3eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLnNlYXJjaC5leGNlcHRpb24ub2NjdXJyZW5jZXMiIGNvbW1hbmROYW1lPSJTZWFyY2ggRXhjZXB0aW9uIE9jY3VycmVuY2VzIGluIEZpbGUiIGRlc2NyaXB0aW9uPSJTZWFyY2ggZm9yIGV4Y2VwdGlvbiBvY2N1cnJlbmNlcyBvZiBhIHNlbGVjdGVkIGV4Y2VwdGlvbiB0eXBlIiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXU4Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudG0udGVybWluYWwudmlldy51aS5jb21tYW5kLmRpc2Nvbm5lY3QiIGNvbW1hbmROYW1lPSJEaXNjb25uZWN0IFRlcm1pbmFsIiBjYXRlZ29yeT0iX0FIQlVTeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXU4U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLlNob3dCbGFtZSIgY29tbWFuZE5hbWU9IlNob3cgUmV2aXNpb24gSW5mb3JtYXRpb24iIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdThpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuY29ycmVjdGlvbi5hc3NpZ25Ub0ZpZWxkLmFzc2lzdCIgY29tbWFuZE5hbWU9IlF1aWNrIEFzc2lzdCAtIEFzc2lnbiB0byBmaWVsZCIgZGVzY3JpcHRpb249Ikludm9rZXMgcXVpY2sgYXNzaXN0IGFuZCBzZWxlY3RzICdBc3NpZ24gdG8gZmllbGQnIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXU4eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmZvbGRpbmcuZXhwYW5kIiBjb21tYW5kTmFtZT0iRXhwYW5kIiBkZXNjcmlwdGlvbj0iRXhwYW5kcyB0aGUgZm9sZGVkIHJlZ2lvbiBhdCB0aGUgY3VycmVudCBzZWxlY3Rpb24iIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdTlDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuZXh0cmFjdC5tZXRob2QiIGNvbW1hbmROYW1lPSJFeHRyYWN0IE1ldGhvZCIgZGVzY3JpcHRpb249IkV4dHJhY3QgYSBzZXQgb2Ygc3RhdGVtZW50cyBvciBhbiBleHByZXNzaW9uIGludG8gYSBuZXcgbWV0aG9kIGFuZCB1c2UgdGhlIG5ldyBtZXRob2QiIGNhdGVnb3J5PSJfQUhCVVR5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdTlTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qcHQuanBhLmVjbGlwc2VsaW5rLnVpLm5ld0VjbGlwc2VMaW5rTWFwcGluZ0ZpbGUiIGNvbW1hbmROYW1lPSJFY2xpcHNlTGluayBPUk0gTWFwcGluZyBGaWxlIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXU5aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuY29tbWFuZC5vcGVuUmVtb3RlVGFzayIgY29tbWFuZE5hbWU9Ik9wZW4gUmVtb3RlIFRhc2siIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdTl5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5jb21tYW5kcy5uZXh0TWVtb3J5QmxvY2siIGNvbW1hbmROYW1lPSJOZXh0IE1lbW9yeSBNb25pdG9yIiBkZXNjcmlwdGlvbj0iU2hvdyByZW5kZXJpbmdzIGZyb20gbmV4dCBtZW1vcnkgbW9uaXRvci4iIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdS1DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmludGVybmFsLnJlZmxvZy5PcGVuSW5Db21taXRWaWV3ZXJDb21tYW5kIiBjb21tYW5kTmFtZT0iT3BlbiBpbiBDb21taXQgVmlld2VyIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXUtU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4uY29udGV4dC51aS5jb21tYW5kcy50YXNrLnJldHJpZXZlQ29udGV4dCIgY29tbWFuZE5hbWU9IlJldHJpZXZlIENvbnRleHQiIGNhdGVnb3J5PSJfQUhCVUxDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdS1peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnJlZmFjdG9yLnJlbmFtZSIgY29tbWFuZE5hbWU9IlJlbmFtZSIgZGVzY3JpcHRpb249IlJlbmFtZSBhIEphdmEgRWxlbWVudCIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1LXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkudGVhbS5GZXRjaCIgY29tbWFuZE5hbWU9IkZldGNoIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVfQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucGRlLnVpLmp1bml0V29ya2JlbmNoU2hvcnRjdXQucnVuIiBjb21tYW5kTmFtZT0iUnVuIEpVbml0IFBsdWctaW4gVGVzdCIgZGVzY3JpcHRpb249IlJ1biBKVW5pdCBQbHVnLWluIFRlc3QiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdV9TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkubmF2aWdhdGUuZ290b3BhY2thZ2UiIGNvbW1hbmROYW1lPSJHbyB0byBQYWNrYWdlIiBkZXNjcmlwdGlvbj0iR28gdG8gUGFja2FnZSIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1X2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLndpbmRvdy50b2dnbGVzdGF0dXNiYXIiIGNvbW1hbmROYW1lPSJUb2dnbGUgU3RhdHVzYmFyIiBkZXNjcmlwdGlvbj0iVG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBib3R0b20gc3RhdHVzIGJhciIgY2F0ZWdvcnk9Il9BSEJVTXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1X3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LmNocm9taXVtLmRlYnVnLnVpLmNvbW1hbmRzLkluc3BlY3QiIGNvbW1hbmROYW1lPSJJbnNwZWN0IiBkZXNjcmlwdGlvbj0iSW5zcGVjdCByZXN1bHQgb2YgZXZhbHVhdGluZyBzZWxlY3RlZCB0ZXh0IiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZBQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFzay51aS5lZGl0b3IuUXVpY2tPdXRsaW5lIiBjb21tYW5kTmFtZT0iUXVpY2sgT3V0bGluZSIgZGVzY3JpcHRpb249IlNob3cgdGhlIHF1aWNrIG91dGxpbmUgZm9yIHRoZSBlZGl0b3IgaW5wdXQiIGNhdGVnb3J5PSJfQUhCVUxpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdkFTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5idWlsZHNoaXAudWkuY29tbWFuZHMuYWRkYnVpbGRzaGlwbmF0dXJlIiBjb21tYW5kTmFtZT0iQWRkIEdyYWRsZSBOYXR1cmUiIGRlc2NyaXB0aW9uPSJBZGRzIHRoZSBHcmFkbGUgbmF0dXJlIGFuZCBzeW5jaHJvbml6ZXMgdGhpcyBwcm9qZWN0IGFzIGlmIHRoZSBHcmFkbGUgSW1wb3J0IHdpemFyZCBoYWQgYmVlbiBydW4gb24gaXRzIGxvY2F0aW9uLiIgY2F0ZWdvcnk9Il9BSEJVS2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2QWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLmNvbW1hbmRzLmVvZiIgY29tbWFuZE5hbWU9IkVPRiIgZGVzY3JpcHRpb249IlNlbmQgZW5kIG9mIGZpbGUiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdkF5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qc3QucGFnZWRlc2lnbmVyLmhvcml6b3RhbCIgY29tbWFuZE5hbWU9Ikhvcml6b250YWwgTGF5b3V0IiBjYXRlZ29yeT0iX0FIQlVSQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZCQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5BYm9ydFJlYmFzZSIgY29tbWFuZE5hbWU9IkFib3J0IFJlYmFzZSIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2QlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRlLnNob3dJblF1aWNrTWVudSIgY29tbWFuZE5hbWU9IlNob3cgSW4uLi4iIGRlc2NyaXB0aW9uPSJPcGVuIHRoZSBTaG93IEluIG1lbnUiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdkJpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuY29weUxpbmVVcCIgY29tbWFuZE5hbWU9IkR1cGxpY2F0ZSBMaW5lcyIgZGVzY3JpcHRpb249IkR1cGxpY2F0ZXMgdGhlIHNlbGVjdGVkIGxpbmVzIGFuZCBsZWF2ZXMgdGhlIHNlbGVjdGlvbiB1bmNoYW5nZWQiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdkJ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5jb21tYW5kcy5Ub2dnbGVNZXRob2RCcmVha3BvaW50IiBjb21tYW5kTmFtZT0iVG9nZ2xlIE1ldGhvZCBCcmVha3BvaW50IiBkZXNjcmlwdGlvbj0iQ3JlYXRlcyBvciByZW1vdmVzIGEgbWV0aG9kIGJyZWFrcG9pbnQiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdkNDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkubmF2aWdhdGUuamF2YS5vcGVuLnN0cnVjdHVyZSIgY29tbWFuZE5hbWU9Ik9wZW4gU3RydWN0dXJlIiBkZXNjcmlwdGlvbj0iU2hvdyB0aGUgc3RydWN0dXJlIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50IiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZDU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQuY2hyb21pdW0uZGVidWcuanMuY29tbWFuZCIgY29tbWFuZE5hbWU9IkNocm9tZSAvIENocm9taXVtIERlYnVnZ2VyIiBjYXRlZ29yeT0iX0FIQlVPU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZDaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuY29ycmVjdGlvbi5hc3NpZ25Ub0xvY2FsLmFzc2lzdCIgY29tbWFuZE5hbWU9IlF1aWNrIEFzc2lzdCAtIEFzc2lnbiB0byBsb2NhbCB2YXJpYWJsZSIgZGVzY3JpcHRpb249Ikludm9rZXMgcXVpY2sgYXNzaXN0IGFuZCBzZWxlY3RzICdBc3NpZ24gdG8gbG9jYWwgdmFyaWFibGUnIiBjYXRlZ29yeT0iX0FIQlVMU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZDeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdGUubmV4dCIgY29tbWFuZE5hbWU9Ik5leHQiIGRlc2NyaXB0aW9uPSJOYXZpZ2F0ZSB0byB0aGUgbmV4dCBpdGVtIiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZEQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLnV0aWxzLnJjcC5jb21tYW5kcy5vcGVuSGVscCIgY29tbWFuZE5hbWU9Ik9wZW4gYSBoZWxwIHBhZ2UgcmVzb3VyY2UiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBdkRTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMudXRpbHMucmNwLmxpbmtDb250cmlidXRpb24uaHJlZiIgbmFtZT0iVVJJIiBvcHRpb25hbD0iZmFsc2UiLz4KKyAgPC9jb21tYW5kcz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZEaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MuYnVncy5jb21tYW5kcy5uZXdUYXNrRnJvbU1hcmtlciIgY29tbWFuZE5hbWU9Ik5ldyBUYXNrIGZyb20gTWFya2VyLi4uIiBkZXNjcmlwdGlvbj0iUmVwb3J0IGFzIEJ1ZyBmcm9tIE1hcmtlciIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2RHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLnJlZmFjdG9yLmFwcGx5LnJlZmFjdG9yaW5nLnNjcmlwdCIgY29tbWFuZE5hbWU9IkFwcGx5IFNjcmlwdCIgZGVzY3JpcHRpb249IlBlcmZvcm0gcmVmYWN0b3JpbmdzIGZyb20gYSByZWZhY3RvcmluZyBzY3JpcHQgb24gdGhlIGxvY2FsIHdvcmtzcGFjZSIgY2F0ZWdvcnk9Il9BSEJVUVN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2RUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIucnVuIiBjb21tYW5kTmFtZT0iUnVuIiBkZXNjcmlwdGlvbj0iUnVuIHNlcnZlciIgY2F0ZWdvcnk9Il9BSEJVTHl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2RVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLmNvbnRleHQudWkuY29tbWFuZHMuZm9jdXMudmlldyIgY29tbWFuZE5hbWU9IkZvY3VzIFZpZXciIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBdkVpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJ2aWV3SWQiIG5hbWU9IlZpZXcgSUQgdG8gRm9jdXMiIG9wdGlvbmFsPSJmYWxzZSIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdkV5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lY2xlbW1hLnVpLnRlc3ROZ1Nob3J0Y3V0LmNvdmVyYWdlIiBjb21tYW5kTmFtZT0iQ292ZXJhZ2UgVGVzdE5HIFRlc3QiIGRlc2NyaXB0aW9uPSJDb3ZlcmFnZSBUZXN0TkcgVGVzdCIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2RkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLmNvbW1hbmRzLlN0ZXBSZXR1cm4iIGNvbW1hbmROYW1lPSJTdGVwIFJldHVybiIgZGVzY3JpcHRpb249IlN0ZXAgcmV0dXJuIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZGU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuYnJvd3Nlci5vcGVuQnVuZGxlUmVzb3VyY2UiIGNvbW1hbmROYW1lPSJPcGVuIFJlc291cmNlIGluIEJyb3dzZXIiIGRlc2NyaXB0aW9uPSJPcGVucyBhIGJ1bmRsZSByZXNvdXJjZSBpbiB0aGUgZGVmYXVsdCB3ZWIgYnJvd3Nlci4iIGNhdGVnb3J5PSJfQUhCVU15eFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBdkZpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJwbHVnaW4iIG5hbWU9IlBsdWdpbiIvPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXZGeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0icGF0aCIgbmFtZT0iUGF0aCIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdkdDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qc3QucGFnZWRlc2lnbmVyLnNvdXJjZSIgY29tbWFuZE5hbWU9IlNvdXJjZSBDb2RlIiBjYXRlZ29yeT0iX0FIQlVSQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZHU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuaGVscC5hYm91dEFjdGlvbiIgY29tbWFuZE5hbWU9IkFib3V0IiBkZXNjcmlwdGlvbj0iT3BlbiB0aGUgYWJvdXQgZGlhbG9nIiBjYXRlZ29yeT0iX0FIQlVVU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZHaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LnVpLkNvbnZlcnRQcm9qZWN0VG9GYWNldGVkRm9ybSIgY29tbWFuZE5hbWU9IkNvbnZlcnQgdG8gRmFjZXRlZCBGb3JtLi4uIiBjYXRlZ29yeT0iX0FIQlVNaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZHeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLmFubm90YXRlLmNsYXNzRmlsZSIgY29tbWFuZE5hbWU9IkFubm90YXRlIENsYXNzIEZpbGUiIGRlc2NyaXB0aW9uPSJFeHRlcm5hbGx5IGFkZCBBbm5vdGF0aW9ucyB0byBhIENsYXNzIEZpbGUuIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZIQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuY2Z0LnNlcnZlci51aS5pbnRlcm5hbC5hY3Rpb25zLm9wZW5ob21lcGFnZWNvbW1hbmQiIGNvbW1hbmROYW1lPSJPcGVuIEhvbWUgUGFnZSIgZGVzY3JpcHRpb249Ik9wZW4gSG9tZSBQYWdlIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZIU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLnN0YXNoLmNyZWF0ZSIgY29tbWFuZE5hbWU9IlN0YXNoIENoYW5nZXMuLi4iIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdkhpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5yZXBsYWNlLmludm9jYXRpb25zIiBjb21tYW5kTmFtZT0iUmVwbGFjZSBJbnZvY2F0aW9ucyIgZGVzY3JpcHRpb249IlJlcGxhY2UgaW52b2NhdGlvbnMgb2YgdGhlIHNlbGVjdGVkIGZ1bmN0aW9uIiBjYXRlZ29yeT0iX0FIQlVRU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZIeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5oaXN0b3J5LkNoZWNrb3V0Q29tbWFuZCIgY29tbWFuZE5hbWU9IkNoZWNrIE91dCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2SUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmNvbW1hbmQuYWN0aXZhdGVTZWxlY3RlZFRhc2siIGNvbW1hbmROYW1lPSJBY3RpdmF0ZSBTZWxlY3RlZCBUYXNrIiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZJU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLnNlYXJjaC5yZWZlcmVuY2VzLmluLndvcmtzcGFjZSIgY29tbWFuZE5hbWU9IlJlZmVyZW5jZXMgaW4gV29ya3NwYWNlIiBkZXNjcmlwdGlvbj0iU2VhcmNoIGZvciByZWZlcmVuY2VzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50IGluIHRoZSB3b3Jrc3BhY2UiIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdklpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmZvcm1hdC5kb2N1bWVudCIgY29tbWFuZE5hbWU9IkZvcm1hdCIgZGVzY3JpcHRpb249IkZvcm1hdCBzZWxlY3Rpb24iIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdkl5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuY29ycmVjdGlvbi5hZGROb25OTFMiIGNvbW1hbmROYW1lPSJRdWljayBGaXggLSBBZGQgbm9uLU5MUyB0YWciIGRlc2NyaXB0aW9uPSJJbnZva2VzIHF1aWNrIGFzc2lzdCBhbmQgc2VsZWN0cyAnQWRkIG5vbi1OTFMgdGFnJyIgY2F0ZWdvcnk9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2SkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLnNlYXJjaC53cml0ZS5hY2Nlc3MuaW4ud29ya3NwYWNlIiBjb21tYW5kTmFtZT0iV3JpdGUgQWNjZXNzIGluIFdvcmtzcGFjZSIgZGVzY3JpcHRpb249IlNlYXJjaCBmb3Igd3JpdGUgcmVmZXJlbmNlcyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpbiB0aGUgd29ya3NwYWNlIiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZKU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLlJlbW92ZUZyb21JbmRleCIgY29tbWFuZE5hbWU9IlJlbW92ZSBmcm9tIEluZGV4IiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZKaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkubmV3V2l6YXJkIiBjb21tYW5kTmFtZT0iTmV3IiBkZXNjcmlwdGlvbj0iT3BlbiB0aGUgTmV3IGl0ZW0gd2l6YXJkIiBjYXRlZ29yeT0iX0FIQlVNaXhRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXZKeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ibmV3V2l6YXJkSWQiIG5hbWU9Ik5ldyBXaXphcmQiLz4KKyAgPC9jb21tYW5kcz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZLQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkud2luZG93Lm5ld1dpbmRvdyIgY29tbWFuZE5hbWU9Ik5ldyBXaW5kb3ciIGRlc2NyaXB0aW9uPSJPcGVuIGFub3RoZXIgd2luZG93IiBjYXRlZ29yeT0iX0FIQlVNeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZLU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLnVuY29tbWVudCIgY29tbWFuZE5hbWU9IlVuY29tbWVudCIgZGVzY3JpcHRpb249IlVuY29tbWVudCB0aGUgc2VsZWN0ZWQgSmF2YSBjb21tZW50IGxpbmVzIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZLaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZTQudWkuaW1wb3J0ZXIuY29uZmlndXJlUHJvamVjdCIgY29tbWFuZE5hbWU9IkNvbmZpZ3VyZSBhbmQgRGV0ZWN0IE5lc3RlZCBQcm9qZWN0cy4uLiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2S3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVjbGVtbWEudWkuc2VsZWN0QWN0aXZlU2Vzc2lvbiIgY29tbWFuZE5hbWU9IlNlbGVjdCBBY3RpdmUgU2Vzc2lvbi4uLiIgY2F0ZWdvcnk9Il9BSEJVTVN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2TEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuaGlzdG9yeS5Db21wYXJlVmVyc2lvbnMiIGNvbW1hbmROYW1lPSJDb21wYXJlIHdpdGggZWFjaCBvdGhlciIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2TFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVxdWlub3gucDIudWkuc2RrLmluc3RhbGwiIGNvbW1hbmROYW1lPSJJbnN0YWxsIE5ldyBTb2Z0d2FyZS4uLiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2TGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLmNvbnRleHQudWkuY29tbWFuZHMuaW50ZXJlc3QuZGVjcmVtZW50IiBjb21tYW5kTmFtZT0iTWFrZSBMZXNzIEludGVyZXN0aW5nIiBkZXNjcmlwdGlvbj0iTWFrZSBMZXNzIEludGVyZXN0aW5nIiBjYXRlZ29yeT0iX0FIQlVMQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZMeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZXh0ZXJuYWx0b29scy5FeHRlcm5hbFRvb2xNZW51RGVsZWdhdGVUb29sYmFyIiBjb21tYW5kTmFtZT0iUnVuIExhc3QgTGF1bmNoZWQgRXh0ZXJuYWwgVG9vbCIgZGVzY3JpcHRpb249IlJ1bnMgdGhlIGxhc3QgbGF1bmNoZWQgZXh0ZXJuYWwgVG9vbCIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2TUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuQ2hlY2tvdXRDb21tYW5kIiBjb21tYW5kTmFtZT0iQ2hlY2sgT3V0IiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZNU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLnNlYXJjaC5vY2N1cnJlbmNlcy5pbi5maWxlIiBjb21tYW5kTmFtZT0iU2VhcmNoIEFsbCBPY2N1cnJlbmNlcyBpbiBGaWxlIiBkZXNjcmlwdGlvbj0iU2VhcmNoIGZvciBhbGwgb2NjdXJyZW5jZXMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnQgaW4gaXRzIGRlY2xhcmluZyBmaWxlIiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZNaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0Lm1vdmVMaW5lVXAiIGNvbW1hbmROYW1lPSJNb3ZlIExpbmVzIFVwIiBkZXNjcmlwdGlvbj0iTW92ZXMgdGhlIHNlbGVjdGVkIGxpbmVzIHVwIiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZNeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZXF1aW5veC5wMi51aS5kaXNjb3ZlcnkuY29tbWFuZHMuU2hvd0J1bmRsZUNhdGFsb2ciIGNvbW1hbmROYW1lPSJTaG93IEJ1bmRsZSBDYXRhbG9nIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXZOQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZXF1aW5veC5wMi51aS5kaXNjb3ZlcnkuY29tbWFuZHMuRGlyZWN0b3J5UGFyYW1ldGVyIiBuYW1lPSJEaXJlY3RvcnkgVVJMIi8+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBdk5TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnVpLmRpc2NvdmVyeS5jb21tYW5kcy5UYWdzUGFyYW1ldGVyIiBuYW1lPSJUYWdzIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2Tml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5nb3RvQnJlYWRjcnVtYiIgY29tbWFuZE5hbWU9IlNob3cgSW4gQnJlYWRjcnVtYiIgZGVzY3JpcHRpb249IlNob3dzIHRoZSBKYXZhIGVkaXRvciBicmVhZGNydW1iIGFuZCBzZXRzIHRoZSBrZXlib2FyZCBmb2N1cyBpbnRvIGl0IiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZOeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucGRlLnVpLnJ1bnRpbWVXb3JrYmVuY2hTaG9ydGN1dC5kZWJ1ZyIgY29tbWFuZE5hbWU9IkRlYnVnIEVjbGlwc2UgQXBwbGljYXRpb24iIGRlc2NyaXB0aW9uPSJEZWJ1ZyBFY2xpcHNlIEFwcGxpY2F0aW9uIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZPQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudXNlcnN0b3JhZ2UudWkuc2hvd1B1bGxEb3duIiBjb21tYW5kTmFtZT0iU2hvdyBQdWxsIERvd24gTWVudSIgY2F0ZWdvcnk9Il9BSEJVVVN4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEF2T1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9ImludG9vbGJhciIgbmFtZT0iSW4gVG9vbCBCYXIiIG9wdGlvbmFsPSJmYWxzZSIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdk9peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qcHQuanBhLnVpLm1ha2VQZXJzaXN0ZW50IiBjb21tYW5kTmFtZT0iTWFrZSBQZXJzaXN0ZW50Li4uIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZPeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGVkaXRvci5FeGVjdXRlU2VsZWN0aW9uQWN0aW9uIiBjb21tYW5kTmFtZT0iRXhlY3V0ZSBTZWxlY3RlZCBUZXh0IiBjYXRlZ29yeT0iX0FIQlVWaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZQQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuanB0LmpheGIudWkuY29tbWFuZC5jcmVhdGVQYWNrYWdlSW5mbyIgY29tbWFuZE5hbWU9IkNyZWF0ZSBwYWNrYWdlLWluZm8uamF2YSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2UFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5leHRyYWN0LmNsYXNzIiBjb21tYW5kTmFtZT0iRXh0cmFjdCBDbGFzcy4uLiIgZGVzY3JpcHRpb249IkV4dHJhY3RzIGZpZWxkcyBpbnRvIGEgbmV3IGNsYXNzIiBjYXRlZ29yeT0iX0FIQlVUeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZQaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmNvcnJlY3Rpb24uZXh0cmFjdENvbnN0YW50LmFzc2lzdCIgY29tbWFuZE5hbWU9IlF1aWNrIEFzc2lzdCAtIEV4dHJhY3QgY29uc3RhbnQiIGRlc2NyaXB0aW9uPSJJbnZva2VzIHF1aWNrIGFzc2lzdCBhbmQgc2VsZWN0cyAnRXh0cmFjdCBjb25zdGFudCciIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdlB5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMucmNwLmNvbW1hbmRzLmV4dGVuc2lvbkRpc2NvdmVyeSIgY29tbWFuZE5hbWU9IkRpc2NvdmVyIE5ldyBFeHRlbnNpb25zIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXZRQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLnV0aWxzLnJjcC5saW5rQ29udHJpYnV0aW9uLmhyZWYiIG5hbWU9IlVSSSIgb3B0aW9uYWw9ImZhbHNlIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2UVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmNvbXBhcmUuY29weVJpZ2h0VG9MZWZ0IiBjb21tYW5kTmFtZT0iQ29weSBmcm9tIFJpZ2h0IHRvIExlZnQiIGRlc2NyaXB0aW9uPSJDb3B5IEN1cnJlbnQgQ2hhbmdlIGZyb20gUmlnaHQgdG8gTGVmdCIgY2F0ZWdvcnk9Il9BSEJVVEN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2UWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLmNvbW1hbmRzLk9wZW5Qcm9maWxlQ29uZmlndXJhdGlvbnMiIGNvbW1hbmROYW1lPSJQcm9maWxlLi4uIiBkZXNjcmlwdGlvbj0iT3BlbiBwcm9maWxlIGxhdW5jaCBjb25maWd1cmF0aW9uIGRpYWxvZyIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2UXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpwdC5qcGEudWkubmV3TWFwcGluZ0ZpbGUiIGNvbW1hbmROYW1lPSJKUEEgT1JNIE1hcHBpbmcgRmlsZSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2UkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmlkZS5tYXJrQ29tcGxldGVkIiBjb21tYW5kTmFtZT0iTWFyayBDb21wbGV0ZWQiIGRlc2NyaXB0aW9uPSJNYXJrIHRoZSBzZWxlY3RlZCB0YXNrcyBhcyBjb21wbGV0ZWQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdlJTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5jb21tZW50IiBjb21tYW5kTmFtZT0iQ29tbWVudCIgZGVzY3JpcHRpb249IlR1cm4gdGhlIHNlbGVjdGVkIGxpbmVzIGludG8gSmF2YVNjcmlwdCBjb21tZW50cyIgY2F0ZWdvcnk9Il9BSEJVTFN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2Uml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5yZWNlbnRlciIgY29tbWFuZE5hbWU9IlJlY2VudGVyIiBkZXNjcmlwdGlvbj0iU2Nyb2xsIGN1cnNvciBsaW5lIHRvIGNlbnRlciwgdG9wIGFuZCBib3R0b20iIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdlJ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qcHQuanBhLnVpLnhtbEZpbGVVcGdyYWRlVG9MYXRlc3RWZXJzaW9uIiBjb21tYW5kTmFtZT0iVXBncmFkZSBKUEEgRG9jdW1lbnQgVmVyc2lvbiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2U0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5zY3JvbGwubGluZURvd24iIGNvbW1hbmROYW1lPSJTY3JvbGwgTGluZSBEb3duIiBkZXNjcmlwdGlvbj0iU2Nyb2xsIGRvd24gb25lIGxpbmUgb2YgdGV4dCIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2U1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuc2VhcmNoLmZpbmQub2NjdXJyZW5jZXMiIGNvbW1hbmROYW1lPSJPY2N1cnJlbmNlcyBpbiBGaWxlIiBkZXNjcmlwdGlvbj0iRmluZCBvY2N1cnJlbmNlcyBvZiB0aGUgc2VsZWN0aW9uIGluIHRoZSBmaWxlIiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZTaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuVG9nZ2xlQ29vbGJhckFjdGlvbiIgY29tbWFuZE5hbWU9IlRvZ2dsZSBNYWluIFRvb2xiYXIgVmlzaWJpbGl0eSIgZGVzY3JpcHRpb249IlRvZ2dsZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIHdpbmRvdyB0b29sYmFyIiBjYXRlZ29yeT0iX0FIQlVNeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZTeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkubmF2aWdhdGUub3Blbi50eXBlLmluLmhpZXJhcmNoeSIgY29tbWFuZE5hbWU9Ik9wZW4gVHlwZSBpbiBIaWVyYXJjaHkiIGRlc2NyaXB0aW9uPSJPcGVuIGEgdHlwZSBpbiB0aGUgdHlwZSBoaWVyYXJjaHkgdmlldyIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2VEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkub3V0bGluZS5jdXN0b21GaWx0ZXIiIGNvbW1hbmROYW1lPSImYW1wO0ZpbHRlcnMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdlRTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3Fsc2NyYXBib29rLmNvbW1hbmRzLm9wZW5zY3JhcGJvb2siIGNvbW1hbmROYW1lPSJPcGVuIFNRTCBTY3JhcGJvbyZhbXA7ayIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2VGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRlLm9wZW5SZXNvdXJjZSIgY29tbWFuZE5hbWU9Ik9wZW4gUmVzb3VyY2UiIGRlc2NyaXB0aW9uPSJPcGVuIGFuIGVkaXRvciBvbiBhIHBhcnRpY3VsYXIgcmVzb3VyY2UiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBdlR5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJmaWxlUGF0aCIgbmFtZT0iRmlsZSBQYXRoIiB0eXBlSWQ9Im9yZy5lY2xpcHNlLnVpLmlkZS5yZXNvdXJjZVBhdGgiLz4KKyAgPC9jb21tYW5kcz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZVQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuY29ycmVjdGlvbi5hZGRCbG9jay5hc3Npc3QiIGNvbW1hbmROYW1lPSJRdWljayBBc3Npc3QgLSBSZXBsYWNlIHN0YXRlbWVudCB3aXRoIGJsb2NrIiBkZXNjcmlwdGlvbj0iSW52b2tlcyBxdWljayBhc3Npc3QgYW5kIHNlbGVjdHMgJ1JlcGxhY2Ugc3RhdGVtZW50IHdpdGggYmxvY2snIiBjYXRlZ29yeT0iX0FIQlVMU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZVU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuZ290by5wcmV2aW91cy5tZW1iZXIiIGNvbW1hbmROYW1lPSJHbyB0byBQcmV2aW91cyBNZW1iZXIiIGRlc2NyaXB0aW9uPSJNb3ZlIHRoZSBjYXJldCB0byB0aGUgcHJldmlvdXMgbWVtYmVyIG9mIHRoZSBKYXZhU2NyaXB0IGZpbGUiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdlVpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuYW50LnVpLmFjdGlvblNldC5wcmVzZW50YXRpb24vb3JnLmVjbGlwc2UuYW50LnVpLnRvZ2dsZUF1dG9SZWNvbmNpbGUiIGNvbW1hbmROYW1lPSJUb2dnbGUgQW50IEVkaXRvciBBdXRvIFJlY29uY2lsZSIgZGVzY3JpcHRpb249IlRvZ2dsZSBBbnQgRWRpdG9yIEF1dG8gUmVjb25jaWxlIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZVeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxzY3JhcGJvb2suYWN0aW9uU2V0L29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxzY3JhcGJvb2suYWN0aW9ucy5PcGVuU2NyYXBib29rQWN0aW9uIiBjb21tYW5kTmFtZT0iT3BlbiBTUUwgU2NyYXBib29rIiBkZXNjcmlwdGlvbj0iT3BlbiBzY3JhcGJvb2sgdG8gZWRpdCBTUUwgc3RhdGVtZW50cyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2VkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5sYXVuY2hBY3Rpb25TZXQvb3JnLmVjbGlwc2UuZGVidWcuaW50ZXJuYWwudWkuYWN0aW9ucy5SdW5XaXRoQ29uZmlndXJhdGlvbkFjdGlvbiIgY29tbWFuZE5hbWU9IlJ1biBBcyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2VlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5sYXVuY2hBY3Rpb25TZXQvb3JnLmVjbGlwc2UuZGVidWcuaW50ZXJuYWwudWkuYWN0aW9ucy5SdW5IaXN0b3J5TWVudUFjdGlvbiIgY29tbWFuZE5hbWU9IlJ1biBIaXN0b3J5IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZWaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmRlYnVnLnVpLmxhdW5jaEFjdGlvblNldC9vcmcuZWNsaXBzZS5kZWJ1Zy5pbnRlcm5hbC51aS5hY3Rpb25zLlJ1bkRyb3BEb3duQWN0aW9uIiBjb21tYW5kTmFtZT0iUnVuIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZWeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmRlYnVnLnVpLmxhdW5jaEFjdGlvblNldC9vcmcuZWNsaXBzZS5kZWJ1Zy5pbnRlcm5hbC51aS5hY3Rpb25zLkRlYnVnV2l0aENvbmZpZ3VyYXRpb25BY3Rpb24iIGNvbW1hbmROYW1lPSJEZWJ1ZyBBcyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2V0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5sYXVuY2hBY3Rpb25TZXQvb3JnLmVjbGlwc2UuZGVidWcuaW50ZXJuYWwudWkuYWN0aW9ucy5EZWJ1Z0hpc3RvcnlNZW51QWN0aW9uIiBjb21tYW5kTmFtZT0iRGVidWcgSGlzdG9yeSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2V1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5sYXVuY2hBY3Rpb25TZXQvb3JnLmVjbGlwc2UuZGVidWcuaW50ZXJuYWwudWkuYWN0aW9ucy5EZWJ1Z0Ryb3BEb3duQWN0aW9uIiBjb21tYW5kTmFtZT0iRGVidWciIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdldpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuZGVidWcudWkucHJvZmlsZUFjdGlvblNldC9vcmcuZWNsaXBzZS5kZWJ1Zy5pbnRlcm5hbC51aS5hY3Rpb25zLlByb2ZpbGVEcm9wRG93bkFjdGlvbiIgY29tbWFuZE5hbWU9IlByb2ZpbGUiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdld5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuZGVidWcudWkucHJvZmlsZUFjdGlvblNldC9vcmcuZWNsaXBzZS5kZWJ1Zy5pbnRlcm5hbC51aS5hY3Rpb25zLlByb2ZpbGVXaXRoQ29uZmlndXJhdGlvbkFjdGlvbiIgY29tbWFuZE5hbWU9IlByb2ZpbGUgQXMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdlhDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuZGVidWcudWkucHJvZmlsZUFjdGlvblNldC9vcmcuZWNsaXBzZS5kZWJ1Zy5pbnRlcm5hbC51aS5hY3Rpb25zLlByb2ZpbGVIaXN0b3J5TWVudUFjdGlvbiIgY29tbWFuZE5hbWU9IlByb2ZpbGUgSGlzdG9yeSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2WFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5lY2xlbW1hLnVpLkNvdmVyYWdlQWN0aW9uU2V0L29yZy5lY2xpcHNlLmVjbGVtbWEudWkuYWN0aW9ucy5Db3ZlcmFnZURyb3BEb3duQWN0aW9uIiBjb21tYW5kTmFtZT0iQ292ZXJhZ2UiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdlhpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuZWNsZW1tYS51aS5Db3ZlcmFnZUFjdGlvblNldC9vcmcuZWNsaXBzZS5lY2xlbW1hLnVpLmFjdGlvbnMuQ292ZXJhZ2VBc0FjdGlvbiIgY29tbWFuZE5hbWU9IkNvdmVyYWdlIEFzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZYeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmVjbGVtbWEudWkuQ292ZXJhZ2VBY3Rpb25TZXQvb3JnLmVjbGlwc2UuZWNsZW1tYS51aS5hY3Rpb25zLkNvdmVyYWdlSGlzdG9yeUFjdGlvbiIgY29tbWFuZE5hbWU9IkNvdmVyYWdlIEhpc3RvcnkiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdllDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuamR0LnVpLkphdmFFbGVtZW50Q3JlYXRpb25BY3Rpb25TZXQvb3JnLmVjbGlwc2UuamR0LnVpLmFjdGlvbnMuTmV3VHlwZURyb3BEb3duIiBjb21tYW5kTmFtZT0iQ2xhc3MuLi4iIGRlc2NyaXB0aW9uPSJOZXcgSmF2YSBDbGFzcyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2WVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5qZHQudWkuSmF2YUVsZW1lbnRDcmVhdGlvbkFjdGlvblNldC9vcmcuZWNsaXBzZS5qZHQudWkuYWN0aW9ucy5PcGVuUGFja2FnZVdpemFyZCIgY29tbWFuZE5hbWU9IlBhY2thZ2UuLi4iIGRlc2NyaXB0aW9uPSJOZXcgSmF2YSBQYWNrYWdlIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZZaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmpkdC51aS5KYXZhRWxlbWVudENyZWF0aW9uQWN0aW9uU2V0L29yZy5lY2xpcHNlLmpkdC51aS5hY3Rpb25zLk9wZW5Qcm9qZWN0V2l6YXJkIiBjb21tYW5kTmFtZT0iSmF2YSBQcm9qZWN0Li4uIiBkZXNjcmlwdGlvbj0iTmV3IEphdmEgUHJvamVjdCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2WXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5qZHQudWkuU2VhcmNoQWN0aW9uU2V0L29yZy5lY2xpcHNlLmpkdC51aS5hY3Rpb25zLk9wZW5KYXZhU2VhcmNoUGFnZSIgY29tbWFuZE5hbWU9IkphdmEuLi4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdlpDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuanN0LmoyZWUuSjJlZU1haW5BY3Rpb25TZXQvb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwuYWN0aW9ucy5OZXdKYXZhRUVBcnRpZmFjdCIgY29tbWFuZE5hbWU9IlNlcnZsZXQiIGRlc2NyaXB0aW9uPSJDcmVhdGUgYSBuZXcgU2VydmxldCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2WlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5qc3QuajJlZS5KMmVlTWFpbkFjdGlvblNldC9vcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5hY3Rpb25zLk5ld0phdmFFRVByb2plY3QiIGNvbW1hbmROYW1lPSJEeW5hbWljIFdlYiBQcm9qZWN0IiBkZXNjcmlwdGlvbj0iQ3JlYXRlIGEgRHluYW1pYyBXZWIgcHJvamVjdCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2Wml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5teWx5bi5qYXZhLmFjdGlvblNldC5icm93c2luZy9vcmcuZWNsaXBzZS5teWx5bi5qYXZhLnVpLmFjdGlvbnMuQXBwbHlNeWx5blRvQnJvd3NpbmdQZXJzcGVjdGl2ZUFjdGlvbiIgY29tbWFuZE5hbWU9IkZvY3VzIEJyb3dzaW5nIFBlcnNwZWN0aXZlIiBkZXNjcmlwdGlvbj0iRm9jdXMgSmF2YSBCcm93c2luZyBWaWV3cyBvbiBBY3RpdmUgVGFzayIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2Wnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5teWx5bi5kb2MuYWN0aW9uU2V0L29yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmJ1Zy5yZXBvcnQiIGNvbW1hbmROYW1lPSJSZXBvcnQgQnVnIG9yIEVuaGFuY2VtZW50Li4uIiBkZXNjcmlwdGlvbj0iUmVwb3J0IEJ1ZyBvciBFbmhhbmNlbWVudCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2YUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5uYXZpZ2F0aW9uLmFkZGl0aW9ucy9vcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5uYXZpZ2F0ZS50YXNrLmhpc3RvcnkiIGNvbW1hbmROYW1lPSJBY3RpdmF0ZSBQcmV2aW91cyBUYXNrIiBkZXNjcmlwdGlvbj0iQWN0aXZhdGUgUHJldmlvdXMgVGFzayIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2YVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5wZGUudWkuU2VhcmNoQWN0aW9uU2V0L29yZy5lY2xpcHNlLnBkZS51aS5hY3Rpb25zLk9wZW5QbHVnaW5TZWFyY2hQYWdlIiBjb21tYW5kTmFtZT0iUGx1Zy1pbi4uLiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2YWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS51aS5jaGVhdHNoZWV0cy5hY3Rpb25TZXQvb3JnLmVjbGlwc2UudWkuY2hlYXRzaGVldHMuYWN0aW9ucy5DaGVhdFNoZWV0SGVscE1lbnVBY3Rpb24iIGNvbW1hbmROYW1lPSJDaGVhdCBTaGVldHMuLi4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdmF5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UucnNlLmNvcmUuc2VhcmNoLnNlYXJjaEFjdGlvblNldC9vcmcuZWNsaXBzZS5yc2UuY29yZS5zZWFyY2guc2VhcmNoQWN0aW9uIiBjb21tYW5kTmFtZT0iUmVtb3RlLi4uIiBkZXNjcmlwdGlvbj0iT3BlbnMgUmVtb3RlIFNlYXJjaCBkaWFsb2cgcGFnZSBmb3IgdGV4dCBhbmQgZmlsZSBzZWFyY2hpbmcgb24gcmVtb3RlIHN5c3RlbXMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdmJDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2Uuc2VhcmNoLnNlYXJjaEFjdGlvblNldC9vcmcuZWNsaXBzZS5zZWFyY2guT3BlblNlYXJjaERpYWxvZ1BhZ2UiIGNvbW1hbmROYW1lPSJTZWFyY2guLi4iIGRlc2NyaXB0aW9uPSJTZWFyY2giIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdmJTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UudGVhbS51aS5hY3Rpb25TZXQvb3JnLmVjbGlwc2UudGVhbS51aS5zeW5jaHJvbml6ZUFsbCIgY29tbWFuZE5hbWU9IlN5bmNocm9uaXplLi4uIiBkZXNjcmlwdGlvbj0iU3luY2hyb25pemUuLi4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdmJpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UudGVhbS51aS5hY3Rpb25TZXQvb3JnLmVjbGlwc2UudGVhbS51aS5Db25maWd1cmVQcm9qZWN0IiBjb21tYW5kTmFtZT0iU2hhcmUgUHJvamVjdC4uLiIgZGVzY3JpcHRpb249IlNoYXJlIHRoZSBwcm9qZWN0IHdpdGggb3RoZXJzIHVzaW5nIGEgdmVyc2lvbiBhbmQgY29uZmlndXJhdGlvbiBtYW5hZ2VtZW50IHN5c3RlbS4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdmJ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UudWkuZXh0ZXJuYWx0b29scy5FeHRlcm5hbFRvb2xzU2V0L29yZy5lY2xpcHNlLnVpLmV4dGVybmFsdG9vbHMuRXh0ZXJuYWxUb29sTWVudURlbGVnYXRlTWVudSIgY29tbWFuZE5hbWU9IkV4dGVybmFsIFRvb2xzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZjQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLndzdC5qc2R0LmNocm9taXVtLmRlYnVnLnVpLmFjdGlvblNldHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuY2hyb21pdW0uZGVidWcudWkuYWN0aW9ucy5BZGRFeGNlcHRpb25CcmVha3BvaW50QWN0aW9uIiBjb21tYW5kTmFtZT0iQWRkIFY4L0Nocm9tZSBKYXZhU2NyaXB0IEV4Y2VwdGlvbiBCcmVha3BvaW50IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZjU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLkphdmFFbGVtZW50Q3JlYXRpb25BY3Rpb25TZXQvb3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuYWN0aW9ucy5PcGVuRmlsZVdpemFyZCIgY29tbWFuZE5hbWU9IkphdmFTY3JpcHQgU291cmNlIEZpbGUiIGRlc2NyaXB0aW9uPSJOZXcgSmF2YVNjcmlwdCBmaWxlIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZjaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLkphdmFFbGVtZW50Q3JlYXRpb25BY3Rpb25TZXQvb3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuYWN0aW9ucy5PcGVuUHJvamVjdFdpemFyZCIgY29tbWFuZE5hbWU9IkphdmFTY3JpcHQgUHJvamVjdC4uLiIgZGVzY3JpcHRpb249Ik5ldyBKYXZhU2NyaXB0IFByb2plY3QiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdmN5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5yZWZhY3Rvci5zaG93LnJlZmFjdG9yaW5nLmhpc3RvcnkiIGNvbW1hbmROYW1lPSJIaXN0b3J5Li4uIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZkQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLlNlYXJjaEFjdGlvblNldC9vcmcuZWNsaXBzZS53c3QuanNkdC51aS5hY3Rpb25zLk9wZW5KYXZhU2VhcmNoUGFnZSIgY29tbWFuZE5hbWU9IkphdmFTY3JpcHQuLi4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdmRTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS5uZXcuYWN0aW9uU2V0L29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuYWN0aW9uLm5ldy5zZXJ2ZXIiIGNvbW1hbmROYW1lPSJDcmVhdGUgU2VydmVyIiBkZXNjcmlwdGlvbj0iQ3JlYXRlIFNlcnZlciIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2ZGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLmludGVybmFsLndlYmJyb3dzZXIuYWN0aW9uU2V0L29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuaW50ZXJuYWwud2ViYnJvd3Nlci5hY3Rpb24ub3BlbiIgY29tbWFuZE5hbWU9Ik9wZW4gV2ViIEJyb3dzZXIiIGRlc2NyaXB0aW9uPSJPcGVuIFdlYiBCcm93c2VyIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZkeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuaW50ZXJuYWwud2ViYnJvd3Nlci5hY3Rpb25TZXQvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS5pbnRlcm5hbC53ZWJicm93c2VyLmFjdGlvbi5zd2l0Y2giIGNvbW1hbmROYW1lPSJXZWIgQnJvd3NlciIgZGVzY3JpcHRpb249IldlYiBCcm93c2VyIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZlQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLndzdC53ZWIudWkud2l6YXJkc0FjdGlvblNldC9vcmcuZWNsaXBzZS53c3Qud2ViLnVpLmFjdGlvbnMubmV3Q1NTRmlsZSIgY29tbWFuZE5hbWU9IkNTUyIgZGVzY3JpcHRpb249IkNyZWF0ZSBhIG5ldyBDYXNjYWRpbmcgU3R5bGUgU2hlZXQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdmVTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2Uud3N0LndlYi51aS53aXphcmRzQWN0aW9uU2V0L29yZy5lY2xpcHNlLndzdC53ZWIudWkuYWN0aW9ucy5uZXdKU0ZpbGUiIGNvbW1hbmROYW1lPSJKYXZhU2NyaXB0IiBkZXNjcmlwdGlvbj0iQ3JlYXRlIGEgbmV3IEphdmFTY3JpcHQgZmlsZSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2ZWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS53c3Qud2ViLnVpLndpemFyZHNBY3Rpb25TZXQvb3JnLmVjbGlwc2Uud3N0LndlYi51aS5hY3Rpb25zLm5ld0hUTUxGaWxlIiBjb21tYW5kTmFtZT0iSFRNTCIgZGVzY3JpcHRpb249IkNyZWF0ZSBhIG5ldyBIVE1MIHBhZ2UiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdmV5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLmV4cGxvcmVyL29yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5hY3Rpb24uTGF1bmNoV1NFQWN0aW9uIiBjb21tYW5kTmFtZT0iTGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiIGRlc2NyaXB0aW9uPSJMYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUa0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5hbnQudWkuQnJlYWtwb2ludFJ1bGVyQWN0aW9ucy9vcmcuZWNsaXBzZS5hbnQudWkuYWN0aW9ucy5NYW5hZ2VCcmVha3BvaW50UnVsZXJBY3Rpb24iIGNvbW1hbmROYW1lPSJUb2dnbGUgQnJlYWtwb2ludCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUa1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMucnVsbGVyRG91YmxlQ2xpY2svb3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmFjdGlvbnMuTWFuYWdlQnJlYWtwb2ludFJ1bGVyQWN0aW9uIiBjb21tYW5kTmFtZT0iQWRkIEJyZWFrcG9pbnQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVGtpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuZW1mLmV4cG9ydGVyLmdlbk1vZGVsRWRpdG9yQ29udHJpYnV0aW9uL29yZy5lY2xpcHNlLmVtZi5leHBvcnRlci51aS5HZW5Nb2RlbEV4cG9ydEFjdGlvbkRlbGVnYXRlLkVkaXRvciIgY29tbWFuZE5hbWU9IkV4cG9ydCBNb2RlbC4uLiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUa3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5lbWYuaW1wb3J0ZXIuZ2VuTW9kZWxFZGl0b3JDb250cmlidXRpb24vb3JnLmVjbGlwc2UuZW1mLmltcG9ydGVyLnVpLkdlbk1vZGVsUmVsb2FkQWN0aW9uRGVsZWdhdGUuRWRpdG9yIiBjb21tYW5kTmFtZT0iUmVsb2FkLi4uIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlRsQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmVtZi5tYXBwaW5nLmVjb3JlMmVjb3JlLnByZXNlbnRhdGlvbi5FY29yZTJFY29yZUNvbnRyaWJ1dGlvbklEL29yZy5lY2xpcHNlLmVtZi5tYXBwaW5nLmFjdGlvbi5SZW1vdmVNYXBwaW5nQWN0aW9uSUQiIGNvbW1hbmROYW1lPSJSZW1vdmUgTWFwcGluZyIgZGVzY3JpcHRpb249IlJlbW92ZSB0aGUgbWFwcGluZyBhc3NvY2lhdGVkIHdpdGggdGhlIHNlbGVjdGVkIG9iamVjdHMuIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlRsU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmVtZi5tYXBwaW5nLmVjb3JlMmVjb3JlLnByZXNlbnRhdGlvbi5FY29yZTJFY29yZUNvbnRyaWJ1dGlvbklEL29yZy5lY2xpcHNlLmVtZi5tYXBwaW5nLmFjdGlvbi5UeXBlTWF0Y2hNYXBwaW5nQWN0aW9uSUQiIGNvbW1hbmROYW1lPSJNYXRjaCBNYXBwaW5nIGJ5IFR5cGUiIGRlc2NyaXB0aW9uPSJDcmVhdGUgY2hpbGQgbWFwcGluZ3MgYXV0b21hdGljYWxseSBieSB0eXBlLiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUbGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5lbWYubWFwcGluZy5lY29yZTJlY29yZS5wcmVzZW50YXRpb24uRWNvcmUyRWNvcmVDb250cmlidXRpb25JRC9vcmcuZWNsaXBzZS5lbWYubWFwcGluZy5hY3Rpb24uTmFtZU1hdGNoTWFwcGluZ0FjdGlvbklEIiBjb21tYW5kTmFtZT0iTWF0Y2ggTWFwcGluZyBieSBOYW1lIiBkZXNjcmlwdGlvbj0iQ3JlYXRlIGNoaWxkIG1hcHBpbmdzIGF1dG9tYXRpY2FsbHkgYnkgbmFtZS4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVGx5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuZW1mLm1hcHBpbmcuZWNvcmUyZWNvcmUucHJlc2VudGF0aW9uLkVjb3JlMkVjb3JlQ29udHJpYnV0aW9uSUQvb3JnLmVjbGlwc2UuZW1mLm1hcHBpbmcuYWN0aW9uLkNyZWF0ZU9uZVNpZGVkTWFwcGluZ0FjdGlvbklEIiBjb21tYW5kTmFtZT0iQ3JlYXRlIE9uZS1zaWRlZCBNYXBwaW5nIiBkZXNjcmlwdGlvbj0iQ3JlYXRlIGEgbmV3IG1hcHBpbmcgZm9yIHRoZSBzZWxlY3RlZCBvYmplY3QuIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlRtQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmVtZi5tYXBwaW5nLmVjb3JlMmVjb3JlLnByZXNlbnRhdGlvbi5FY29yZTJFY29yZUNvbnRyaWJ1dGlvbklEL29yZy5lY2xpcHNlLmVtZi5tYXBwaW5nLmFjdGlvbi5DcmVhdGVNYXBwaW5nQWN0aW9uSUQiIGNvbW1hbmROYW1lPSJDcmVhdGUgTWFwcGluZyIgZGVzY3JpcHRpb249IkNyZWF0ZSBhIG5ldyBtYXBwaW5nIGJldHdlZW4gdGhlIHNlbGVjdGVkIG9iamVjdHMuIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlRtU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmVtZi5tYXBwaW5nLmVjb3JlMmVjb3JlLnByZXNlbnRhdGlvbi5FY29yZTJFY29yZUNvbnRyaWJ1dGlvbklEL29yZy5lY2xpcHNlLmVtZi5tYXBwaW5nLmVjb3JlMmVjb3JlLmFjdGlvbi5BZGRPdXB1dFJvb3RBY3Rpb25JRCIgY29tbWFuZE5hbWU9IkFkZCBPdXRwdXQgUm9vdC4uLiIgZGVzY3JpcHRpb249IkFkZCBuZXcgb3V0cHV0IHJvb3QuIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlRtaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmVtZi5tYXBwaW5nLmVjb3JlMmVjb3JlLnByZXNlbnRhdGlvbi5FY29yZTJFY29yZUNvbnRyaWJ1dGlvbklEL29yZy5lY2xpcHNlLmVtZi5tYXBwaW5nLmVjb3JlMmVjb3JlLmFjdGlvbi5BZGRJbnB1dFJvb3RBY3Rpb25JRCIgY29tbWFuZE5hbWU9IkFkZCBJbnB1dCBSb290Li4uIiBkZXNjcmlwdGlvbj0iQWRkIG5ldyBpbnB1dCByb290LiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUbXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5qZHQuZGVidWcuQ29tcGlsYXRpb25Vbml0RWRpdG9yLkJyZWFrcG9pbnRSdWxlckFjdGlvbnMvb3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmFjdGlvbnMuTWFuYWdlQnJlYWtwb2ludFJ1bGVyQWN0aW9uIiBjb21tYW5kTmFtZT0iVG9nZ2xlIEJyZWFrcG9pbnQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVG5DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuamR0LmRlYnVnLkNsYXNzRmlsZUVkaXRvci5CcmVha3BvaW50UnVsZXJBY3Rpb25zL29yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5hY3Rpb25zLk1hbmFnZUJyZWFrcG9pbnRSdWxlckFjdGlvbiIgY29tbWFuZE5hbWU9IlRvZ2dsZSBCcmVha3BvaW50IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlRuU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5KYXZhU25pcHBldFRvb2xiYXJBY3Rpb25zL29yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5TbmlwcGV0RXhlY3V0ZSIgY29tbWFuZE5hbWU9IkV4ZWN1dGUiIGRlc2NyaXB0aW9uPSJFeGVjdXRlIHRoZSBTZWxlY3RlZCBUZXh0IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlRuaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5KYXZhU25pcHBldFRvb2xiYXJBY3Rpb25zL29yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5TbmlwcGV0RGlzcGxheSIgY29tbWFuZE5hbWU9IkRpc3BsYXkiIGRlc2NyaXB0aW9uPSJEaXNwbGF5IFJlc3VsdCBvZiBFdmFsdWF0aW5nIFNlbGVjdGVkIFRleHQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVG55eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLkphdmFTbmlwcGV0VG9vbGJhckFjdGlvbnMvb3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLlNuaXBwZXRJbnNwZWN0IiBjb21tYW5kTmFtZT0iSW5zcGVjdCIgZGVzY3JpcHRpb249Ikluc3BlY3QgUmVzdWx0IG9mIEV2YWx1YXRpbmcgU2VsZWN0ZWQgVGV4dCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUb0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuQ29tcGlsYXRpb25Vbml0RWRpdG9yLnJ1bGVyLmFjdGlvbnMvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLmphdmFlZGl0b3IuQm9va21hcmtSdWxlckFjdGlvbiIgY29tbWFuZE5hbWU9IkphdmEgRWRpdG9yIEJvb2ttYXJrIFJ1bGVyIEFjdGlvbiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUb1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuQ29tcGlsYXRpb25Vbml0RWRpdG9yLnJ1bGVyLmFjdGlvbnMvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLmphdmFlZGl0b3IuSmF2YVNlbGVjdFJ1bGVyQWN0aW9uIiBjb21tYW5kTmFtZT0iSmF2YSBFZGl0b3IgUnVsZXIgU2luZ2xlLUNsaWNrIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlRvaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5DbGFzc0ZpbGVFZGl0b3IucnVsZXIuYWN0aW9ucy9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuamF2YWVkaXRvci5KYXZhU2VsZWN0UnVsZXJBY3Rpb24iIGNvbW1hbmROYW1lPSJKYXZhIEVkaXRvciBSdWxlciBTaW5nbGUtQ2xpY2siIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVG95eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLlByb3BlcnRpZXNGaWxlRWRpdG9yLnJ1bGVyLmFjdGlvbnMvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLnByb3BlcnRpZXNmaWxlZWRpdG9yLkJvb2ttYXJrUnVsZXJBY3Rpb24iIGNvbW1hbmROYW1lPSJKYXZhIEVkaXRvciBCb29rbWFyayBSdWxlciBBY3Rpb24iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHBDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLlByb3BlcnRpZXNGaWxlRWRpdG9yLnJ1bGVyLmFjdGlvbnMvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLnByb3BlcnRpZXNmaWxlZWRpdG9yLlNlbGVjdFJ1bGVyQWN0aW9uIiBjb21tYW5kTmFtZT0iSmF2YSBFZGl0b3IgUnVsZXIgU2luZ2xlLUNsaWNrIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlRwU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UucnVsZXIuYWN0aW9ucy9vcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLkJvb2ttYXJrUnVsZXJBY3Rpb24iIGNvbW1hbmROYW1lPSJBZGQgQm9va21hcmsuLi4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHBpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZS5ydWxlci5hY3Rpb25zL29yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuU2VsZWN0UnVsZXJBY3Rpb24iIGNvbW1hbmROYW1lPSJTZWxlY3QgUnVsZXIiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHB5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UubTJlLmpkdC51aS5kb3dubG9hZFNvdXJjZXNDb250cmlidXRpb24vb3JnLmVjbGlwc2UubTJlLmpkdC51aS5kb3dubG9hZFNvdXJjZXNBY3Rpb24iIGNvbW1hbmROYW1lPSJsYWJlbCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUcUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5tMmUuamR0LnVpLmRvd25sb2FkU291cmNlc0NvbnRyaWJ1dGlvbl8zOC9vcmcuZWNsaXBzZS5tMmUuamR0LnVpLmRvd25sb2FkU291cmNlc0FjdGlvbl8zOCIgY29tbWFuZE5hbWU9ImxhYmVsIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlRxU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IucnVsZXIuYWN0aW9ucy9vcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLkJvb2ttYXJrUnVsZXJBY3Rpb24iIGNvbW1hbmROYW1lPSJUZXh0IEVkaXRvciBCb29rbWFyayBSdWxlciBBY3Rpb24iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHFpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5ydWxlci5hY3Rpb25zL29yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuU2VsZWN0UnVsZXJBY3Rpb24iIGNvbW1hbmROYW1lPSJUZXh0IEVkaXRvciBSdWxlciBTaW5nbGUtQ2xpY2siIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHF5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmNzc3NvdXJjZS5ydWxlci5hY3Rpb25zL29yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuQm9va21hcmtSdWxlckFjdGlvbiIgY29tbWFuZE5hbWU9IkFkZCBCb29rbWFyay4uLiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUckN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuY3Nzc291cmNlLnJ1bGVyLmFjdGlvbnMvb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5TZWxlY3RSdWxlckFjdGlvbiIgY29tbWFuZE5hbWU9IlNlbGVjdCBSdWxlciIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUclN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUuZHRkc291cmNlLnJ1bGVyLmFjdGlvbnMvb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5Cb29rbWFya1J1bGVyQWN0aW9uIiBjb21tYW5kTmFtZT0iQWRkIEJvb2ttYXJrLi4uIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlRyaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS5kdGRzb3VyY2UucnVsZXIuYWN0aW9ucy9vcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLlNlbGVjdFJ1bGVyQWN0aW9uIiBjb21tYW5kTmFtZT0iU2VsZWN0IFJ1bGVyIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlRyeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaHRtbHNvdXJjZS5ydWxlci5hY3Rpb25zL29yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuQm9va21hcmtSdWxlckFjdGlvbiIgY29tbWFuZE5hbWU9IkFkZCBCb29rbWFyay4uLiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUc0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmh0bWxzb3VyY2UucnVsZXIuYWN0aW9ucy9vcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLlNlbGVjdFJ1bGVyQWN0aW9uIiBjb21tYW5kTmFtZT0iU2VsZWN0IFJ1bGVyIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlRzU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLndzdC5qc2R0LmNocm9taXVtLmRlYnVnLnVpLmVkaXRvcnMuSnNFZGl0b3IuZWRpdG9yQWN0aW9ucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jaHJvbWl1bS5kZWJ1Zy51aS5lZGl0b3IucnVsZXIuZG91YmxlQ2xpY2tCcmVha3BvaW50QWN0aW9uIiBjb21tYW5kTmFtZT0iTm90IFVzZWQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHNpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2Uud3N0LmpzZHQuZGVidWcudWkudG9nZ2xlYnJlYWtwb2ludC9vcmcuZWNsaXBzZS53c3QuanNkdC5kZWJ1Zy51aS5SdWxlclRvZ2dsZUJyZWFrcG9pbnQiIGNvbW1hbmROYW1lPSJUb2dnbGUgQnJlYWtwb2ludCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUc3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS53c3QuanNkdC5pbnRlcm5hbC51aS5Db21waWxhdGlvblVuaXRFZGl0b3IucnVsZXIuYWN0aW9ucy9vcmcuZWNsaXBzZS53c3QuanNkdC5pbnRlcm5hbC51aS5qYXZhZWRpdG9yLkJvb2ttYXJrUnVsZXJBY3Rpb24iIGNvbW1hbmROYW1lPSJKYXZhU2NyaXB0IEVkaXRvciBCb29rbWFyayBSdWxlciBBY3Rpb24iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHRDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2Uud3N0LmpzZHQuaW50ZXJuYWwudWkuQ29tcGlsYXRpb25Vbml0RWRpdG9yLnJ1bGVyLmFjdGlvbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuaW50ZXJuYWwudWkuamF2YWVkaXRvci5KYXZhU2VsZWN0UnVsZXJBY3Rpb24iIGNvbW1hbmROYW1lPSJKYXZhU2NyaXB0IEVkaXRvciBSdWxlciBTaW5nbGUtQ2xpY2siIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHRTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2Uud3N0LmpzZHQuaW50ZXJuYWwudWkuQ2xhc3NGaWxlRWRpdG9yLnJ1bGVyLmFjdGlvbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuaW50ZXJuYWwudWkuamF2YWVkaXRvci5KYXZhU2VsZWN0UnVsZXJBY3Rpb24iIGNvbW1hbmROYW1lPSJKYXZhU2NyaXB0IEVkaXRvciBSdWxlciBTaW5nbGUtQ2xpY2siIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHRpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2Uud3N0LmpzZHQuaW50ZXJuYWwudWkuUHJvcGVydGllc0ZpbGVFZGl0b3IucnVsZXIuYWN0aW9ucy9vcmcuZWNsaXBzZS53c3QuanNkdC5pbnRlcm5hbC51aS5wcm9wZXJ0aWVzZmlsZWVkaXRvci5Cb29rbWFya1J1bGVyQWN0aW9uIiBjb21tYW5kTmFtZT0iSmF2YVNjcmlwdCBFZGl0b3IgQm9va21hcmsgUnVsZXIgQWN0aW9uIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlR0eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLndzdC5qc2R0LmludGVybmFsLnVpLlByb3BlcnRpZXNGaWxlRWRpdG9yLnJ1bGVyLmFjdGlvbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuaW50ZXJuYWwudWkucHJvcGVydGllc2ZpbGVlZGl0b3IuU2VsZWN0UnVsZXJBY3Rpb24iIGNvbW1hbmROYW1lPSJKYXZhU2NyaXB0IEVkaXRvciBSdWxlciBTaW5nbGUtQ2xpY2siIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHVDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2Uud3N0Lmpzb24uY29yZS5qc29uc291cmNlLnJ1bGVyLmFjdGlvbnMvb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5Cb29rbWFya1J1bGVyQWN0aW9uIiBjb21tYW5kTmFtZT0iJUFkZEJvb2ttYXJrLmxhYmVsIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlR1U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLndzdC5qc29uLmNvcmUuanNvbnNvdXJjZS5ydWxlci5hY3Rpb25zL29yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuU2VsZWN0UnVsZXJBY3Rpb24iIGNvbW1hbmROYW1lPSIlU2VsZWN0UnVsZXIubGFiZWwiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHVpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UudWkuYXJ0aWNsZXMuYWN0aW9uLmNvbnRyaWJ1dGlvbi5lZGl0b3Ivb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuYWN0aW9ucy5SZWxvYWREZXBlbmRlbmNpZXNBY3Rpb25EZWxlZ2F0ZSIgY29tbWFuZE5hbWU9IlJlbG9hZCBEZXBlbmRlbmNpZXMiIGRlc2NyaXB0aW9uPSJSZWxvYWQgRGVwZW5kZW5jaWVzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlR1eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLndzdC53c2RsLndzZGxzb3VyY2UucnVsZXIuYWN0aW9ucy9vcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLkJvb2ttYXJrUnVsZXJBY3Rpb24iIGNvbW1hbmROYW1lPSJBZGQgQm9va21hcmsuLi4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHZDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2Uud3N0LndzZGwud3NkbHNvdXJjZS5ydWxlci5hY3Rpb25zL29yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuU2VsZWN0UnVsZXJBY3Rpb24iIGNvbW1hbmROYW1lPSJTZWxlY3QgUnVsZXIiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHZTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnhtbC5zb3VyY2UucnVsZXIuYWN0aW9ucy9vcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLkJvb2ttYXJrUnVsZXJBY3Rpb24iIGNvbW1hbmROYW1lPSJBZGQgQm9va21hcmsuLi4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHZpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnhtbC5zb3VyY2UucnVsZXIuYWN0aW9ucy9vcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLlNlbGVjdFJ1bGVyQWN0aW9uIiBjb21tYW5kTmFtZT0iU2VsZWN0IFJ1bGVyIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlR2eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLndzdC54c2QuY29yZS54c2Rzb3VyY2UucnVsZXIuYWN0aW9ucy9vcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLkJvb2ttYXJrUnVsZXJBY3Rpb24iIGNvbW1hbmROYW1lPSJBZGQgQm9va21hcmsuLi4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHdDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnhzZHNvdXJjZS5ydWxlci5hY3Rpb25zL29yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuU2VsZWN0UnVsZXJBY3Rpb24iIGNvbW1hbmROYW1lPSJTZWxlY3QgUnVsZXIiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHdTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuZGVidWcudWkuUHVsbGRvd25BY3Rpb25zL29yZy5lY2xpcHNlLmRlYnVnLnVpLmRlYnVndmlldy5wdWxsZG93bi5WaWV3TWFuYWdlbWVudEFjdGlvbiIgY29tbWFuZE5hbWU9IlZpZXcgTWFuYWdlbWVudC4uLiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUd2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5kZWJ1Z3ZpZXcudG9vbGJhci9vcmcuZWNsaXBzZS5kZWJ1Zy51aS5kZWJ1Z3ZpZXcudG9vbGJhci5yZW1vdmVBbGxUZXJtaW5hdGVkIiBjb21tYW5kTmFtZT0iUmVtb3ZlIEFsbCBUZXJtaW5hdGVkIiBkZXNjcmlwdGlvbj0iUmVtb3ZlIEFsbCBUZXJtaW5hdGVkIExhdW5jaGVzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlR3eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmRlYnVnLnVpLmJyZWFrcG9pbnRzdmlldy50b29sYmFyL29yZy5lY2xpcHNlLmRlYnVnLnVpLmJyZWFrcG9pbnRzVmlldy50b29sYmFyLnJlbW92ZUFsbCIgY29tbWFuZE5hbWU9IlJlbW92ZSBBbGwiIGRlc2NyaXB0aW9uPSJSZW1vdmUgQWxsIEJyZWFrcG9pbnRzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlR4Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmRlYnVnLnVpLmJyZWFrcG9pbnRzdmlldy50b29sYmFyL29yZy5lY2xpcHNlLmRlYnVnLnVpLmJyZWFrcG9pbnRzVmlldy50b29sYmFyLmxpbmtXaXRoRGVidWdWaWV3IiBjb21tYW5kTmFtZT0iTGluayB3aXRoIERlYnVnIFZpZXciIGRlc2NyaXB0aW9uPSJMaW5rIHdpdGggRGVidWcgVmlldyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUeFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5icmVha3BvaW50c3ZpZXcudG9vbGJhci9vcmcuZWNsaXBzZS5kZWJ1Zy51aS5icmVha3BvaW50c1ZpZXcudG9vbGJhci53b3JraW5nU2V0cyIgY29tbWFuZE5hbWU9IldvcmtpbmcgU2V0cy4uLiIgZGVzY3JpcHRpb249Ik1hbmFnZSBXb3JraW5nIFNldHMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHhpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuZGVidWcudWkuYnJlYWtwb2ludHN2aWV3LnRvb2xiYXIvb3JnLmVjbGlwc2UuZGVidWcudWkuYnJlYWtwb2ludHNWaWV3LnRvb2xiYXIuY2xlYXJEZWZhdWx0QnJlYWtwb2ludEdyb3VwIiBjb21tYW5kTmFtZT0iRGVzZWxlY3QgRGVmYXVsdCBXb3JraW5nIFNldCIgZGVzY3JpcHRpb249IkRlc2VsZWN0IERlZmF1bHQgV29ya2luZyBTZXQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHh5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuZGVidWcudWkuYnJlYWtwb2ludHN2aWV3LnRvb2xiYXIvb3JnLmVjbGlwc2UuZGVidWcudWkuYnJlYWtwb2ludHNWaWV3LnRvb2xiYXIuc2V0RGVmYXVsdEJyZWFrcG9pbnRHcm91cCIgY29tbWFuZE5hbWU9IlNlbGVjdCBEZWZhdWx0IFdvcmtpbmcgU2V0Li4uIiBkZXNjcmlwdGlvbj0iU2VsZWN0IERlZmF1bHQgV29ya2luZyBTZXQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHlDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuZGVidWcudWkuYnJlYWtwb2ludHN2aWV3LnRvb2xiYXIvb3JnLmVjbGlwc2UuZGVidWcudWkuYnJlYWtwb2ludHNWaWV3LnRvb2xiYXIuc29ydEJ5QWN0aW9uIiBjb21tYW5kTmFtZT0iU29ydCBCeSIgZGVzY3JpcHRpb249IlNvcnQgQnkiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHlTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuZGVidWcudWkuYnJlYWtwb2ludHN2aWV3LnRvb2xiYXIvb3JnLmVjbGlwc2UuZGVidWcudWkuYnJlYWtwb2ludHNWaWV3LnRvb2xiYXIuZ3JvdXBCeUFjdGlvbiIgY29tbWFuZE5hbWU9Ikdyb3VwIEJ5IiBkZXNjcmlwdGlvbj0iU2hvdyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUeWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5leHByZXNzaW9uc1ZpZXcudG9vbGJhci9vcmcuZWNsaXBzZS5kZWJ1Zy51aS5leHByZXNzc2lvbnNWaWV3LnRvb2xiYXIucmVtb3ZlQWxsIiBjb21tYW5kTmFtZT0iUmVtb3ZlIEFsbCIgZGVzY3JpcHRpb249IlJlbW92ZSBBbGwgRXhwcmVzc2lvbnMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHl5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuZGVidWcudWkuZXhwcmVzc2lvbnNWaWV3LnRvb2xiYXIvb3JnLmVjbGlwc2UuZGVidWcudWkuZXhwcmVzc3Npb25zVmlldy50b29sYmFyLkFkZFdhdGNoRXhwcmVzc2lvbiIgY29tbWFuZE5hbWU9IkFkZCBXYXRjaCBFeHByZXNzaW9uLi4uIiBkZXNjcmlwdGlvbj0iQ3JlYXRlIGEgbmV3IHdhdGNoIGV4cHJlc3Npb24iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHpDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuZGVidWcudWkubWVtb3J5Vmlldy50b29sYmFyL29yZy5lY2xpcHNlLmRlYnVnLnVpLlBpbk1lbW9yeUJsb2NrQWN0aW9uIiBjb21tYW5kTmFtZT0iUGluIE1lbW9yeSBNb25pdG9yIiBkZXNjcmlwdGlvbj0iUGluIE1lbW9yeSBNb25pdG9yIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlR6U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmRlYnVnLnVpLm1lbW9yeVZpZXcudG9vbGJhci9vcmcuZWNsaXBzZS5kZWJ1Zy51aS5OZXdNZW1vcnlWaWV3QWN0aW9uIiBjb21tYW5kTmFtZT0iTmV3IE1lbW9yeSBWaWV3IiBkZXNjcmlwdGlvbj0iTmV3IE1lbW9yeSBWaWV3IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlR6aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmRlYnVnLnVpLm1lbW9yeVZpZXcudG9vbGJhci9vcmcuZWNsaXBzZS5kZWJ1Zy51aS50b2dnbGVtb25pdG9ycyIgY29tbWFuZE5hbWU9IlRvZ2dsZSBNZW1vcnkgTW9uaXRvcnMgUGFuZSIgZGVzY3JpcHRpb249IlRvZ2dsZSBNZW1vcnkgTW9uaXRvcnMgUGFuZSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUenl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5tZW1vcnlWaWV3LnRvb2xiYXIvb3JnLmVjbGlwc2UuZGVidWcudWkubGlua3JlbmRlcmluZ3BhbmVzIiBjb21tYW5kTmFtZT0iTGluayBNZW1vcnkgUmVuZGVyaW5nIFBhbmVzIiBkZXNjcmlwdGlvbj0iTGluayBNZW1vcnkgUmVuZGVyaW5nIFBhbmVzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlQwQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmRlYnVnLnVpLm1lbW9yeVZpZXcudG9vbGJhci9vcmcuZWNsaXBzZS5kZWJ1Zy51aS50YWJsZXJlbmRlcmluZy5wcmVmZXJlbmNlc2FjdGlvbiIgY29tbWFuZE5hbWU9IlRhYmxlIFJlbmRlcmluZ3MgUHJlZmVyZW5jZXMuLi4iIGRlc2NyaXB0aW9uPSImYW1wO1RhYmxlIFJlbmRlcmluZ3MgUHJlZmVyZW5jZXMuLi4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVDBTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuZGVidWcudWkubWVtb3J5Vmlldy50b29sYmFyL29yZy5lY2xpcHNlLmRlYnVnLnVpLnRvZ2dsZXNwbGl0cGFuZSIgY29tbWFuZE5hbWU9IlRvZ2dsZSBTcGxpdCBQYW5lIiBkZXNjcmlwdGlvbj0iVG9nZ2xlIFNwbGl0IFBhbmUiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVDBpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuZGVidWcudWkubWVtb3J5Vmlldy50b29sYmFyL29yZy5lY2xpcHNlLmRlYnVnLnVpLnN3aXRjaE1lbW9yeUJsb2NrIiBjb21tYW5kTmFtZT0iU3dpdGNoIE1lbW9yeSBNb25pdG9yIiBkZXNjcmlwdGlvbj0iU3dpdGNoIE1lbW9yeSBNb25pdG9yIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlQweXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmRlYnVnLnVpLm1lbW9yeVZpZXcudG9vbGJhci9vcmcuZWNsaXBzZS5kZWJ1Zy51aS5tZW1vcnlWaWV3UHJlZmVyZW5jZXNBY3Rpb24iIGNvbW1hbmROYW1lPSJQcmVmZXJlbmNlcy4uLiIgZGVzY3JpcHRpb249IiZhbXA7UHJlZmVyZW5jZXMuLi4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVDFDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLlZhcmlhYmxlVmlld0FjdGlvbnMvb3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLnZhcmlhYmxlVmlld0FjdGlvbnMuUHJlZmVyZW5jZXMiIGNvbW1hbmROYW1lPSJKYXZhIFByZWZlcmVuY2VzLi4uIiBkZXNjcmlwdGlvbj0iT3BlbnMgcHJlZmVyZW5jZXMgZm9yIEphdmEgdmFyaWFibGVzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlQxU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5WYXJpYWJsZVZpZXdBY3Rpb25zL29yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS52YXJpYWJsZXNWaWV3QWN0aW9ucy5BbGxSZWZlcmVuY2VzSW5WaWV3IiBjb21tYW5kTmFtZT0iU2hvdyBSZWZlcmVuY2VzIiBkZXNjcmlwdGlvbj0iU2hvd3MgcmVmZXJlbmNlcyB0byBlYWNoIG9iamVjdCBpbiB0aGUgdmFyaWFibGVzIHZpZXcgYXMgYW4gYXJyYXkgb2Ygb2JqZWN0cy4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVDFpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLlZhcmlhYmxlVmlld0FjdGlvbnMvb3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLnZhcmlhYmxlVmlld0FjdGlvbnMuU2hvd051bGxFbnRyaWVzIiBjb21tYW5kTmFtZT0iU2hvdyBOdWxsIEFycmF5IEVudHJpZXMiIGRlc2NyaXB0aW9uPSJTaG93IE51bGwgQXJyYXkgRW50cmllcyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUMXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuVmFyaWFibGVWaWV3QWN0aW9ucy9vcmcuZWNsaXBzZS5qZHQuZGVidWcudWkudmFyaWFibGVWaWV3QWN0aW9ucy5TaG93UXVhbGlmaWVkIiBjb21tYW5kTmFtZT0iU2hvdyBRdWFsaWZpZWQgTmFtZXMiIGRlc2NyaXB0aW9uPSJTaG93IFF1YWxpZmllZCBOYW1lcyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUMkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuVmFyaWFibGVWaWV3QWN0aW9ucy9vcmcuZWNsaXBzZS5qZHQuZGVidWcudWkudmFyaWFibGVWaWV3QWN0aW9ucy5TaG93U3RhdGljIiBjb21tYW5kTmFtZT0iU2hvdyBTdGF0aWMgVmFyaWFibGVzIiBkZXNjcmlwdGlvbj0iU2hvdyBTdGF0aWMgVmFyaWFibGVzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlQyU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5WYXJpYWJsZVZpZXdBY3Rpb25zL29yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS52YXJpYWJsZVZpZXdBY3Rpb25zLlNob3dDb25zdGFudHMiIGNvbW1hbmROYW1lPSJTaG93IENvbnN0YW50cyIgZGVzY3JpcHRpb249IlNob3cgQ29uc3RhbnRzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlQyaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5FeHByZXNzaW9uVmlld0FjdGlvbnMvb3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLnZhcmlhYmxlVmlld0FjdGlvbnMuUHJlZmVyZW5jZXMiIGNvbW1hbmROYW1lPSJKYXZhIFByZWZlcmVuY2VzLi4uIiBkZXNjcmlwdGlvbj0iT3BlbnMgcHJlZmVyZW5jZXMgZm9yIEphdmEgdmFyaWFibGVzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlQyeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5FeHByZXNzaW9uVmlld0FjdGlvbnMvb3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmV4cHJlc3Npb25WaWV3QWN0aW9ucy5BbGxSZWZlcmVuY2VzSW5WaWV3IiBjb21tYW5kTmFtZT0iU2hvdyBSZWZlcmVuY2VzIiBkZXNjcmlwdGlvbj0iU2hvdyAmYW1wO1JlZmVyZW5jZXMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVDNDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLkV4cHJlc3Npb25WaWV3QWN0aW9ucy9vcmcuZWNsaXBzZS5qZHQuZGVidWcudWkudmFyaWFibGVWaWV3QWN0aW9ucy5TaG93TnVsbEVudHJpZXMiIGNvbW1hbmROYW1lPSJTaG93IE51bGwgQXJyYXkgRW50cmllcyIgZGVzY3JpcHRpb249IlNob3cgTnVsbCBBcnJheSBFbnRyaWVzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlQzU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5FeHByZXNzaW9uVmlld0FjdGlvbnMvb3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmV4cHJlc3Npb25WaWV3QWN0aW9ucy5TaG93UXVhbGlmaWVkIiBjb21tYW5kTmFtZT0iU2hvdyBRdWFsaWZpZWQgTmFtZXMiIGRlc2NyaXB0aW9uPSJTaG93IFF1YWxpZmllZCBOYW1lcyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUM2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuRXhwcmVzc2lvblZpZXdBY3Rpb25zL29yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5leHByZXNzaW9uVmlld0FjdGlvbnMuU2hvd1N0YXRpYyIgY29tbWFuZE5hbWU9IlNob3cgU3RhdGljIFZhcmlhYmxlcyIgZGVzY3JpcHRpb249IlNob3cgU3RhdGljIFZhcmlhYmxlcyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUM3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuRXhwcmVzc2lvblZpZXdBY3Rpb25zL29yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5leHByZXNzaW9uVmlld0FjdGlvbnMuU2hvd0NvbnN0YW50cyIgY29tbWFuZE5hbWU9IlNob3cgQ29uc3RhbnRzIiBkZXNjcmlwdGlvbj0iU2hvdyBDb25zdGFudHMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVDRDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLkJyZWFrcG9pbnRWaWV3QWN0aW9ucy9vcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuYWN0aW9ucy5BZGRFeGNlcHRpb24iIGNvbW1hbmROYW1lPSJBZGQgSmF2YSBFeGNlcHRpb24gQnJlYWtwb2ludCIgZGVzY3JpcHRpb249IkFkZCBKYXZhIEV4Y2VwdGlvbiBCcmVha3BvaW50IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlQ0U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5CcmVha3BvaW50Vmlld0FjdGlvbnMvb3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmJyZWFrcG9pbnRWaWV3QWN0aW9ucy5TaG93UXVhbGlmaWVkIiBjb21tYW5kTmFtZT0iU2hvdyBRdWFsaWZpZWQgTmFtZXMiIGRlc2NyaXB0aW9uPSJTaG93IFF1YWxpZmllZCBOYW1lcyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUNGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuTGF1bmNoVmlld0FjdGlvbnMvb3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmxhdW5jaFZpZXdBY3Rpb25zLlNob3dUaHJlYWRHcm91cHMiIGNvbW1hbmROYW1lPSJTaG93IFRocmVhZCBHcm91cHMiIGRlc2NyaXB0aW9uPSJTaG93IFRocmVhZCBHcm91cHMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVDR5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLkxhdW5jaFZpZXdBY3Rpb25zL29yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5sYXVuY2hWaWV3QWN0aW9ucy5TaG93UXVhbGlmaWVkIiBjb21tYW5kTmFtZT0iU2hvdyBRdWFsaWZpZWQgTmFtZXMiIGRlc2NyaXB0aW9uPSJTaG93IFF1YWxpZmllZCBOYW1lcyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUNUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuTGF1bmNoVmlld0FjdGlvbnMvb3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmxhdW5jaFZpZXdBY3Rpb25zLlNob3dTeXN0ZW1UaHJlYWRzIiBjb21tYW5kTmFtZT0iU2hvdyBTeXN0ZW0gVGhyZWFkcyIgZGVzY3JpcHRpb249IlNob3cgU3lzdGVtIFRocmVhZHMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVDVTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLkxhdW5jaFZpZXdBY3Rpb25zL29yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5sYXVuY2hWaWV3QWN0aW9ucy5TaG93TW9uaXRvclRocmVhZEluZm8iIGNvbW1hbmROYW1lPSJTaG93IE1vbml0b3JzIiBkZXNjcmlwdGlvbj0iU2hvdyB0aGUgVGhyZWFkICZhbXA7IE1vbml0b3IgSW5mb3JtYXRpb24iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVDVpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLkRpc3BsYXlWaWV3QWN0aW9ucy9vcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuZGlzcGxheVZpZXdUb29sYmFyLldhdGNoIiBjb21tYW5kTmFtZT0iV2F0Y2giIGRlc2NyaXB0aW9uPSJDcmVhdGUgYSBXYXRjaCBFeHByZXNzaW9uIGZyb20gdGhlIFNlbGVjdGVkIFRleHQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVDV5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLkRpc3BsYXlWaWV3QWN0aW9ucy9vcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuZGlzcGxheVZpZXdUb29sYmFyLkV4ZWN1dGUiIGNvbW1hbmROYW1lPSJFeGVjdXRlIiBkZXNjcmlwdGlvbj0iRXhlY3V0ZSB0aGUgU2VsZWN0ZWQgVGV4dCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUNkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuRGlzcGxheVZpZXdBY3Rpb25zL29yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5kaXNwbGF5Vmlld1Rvb2xiYXIuRGlzcGxheSIgY29tbWFuZE5hbWU9IkRpc3BsYXkiIGRlc2NyaXB0aW9uPSJEaXNwbGF5IFJlc3VsdCBvZiBFdmFsdWF0aW5nIFNlbGVjdGVkIFRleHQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVDZTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLkRpc3BsYXlWaWV3QWN0aW9ucy9vcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuZGlzcGxheVZpZXdUb29sYmFyLkluc3BlY3QiIGNvbW1hbmROYW1lPSJJbnNwZWN0IiBkZXNjcmlwdGlvbj0iSW5zcGVjdCBSZXN1bHQgb2YgRXZhbHVhdGluZyBTZWxlY3RlZCBUZXh0IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlQ2aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLm15bHluLmNvbnRleHQudWkub3V0bGluZS5jb250cmlidXRpb24vb3JnLmVjbGlwc2UubXlseW4uY29udGV4dC51aS5jb250ZW50T3V0bGluZS5mb2N1cyIgY29tbWFuZE5hbWU9IkZvY3VzIG9uIEFjdGl2ZSBUYXNrIiBkZXNjcmlwdGlvbj0iRm9jdXMgb24gQWN0aXZlIFRhc2sgKEFsdCtjbGljayB0byByZXZlYWwgZmlsdGVyZWQgZWxlbWVudHMpIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlQ2eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLm15bHluLmphdmEudWkubWFya2Vycy5icmVha3BvaW50cy5jb250cmlidXRpb24vb3JnLmVjbGlwc2UubXlseW4uamF2YS51aS5hY3Rpb25zLmZvY3VzLm1hcmtlcnMuYnJlYWtwb2ludHMiIGNvbW1hbmROYW1lPSJGb2N1cyBvbiBBY3RpdmUgVGFzayIgZGVzY3JpcHRpb249IkZvY3VzIG9uIEFjdGl2ZSBUYXNrIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlQ3Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLm15bHluLnVpLmRlYnVnLnZpZXcuY29udHJpYnV0aW9uL29yZy5lY2xpcHNlLm15bHluLnVpLmFjdGlvbnMuRmlsdGVyUmVzb3VyY2VOYXZpZ2F0b3JBY3Rpb24iIGNvbW1hbmROYW1lPSJGb2N1cyBvbiBBY3RpdmUgVGFzayAoRXhwZXJpbWVudGFsKSIgZGVzY3JpcHRpb249IkZvY3VzIG9uIEFjdGl2ZSBUYXNrIChFeHBlcmltZW50YWwpIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlQ3U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLm15bHluLnVpLnByb2plY3RleHBsb3Jlci5maWx0ZXIvb3JnLmVjbGlwc2UubXlseW4uaWRlLnVpLmFjdGlvbnMuZm9jdXMucHJvamVjdEV4cGxvcmVyIiBjb21tYW5kTmFtZT0iRm9jdXMgb24gQWN0aXZlIFRhc2siIGRlc2NyaXB0aW9uPSJGb2N1cyBvbiBBY3RpdmUgVGFzayAoQWx0K2NsaWNrIHRvIHJldmVhbCBmaWx0ZXJlZCBlbGVtZW50cykiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVDdpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UubXlseW4udWkuc2VhcmNoLmNvbnRyaWJ1dGlvbi9vcmcuZWNsaXBzZS5teWx5bi5pZGUudWkuYWN0aW9ucy5mb2N1cy5zZWFyY2gucmVzdWx0cyIgY29tbWFuZE5hbWU9IkZvY3VzIG9uIEFjdGl2ZSBUYXNrIiBkZXNjcmlwdGlvbj0iRm9jdXMgb24gQWN0aXZlIFRhc2sgKEFsdCtjbGljayB0byByZXZlYWwgZmlsdGVyZWQgZWxlbWVudHMpIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlQ3eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLm15bHluLnVpLnJlc291cmNlLm5hdmlnYXRvci5maWx0ZXIvb3JnLmVjbGlwc2UubXlseW4uaWRlLnVpLmFjdGlvbnMuZm9jdXMucmVzb3VyY2VOYXZpZ2F0b3IiIGNvbW1hbmROYW1lPSJGb2N1cyBvbiBBY3RpdmUgVGFzayIgZGVzY3JpcHRpb249IkZvY3VzIG9uIEFjdGl2ZSBUYXNrIChBbHQrY2xpY2sgdG8gcmV2ZWFsIGZpbHRlcmVkIGVsZW1lbnRzKSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUOEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5teWx5bi5wcm9ibGVtcy5jb250cmlidXRpb24vb3JnLmVjbGlwc2UubXlseW4uaWRlLnVpLmFjdGlvbnMuZm9jdXMubWFya2Vycy5wcm9ibGVtcyIgY29tbWFuZE5hbWU9IkZvY3VzIG9uIEFjdGl2ZSBUYXNrIiBkZXNjcmlwdGlvbj0iRm9jdXMgb24gQWN0aXZlIFRhc2siIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVDhTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UubXlseW4ubWFya2Vycy5hbGwuY29udHJpYnV0aW9uL29yZy5lY2xpcHNlLm15bHluLmlkZS51aS5hY3Rpb25zLmZvY3VzLm1hcmtlcnMuYWxsIiBjb21tYW5kTmFtZT0iRm9jdXMgb24gQWN0aXZlIFRhc2siIGRlc2NyaXB0aW9uPSJGb2N1cyBvbiBBY3RpdmUgVGFzayIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUOGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5teWx5bi5tYXJrZXJzLnRhc2tzLmNvbnRyaWJ1dGlvbi9vcmcuZWNsaXBzZS5teWx5bi5pZGUudWkuYWN0aW9ucy5mb2N1cy5tYXJrZXJzLnRhc2tzIiBjb21tYW5kTmFtZT0iRm9jdXMgb24gQWN0aXZlIFRhc2siIGRlc2NyaXB0aW9uPSJGb2N1cyBvbiBBY3RpdmUgVGFzayIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUOHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5teWx5bi5tYXJrZXJzLmJvb2ttYXJrcy5jb250cmlidXRpb24vb3JnLmVjbGlwc2UubXlseW4uaWRlLnVpLmFjdGlvbnMuZm9jdXMubWFya2Vycy5ib29rbWFya3MiIGNvbW1hbmROYW1lPSJGb2N1cyBvbiBBY3RpdmUgVGFzayIgZGVzY3JpcHRpb249IkZvY3VzIG9uIEFjdGl2ZSBUYXNrIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlQ5Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLm15bHluLmphdmEuZXhwbG9yZXIuY29udHJpYnV0aW9uL29yZy5lY2xpcHNlLm15bHluLmphdmEuYWN0aW9ucy5mb2N1cy5wYWNrYWdlRXhwbG9yZXIiIGNvbW1hbmROYW1lPSJGb2N1cyBvbiBBY3RpdmUgVGFzayIgZGVzY3JpcHRpb249IkZvY3VzIG9uIEFjdGl2ZSBUYXNrIChBbHQrY2xpY2sgdG8gcmV2ZWFsIGZpbHRlcmVkIGVsZW1lbnRzKSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUOVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5hY3Rpb25zLnZpZXcvb3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuc2VhcmNoLm9wZW4iIGNvbW1hbmROYW1lPSJTZWFyY2ggUmVwb3NpdG9yeS4uLiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUOWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5hY3Rpb25zLnZpZXcvb3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuc3luY2hyb25pemUuY2hhbmdlZCIgY29tbWFuZE5hbWU9IlN5bmNocm9uaXplIENoYW5nZWQiIGRlc2NyaXB0aW9uPSJTeW5jaHJvbml6ZSBDaGFuZ2VkIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlQ5eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmFjdGlvbnMudmlldy9vcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS50YXNrcy5yZXN0b3JlIiBjb21tYW5kTmFtZT0iUmVzdG9yZSBUYXNrcyBmcm9tIEhpc3RvcnkuLi4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVC1DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuYWN0aW9ucy52aWV3L29yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLm9wZW4ucmVwb3NpdG9yaWVzLnZpZXciIGNvbW1hbmROYW1lPSJTaG93IFRhc2sgUmVwb3NpdG9yaWVzIFZpZXciIGRlc2NyaXB0aW9uPSJTaG93IFRhc2sgUmVwb3NpdG9yaWVzIFZpZXciIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVC1TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuYWN0aW9ucy52aWV3L29yZy5lY2xpcHNlLm15bHluLmRvYy5sZWdlbmQuc2hvdy5hY3Rpb24iIGNvbW1hbmROYW1lPSJTaG93IFVJIExlZ2VuZCIgZGVzY3JpcHRpb249IlNob3cgVGFza3MgVUkgTGVnZW5kIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlQtaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmFjdGlvbnMudmlldy9vcmcuZWNsaXBzZS5teWx5bi5jb250ZXh0LnVpLmFjdGlvbnMudGFza2xpc3QuZm9jdXMiIGNvbW1hbmROYW1lPSJGb2N1cyBvbiBXb3Jrd2VlayIgZGVzY3JpcHRpb249IkZvY3VzIG9uIFdvcmt3ZWVrIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlQteXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLnBkZS51aS5sb2dWaWV3QWN0aW9ucy9vcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuTG9nVmlld0FjdGlvbnMuc2hvd1N0YWNrVHJhY2UiIGNvbW1hbmROYW1lPSJTaG93IFN0YWNrIFRyYWNlIGluIENvbnNvbGUgVmlldyIgZGVzY3JpcHRpb249IlNob3cgU3RhY2sgVHJhY2UgaW4gQ29uc29sZSBWaWV3IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlRfQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLnJzZS51aS52aWV3LnN5c3RlbVZpZXcudG9vbGJhci9vcmcuZWNsaXBzZS5yc2UudWkudmlldy5zeXN0ZW1WaWV3LnRvb2xiYXIubGlua1dpdGhTeXN0ZW1WaWV3IiBjb21tYW5kTmFtZT0iTGluayB3aXRoIEVkaXRvciIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUX1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpicmVha3BvaW50c1ZpZXdBY3Rpb25zL29yZy5lY2xpcHNlLndzdC5qc2R0LmRlYnVnLnVpLmFkZC5zY3JpcHRsb2FkLmJyZWFrcG9pbnQiIGNvbW1hbmROYW1lPSJBZGQgU2NyaXB0IExvYWQgQnJlYWtwb2ludCIgZGVzY3JpcHRpb249IkFkZCBTY3JpcHQgTG9hZCBCcmVha3BvaW50IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlRfaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6OmJyZWFrcG9pbnRzVmlld0FjdGlvbnMvb3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmJyZWFrcG9pbnRWaWV3QWN0aW9ucy5TaG93UXVhbGlmaWVkIiBjb21tYW5kTmFtZT0iU3VzcGVuZCBGb3IgQWxsIFNjcmlwdCBMb2FkcyIgZGVzY3JpcHRpb249IlN1c3BlbmRzIHdoZW4gYW55IHNjcmlwdCBpcyBsb2FkZWQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVF95eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6YnJlYWtwb2ludHNWaWV3QWN0aW9ucy9vcmcuZWNsaXBzZS53c3QuanNkdC5kZWJ1Zy51aS5zdXNwZW5kLm9uLmV4Y2VwdGlvbnMiIGNvbW1hbmROYW1lPSJTdXNwZW5kIE9uIEphdmFTY3JpcHQgRXhjZXB0aW9ucyIgZGVzY3JpcHRpb249IlN1c3BlbmQgb24gYWxsIEphdmFTY3JpcHQgZXhjZXB0aW9ucyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJVQUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpkZWJ1Z1ZpZXdBY3Rpb25zL29yZy5lY2xpcHNlLndzdC5qc2R0LmRlYnVnLnVpLnNob3cuYWxsLnNjcmlwdHMiIGNvbW1hbmROYW1lPSJTaG93IEFsbCBTY3JpcHRzIiBkZXNjcmlwdGlvbj0iU2hvd3Mgb3IgaGlkZXMgYWxsIHNjcmlwdHMgbG9hZGVkIGluIHRoZSB2aXNpYmxlIHRhcmdldHMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVUFTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6dmFyaWFibGVWaWV3QWN0aW9ucy9vcmcuZWNsaXBzZS53c3QuanNkdC5kZWJ1Zy51aS52YXJpYWJsZXZpZXcuc2hvdy5mdW5jdGlvbnMiIGNvbW1hbmROYW1lPSJTaG93IGZ1bmN0aW9uIHZhcmlhYmxlcyIgZGVzY3JpcHRpb249IlNob3cgb3IgaGlkZSBmdW5jdGlvbiB2YXJpYWJsZXMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVUFpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6dmFyaWFibGVWaWV3QWN0aW9ucy9vcmcuZWNsaXBzZS53c3QuanNkdC5kZWJ1Zy51aS52YXJpYWJsZXZpZXcuc2hvdy50aGlzIiBjb21tYW5kTmFtZT0iU2hvdyAndGhpcycgdmFyaWFibGUiIGRlc2NyaXB0aW9uPSJTaG93IG9yIGhpZGUgdGhlIHRoaXMgdmFyaWFibGUiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVUF5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6dmFyaWFibGVWaWV3QWN0aW9ucy9vcmcuZWNsaXBzZS53c3QuanNkdC5kZWJ1Zy51aS52YXJpYWJsZXZpZXcuc2hvdy5wcm90b3R5cGVzIiBjb21tYW5kTmFtZT0iU2hvdyBwcm90byB2YXJpYWJsZXMiIGRlc2NyaXB0aW9uPSJTaG93IG9yIGhpZGUgcHJvdG8gdmFyaWFibGVzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlVCQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLnVpLmFydGljbGVzLmFjdGlvbi5jb250cmlidXRpb24udmlldy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLmFjdGlvbnMuYWN0aW9uRGVsZWdhdGVzLlZhbGlkYXRlV1NJUHJvZmlsZUFjdGlvbkRlbGVnYXRlIiBjb21tYW5kTmFtZT0iV1MtSSBQcm9maWxlIFZhbGlkYXRvciIgZGVzY3JpcHRpb249IlZhbGlkYXRlIFdTLUkgTWVzc2FnZSBMb2cgRmlsZSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJVQlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLmJ1aWxkcy51aS5jb21tYW5kLlNob3dUZXN0UmVzdWx0cyIgY29tbWFuZE5hbWU9IlNob3cgVGVzdCBSZXN1bHRzIiBjYXRlZ29yeT0iX0FIQlVYQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlVCaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLnNuaXBtYXRjaC5yY3AuY29tbWFuZHMuY29tcGxldGlvbiIgY29tbWFuZE5hbWU9IlNuaXBtYXRjaCBTbmlwcGV0IENvbXBsZXRpb24iIGRlc2NyaXB0aW9uPSJPcGVuIGEgZGlhbG9nIHRvIHNlYXJjaCBmb3IgYW5kIGluc2VydCBjb2RlIHNuaXBwZXRzIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlVCeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLnNuaXBtYXRjaC5yY3AuY29tbWFuZHMuY3JlYXRlU25pcHBldCIgY29tbWFuZE5hbWU9IkNyZWF0ZSBTbmlwcGV0Li4uIiBkZXNjcmlwdGlvbj0iQ3JlYXRlcyBhIG5ldyBTbmlwbWF0Y2ggY29kZSBzbmlwcGV0IGZyb20gdGhlIGN1cnJlbnQgZWRpdG9yJiN4MjAxOTtzIHRleHQgc2VsZWN0aW9uIiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlVDQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4uYnVpbGRzLnVpLmNvbW1hbmQuU2hvd0J1aWxkT3V0cHV0IiBjb21tYW5kTmFtZT0iU2hvdyBCdWlsZCBPdXRwdXQiIGNhdGVnb3J5PSJfQUhCVVhDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVUNTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi5idWlsZHMudWkuY29tbWFuZHMuT3BlbkJ1aWxkRWxlbWVudFdpdGhCcm93c2VyIiBjb21tYW5kTmFtZT0iT3BlbiBCdWlsZCB3aXRoIEJyb3dzZXIiIGNhdGVnb3J5PSJfQUhCVVhDeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhCVUNpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJlbGVtZW50IiBuYW1lPSJFbGVtZW50Ii8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJVQ3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLmJ1aWxkcy51aS5jb21tYW5kcy5PcGVuQnVpbGRFbGVtZW50IiBjb21tYW5kTmFtZT0iT3BlbiBCdWlsZCBFbGVtZW50IiBjYXRlZ29yeT0iX0FIQlVYQ3hRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQlVEQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iZWxlbWVudCIgbmFtZT0iRWxlbWVudCIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVURTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi5idWlsZHMudWkuY29tbWFuZC5OZXdUYXNrRnJvbUJ1aWxkIiBjb21tYW5kTmFtZT0iTmV3IFRhc2sgRnJvbSBCdWlsZCIgY2F0ZWdvcnk9Il9BSEJVWEN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJVRGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLmJ1aWxkcy51aS5jb21tYW5kLk5ld1Rhc2tGcm9tVGVzdCIgY29tbWFuZE5hbWU9Ik5ldyBUYXNrIEZyb20gVGVzdCIgY2F0ZWdvcnk9Il9BSEJVWEN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJVRHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLmJ1aWxkcy51aS5jb21tYW5kLlNob3dCdWlsZE91dHB1dC51cmwiIGNvbW1hbmROYW1lPSJTaG93IEJ1aWxkIE91dHB1dCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJVRUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLmJ1aWxkcy51aS5jb21tYW5kLlNob3dUZXN0UmVzdWx0cy51cmwiIGNvbW1hbmROYW1lPSJTaG93IFRlc3QgUmVzdWx0cyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJVRVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLmJ1aWxkcy51aS5jb21tYW5kLkFib3J0QnVpbGQiIGNvbW1hbmROYW1lPSJBYm9ydCBCdWlsZCIgY2F0ZWdvcnk9Il9BSEJVWEN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJVRWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLmJ1aWxkcy51aS5jb21tYW5kcy5Db3B5RGV0YWlscyIgY29tbWFuZE5hbWU9IkNvcHkgRGV0YWlscyIgY2F0ZWdvcnk9Il9BSEJVWEN4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEJVRXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9ImtpbmQiIG5hbWU9IktpbmQiLz4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEJVRkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9ImVsZW1lbnQiIG5hbWU9IkVsZW1lbnQiLz4KKyAgPC9jb21tYW5kcz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlVGU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4uYnVpbGRzLnVpLmNvbW1hbmQuUnVuQnVpbGQiIGNvbW1hbmROYW1lPSJSdW4gQnVpbGQiIGNhdGVnb3J5PSJfQUhCVVhDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVUZpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi5idWlsZHMudWkuY29tbWFuZHMuT3BlbkJ1aWxkRWxlbWVudFdpdGhCcm93c2VyLnVybCIgY29tbWFuZE5hbWU9Ik9wZW4gQnVpbGQgd2l0aCBCcm93c2VyIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlVGeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm5ld3MucmNwLmNvbW1hbmQucG9sbE5ld3NGZWVkcyIgY29udHJpYnV0b3JVUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm5ld3MucmNwIiBjb21tYW5kTmFtZT0iJWNvbW1hbmQubmFtZS5wb2xsTmV3c0ZlZWRzIiBjYXRlZ29yeT0iX0FIQlVYU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlVHQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm5ld3MucmNwLmNvbW1hbmQucmVhZE5ld3NJdGVtcyIgY29udHJpYnV0b3JVUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm5ld3MucmNwIiBjb21tYW5kTmFtZT0iJWNvbW1hbmQubmFtZS5yZWFkTmV3c0l0ZW1zIiBjYXRlZ29yeT0iX0FIQlVYU3hRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQlVHU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm5ld3MucmNwLmNvbW1hbmRQYXJhbWV0ZXIubmV3c0l0ZW1zIiBjb250cmlidXRvclVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubmV3cy5yY3AiIG5hbWU9Ik5ld3MgSXRlbXMiIHR5cGVJZD0ib3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm5ld3MucmNwLmNvbW1hbmRQYXJhbWV0ZXJUeXBlLm5ld3NJdGVtcyIgb3B0aW9uYWw9ImZhbHNlIi8+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhCVUdpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubmV3cy5yY3AuY29tbWFuZFBhcmFtZXRlci5vcGVuQnJvd3NlciIgY29udHJpYnV0b3JVUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm5ld3MucmNwIiBuYW1lPSJPcGVuIEJyb3dzZXIiIHR5cGVJZD0ib3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm5ld3MucmNwLmNvbW1hbmRQYXJhbWV0ZXJUeXBlLmJvb2xlYW4iLz4KKyAgPC9jb21tYW5kcz4KKyAgPGFkZG9ucyB4bWk6aWQ9Il9BSEJVR3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmU0LmNvcmUuY29tbWFuZHMuc2VydmljZSIgY29udHJpYnV0b3JVUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucGxhdGZvcm0iIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS5lNC5jb3JlLmNvbW1hbmRzL29yZy5lY2xpcHNlLmU0LmNvcmUuY29tbWFuZHMuQ29tbWFuZFNlcnZpY2VBZGRvbiIvPgorICA8YWRkb25zIHhtaTppZD0iX0FIQlVIQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZTQudWkuY29udGV4dHMuc2VydmljZSIgY29udHJpYnV0b3JVUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucGxhdGZvcm0iIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS5lNC51aS5zZXJ2aWNlcy9vcmcuZWNsaXBzZS5lNC51aS5zZXJ2aWNlcy5Db250ZXh0U2VydmljZUFkZG9uIi8+CisgIDxhZGRvbnMgeG1pOmlkPSJfQUhCVUhTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lNC51aS5iaW5kaW5ncy5zZXJ2aWNlIiBjb250cmlidXRvclVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5wbGF0Zm9ybSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLmU0LnVpLmJpbmRpbmdzL29yZy5lY2xpcHNlLmU0LnVpLmJpbmRpbmdzLkJpbmRpbmdTZXJ2aWNlQWRkb24iLz4KKyAgPGFkZG9ucyB4bWk6aWQ9Il9BSEJVSGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5jb21tYW5kcy5tb2RlbCIgY29udHJpYnV0b3JVUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucGxhdGZvcm0iIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLmFkZG9ucy5Db21tYW5kUHJvY2Vzc2luZ0FkZG9uIi8+CisgIDxhZGRvbnMgeG1pOmlkPSJfQUhCVUh5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2guY29udGV4dHMubW9kZWwiIGNvbnRyaWJ1dG9yVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnBsYXRmb3JtIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5hZGRvbnMuQ29udGV4dFByb2Nlc3NpbmdBZGRvbiIvPgorICA8YWRkb25zIHhtaTppZD0iX0FIQlVJQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLmJpbmRpbmdzLm1vZGVsIiBjb250cmlidXRvclVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5wbGF0Zm9ybSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5zd3Qvb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnN3dC51dGlsLkJpbmRpbmdQcm9jZXNzaW5nQWRkb24iLz4KKyAgPGFkZG9ucyB4bWk6aWQ9Il9BSEJVSVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkNsZWFudXAgQWRkb24iIGNvbnRyaWJ1dG9yVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnBsYXRmb3JtIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLmFkZG9ucy5zd3Qvb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLmFkZG9ucy5jbGVhbnVwYWRkb24uQ2xlYW51cEFkZG9uIi8+CisgIDxhZGRvbnMgeG1pOmlkPSJfQUhCVUlpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJEbkQgQWRkb24iIGNvbnRyaWJ1dG9yVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnBsYXRmb3JtIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLmFkZG9ucy5zd3Qvb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLmFkZG9ucy5kbmRhZGRvbi5EbkRBZGRvbiIvPgorICA8YWRkb25zIHhtaTppZD0iX0FIQlVJeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iTWluTWF4IEFkZG9uIiBjb250cmlidXRvclVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5wbGF0Zm9ybSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5hZGRvbnMuc3d0L29yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5hZGRvbnMubWlubWF4Lk1pbk1heEFkZG9uIj4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmcuZWNsaXBzZS5qc3QuajJlZS5KMkVFUGVyc3BlY3RpdmUuJmx0O0phdmEgRUU+IiB2YWx1ZT0iIi8+CisgIDwvYWRkb25zPgorICA8YWRkb25zIHhtaTppZD0iX0FIQlVKQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkud29ya2JlbmNoLmFkZG9uLjAiIGNvbnRyaWJ1dG9yVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnBsYXRmb3JtIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5hZGRvbnMuSGFuZGxlclByb2Nlc3NpbmdBZGRvbiIvPgorICA8YWRkb25zIHhtaTppZD0iX0FIQlVKU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iU3BsaXR0ZXJBZGRvbiIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5hZGRvbnMuc3d0L29yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5hZGRvbnMuc3BsaXR0ZXJhZGRvbi5TcGxpdHRlckFkZG9uIi8+CisgIDxhZGRvbnMgeG1pOmlkPSJfQUhCVUppeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5pZGUuYWRkb24uMCIgY29udHJpYnV0b3JVUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudWkuaWRlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkuaWRlL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hZGRvbnMuU2F2ZUFsbERpcnR5UGFydHNBZGRvbiIvPgorICA8YWRkb25zIHhtaTppZD0iX0FIQlVKeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuaWRlLmFwcGxpY2F0aW9uLmFkZG9uLjAiIGNvbnRyaWJ1dG9yVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVpLmlkZS5hcHBsaWNhdGlvbiIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLmlkZS5hcHBsaWNhdGlvbi9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uYWRkb25zLk1vZGVsQ2xlYW51cEFkZG9uIi8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuY2F0ZWdvcnkuZWRpdCIgbmFtZT0iRWRpdCIvPgorICA8Y2F0ZWdvcmllcyB4bWk6aWQ9Il9BSEJVS1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLndpa2l0ZXh0LnVpLmVkaXRvci5jYXRlZ29yeSIgbmFtZT0iV2lraVRleHQgTWFya3VwIEVkaXRpbmcgQ29tbWFuZHMiIGRlc2NyaXB0aW9uPSJjb21tYW5kcyBmb3IgZWRpdGluZyBsaWdodHdlaWdodCBtYXJrdXAiLz4KKyAgPGNhdGVnb3JpZXMgeG1pOmlkPSJfQUhCVUtpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5idWlsZHNoaXAudWkucHJvamVjdCIgbmFtZT0iQnVpbGRzaGlwIiBkZXNjcmlwdGlvbj0iQ29udGFpbnMgdGhlIEJ1aWxkc2hpcCBzcGVjaWZpYyBjb21tYW5kcyIvPgorICA8Y2F0ZWdvcmllcyB4bWk6aWQ9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmNhdGVnb3J5LnRleHRFZGl0b3IiIG5hbWU9IlRleHQgRWRpdGluZyIgZGVzY3JpcHRpb249IlRleHQgRWRpdGluZyBDb21tYW5kcyIvPgorICA8Y2F0ZWdvcmllcyB4bWk6aWQ9Il9BSEJVTEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLmNvbnRleHQudWkuY29tbWFuZHMiIG5hbWU9IkZvY3VzZWQgVUkiIGRlc2NyaXB0aW9uPSJUYXNrLUZvY3VzZWQgSW50ZXJmYWNlIi8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVMU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuY2F0ZWdvcnkuc291cmNlIiBuYW1lPSJTb3VyY2UiIGRlc2NyaXB0aW9uPSJKYXZhU2NyaXB0IFNvdXJjZSBBY3Rpb25zIi8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVMaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuY29tbWFuZHMiIG5hbWU9IlRhc2sgUmVwb3NpdG9yaWVzIi8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVMeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aSIgbmFtZT0iU2VydmVyIiBkZXNjcmlwdGlvbj0iU2VydmVyIi8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVNQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4ud2lraXRleHQuY29udGV4dC51aS5jb21tYW5kcyIgbmFtZT0iTXlseW4gV2lraVRleHQiIGRlc2NyaXB0aW9uPSJDb21tYW5kcyB1c2VkIGZvciBNeWx5biBXaWtpVGV4dCIvPgorICA8Y2F0ZWdvcmllcyB4bWk6aWQ9Il9BSEJVTVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVjbGVtbWEudWkiIG5hbWU9IkVjbEVtbWEgQ29kZSBDb3ZlcmFnZSIvPgorICA8Y2F0ZWdvcmllcyB4bWk6aWQ9Il9BSEJVTWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmNhdGVnb3J5LmZpbGUiIG5hbWU9IkZpbGUiLz4KKyAgPGNhdGVnb3JpZXMgeG1pOmlkPSJfQUhCVU15eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5jYXRlZ29yeS53aW5kb3ciIG5hbWU9IldpbmRvdyIvPgorICA8Y2F0ZWdvcmllcyB4bWk6aWQ9Il9BSEJVTkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5yZXN1bHQuY2F0ZWdvcnkiIG5hbWU9IlNRTCBSZXN1bHRzIFZpZXciLz4KKyAgPGNhdGVnb3JpZXMgeG1pOmlkPSJfQUhCVU5TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5wZGUuZ2VuZXJpY2VkaXRvci5leHRlbnNpb24uY2F0ZWdvcnkuc291cmNlIiBuYW1lPSJUYXJnZXQgRGVmaW5pdGlvbiBTb3VyY2UiIGRlc2NyaXB0aW9uPSJUYXJnZXQgRGVmaW5pdGlvbiBTb3VyY2UgUGFnZSBhY3Rpb25zIi8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuY2F0ZWdvcnkucnVuIiBuYW1lPSJSdW4vRGVidWciIGRlc2NyaXB0aW9uPSJSdW4vRGVidWcgY29tbWFuZCBjYXRlZ29yeSIvPgorICA8Y2F0ZWdvcmllcyB4bWk6aWQ9Il9BSEJVTnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmNhdGVnb3J5LmRpYWxvZ3MiIG5hbWU9IkRpYWxvZ3MiIGRlc2NyaXB0aW9uPSJDb21tYW5kcyBmb3Igb3BlbmluZyBkaWFsb2dzIi8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVPQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uub29tcGgiIG5hbWU9Ik9vbXBoIi8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVPU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQuY2hyb21pdW0uZGVidWcuanMuY2F0ZWdvcnkiIG5hbWU9IkNocm9tZSAvIENocm9taXVtIi8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVPaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuanB0LmpwYS51aS5qcGFNZXRhZGF0YUNvbnZlcnNpb25Db21tYW5kcyIgbmFtZT0iSlBBIE1ldGFkYXRhIENvbnZlcnNpb24iLz4KKyAgPGNhdGVnb3JpZXMgeG1pOmlkPSJfQUhCVU95eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QueG1sLnZpZXdzLlhQYXRoVmlldyIgbmFtZT0iWFBhdGgiLz4KKyAgPGNhdGVnb3JpZXMgeG1pOmlkPSJfQUhCVVBDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qcHQuanBhLnVpLmpwYVN0cnVjdHVyZVZpZXdDb21tYW5kcyIgbmFtZT0iSlBBIFN0cnVjdHVyZSBWaWV3Ii8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVQU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4uY29tbW9ucy5yZXBvc2l0b3JpZXMudWkuY2F0ZWdvcnkuVGVhbSIgbmFtZT0iVGVhbSIvPgorICA8Y2F0ZWdvcmllcyB4bWk6aWQ9Il9BSEJVUGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnBkZS51aS5jYXRlZ29yeS5zb3VyY2UiIG5hbWU9Ik1hbmlmZXN0IEVkaXRvciBTb3VyY2UiIGRlc2NyaXB0aW9uPSJQREUgU291cmNlIFBhZ2UgYWN0aW9ucyIvPgorICA8Y2F0ZWdvcmllcyB4bWk6aWQ9Il9BSEJVUHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm9vbXBoLmNvbW1hbmRzIiBuYW1lPSJPb21waCIvPgorICA8Y2F0ZWdvcmllcyB4bWk6aWQ9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuY2F0ZWdvcmllcy5hdXRvZ2VuZXJhdGVkIiBuYW1lPSJVbmNhdGVnb3JpemVkIiBkZXNjcmlwdGlvbj0iQ29tbWFuZHMgdGhhdCB3ZXJlIGVpdGhlciBhdXRvLWdlbmVyYXRlZCBvciBoYXZlIG5vIGNhdGVnb3J5Ii8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVRU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuY2F0ZWdvcnkucmVmYWN0b3JpbmciIG5hbWU9IlJlZmFjdG9yIC0gSmF2YVNjcmlwdCIgZGVzY3JpcHRpb249IkphdmFTY3JpcHQgUmVmYWN0b3JpbmcgQWN0aW9ucyIvPgorICA8Y2F0ZWdvcmllcyB4bWk6aWQ9Il9BSEJVUWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnRlYW0udWkuY2F0ZWdvcnkudGVhbSIgbmFtZT0iVGVhbSIgZGVzY3JpcHRpb249IkFjdGlvbnMgdGhhdCBhcHBseSB3aGVuIHdvcmtpbmcgd2l0aCBhIFRlYW0iLz4KKyAgPGNhdGVnb3JpZXMgeG1pOmlkPSJfQUhCVVF5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5jYXRlZ29yeS52aWV3cyIgbmFtZT0iVmlld3MiIGRlc2NyaXB0aW9uPSJDb21tYW5kcyBmb3Igb3BlbmluZyB2aWV3cyIvPgorICA8Y2F0ZWdvcmllcyB4bWk6aWQ9Il9BSEJVUkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpzdC5wYWdlZGVzaWduZXIucGFnZWxheW91dCIgbmFtZT0iV2ViIFBhZ2UgRWRpdG9yIExheW91dCIvPgorICA8Y2F0ZWdvcmllcyB4bWk6aWQ9Il9BSEJVUlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmNhdGVnb3J5LmVkaXRvciIgbmFtZT0iVGFzayBFZGl0b3IiLz4KKyAgPGNhdGVnb3JpZXMgeG1pOmlkPSJfQUhCVVJpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5pZGUubWFya2VyQ29udGVudHMiIG5hbWU9IkNvbnRlbnRzIiBkZXNjcmlwdGlvbj0iVGhlIGNhdGVnb3J5IGZvciBtZW51IGNvbnRlbnRzIi8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVSeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uub29tcGguc2V0dXAuY2F0ZWdvcnkiIG5hbWU9Ik9vbXBoIFNldHVwIi8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuY2F0ZWdvcnkubmF2aWdhdGUiIG5hbWU9Ik5hdmlnYXRlIi8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVTU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4uamF2YS51aS5jb21tYW5kcyIgbmFtZT0iSmF2YSBDb250ZXh0IiBkZXNjcmlwdGlvbj0iSmF2YSBUYXNrLUZvY3VzZWQgSW50ZXJmYWNlIENvbW1hbmRzIi8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVTaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQuZGVidWcudWkuY2F0ZWdvcnkiIG5hbWU9IkphdmFTY3JpcHQgRGVidWciIGRlc2NyaXB0aW9uPSJUb29saW5nIGZvciBkZWJ1Z2dpbmcgSmF2YVNjcmlwdCIvPgorICA8Y2F0ZWdvcmllcyB4bWk6aWQ9Il9BSEJVU3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnRtLnRlcm1pbmFsLnZpZXcudWkuY29tbWFuZHMuY2F0ZWdvcnkiIG5hbWU9IlRlcm1pbmFsIENvbW1hbmRzIi8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVUQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuY29tcGFyZS51aS5jYXRlZ29yeS5jb21wYXJlIiBuYW1lPSJDb21wYXJlIiBkZXNjcmlwdGlvbj0iQ29tcGFyZSBjb21tYW5kIGNhdGVnb3J5Ii8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVUU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucnNlLnVpLmNvbW1hbmRzLmNhdGVnb3J5IiBuYW1lPSJSZW1vdGUgU3lzdGVtcyIvPgorICA8Y2F0ZWdvcmllcyB4bWk6aWQ9Il9BSEJVVGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRhdGF0b29scy5lbmFibGVtZW50LnN5YmFzZS5hc2Euc2NoZW1hb2JqZWN0ZWRpdG9yLmV4YW1wbGVzLnRhYmxlc2NoZW1hZWR0b3IuMTB4IiBuYW1lPSJBU0EgOS54IHRhYmxlIHNjaGVtYSBlZGl0b3IiLz4KKyAgPGNhdGVnb3JpZXMgeG1pOmlkPSJfQUhCVVR5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuY2F0ZWdvcnkucmVmYWN0b3JpbmciIG5hbWU9IlJlZmFjdG9yIC0gSmF2YSIgZGVzY3JpcHRpb249IkphdmEgUmVmYWN0b3JpbmcgQWN0aW9ucyIvPgorICA8Y2F0ZWdvcmllcyB4bWk6aWQ9Il9BSEJVVUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVtZi5jb2RlZ2VuLmVjb3JlLnVpLkNvbW1hbmRzIiBuYW1lPSJFTUYgQ29kZSBHZW5lcmF0aW9uIiBkZXNjcmlwdGlvbj0iQ29tbWFuZHMgZm9yIHRoZSBFTUYgY29kZSBnZW5lcmF0aW9uIHRvb2xzIi8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVVU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuY2F0ZWdvcnkuaGVscCIgbmFtZT0iSGVscCIvPgorICA8Y2F0ZWdvcmllcyB4bWk6aWQ9Il9BSEJVVWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmNhdGVnb3J5LnByb2plY3QiIG5hbWU9IlByb2plY3QiLz4KKyAgPGNhdGVnb3JpZXMgeG1pOmlkPSJfQUhCVVV5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS50bS50ZXJtaW5hbC5jYXRlZ29yeTEiIG5hbWU9IlRlcm1pbmFsIHZpZXcgY29tbWFuZHMiIGRlc2NyaXB0aW9uPSJUZXJtaW5hbCB2aWV3IGNvbW1hbmRzIi8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uuc2VhcmNoLnVpLmNhdGVnb3J5LnNlYXJjaCIgbmFtZT0iU2VhcmNoIiBkZXNjcmlwdGlvbj0iU2VhcmNoIGNvbW1hbmQgY2F0ZWdvcnkiLz4KKyAgPGNhdGVnb3JpZXMgeG1pOmlkPSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmNvbW1hbmRDYXRlZ29yeSIgbmFtZT0iR2l0Ii8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVWaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGVkaXRvci5jYXRlZ29yeSIgbmFtZT0iRGF0YWJhc2UgVG9vbHMiIGRlc2NyaXB0aW9uPSJEYXRhYmFzZSBEZXZlbG9wbWVudCB0b29scyIvPgorICA8Y2F0ZWdvcmllcyB4bWk6aWQ9Il9BSEJVVnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmNhdGVnb3J5LnBlcnNwZWN0aXZlcyIgbmFtZT0iUGVyc3BlY3RpdmVzIiBkZXNjcmlwdGlvbj0iQ29tbWFuZHMgZm9yIG9wZW5pbmcgcGVyc3BlY3RpdmVzIi8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVXQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubHRrLnVpLmNhdGVnb3J5LnJlZmFjdG9yaW5nIiBuYW1lPSJSZWZhY3RvcmluZyIvPgorICA8Y2F0ZWdvcmllcyB4bWk6aWQ9Il9BSEJVV1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmdlZi5jYXRlZ29yeS52aWV3IiBuYW1lPSJWaWV3IiBkZXNjcmlwdGlvbj0iVmlldyIvPgorICA8Y2F0ZWdvcmllcyB4bWk6aWQ9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5jYXRlZ29yeS5zb3VyY2UiIG5hbWU9IlNvdXJjZSIgZGVzY3JpcHRpb249IkphdmEgU291cmNlIEFjdGlvbnMiLz4KKyAgPGNhdGVnb3JpZXMgeG1pOmlkPSJfQUhCVVd5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5wZGUucnVudGltZS5zcHkuY29tbWFuZHMuY2F0ZWdvcnkiIG5hbWU9IlNweSIvPgorICA8Y2F0ZWdvcmllcyB4bWk6aWQ9Il9BSEJVWEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLmJ1aWxkcy51aS5jYXRlZ29yeS5Db21tYW5kcyIgbmFtZT0iQnVpbGRzIi8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVYU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm5ld3MucmNwLmNhdGVnb3J5Lm5ld3MiIGNvbnRyaWJ1dG9yVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5uZXdzLnJjcCIgbmFtZT0iJWNhdGVnb3J5Lm5hbWUubmV3cyIgZGVzY3JpcHRpb249IiVjYXRlZ29yeS5kZXNjcmlwdGlvbi5uZXdzIi8+Cis8L2FwcGxpY2F0aW9uOkFwcGxpY2F0aW9uPgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5oZWxwLnVpL2RpYWxvZ19zZXR0aW5ncy54bWwgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmhlbHAudWkvZGlhbG9nX3NldHRpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2EwYjc3Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5oZWxwLnVpL2RpYWxvZ19zZXR0aW5ncy54bWwKQEAgLTAsMCArMSwzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHNlY3Rpb24gbmFtZT0iV29ya2JlbmNoIj4KKzwvc2VjdGlvbj4KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuaGVscC51aS9zY29wZV9zZXRzL0FkZF8zMl9EZXBlbmRlbmN5Lmhpc3QgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmhlbHAudWkvc2NvcGVfc2V0cy9BZGRfMzJfRGVwZW5kZW5jeS5oaXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOTMzMTUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmhlbHAudWkvc2NvcGVfc2V0cy9BZGRfMzJfRGVwZW5kZW5jeS5oaXN0CkBAIC0wLDAgKzEsNCBAQAorI1dlZCBBcHIgMjIgMTY6NTc6MDUgQ0VTVCAyMDIwCitfX0RFRkFVTFRfXz1mYWxzZQorb3JnLmVjbGlwc2UuaGVscC51aS5sb2NhbFNlYXJjaC5tYXN0ZXI9dHJ1ZQorZXhwcmVzc2lvbj1BZGQgRGVwZW5kZW5jeQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5oZWxwLnVpL3Njb3BlX3NldHMvRGVmYXVsdC5wcmVmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5oZWxwLnVpL3Njb3BlX3NldHMvRGVmYXVsdC5wcmVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZjU3YTYKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmhlbHAudWkvc2NvcGVfc2V0cy9EZWZhdWx0LnByZWYKQEAgLTAsMCArMSwyIEBACisjVHVlIEp1biAxNiAxMjoxNzoyNyBDRVNUIDIwMjAKK19fREVGQVVMVF9fPXRydWUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuaGVscC51aS9zY29wZV9zZXRzL0xpbmtfMzJfU291cmNlLmhpc3QgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmhlbHAudWkvc2NvcGVfc2V0cy9MaW5rXzMyX1NvdXJjZS5oaXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNGIxOTQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmhlbHAudWkvc2NvcGVfc2V0cy9MaW5rXzMyX1NvdXJjZS5oaXN0CkBAIC0wLDAgKzEsNCBAQAorI1R1ZSBNYXkgMDUgMDk6Mjk6MzkgQ0VTVCAyMDIwCitfX0RFRkFVTFRfXz1mYWxzZQorb3JnLmVjbGlwc2UuaGVscC51aS5sb2NhbFNlYXJjaC5tYXN0ZXI9dHJ1ZQorZXhwcmVzc2lvbj1MaW5rIFNvdXJjZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5oZWxwLnVpL3Njb3BlX3NldHMvU2VsZWN0XzMyX0RpcmVjdGl2ZV8zMl9UeXBlLmhpc3QgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmhlbHAudWkvc2NvcGVfc2V0cy9TZWxlY3RfMzJfRGlyZWN0aXZlXzMyX1R5cGUuaGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjYwNjg1Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5oZWxwLnVpL3Njb3BlX3NldHMvU2VsZWN0XzMyX0RpcmVjdGl2ZV8zMl9UeXBlLmhpc3QKQEAgLTAsMCArMSw0IEBACisjVHVlIEp1biAxNiAxMjoxNzoyNyBDRVNUIDIwMjAKK19fREVGQVVMVF9fPWZhbHNlCitvcmcuZWNsaXBzZS5oZWxwLnVpLmxvY2FsU2VhcmNoLm1hc3Rlcj10cnVlCitleHByZXNzaW9uPVNlbGVjdCBEaXJlY3RpdmUgVHlwZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5oZWxwLnVpL3Njb3BlX3NldHMvVG9tY2F0XzMyX1NlcnZlci5oaXN0IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5oZWxwLnVpL3Njb3BlX3NldHMvVG9tY2F0XzMyX1NlcnZlci5oaXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMjIzMWEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmhlbHAudWkvc2NvcGVfc2V0cy9Ub21jYXRfMzJfU2VydmVyLmhpc3QKQEAgLTAsMCArMSw2IEBACisjV2VkIE5vdiAyMCAxNjoyOTowOCBDRVQgMjAxOQorX19ERUZBVUxUX189ZmFsc2UKK29yZy5lY2xpcHNlLnNkay5FY2xpcHNlLm1hc3Rlcj10cnVlCitvcmcuZWNsaXBzZS5zZGsuR29vZ2xlLm1hc3Rlcj10cnVlCitvcmcuZWNsaXBzZS5oZWxwLnVpLmxvY2FsU2VhcmNoLm1hc3Rlcj10cnVlCitleHByZXNzaW9uPVRvbWNhdCBTZXJ2ZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuaGVscC51aS9zY29wZV9zZXRzL3BhY2thZ2UuaGlzdCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuaGVscC51aS9zY29wZV9zZXRzL3BhY2thZ2UuaGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTM3NzYyCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5oZWxwLnVpL3Njb3BlX3NldHMvcGFja2FnZS5oaXN0CkBAIC0wLDAgKzEsNCBAQAorI1dlZCBBcHIgMjIgMTg6MDM6MDggQ0VTVCAyMDIwCitfX0RFRkFVTFRfXz1mYWxzZQorb3JnLmVjbGlwc2UuaGVscC51aS5sb2NhbFNlYXJjaC5tYXN0ZXI9dHJ1ZQorZXhwcmVzc2lvbj1wYWNrYWdlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzEwNzgxNjgxNDEuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzEwNzgxNjgxNDEuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU3NzBkNAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTA3ODE2ODE0MS5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzEwODUwMzgzNjYuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzEwODUwMzgzNjYuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAyMDlmMQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTA4NTAzODM2Ni5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzEwOTY4NTk1NzAuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzEwOTY4NTk1NzAuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNjYTFiZQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTA5Njg1OTU3MC5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzExMjg4MzYxMzIuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzExMjg4MzYxMzIuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFhZmMxYwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTEyODgzNjEzMi5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzEyMjcxMDgzMDguaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzEyMjcxMDgzMDguaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEyOWU1OAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTIyNzEwODMwOC5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzEyNTk1MTgyMzcuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzEyNTk1MTgyMzcuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFlMjQxMgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTI1OTUxODIzNy5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzEzMTY5MjE0MzUuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzEzMTY5MjE0MzUuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgzMjNjNgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTMxNjkyMTQzNS5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzEzMTk5NzA1NS5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTMxOTk3MDU1LmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNjk4MTkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzEzMTk5NzA1NS5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzEzOTU5NDg5MDAuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzEzOTU5NDg5MDAuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NiMmE3MAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTM5NTk0ODkwMC5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzE0ODcxMjgwMjUuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzE0ODcxMjgwMjUuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNiYTQ3OAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTQ4NzEyODAyNS5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzE1MDA2MDA4NjEuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzE1MDA2MDA4NjEuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFhZmMxYwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTUwMDYwMDg2MS5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzE1MDUyNzAyOTYuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzE1MDUyNzAyOTYuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE0MTA2MQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTUwNTI3MDI5Ni5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzE1OTE0MDM4MDguaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzE1OTE0MDM4MDguaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIyNGQ0OAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTU5MTQwMzgwOC5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzE3NDc2ODI4MTQuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzE3NDc2ODI4MTQuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThlNTA5MgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTc0NzY4MjgxNC5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzE4OTc5NTQ3ODkuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzE4OTc5NTQ3ODkuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU0NjMxYwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTg5Nzk1NDc4OS5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzE5MDk4ODA1MTguaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzE5MDk4ODA1MTguaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA5ODllMAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTkwOTg4MDUxOC5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzE5NTg1NzQ1MjUuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzE5NTg1NzQ1MjUuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUxZDA0MwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTk1ODU3NDUyNS5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzE5ODMwNjA0OTguaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzE5ODMwNjA0OTguaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIwNDUyMAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTk4MzA2MDQ5OC5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzIwMDI0NTgyMjEuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzIwMDI0NTgyMjEuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA5NjVkOAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjAwMjQ1ODIyMS5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzIwMjc3NjM3NDUuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzIwMjc3NjM3NDUuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E1MzMxMAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjAyNzc2Mzc0NS5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzIwNTAyNzA2NjkuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzIwNTAyNzA2NjkuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZjMjI1NAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjA1MDI3MDY2OS5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzIwNjg4OTMzOC5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjA2ODg5MzM4LmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZmNmNGIKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzIwNjg4OTMzOC5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzIyNDQzODcwNTcuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzIyNDQzODcwNTcuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRhMDEwOAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjI0NDM4NzA1Ny5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzIyNzcxNDQxOC5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjI3NzE0NDE4LmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZDU5MDkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzIyNzcxNDQxOC5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzIzNTA0ODg1MjYuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzIzNTA0ODg1MjYuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYxN2ZlNQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjM1MDQ4ODUyNi5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzIzODgyMTI1NzEuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzIzODgyMTI1NzEuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg0MmMxNwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjM4ODIxMjU3MS5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzI0MDY5OTQwMS5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjQwNjk5NDAxLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmZDM0NzMKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzI0MDY5OTQwMS5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzI2NDI2NDkyNTkuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzI2NDI2NDkyNTkuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM3MDY3ZQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjY0MjY0OTI1OS5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzI2NTY5NTIzODkuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzI2NTY5NTIzODkuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VlNzJiZAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjY1Njk1MjM4OS5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzI3MDY3OTkxNjEuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzI3MDY3OTkxNjEuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJiZmI2NwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjcwNjc5OTE2MS5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzI3MzEzNTExMDMuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzI3MzEzNTExMDMuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE2ZmY5MQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjczMTM1MTEwMy5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzI4MDYzMzUwLmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8yODA2MzM1MC5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjk2NTNiCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8yODA2MzM1MC5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzI4MTUwMTMzODguaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzI4MTUwMTMzODguaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUyNjlkMgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjgxNTAxMzM4OC5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzI4NzQ4NDkxNTYuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzI4NzQ4NDkxNTYuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE0NjRhYgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjg3NDg0OTE1Ni5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzI5NDM4NTE5NjUuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzI5NDM4NTE5NjUuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcwN2U2NgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjk0Mzg1MTk2NS5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzI5NTg5MzUzMTYuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzI5NTg5MzUzMTYuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAyYzQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjk1ODkzNTMxNi5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzMwNzg5ODYyMy5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzA3ODk4NjIzLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMTdmMDkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzMwNzg5ODYyMy5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzMwODY1NzYyMDUuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzMwODY1NzYyMDUuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQzNDU3ZQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzA4NjU3NjIwNS5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzMxMzQyMTM1MDYuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzMxMzQyMTM1MDYuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEzMzNhZQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzEzNDIxMzUwNi5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzMxNDA3MDE3MDAuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzMxNDA3MDE3MDAuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYxNDljMgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzE0MDcwMTcwMC5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzMxNDk3NDc5ODMuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzMxNDk3NDc5ODMuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJlMjQ4YgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzE0OTc0Nzk4My5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzMxNTI3MzkzMzkuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzMxNTI3MzkzMzkuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJkMWI1MAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzE1MjczOTMzOS5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzMyMjMxOTI3NjguaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzMyMjMxOTI3NjguaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg0ZGFhZgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzIyMzE5Mjc2OC5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzMyNTE3NjkyNzMuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzMyNTE3NjkyNzMuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNiNTliNAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzI1MTc2OTI3My5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzMzNDQzNjA2MDcuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzMzNDQzNjA2MDcuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEzYmE3YQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzM0NDM2MDYwNy5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzM0MTI2Mzk1NC5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzQxMjYzOTU0LmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NTFhZDIKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzM0MTI2Mzk1NC5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzM0MTYzMzg0NzUuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzM0MTYzMzg0NzUuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU3OGEyNQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzQxNjMzODQ3NS5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzM0NDkyMjIwMzMuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzM0NDkyMjIwMzMuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYyOTJmNgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzQ0OTIyMjAzMy5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzM1Mjg4NjUxMzcuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzM1Mjg4NjUxMzcuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FhZGE1MAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzUyODg2NTEzNy5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzM1MzQxNDY0MDQuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzM1MzQxNDY0MDQuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIwOWVjNwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzUzNDE0NjQwNC5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzM1ODc5Mjg3MzEuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzM1ODc5Mjg3MzEuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VmNjlhOAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzU4NzkyODczMS5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzM2MDkzMDQ0MjMuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzM2MDkzMDQ0MjMuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU5OWE3MwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzYwOTMwNDQyMy5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzM3MzczMTQ2NzIuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzM3MzczMTQ2NzIuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ViZmU3ZgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzczNzMxNDY3Mi5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzM4NDUwNDU4MjIuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzM4NDUwNDU4MjIuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFlYjBiNgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzg0NTA0NTgyMi5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzM5MDAzOTc1MzkuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzM5MDAzOTc1MzkuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFmNjJmNgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzkwMDM5NzUzOS5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzM5MTczNDc5NTcuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzM5MTczNDc5NTcuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYyOWI2MwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzkxNzM0Nzk1Ny5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzM5NDYwNTg0NzQuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzM5NDYwNTg0NzQuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhiZjA4MQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzk0NjA1ODQ3NC5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzQxMzY0MzU3OC5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvNDEzNjQzNTc4LmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNzdkNzAKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzQxMzY0MzU3OC5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzQ2NjUxNTQ4OC5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvNDY2NTE1NDg4LmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YTM0MjUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzQ2NjUxNTQ4OC5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzQ4NzU3OTA5My5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvNDg3NTc5MDkzLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwODdmODkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzQ4NzU3OTA5My5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzUwMDc5NzUwMS5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvNTAwNzk3NTAxLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWVmMWEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzUwMDc5NzUwMS5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzUxNjcxMTAyMC5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvNTE2NzExMDIwLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MTVlMGYKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzUxNjcxMTAyMC5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzY5NTU4NDEuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzY5NTU4NDEuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI4MTIwNgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvNjk1NTg0MS5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzgyMzk2MzI1OS5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvODIzOTYzMjU5LmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NDUwYWYKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzgyMzk2MzI1OS5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzg2MzQ2MDY0My5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvODYzNDYwNjQzLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZmU1ZWQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzg2MzQ2MDY0My5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzkwNDAxMjE3OS5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvOTA0MDEyMTc5LmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZjdhYjAKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzkwNDAxMjE3OS5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzkwODU2NjE2My5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvOTA4NTY2MTYzLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MDhmYWUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzkwODU2NjE2My5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzk0NjU1NDQ1NS5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvOTQ2NTU0NDU1LmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYmE5ZDYKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzk0NjU1NDQ1NS5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzk4MTk1MTQyNC5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvOTgxOTUxNDI0LmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMzk3OTkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzk4MTk1MTQyNC5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlL2Fzc3VtZWRFeHRlcm5hbEZpbGVzQ2FjaGUgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlL2Fzc3VtZWRFeHRlcm5hbEZpbGVzQ2FjaGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcxZjM2YwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvYXNzdW1lZEV4dGVybmFsRmlsZXNDYWNoZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlL2V4dGVybmFsRmlsZXNDYWNoZSBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvZXh0ZXJuYWxGaWxlc0NhY2hlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1N2FmMjgKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlL2V4dGVybmFsRmlsZXNDYWNoZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlL2V4dGVybmFsTGlic1RpbWVTdGFtcHMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlL2V4dGVybmFsTGlic1RpbWVTdGFtcHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ0YzRkYwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvZXh0ZXJuYWxMaWJzVGltZVN0YW1wcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlL2luZGV4LmRiIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS9pbmRleC5kYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS9pbmRleC5kYgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS9pbmRleE5hbWVzTWFwLnR4dCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvaW5kZXhOYW1lc01hcC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZjNmZiOQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvaW5kZXhOYW1lc01hcC50eHQKQEAgLTAsMCArMSBAQAorSU5ERVggVkVSU0lPTiAxLjEzMQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS9qYXZhTGlrZU5hbWVzLnR4dCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvamF2YUxpa2VOYW1lcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU4NjM5NwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvamF2YUxpa2VOYW1lcy50eHQKQEAgLTAsMCArMSBAQAoramF2YQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvbm9uQ2hhaW5pbmdKYXJzQ2FjaGUgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlL25vbkNoYWluaW5nSmFyc0NhY2hlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYTI4ZDgKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlL25vbkNoYWluaW5nSmFyc0NhY2hlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvcGFydGljaXBhbnRzSW5kZXhOYW1lcy50eHQgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlL3BhcnRpY2lwYW50c0luZGV4TmFtZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YmNmMjcKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlL3BhcnRpY2lwYW50c0luZGV4TmFtZXMudHh0CkBAIC0wLDAgKzEsNSBAQAorSU5ERVggVkVSU0lPTiAxLjEzMQorRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXC5tZXRhZGF0YVwucGx1Z2luc1xvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmVcanNwc2VhcmNoXDI1MTQ3NjEzNjkuaW5kZXgKK1xnbGVtbVxzcmNcbWFpblxyZXNvdXJjZXMKK0Y6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1wubWV0YWRhdGFcLnBsdWdpbnNcb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlXGpzcHNlYXJjaFwyNDU0MjczNTguaW5kZXgKK1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcwpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS9zYXZlZEluZGV4TmFtZXMudHh0IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS9zYXZlZEluZGV4TmFtZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MjgwZmQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlL3NhdmVkSW5kZXhOYW1lcy50eHQKQEAgLTAsMCArMSw3MCBAQAorSU5ERVggVkVSU0lPTiAxLjEzMStDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcd3NwLUtvckFQLVNlcnZpY2VzXC5tZXRhZGF0YVwucGx1Z2luc1xvcmcuZWNsaXBzZS5qZHQuY29yZQorMzUzNDE0NjQwNC5pbmRleAorMzE0OTc0Nzk4My5pbmRleAorMjgwNjMzNTAuaW5kZXgKKzMzNDQzNjA2MDcuaW5kZXgKKzI3MzEzNTExMDMuaW5kZXgKKzEzMTY5MjE0MzUuaW5kZXgKKzE3NDc2ODI4MTQuaW5kZXgKKzE5MDk4ODA1MTguaW5kZXgKKzM5NDYwNTg0NzQuaW5kZXgKKzkwNDAxMjE3OS5pbmRleAorNjk1NTg0MS5pbmRleAorMTMxOTk3MDU1LmluZGV4CisxMjI3MTA4MzA4LmluZGV4CiszMjIzMTkyNzY4LmluZGV4CisxNTAwNjAwODYxLmluZGV4CisyOTU4OTM1MzE2LmluZGV4CisyNjU2OTUyMzg5LmluZGV4CisyMjQ0Mzg3MDU3LmluZGV4CisxMzk1OTQ4OTAwLmluZGV4CisyODc0ODQ5MTU2LmluZGV4CiszNTg3OTI4NzMxLmluZGV4CisyMzg4MjEyNTcxLmluZGV4CiszODQ1MDQ1ODIyLmluZGV4CiszMDc4OTg2MjMuaW5kZXgKKzEwNzgxNjgxNDEuaW5kZXgKKzIzNTA0ODg1MjYuaW5kZXgKKzk0NjU1NDQ1NS5pbmRleAorMjk0Mzg1MTk2NS5pbmRleAorMzkxNzM0Nzk1Ny5pbmRleAorODYzNDYwNjQzLmluZGV4CisxMDk2ODU5NTcwLmluZGV4CiszNzM3MzE0NjcyLmluZGV4CisxOTU4NTc0NTI1LmluZGV4CiszNjA5MzA0NDIzLmluZGV4CiszMjUxNzY5MjczLmluZGV4CisyODE1MDEzMzg4LmluZGV4CiszMTQwNzAxNzAwLmluZGV4CiszNDQ5MjIyMDMzLmluZGV4CisyNDA2OTk0MDEuaW5kZXgKKzE4OTc5NTQ3ODkuaW5kZXgKKzQ2NjUxNTQ4OC5pbmRleAorMzEzNDIxMzUwNi5pbmRleAorODIzOTYzMjU5LmluZGV4CiszMTUyNzM5MzM5LmluZGV4CisxNTkxNDAzODA4LmluZGV4Cis0MTM2NDM1NzguaW5kZXgKKzM0MTI2Mzk1NC5pbmRleAorMTk4MzA2MDQ5OC5pbmRleAorMTEyODgzNjEzMi5pbmRleAorOTgxOTUxNDI0LmluZGV4CisyMDY4ODkzMzguaW5kZXgKKzMwODY1NzYyMDUuaW5kZXgKKzEwODUwMzgzNjYuaW5kZXgKKzUxNjcxMTAyMC5pbmRleAorMzQxNjMzODQ3NS5pbmRleAorMjA1MDI3MDY2OS5pbmRleAorMTI1OTUxODIzNy5pbmRleAorNTAwNzk3NTAxLmluZGV4CisxNTA1MjcwMjk2LmluZGV4CisxNDg3MTI4MDI1LmluZGV4CiszOTAwMzk3NTM5LmluZGV4CisyNzA2Nzk5MTYxLmluZGV4CisyNjQyNjQ5MjU5LmluZGV4Cis0ODc1NzkwOTMuaW5kZXgKKzIyNzcxNDQxOC5pbmRleAorOTA4NTY2MTYzLmluZGV4CiszNTI4ODY1MTM3LmluZGV4CisyMDI3NzYzNzQ1LmluZGV4CisyMDAyNDU4MjIxLmluZGV4CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlL3ZhcmlhYmxlc0FuZENvbnRhaW5lcnMuZGF0IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS92YXJpYWJsZXNBbmRDb250YWluZXJzLmRhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Yzk0ZmU5Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS92YXJpYWJsZXNBbmRDb250YWluZXJzLmRhdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS9kaWFsb2dfc2V0dGluZ3MueG1sIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuZGVidWcudWkvZGlhbG9nX3NldHRpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTcxMTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuZGVidWcudWkvZGlhbG9nX3NldHRpbmdzLnhtbApAQCAtMCwwICsxLDI2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHNlY3Rpb24gbmFtZT0iV29ya2JlbmNoIj4KKwk8aXRlbSB2YWx1ZT0iODIiIGtleT0ib3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmpyZV9wcmVmZXJlbmNlX3BhZ2VfY29udGV4dC5jb2x1bW5XaWR0aDIiLz4KKwk8aXRlbSB2YWx1ZT0iMSIga2V5PSJvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuanJlX3ByZWZlcmVuY2VfcGFnZV9jb250ZXh0LnNvcnRDb2x1bW4iLz4KKwk8aXRlbSB2YWx1ZT0iMTg4IiBrZXk9Im9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5qcmVfcHJlZmVyZW5jZV9wYWdlX2NvbnRleHQuY29sdW1uV2lkdGgxIi8+CisJPGl0ZW0gdmFsdWU9IjExNSIga2V5PSJvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuanJlX3ByZWZlcmVuY2VfcGFnZV9jb250ZXh0LmNvbHVtbldpZHRoMCIvPgorCTxzZWN0aW9uIG5hbWU9ImNvbmRpdGlvbkhpc3RvcnkiPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBuYW1lPSJvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuTUFJTl9NRVRIT0RfU0VMRUNUSU9OX0RJQUxPRyI+CisJCTxpdGVtIHZhbHVlPSJ0cnVlIiBrZXk9IlNob3dTdGF0dXNMaW5lIi8+CisJCTxpdGVtIHZhbHVlPSImbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8mZ3Q7JiN4MEQ7JiN4MEE7Jmx0O0hpc3RvcnkmZ3Q7JiN4MEQ7JiN4MEE7Jmx0O2hpc3RvcnlSb290Tm9kZSZndDsmI3gwRDsmI3gwQTsmbHQ7aW5mb05vZGUmZ3Q7PVRlc3RzL3NyYyZhbXA7bHQ7dGVzdHtUZXN0SnNvbi5qYXZhW1Rlc3RKc29uJmx0Oy9pbmZvTm9kZSZndDsmI3gwRDsmI3gwQTsmbHQ7L2hpc3RvcnlSb290Tm9kZSZndDsmI3gwRDsmI3gwQTsmbHQ7L0hpc3RvcnkmZ3Q7IiBrZXk9Ikhpc3RvcnkiLz4KKwkJPHNlY3Rpb24gbmFtZT0iRGlhbG9nQm91bmRzU2V0dGluZ3MiPgorCQkJPGl0ZW0gdmFsdWU9IjYwMCIga2V5PSJESUFMT0dfV0lEVEgiLz4KKwkJCTxpdGVtIHZhbHVlPSIxfFNlZ29lIFVJfDkuMHwwfFdJTkRPV1N8MXwtMTJ8MHwwfDB8NDAwfDB8MHwwfDF8MHwwfDB8MHxTZWdvZSBVSSIga2V5PSJESUFMT0dfRk9OVF9OQU1FIi8+CisJCQk8aXRlbSB2YWx1ZT0iNTAwIiBrZXk9IkRJQUxPR19IRUlHSFQiLz4KKwkJCTxpdGVtIHZhbHVlPSI2NjgiIGtleT0iRElBTE9HX1hfT1JJR0lOIi8+CisJCQk8aXRlbSB2YWx1ZT0iMTk1IiBrZXk9IkRJQUxPR19ZX09SSUdJTiIvPgorCQk8L3NlY3Rpb24+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9Im9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5FeHByZXNzaW9uSW5mb3JtYXRpb25Db250cm9sQ3JlYXRvciRFeHByZXNzaW9uSW5mb3JtYXRpb25Db250cm9sIj4KKwkJPGl0ZW0gdmFsdWU9IjUwMCIga2V5PSJTYXNoV2VpZ2h0VHJlZSIvPgorCQk8aXRlbSB2YWx1ZT0iNTAwIiBrZXk9IlNhc2hXZWlnaHREZXRhaWxzIi8+CisJCTxpdGVtIHZhbHVlPSI2MTQiIGtleT0iV0lEVEgiLz4KKwkJPGl0ZW0gdmFsdWU9IjE5NCIga2V5PSJIRUlHSFQiLz4KKwk8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcvLmluc3RhbGwueG1sIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLy5pbnN0YWxsLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzRmZTM2Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLy5pbnN0YWxsLnhtbApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGRpcnM+Cis8ZW50cnkgbG9jPSJDOlxQcm9ncmFtIEZpbGVzICh4ODYpXEphdmFcamRrMS44LjBfNzMiIHN0YW1wPSIxNDU3NTQ1NjcyMzQ3Ii8+Cis8ZW50cnkgbG9jPSJDOlxQcm9ncmFtIEZpbGVzXEphdmFcamRrMS44LjBfNDUiIHN0YW1wPSIxNDMxNTI0OTU1MjUxIi8+Cis8ZW50cnkgbG9jPSJDOlxQcm9ncmFtIEZpbGVzXEphdmFcamRrMS44LjBfMjMxIiBzdGFtcD0iMTU4NTIxNzMyODU2NiIvPgorPGVudHJ5IGxvYz0iQzpcUHJvZ3JhbSBGaWxlc1xKYXZhXGpyZTEuOC4wXzczIiBzdGFtcD0iMTQ1NTg3MDY5MDA1MCIvPgorPC9kaXJzPgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nL2xpYnJhcnlJbmZvcy54bWwgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcvbGlicmFyeUluZm9zLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODM0ZmRlCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nL2xpYnJhcnlJbmZvcy54bWwKQEAgLTAsMCArMSw3OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGlicmFyeUluZm9zPgorPGxpYnJhcnlJbmZvIGhvbWU9IkM6XFByb2dyYW0gRmlsZXMgKHg4NilcSmF2YVxqZGsxLjguMF83MyIgdmVyc2lvbj0iMS44LjBfNzMiPgorPGJvb3RwYXRoPgorPGVudHJ5IHBhdGg9IkM6XFByb2dyYW0gRmlsZXMgKHg4NilcSmF2YVxqZGsxLjguMF83M1xqcmVcbGliXHJlc291cmNlcy5qYXIiLz4KKzxlbnRyeSBwYXRoPSJDOlxQcm9ncmFtIEZpbGVzICh4ODYpXEphdmFcamRrMS44LjBfNzNcanJlXGxpYlxydC5qYXIiLz4KKzxlbnRyeSBwYXRoPSJDOlxQcm9ncmFtIEZpbGVzICh4ODYpXEphdmFcamRrMS44LjBfNzNcanJlXGxpYlxzdW5yc2FzaWduLmphciIvPgorPGVudHJ5IHBhdGg9IkM6XFByb2dyYW0gRmlsZXMgKHg4NilcSmF2YVxqZGsxLjguMF83M1xqcmVcbGliXGpzc2UuamFyIi8+Cis8ZW50cnkgcGF0aD0iQzpcUHJvZ3JhbSBGaWxlcyAoeDg2KVxKYXZhXGpkazEuOC4wXzczXGpyZVxsaWJcamNlLmphciIvPgorPGVudHJ5IHBhdGg9IkM6XFByb2dyYW0gRmlsZXMgKHg4NilcSmF2YVxqZGsxLjguMF83M1xqcmVcbGliXGNoYXJzZXRzLmphciIvPgorPGVudHJ5IHBhdGg9IkM6XFByb2dyYW0gRmlsZXMgKHg4NilcSmF2YVxqZGsxLjguMF83M1xqcmVcbGliXGpmci5qYXIiLz4KKzxlbnRyeSBwYXRoPSJDOlxQcm9ncmFtIEZpbGVzICh4ODYpXEphdmFcamRrMS44LjBfNzNcanJlXGNsYXNzZXMiLz4KKzwvYm9vdHBhdGg+Cis8ZXh0ZW5zaW9uRGlycz4KKzxlbnRyeSBwYXRoPSJDOlxQcm9ncmFtIEZpbGVzICh4ODYpXEphdmFcamRrMS44LjBfNzNcanJlXGxpYlxleHQiLz4KKzxlbnRyeSBwYXRoPSJDOlxXaW5kb3dzXFN1blxKYXZhXGxpYlxleHQiLz4KKzwvZXh0ZW5zaW9uRGlycz4KKzxlbmRvcnNlZERpcnM+Cis8ZW50cnkgcGF0aD0iQzpcUHJvZ3JhbSBGaWxlcyAoeDg2KVxKYXZhXGpkazEuOC4wXzczXGpyZVxsaWJcZW5kb3JzZWQiLz4KKzwvZW5kb3JzZWREaXJzPgorPC9saWJyYXJ5SW5mbz4KKzxsaWJyYXJ5SW5mbyBob21lPSJDOlxQcm9ncmFtIEZpbGVzXEphdmFcamRrMS44LjBfNDUiIHZlcnNpb249IjEuOC4wXzQ1Ij4KKzxib290cGF0aD4KKzxlbnRyeSBwYXRoPSJDOlxQcm9ncmFtIEZpbGVzXEphdmFcamRrMS44LjBfNDVcanJlXGxpYlxyZXNvdXJjZXMuamFyIi8+Cis8ZW50cnkgcGF0aD0iQzpcUHJvZ3JhbSBGaWxlc1xKYXZhXGpkazEuOC4wXzQ1XGpyZVxsaWJccnQuamFyIi8+Cis8ZW50cnkgcGF0aD0iQzpcUHJvZ3JhbSBGaWxlc1xKYXZhXGpkazEuOC4wXzQ1XGpyZVxsaWJcc3VucnNhc2lnbi5qYXIiLz4KKzxlbnRyeSBwYXRoPSJDOlxQcm9ncmFtIEZpbGVzXEphdmFcamRrMS44LjBfNDVcanJlXGxpYlxqc3NlLmphciIvPgorPGVudHJ5IHBhdGg9IkM6XFByb2dyYW0gRmlsZXNcSmF2YVxqZGsxLjguMF80NVxqcmVcbGliXGpjZS5qYXIiLz4KKzxlbnRyeSBwYXRoPSJDOlxQcm9ncmFtIEZpbGVzXEphdmFcamRrMS44LjBfNDVcanJlXGxpYlxjaGFyc2V0cy5qYXIiLz4KKzxlbnRyeSBwYXRoPSJDOlxQcm9ncmFtIEZpbGVzXEphdmFcamRrMS44LjBfNDVcanJlXGxpYlxqZnIuamFyIi8+Cis8ZW50cnkgcGF0aD0iQzpcUHJvZ3JhbSBGaWxlc1xKYXZhXGpkazEuOC4wXzQ1XGpyZVxjbGFzc2VzIi8+Cis8L2Jvb3RwYXRoPgorPGV4dGVuc2lvbkRpcnM+Cis8ZW50cnkgcGF0aD0iQzpcUHJvZ3JhbSBGaWxlc1xKYXZhXGpkazEuOC4wXzQ1XGpyZVxsaWJcZXh0Ii8+Cis8ZW50cnkgcGF0aD0iQzpcV2luZG93c1xTdW5cSmF2YVxsaWJcZXh0Ii8+Cis8L2V4dGVuc2lvbkRpcnM+Cis8ZW5kb3JzZWREaXJzPgorPGVudHJ5IHBhdGg9IkM6XFByb2dyYW0gRmlsZXNcSmF2YVxqZGsxLjguMF80NVxqcmVcbGliXGVuZG9yc2VkIi8+Cis8L2VuZG9yc2VkRGlycz4KKzwvbGlicmFyeUluZm8+Cis8bGlicmFyeUluZm8gaG9tZT0iQzpcUHJvZ3JhbSBGaWxlc1xKYXZhXGpkazEuOC4wXzIzMSIgdmVyc2lvbj0iMS44LjBfMjMxIj4KKzxib290cGF0aD4KKzxlbnRyeSBwYXRoPSJDOlxQcm9ncmFtIEZpbGVzXEphdmFcamRrMS44LjBfMjMxXGpyZVxsaWJccmVzb3VyY2VzLmphciIvPgorPGVudHJ5IHBhdGg9IkM6XFByb2dyYW0gRmlsZXNcSmF2YVxqZGsxLjguMF8yMzFcanJlXGxpYlxydC5qYXIiLz4KKzxlbnRyeSBwYXRoPSJDOlxQcm9ncmFtIEZpbGVzXEphdmFcamRrMS44LjBfMjMxXGpyZVxsaWJcc3VucnNhc2lnbi5qYXIiLz4KKzxlbnRyeSBwYXRoPSJDOlxQcm9ncmFtIEZpbGVzXEphdmFcamRrMS44LjBfMjMxXGpyZVxsaWJcanNzZS5qYXIiLz4KKzxlbnRyeSBwYXRoPSJDOlxQcm9ncmFtIEZpbGVzXEphdmFcamRrMS44LjBfMjMxXGpyZVxsaWJcamNlLmphciIvPgorPGVudHJ5IHBhdGg9IkM6XFByb2dyYW0gRmlsZXNcSmF2YVxqZGsxLjguMF8yMzFcanJlXGxpYlxjaGFyc2V0cy5qYXIiLz4KKzxlbnRyeSBwYXRoPSJDOlxQcm9ncmFtIEZpbGVzXEphdmFcamRrMS44LjBfMjMxXGpyZVxsaWJcamZyLmphciIvPgorPGVudHJ5IHBhdGg9IkM6XFByb2dyYW0gRmlsZXNcSmF2YVxqZGsxLjguMF8yMzFcanJlXGNsYXNzZXMiLz4KKzwvYm9vdHBhdGg+Cis8ZXh0ZW5zaW9uRGlycz4KKzxlbnRyeSBwYXRoPSJDOlxQcm9ncmFtIEZpbGVzXEphdmFcamRrMS44LjBfMjMxXGpyZVxsaWJcZXh0Ii8+Cis8ZW50cnkgcGF0aD0iQzpcV0lORE9XU1xTdW5cSmF2YVxsaWJcZXh0Ii8+Cis8L2V4dGVuc2lvbkRpcnM+Cis8ZW5kb3JzZWREaXJzPgorPGVudHJ5IHBhdGg9IkM6XFByb2dyYW0gRmlsZXNcSmF2YVxqZGsxLjguMF8yMzFcanJlXGxpYlxlbmRvcnNlZCIvPgorPC9lbmRvcnNlZERpcnM+Cis8L2xpYnJhcnlJbmZvPgorPGxpYnJhcnlJbmZvIGhvbWU9IkM6XFByb2dyYW0gRmlsZXNcSmF2YVxqcmUxLjguMF83MyIgdmVyc2lvbj0iMS44LjBfNzMiPgorPGJvb3RwYXRoPgorPGVudHJ5IHBhdGg9IkM6XFByb2dyYW0gRmlsZXNcSmF2YVxqcmUxLjguMF83M1xsaWJccmVzb3VyY2VzLmphciIvPgorPGVudHJ5IHBhdGg9IkM6XFByb2dyYW0gRmlsZXNcSmF2YVxqcmUxLjguMF83M1xsaWJccnQuamFyIi8+Cis8ZW50cnkgcGF0aD0iQzpcUHJvZ3JhbSBGaWxlc1xKYXZhXGpyZTEuOC4wXzczXGxpYlxzdW5yc2FzaWduLmphciIvPgorPGVudHJ5IHBhdGg9IkM6XFByb2dyYW0gRmlsZXNcSmF2YVxqcmUxLjguMF83M1xsaWJcanNzZS5qYXIiLz4KKzxlbnRyeSBwYXRoPSJDOlxQcm9ncmFtIEZpbGVzXEphdmFcanJlMS44LjBfNzNcbGliXGpjZS5qYXIiLz4KKzxlbnRyeSBwYXRoPSJDOlxQcm9ncmFtIEZpbGVzXEphdmFcanJlMS44LjBfNzNcbGliXGNoYXJzZXRzLmphciIvPgorPGVudHJ5IHBhdGg9IkM6XFByb2dyYW0gRmlsZXNcSmF2YVxqcmUxLjguMF83M1xsaWJcamZyLmphciIvPgorPGVudHJ5IHBhdGg9IkM6XFByb2dyYW0gRmlsZXNcSmF2YVxqcmUxLjguMF83M1xjbGFzc2VzIi8+Cis8L2Jvb3RwYXRoPgorPGV4dGVuc2lvbkRpcnM+Cis8ZW50cnkgcGF0aD0iQzpcUHJvZ3JhbSBGaWxlc1xKYXZhXGpyZTEuOC4wXzczXGxpYlxleHQiLz4KKzxlbnRyeSBwYXRoPSJDOlxXaW5kb3dzXFN1blxKYXZhXGxpYlxleHQiLz4KKzwvZXh0ZW5zaW9uRGlycz4KKzxlbmRvcnNlZERpcnM+Cis8ZW50cnkgcGF0aD0iQzpcUHJvZ3JhbSBGaWxlc1xKYXZhXGpyZTEuOC4wXzczXGxpYlxlbmRvcnNlZCIvPgorPC9lbmRvcnNlZERpcnM+Cis8L2xpYnJhcnlJbmZvPgorPC9saWJyYXJ5SW5mb3M+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC51aS9PcGVuVHlwZUhpc3RvcnkueG1sIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQudWkvT3BlblR5cGVIaXN0b3J5LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGVlM2NiCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQudWkvT3BlblR5cGVIaXN0b3J5LnhtbApAQCAtMCwwICsxLDIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPHR5cGVJbmZvSGlzdHJveS8+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC51aS9RdWFsaWZpZWRUeXBlTmFtZUhpc3RvcnkueG1sIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQudWkvUXVhbGlmaWVkVHlwZU5hbWVIaXN0b3J5LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGE5OTA2Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQudWkvUXVhbGlmaWVkVHlwZU5hbWVIaXN0b3J5LnhtbApAQCAtMCwwICsxLDU3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxxdWFsaWZpZWRUeXBlTmFtZUhpc3Ryb3k+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW0iLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImphdmEuaW8uRmlsZVJlYWRlciIvPgorPGZ1bGx5UXVhbGlmaWVkVHlwZU5hbWUgbmFtZT0iamF2YS5zcWwuQ29ubmVjdGlvbiIvPgorPGZ1bGx5UXVhbGlmaWVkVHlwZU5hbWUgbmFtZT0iamF2YS5zcWwuRHJpdmVyTWFuYWdlciIvPgorPGZ1bGx5UXVhbGlmaWVkVHlwZU5hbWUgbmFtZT0iamF2YS5zcWwuU3RhdGVtZW50Ii8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJqYXZhLnNxbC5SZXN1bHRTZXQiLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImphdmF4LndzLnJzLlF1ZXJ5UGFyYW0iLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZSIvPgorPGZ1bGx5UXVhbGlmaWVkVHlwZU5hbWUgbmFtZT0iamF2YS5zcWwuUHJlcGFyZWRTdGF0ZW1lbnQiLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImphdmEudGltZS5Mb2NhbERhdGVUaW1lIi8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJqYXZhLnV0aWwuTG9jYWxlIi8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJqYXZheC54bWwud3MuUmVzcG9uc2UiLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2UiLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlIi8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJqYXZheC54bWwuYmluZC5hbm5vdGF0aW9uLlhtbFR5cGUiLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImphdmF4LnhtbC5iaW5kLmFubm90YXRpb24uWG1sQWNjZXNzb3JUeXBlIi8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0Ii8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJqYXZhLnV0aWwuRW51bWVyYXRpb24iLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImphdmF4LnNlcnZsZXQuU2VydmxldElucHV0U3RyZWFtIi8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJjb20uZmFzdGVyeG1sLmphY2tzb24uY29yZS5Kc29uUGFyc2VyIi8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJjb20uZmFzdGVyeG1sLmphY2tzb24uY29yZS5Kc29uVG9rZW4iLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlLkpzb25GYWN0b3J5Ii8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJqYXZhLnV0aWwuSXRlcmF0b3IiLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5kYXRhYmluZC5ub2RlLkFycmF5Tm9kZSIvPgorPGZ1bGx5UXVhbGlmaWVkVHlwZU5hbWUgbmFtZT0iY29tLmZhc3RlcnhtbC5qYWNrc29uLmRhdGFiaW5kLkpzb25Ob2RlIi8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJqYXZhLmlvLkZpbGUiLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImRlLmtvcmFwLmpzb24uSnNvblRyYXZlcnNlIi8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJqYXZhLnV0aWwuTGlzdCIvPgorPGZ1bGx5UXVhbGlmaWVkVHlwZU5hbWUgbmFtZT0iamF2YS51dGlsLkFycmF5TGlzdCIvPgorPGZ1bGx5UXVhbGlmaWVkVHlwZU5hbWUgbmFtZT0iY29tLmZhc3RlcnhtbC5qYWNrc29uLmRhdGFiaW5kLm5vZGUuT2JqZWN0Tm9kZSIvPgorPGZ1bGx5UXVhbGlmaWVkVHlwZU5hbWUgbmFtZT0iZGUua29yYXAuc2VydmljZXMuR2xlbW1DbGllbnQiLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudC5HbGVtbUNsaWVudCIvPgorPGZ1bGx5UXVhbGlmaWVkVHlwZU5hbWUgbmFtZT0iZGUua29yYXAuc2VydmljZXMud2Zvcm1SZXdyaXRlIi8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJqYXZhLmlvLklucHV0U3RyZWFtIi8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbSIvPgorPGZ1bGx5UXVhbGlmaWVkVHlwZU5hbWUgbmFtZT0iamF2YS5uaW8uZmlsZS5GaWxlcyIvPgorPGZ1bGx5UXVhbGlmaWVkVHlwZU5hbWUgbmFtZT0iamF2YS5uaW8uZmlsZS5QYXRoIi8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJqYXZhLm5pby5maWxlLlBhdGhzIi8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyIi8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyIi8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJjb20uZmFzdGVyeG1sLmphY2tzb24uZGF0YWJpbmQuT2JqZWN0TWFwcGVyIi8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJkZS5rb3JhcC5zZXJ2aWNlcy5MZW1tYVJlc3BvbnNlIi8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQiLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImphdmEudXRpbC5sb2dnaW5nLkxvZ2dlciIvPgorPGZ1bGx5UXVhbGlmaWVkVHlwZU5hbWUgbmFtZT0iamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWwiLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImphdmEudXRpbC5IYXNoTWFwIi8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJkZS5rb3JhcC5zZXJ2aWNlcy5HbGVtbVNlcnZpY2VzIi8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJvcmcub21nLklPUC5FbmNvZGluZyIvPgorPGZ1bGx5UXVhbGlmaWVkVHlwZU5hbWUgbmFtZT0iamF2YXgud3MucnMuY29yZS5SZXNwb25zZS5TdGF0dXMiLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImphdmEudXRpbC5Qcm9wZXJ0aWVzIi8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlscyIvPgorPGZ1bGx5UXVhbGlmaWVkVHlwZU5hbWUgbmFtZT0iamF2YS5pby5QcmludFN0cmVhbSIvPgorPGZ1bGx5UXVhbGlmaWVkVHlwZU5hbWUgbmFtZT0iamF2YS5zcWwuRGF0YWJhc2VNZXRhRGF0YSIvPgorPGZ1bGx5UXVhbGlmaWVkVHlwZU5hbWUgbmFtZT0iZGUua29yYXAuc2VydmljZXMuR2xlbW1EQiIvPgorPC9xdWFsaWZpZWRUeXBlTmFtZUhpc3Ryb3k+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC51aS9kaWFsb2dfc2V0dGluZ3MueG1sIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQudWkvZGlhbG9nX3NldHRpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWEwZDI1Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQudWkvZGlhbG9nX3NldHRpbmdzLnhtbApAQCAtMCwwICsxLDExMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzZWN0aW9uIG5hbWU9IldvcmtiZW5jaCI+CisJPGl0ZW0gdmFsdWU9IkphdmFTRS0xLjgiIGtleT0ib3JnLmVjbGlwc2UuamR0LnVpLmxhc3Quc2VsZWN0ZWQuZXhlY3V0aW9uLmVudmlyb21lbnQiLz4KKwk8aXRlbSB2YWx1ZT0iMyIga2V5PSJUeXBlSGllcmFyY2h5Vmlld1BhcnQub3JpZW50YXRpb24iLz4KKwk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iVHlwZUhpZXJhcmNoeVZpZXdQYXJ0LmxpbmtlZGl0b3JzIi8+CisJPGl0ZW0gdmFsdWU9IjIiIGtleT0iQ2FsbEhpZXJhcmNoeVZpZXdQYXJ0LmZpZWxkX21vZGUiLz4KKwk8aXRlbSB2YWx1ZT0iMiIga2V5PSJUeXBlSGllcmFyY2h5Vmlld1BhcnQuaGllcmFyY2h5dmlldyIvPgorCTxpdGVtIHZhbHVlPSI1MDAiIGtleT0iQ2FsbEhpZXJhcmNoeVZpZXdQYXJ0LnJhdGlvMSIvPgorCTxpdGVtIHZhbHVlPSIxIiBrZXk9IlNlYXJjaFNjb3BlQWN0aW9uR3JvdXAuc2VhcmNoX3Njb3BlX3R5cGUiLz4KKwk8aXRlbSB2YWx1ZT0iNTAwIiBrZXk9IkNhbGxIaWVyYXJjaHlWaWV3UGFydC5yYXRpbzMiLz4KKwk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iVHlwZUhpZXJhcmNoeVZpZXdQYXJ0LnF1YWxpZmllZG5hbWVzIi8+CisJPGl0ZW0gdmFsdWU9IjAiIGtleT0iQ2FsbEhpZXJhcmNoeVZpZXdQYXJ0LmNhbGxfbW9kZSIvPgorCTxpdGVtIHZhbHVlPSJDOlxVc2Vyc1xGcmFuY2tcLm0yXHJlcG9zaXRvcnlcZGVca29yYXBcanNvblxKc29uVHJhdmVyc2VcMC4xLVNOQVBTSE9UIiBrZXk9Im9yZy5lY2xpcHNlLmpkdC51aS5sYXN0ZXh0amFyIi8+CisJPGl0ZW0gdmFsdWU9ImZpbHRlcl9pbXBvcnRzOyIga2V5PSJmaWx0ZXJzX2xhc3RfdXNlZCIvPgorCTxpdGVtIHZhbHVlPSIzIiBrZXk9IkNhbGxIaWVyYXJjaHlWaWV3UGFydC5vcmllbnRhdGlvbiIvPgorCTxpdGVtIHZhbHVlPSJDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyYyIga2V5PSJvcmcuZWNsaXBzZS5qZHQudWkubGFzdC5leHRlcm5hbC5wcm9qZWN0Ii8+CisJPGxpc3Qga2V5PSJTZWFyY2hTY29wZUFjdGlvbkdyb3VwLndvcmtpbmdfc2V0Ij4KKwk8L2xpc3Q+CisJPHNlY3Rpb24gbmFtZT0ib3JnLmVjbGlwc2UubHRrLnVpLnJlZmFjdG9yaW5nLnNldHRpbmdzIj4KKwkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9InVwZGF0ZVF1YWxpZmllZE5hbWVzIi8+CisJCTxpdGVtIHZhbHVlPSIqIiBrZXk9InBhdHRlcm5zIi8+CisJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJ1cGRhdGVTaW1pbGFyRWxlbWVudHMiLz4KKwkJPGl0ZW0gdmFsdWU9IjEiIGtleT0idXBkYXRlU2ltaWxhckVsZW1lbnRzTWF0Y2hTdHJhdGVneSIvPgorCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0idXBkYXRlVGV4dHVhbE1hdGNoZXMiLz4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0iUHJvYmxlbVNldmVyaXRpZXNDb25maWd1cmF0aW9uQmxvY2siPgorCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iZXhwYW5kZWQyIi8+CisJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJleHBhbmRlZDEiLz4KKwkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9ImV4cGFuZGVkNCIvPgorCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iZXhwYW5kZWQzIi8+CisJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJleHBhbmRlZDYiLz4KKwkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9ImV4cGFuZGVkNSIvPgorCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iZXhwYW5kZWQ4Ii8+CisJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJleHBhbmRlZDciLz4KKwkJPGl0ZW0gdmFsdWU9InRydWUiIGtleT0iZXhwYW5kZWQwIi8+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9IlNlYXJjaEluRGlhbG9nIj4KKwkJPGl0ZW0gdmFsdWU9InRydWUiIGtleT0iU2VhcmNoSW5Qcm9qZWN0cyIvPgorCQk8aXRlbSB2YWx1ZT0idHJ1ZSIga2V5PSJTZWFyY2hJbkFwcExpYnMiLz4KKwkJPGl0ZW0gdmFsdWU9InRydWUiIGtleT0iU2VhcmNoSW5KUkUiLz4KKwkJPGl0ZW0gdmFsdWU9InRydWUiIGtleT0iU2VhcmNoSW5Tb3VyY2VzIi8+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9Im9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5wYWNrYWdldmlldy5QYWNrYWdlRXhwbG9yZXJQYXJ0Ij4KKwkJPGl0ZW0gdmFsdWU9IjIiIGtleT0ibGF5b3V0Ii8+CisJCTxpdGVtIHZhbHVlPSJ0cnVlIiBrZXk9Imdyb3VwX2xpYnJhcmllcyIvPgorCQk8aXRlbSB2YWx1ZT0iJmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/Jmd0OyYjeDBEOyYjeDBBOyZsdDtwYWNrYWdlRXhwbG9yZXIgZ3JvdXBfbGlicmFyaWVzPSZxdW90OzEmcXVvdDsgbGF5b3V0PSZxdW90OzImcXVvdDsgbGlua1dpdGhFZGl0b3I9JnF1b3Q7MCZxdW90OyByb290TW9kZT0mcXVvdDsxJnF1b3Q7IHdvcmtpbmdTZXROYW1lPSZxdW90O0FnZ3JlZ2F0ZSBmb3Igd2luZG93IDE1NzM1NTgwMDgzNjcmcXVvdDsmZ3Q7JiN4MEQ7JiN4MEE7Jmx0O2N1c3RvbUZpbHRlcnMgdXNlckRlZmluZWRQYXR0ZXJuc0VuYWJsZWQ9JnF1b3Q7ZmFsc2UmcXVvdDsmZ3Q7JiN4MEQ7JiN4MEE7Jmx0O3htbERlZmluZWRGaWx0ZXJzJmd0OyYjeDBEOyYjeDBBOyZsdDtjaGlsZCBmaWx0ZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZUV4cGxvcmVyLlN0YXRpY3NGaWx0ZXImcXVvdDsgaXNFbmFibGVkPSZxdW90O2ZhbHNlJnF1b3Q7LyZndDsmI3gwRDsmI3gwQTsmbHQ7Y2hpbGQgZmlsdGVySWQ9JnF1b3Q7b3JnLmVjbGlwc2UuYnVpbGRzaGlwLnVpLnBhY2thZ2VleHBsb3Jlci5maWx0ZXIuZ3JhZGxlLmJ1aWxkZm9sZGVyJnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDt0cnVlJnF1b3Q7LyZndDsmI3gwRDsmI3gwQTsmbHQ7Y2hpbGQgZmlsdGVySWQ9JnF1b3Q7b3JnLmVjbGlwc2UubXlseW4uamF2YS51aS5NZW1iZXJzRmlsdGVyJnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDtmYWxzZSZxdW90Oy8mZ3Q7JiN4MEQ7JiN4MEE7Jmx0O2NoaWxkIGZpbHRlcklkPSZxdW90O29yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlRXhwbG9yZXIuTm9uSmF2YVByb2plY3RzRmlsdGVyJnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDtmYWxzZSZxdW90Oy8mZ3Q7JiN4MEQ7JiN4MEE7Jmx0O2NoaWxkIGZpbHRlcklkPSZxdW90O29yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlRXhwbG9yZXJfcGF0dGVybkZpbHRlcklkXy4qJnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDt0cnVlJnF1b3Q7LyZndDsmI3gwRDsmI3gwQTsmbHQ7Y2hpbGQgZmlsdGVySWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VFeHBsb3Jlci5Ob25TaGFyZWRQcm9qZWN0c0ZpbHRlciZxdW90OyBpc0VuYWJsZWQ9JnF1b3Q7ZmFsc2UmcXVvdDsvJmd0OyYjeDBEOyYjeDBBOyZsdDtjaGlsZCBmaWx0ZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZUV4cGxvcmVyLlN5bnRoZXRpY01lbWJlcnNGaWx0ZXImcXVvdDsgaXNFbmFibGVkPSZxdW90O3RydWUmcXVvdDsvJmd0OyYjeDBEOyYjeDBBOyZsdDtjaGlsZCBmaWx0ZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZUV4cGxvcmVyLkNvbnRhaW5lZExpYnJhcnlGaWx0ZXImcXVvdDsgaXNFbmFibGVkPSZxdW90O2ZhbHNlJnF1b3Q7LyZndDsmI3gwRDsmI3gwQTsmbHQ7Y2hpbGQgZmlsdGVySWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLlBhY2thZ2VFeHBsb3Jlci5IaWRlSW5uZXJDbGFzc0ZpbGVzRmlsdGVyJnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDt0cnVlJnF1b3Q7LyZndDsmI3gwRDsmI3gwQTsmbHQ7Y2hpbGQgZmlsdGVySWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLlBhY2thZ2VFeHBsb3Jlci5FbXB0eUlubmVyUGFja2FnZUZpbHRlciZxdW90OyBpc0VuYWJsZWQ9JnF1b3Q7dHJ1ZSZxdW90Oy8mZ3Q7JiN4MEQ7JiN4MEE7Jmx0O2NoaWxkIGZpbHRlcklkPSZxdW90O29yZy5lY2xpcHNlLm0yZS5NYXZlbk1vZHVsZUZpbHRlciZxdW90OyBpc0VuYWJsZWQ9JnF1b3Q7ZmFsc2UmcXVvdDsvJmd0OyYjeDBEOyYjeDBBOyZsdDtjaGlsZCBmaWx0ZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS5idWlsZHNoaXAudWkucGFja2FnZWV4cGxvcmVyLmZpbHRlci5ncmFkbGUuc3ViUHJvamVjdCZxdW90OyBpc0VuYWJsZWQ9JnF1b3Q7dHJ1ZSZxdW90Oy8mZ3Q7JiN4MEQ7JiN4MEE7Jmx0O2NoaWxkIGZpbHRlcklkPSZxdW90O29yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlRXhwbG9yZXIuQ2xvc2VkUHJvamVjdHNGaWx0ZXImcXVvdDsgaXNFbmFibGVkPSZxdW90O2ZhbHNlJnF1b3Q7LyZndDsmI3gwRDsmI3gwQTsmbHQ7Y2hpbGQgZmlsdGVySWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VFeHBsb3Jlci5EZXByZWNhdGVkTWVtYmVyc0ZpbHRlciZxdW90OyBpc0VuYWJsZWQ9JnF1b3Q7ZmFsc2UmcXVvdDsvJmd0OyYjeDBEOyYjeDBBOyZsdDtjaGlsZCBmaWx0ZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZUV4cGxvcmVyLkVtcHR5TGlicmFyeUNvbnRhaW5lckZpbHRlciZxdW90OyBpc0VuYWJsZWQ9JnF1b3Q7dHJ1ZSZxdW90Oy8mZ3Q7JiN4MEQ7JiN4MEE7Jmx0O2NoaWxkIGZpbHRlcklkPSZxdW90O29yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlRXhwbG9yZXIuUGFja2FnZURlY2xhcmF0aW9uRmlsdGVyJnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDt0cnVlJnF1b3Q7LyZndDsmI3gwRDsmI3gwQTsmbHQ7Y2hpbGQgZmlsdGVySWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VFeHBsb3Jlci5JbXBvcnREZWNsYXJhdGlvbkZpbHRlciZxdW90OyBpc0VuYWJsZWQ9JnF1b3Q7dHJ1ZSZxdW90Oy8mZ3Q7JiN4MEQ7JiN4MEE7Jmx0O2NoaWxkIGZpbHRlcklkPSZxdW90O29yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlRXhwbG9yZXIuTm9uSmF2YUVsZW1lbnRGaWx0ZXImcXVvdDsgaXNFbmFibGVkPSZxdW90O2ZhbHNlJnF1b3Q7LyZndDsmI3gwRDsmI3gwQTsmbHQ7Y2hpbGQgZmlsdGVySWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VFeHBsb3Jlci5MaWJyYXJ5RmlsdGVyJnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDtmYWxzZSZxdW90Oy8mZ3Q7JiN4MEQ7JiN4MEE7Jmx0O2NoaWxkIGZpbHRlcklkPSZxdW90O29yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlRXhwbG9yZXIuQ3VBbmRDbGFzc0ZpbGVGaWx0ZXImcXVvdDsgaXNFbmFibGVkPSZxdW90O2ZhbHNlJnF1b3Q7LyZndDsmI3gwRDsmI3gwQTsmbHQ7Y2hpbGQgZmlsdGVySWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLlBhY2thZ2VFeHBsb3Jlci5FbXB0eVBhY2thZ2VGaWx0ZXImcXVvdDsgaXNFbmFibGVkPSZxdW90O2ZhbHNlJnF1b3Q7LyZndDsmI3gwRDsmI3gwQTsmbHQ7Y2hpbGQgZmlsdGVySWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VFeHBsb3Jlci5Ob25QdWJsaWNGaWx0ZXImcXVvdDsgaXNFbmFibGVkPSZxdW90O2ZhbHNlJnF1b3Q7LyZndDsmI3gwRDsmI3gwQTsmbHQ7Y2hpbGQgZmlsdGVySWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VFeHBsb3Jlci5Mb2NhbFR5cGVzRmlsdGVyJnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDtmYWxzZSZxdW90Oy8mZ3Q7JiN4MEQ7JiN4MEE7Jmx0O2NoaWxkIGZpbHRlcklkPSZxdW90O29yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlRXhwbG9yZXIuRmllbGRzRmlsdGVyJnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDtmYWxzZSZxdW90Oy8mZ3Q7JiN4MEQ7JiN4MEE7Jmx0Oy94bWxEZWZpbmVkRmlsdGVycyZndDsmI3gwRDsmI3gwQTsmbHQ7L2N1c3RvbUZpbHRlcnMmZ3Q7JiN4MEQ7JiN4MEE7Jmx0Oy9wYWNrYWdlRXhwbG9yZXImZ3Q7IiBrZXk9Im1lbWVudG8iLz4KKwkJPGl0ZW0gdmFsdWU9IjEiIGtleT0icm9vdE1vZGUiLz4KKwkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9ImxpbmtXaXRoRWRpdG9yIi8+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9Ik5ld0NsYXNzV2l6YXJkUGFnZSI+CisJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJjcmVhdGVfY29uc3RydWN0b3IiLz4KKwkJPGl0ZW0gdmFsdWU9InRydWUiIGtleT0iY3JlYXRlX3VuaW1wbGVtZW50ZWQiLz4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0iT3B0aW9uYWxNZXNzYWdlRGlhbG9nLmhpZGUuIj4KKwkJPGl0ZW0gdmFsdWU9InRydWUiIGtleT0ib3JnLmVjbGlwc2UuamR0LnVpLnR5cGVjb21tZW50LmRlcHJlY2F0ZWQiLz4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0iUmVmYWN0b3JpbmdXaXphcmQucHJldmlldyI+CisJCTxpdGVtIHZhbHVlPSI2MDAiIGtleT0id2lkdGgiLz4KKwkJPGl0ZW0gdmFsdWU9IjQwMCIga2V5PSJoZWlnaHQiLz4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0iQ2FsbEhpZXJhcmNoeVNlYXJjaFNjb3BlIj4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0ib3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLndpemFyZHMuYnVpbGRwYXRocy5OZXdWYXJpYWJsZUVudHJ5RGlhbG9nIj4KKwkJPGl0ZW0gdmFsdWU9IjU3NyIga2V5PSJESUFMT0dfV0lEVEgiLz4KKwkJPGl0ZW0gdmFsdWU9IjF8U2Vnb2UgVUl8OS4wfDB8V0lORE9XU3wxfC0xMnwwfDB8MHw0MDB8MHwwfDB8MXwwfDB8MHwwfFNlZ29lIFVJIiBrZXk9IkRJQUxPR19GT05UX05BTUUiLz4KKwkJPGl0ZW0gdmFsdWU9IjM5OCIga2V5PSJESUFMT0dfSEVJR0hUIi8+CisJCTxpdGVtIHZhbHVlPSI3OCIga2V5PSJESUFMT0dfWF9PUklHSU4iLz4KKwkJPGl0ZW0gdmFsdWU9Ijg0IiBrZXk9IkRJQUxPR19ZX09SSUdJTiIvPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBuYW1lPSJKYXZhQnVpbGRDb25maWd1cmF0aW9uQmxvY2siPgorCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iZXhwYW5kZWQyIi8+CisJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJleHBhbmRlZDEiLz4KKwkJPGl0ZW0gdmFsdWU9InRydWUiIGtleT0iZXhwYW5kZWQwIi8+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9IkJyZWFkY3J1bWJJdGVtRHJvcERvd24iPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBuYW1lPSJDbGFzc3BhdGhDb250YWluZXJTZWxlY3Rpb25QYWdlIj4KKwkJPGl0ZW0gdmFsdWU9IjYiIGtleT0iaW5kZXgiLz4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0iQnVpbGRQYXRoc1Byb3BlcnR5UGFnZSI+CisJCTxpdGVtIHZhbHVlPSIxIiBrZXk9InBhZ2VJbmRleCIvPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBuYW1lPSJxdWlja19hc3Npc3RfcHJvcG9zYWxfc2l6ZSI+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9Ik5ld1BhY2thZ2VXaXphcmRQYWdlIj4KKwkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9ImNyZWF0ZV9wYWNrYWdlX2luZm9famF2YSIvPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBuYW1lPSJKYXZhU2VhcmNoUGFnZSI+CisJCTxpdGVtIHZhbHVlPSIxIiBrZXk9IkhJU1RPUllfU0laRSIvPgorCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iQ0FTRV9TRU5TSVRJVkUiLz4KKwkJPGl0ZW0gdmFsdWU9IjE1IiBrZXk9IklOQ0xVREVfTUFTSyIvPgorCQk8c2VjdGlvbiBuYW1lPSJISVNUT1JZMCI+CisJCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iaXNDYXNlU2Vuc2l0aXZlIi8+CisJCQk8aXRlbSB2YWx1ZT0iIiBrZXk9ImphdmFFbGVtZW50Ii8+CisJCQk8aXRlbSB2YWx1ZT0iMCIga2V5PSJzY29wZSIvPgorCQkJPGl0ZW0gdmFsdWU9IjE1IiBrZXk9ImluY2x1ZGVNYXNrIi8+CisJCQk8aXRlbSB2YWx1ZT0iR2xlbW0yIiBrZXk9InBhdHRlcm4iLz4KKwkJCTxpdGVtIHZhbHVlPSIyIiBrZXk9ImxpbWl0VG8iLz4KKwkJCTxpdGVtIHZhbHVlPSIwIiBrZXk9Im1hdGNoTG9jYXRpb25zIi8+CisJCQk8aXRlbSB2YWx1ZT0iMCIga2V5PSJzZWFyY2hGb3IiLz4KKwkJCTxsaXN0IGtleT0id29ya2luZ1NldHMiPgorCQkJPC9saXN0PgorCQk8L3NlY3Rpb24+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9ImNvbXBsZXRpb25fcHJvcG9zYWxfc2l6ZSI+CisJCTxpdGVtIHZhbHVlPSIyMjUiIGtleT0ic2l6ZS55Ii8+CisJCTxpdGVtIHZhbHVlPSI0NjMiIGtleT0ic2l6ZS54Ii8+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9IkphdmFFbGVtZW50U2VhcmNoQWN0aW9ucyI+CisJPC9zZWN0aW9uPgorPC9zZWN0aW9uPgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuajJlZS51aS9kaWFsb2dfc2V0dGluZ3MueG1sIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuajJlZS51aS9kaWFsb2dfc2V0dGluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5YjgxODYKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qMmVlLnVpL2RpYWxvZ19zZXR0aW5ncy54bWwKQEAgLTAsMCArMSw4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHNlY3Rpb24gbmFtZT0iV29ya2JlbmNoIj4KKwk8bGlzdCBrZXk9Ik1SVV9SVU5USU1FX1NUT1JFIj4KKwkJPGl0ZW0gdmFsdWU9IkFwYWNoZSBUb21jYXQgdjkuMCIvPgorCQk8aXRlbSB2YWx1ZT0iTlVMTF9SVU5USU1FIi8+CisJCTxpdGVtIHZhbHVlPSJKMkVFIFJ1bnRpbWUgTGlicmFyeSIvPgorCTwvbGlzdD4KKzwvc2VjdGlvbj4KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmoyZWUud2ViL3dlYkxpYnJhcmllc0NhY2hlLmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuajJlZS53ZWIvd2ViTGlicmFyaWVzQ2FjaGUuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTljYzZhNAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmoyZWUud2ViL3dlYkxpYnJhcmllc0NhY2hlLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmoyZWUvZWFyTGlicmFyaWVzQ2FjaGUuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qMmVlL2VhckxpYnJhcmllc0NhY2hlLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZmIwMjMKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qMmVlL2VhckxpYnJhcmllc0NhY2hlLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL2Nsb3NlLmdpZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL2Nsb3NlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzkyZTI4Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvY2xvc2UuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL2xpc3QtYnVsbGV0LmdpZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL2xpc3QtYnVsbGV0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzBjZjRmCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvbGlzdC1idWxsZXQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL2xvZ28tZGFyay5naWYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc2YuYXBhY2hlLnRyaW5pZGFkLnRhZ3N1cHBvcnQvZHRSZXpQcm92Q2FjaGUvbXlmYWNlcy5hcGFjaGUub3JnX3RyaW5pZGFkL3NraW5uaW5nL2ltYWdlcy9sb2dvLWRhcmsuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNDUwZTEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc2YuYXBhY2hlLnRyaW5pZGFkLnRhZ3N1cHBvcnQvZHRSZXpQcm92Q2FjaGUvbXlmYWNlcy5hcGFjaGUub3JnX3RyaW5pZGFkL3NraW5uaW5nL2ltYWdlcy9sb2dvLWRhcmsuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtYm90LWRlc2VsZWN0ZWQuZ2lmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1ib3QtZGVzZWxlY3RlZC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBlYzgzNAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtYm90LWRlc2VsZWN0ZWQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtYm90LWVuZC1zZWxlY3RlZC5naWYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc2YuYXBhY2hlLnRyaW5pZGFkLnRhZ3N1cHBvcnQvZHRSZXpQcm92Q2FjaGUvbXlmYWNlcy5hcGFjaGUub3JnX3RyaW5pZGFkL3NraW5uaW5nL2ltYWdlcy90YWIzLWJvdC1lbmQtc2VsZWN0ZWQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYzllZWEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc2YuYXBhY2hlLnRyaW5pZGFkLnRhZ3N1cHBvcnQvZHRSZXpQcm92Q2FjaGUvbXlmYWNlcy5hcGFjaGUub3JnX3RyaW5pZGFkL3NraW5uaW5nL2ltYWdlcy90YWIzLWJvdC1lbmQtc2VsZWN0ZWQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtYm90LW1pZC1zZWxlY3RlZC5naWYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc2YuYXBhY2hlLnRyaW5pZGFkLnRhZ3N1cHBvcnQvZHRSZXpQcm92Q2FjaGUvbXlmYWNlcy5hcGFjaGUub3JnX3RyaW5pZGFkL3NraW5uaW5nL2ltYWdlcy90YWIzLWJvdC1taWQtc2VsZWN0ZWQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkYjBjOTYKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc2YuYXBhY2hlLnRyaW5pZGFkLnRhZ3N1cHBvcnQvZHRSZXpQcm92Q2FjaGUvbXlmYWNlcy5hcGFjaGUub3JnX3RyaW5pZGFkL3NraW5uaW5nL2ltYWdlcy90YWIzLWJvdC1taWQtc2VsZWN0ZWQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtYm90LXN0YXJ0LXNlbGVjdGVkLmdpZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtYm90LXN0YXJ0LXNlbGVjdGVkLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjQ2M2NlCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1ib3Qtc3RhcnQtc2VsZWN0ZWQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtZW5kLWRlc2VsZWN0ZWQuZ2lmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1lbmQtZGVzZWxlY3RlZC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc0MTdlMQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtZW5kLWRlc2VsZWN0ZWQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtZW5kLWpvaW4tZGVzZWxlY3RlZC10by1kZXNlbGVjdGVkLmdpZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtZW5kLWpvaW4tZGVzZWxlY3RlZC10by1kZXNlbGVjdGVkLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDE2Mjk5Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1lbmQtam9pbi1kZXNlbGVjdGVkLXRvLWRlc2VsZWN0ZWQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtZW5kLWpvaW4tc2VsZWN0ZWQtdG8tZGVzZWxlY3RlZC5naWYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc2YuYXBhY2hlLnRyaW5pZGFkLnRhZ3N1cHBvcnQvZHRSZXpQcm92Q2FjaGUvbXlmYWNlcy5hcGFjaGUub3JnX3RyaW5pZGFkL3NraW5uaW5nL2ltYWdlcy90YWIzLWVuZC1qb2luLXNlbGVjdGVkLXRvLWRlc2VsZWN0ZWQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZjMzZTAKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc2YuYXBhY2hlLnRyaW5pZGFkLnRhZ3N1cHBvcnQvZHRSZXpQcm92Q2FjaGUvbXlmYWNlcy5hcGFjaGUub3JnX3RyaW5pZGFkL3NraW5uaW5nL2ltYWdlcy90YWIzLWVuZC1qb2luLXNlbGVjdGVkLXRvLWRlc2VsZWN0ZWQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtZW5kLXNlbGVjdGVkLmdpZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtZW5kLXNlbGVjdGVkLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzZiMzk1Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1lbmQtc2VsZWN0ZWQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtbWlkLWRlc2VsZWN0ZWQuZ2lmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1taWQtZGVzZWxlY3RlZC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYzOTU1OAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtbWlkLWRlc2VsZWN0ZWQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtbWlkLXNlbGVjdGVkLmdpZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtbWlkLXNlbGVjdGVkLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDhkZTk4Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1taWQtc2VsZWN0ZWQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtc3RhcnQtZGVzZWxlY3RlZC5naWYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc2YuYXBhY2hlLnRyaW5pZGFkLnRhZ3N1cHBvcnQvZHRSZXpQcm92Q2FjaGUvbXlmYWNlcy5hcGFjaGUub3JnX3RyaW5pZGFkL3NraW5uaW5nL2ltYWdlcy90YWIzLXN0YXJ0LWRlc2VsZWN0ZWQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjOTA0YzMKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc2YuYXBhY2hlLnRyaW5pZGFkLnRhZ3N1cHBvcnQvZHRSZXpQcm92Q2FjaGUvbXlmYWNlcy5hcGFjaGUub3JnX3RyaW5pZGFkL3NraW5uaW5nL2ltYWdlcy90YWIzLXN0YXJ0LWRlc2VsZWN0ZWQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtc3RhcnQtam9pbi1kZXNlbGVjdGVkLXRvLWRlc2VsZWN0ZWQuZ2lmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1zdGFydC1qb2luLWRlc2VsZWN0ZWQtdG8tZGVzZWxlY3RlZC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVjMmQzZgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtc3RhcnQtam9pbi1kZXNlbGVjdGVkLXRvLWRlc2VsZWN0ZWQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtc3RhcnQtam9pbi1zZWxlY3RlZC10by1kZXNlbGVjdGVkLmdpZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtc3RhcnQtam9pbi1zZWxlY3RlZC10by1kZXNlbGVjdGVkLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWMyZDNmCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1zdGFydC1qb2luLXNlbGVjdGVkLXRvLWRlc2VsZWN0ZWQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtc3RhcnQtam9pbi1zZWxlY3RlZC5naWYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc2YuYXBhY2hlLnRyaW5pZGFkLnRhZ3N1cHBvcnQvZHRSZXpQcm92Q2FjaGUvbXlmYWNlcy5hcGFjaGUub3JnX3RyaW5pZGFkL3NraW5uaW5nL2ltYWdlcy90YWIzLXN0YXJ0LWpvaW4tc2VsZWN0ZWQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZWJjNzIKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc2YuYXBhY2hlLnRyaW5pZGFkLnRhZ3N1cHBvcnQvZHRSZXpQcm92Q2FjaGUvbXlmYWNlcy5hcGFjaGUub3JnX3RyaW5pZGFkL3NraW5uaW5nL2ltYWdlcy90YWIzLXN0YXJ0LWpvaW4tc2VsZWN0ZWQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtc3RhcnQtc2VsZWN0ZWQuZ2lmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1zdGFydC1zZWxlY3RlZC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRhMjYwYgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtc3RhcnQtc2VsZWN0ZWQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvbWluaW1hbC5jc3MgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc2YuYXBhY2hlLnRyaW5pZGFkLnRhZ3N1cHBvcnQvZHRSZXpQcm92Q2FjaGUvbXlmYWNlcy5hcGFjaGUub3JnX3RyaW5pZGFkL3NraW5uaW5nL21pbmltYWwuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZmU3Y2QKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc2YuYXBhY2hlLnRyaW5pZGFkLnRhZ3N1cHBvcnQvZHRSZXpQcm92Q2FjaGUvbXlmYWNlcy5hcGFjaGUub3JnX3RyaW5pZGFkL3NraW5uaW5nL21pbmltYWwuY3NzCkBAIC0wLDAgKzEsMjQzIEBACisvKiBUaGlzIENTUyBmaWxlIGdlbmVyYXRlZCBvbiBUaHUgQXByIDAyIDE1OjQ3OjQ0IFBEVCAyMDA5ICovCisuQUZJbnN0cnVjdGlvblRleHQsLkFGRmllbGRUZXh0LC5hZl9vdXRwdXRUZXh0LC5hZl9vdXRwdXRGb3JtYXR0ZWQsLmFmX291dHB1dERvY3VtZW50LC5hZl9pbnB1dENob2ljZV9jb250ZW50LC5hZl9pbnB1dENob2ljZV9jb250ZW50LWlucHV0LC5hZl9pbnB1dFRleHRfY29udGVudCwuYWZfaW5wdXROdW1iZXJTcGluYm94X2NvbnRlbnQsLmFmX2lucHV0Q29sb3JfY29udGVudCwuYWZfaW5wdXREYXRlX2NvbnRlbnQsLmFmX2lucHV0TGlzdE9mVmFsdWVzX2NvbnRlbnQsLmFmX3NlbGVjdE1hbnlDaGVja2JveF9jb250ZW50LC5hZl9zZWxlY3RNYW55TGlzdGJveF9jb250ZW50LC5hZl9zZWxlY3RPbmVDaG9pY2VfY29udGVudCwuYWZfc2VsZWN0T25lTGlzdGJveF9jb250ZW50LC5hZl9zZWxlY3RPbmVSYWRpb19jb250ZW50LC5hZl9pbnB1dFRleHQuQUZGaWVsZFRleHRNYXJrZXIgLmFmX2lucHV0VGV4dF9jb250ZW50LC5hZl9pbnB1dFRleHQucF9BRkRpc2FibGVkLkFGRmllbGRUZXh0TWFya2VyIC5hZl9pbnB1dFRleHRfY29udGVudCwuYWZfaW5wdXRUZXh0LkFGRmllbGRUZXh0TFRSTWFya2VyIC5hZl9pbnB1dFRleHRfY29udGVudCwuYWZfaW5wdXRUZXh0LkFGUGhvbmVGaWVsZFRleHRNYXJrZXIgLmFmX2lucHV0VGV4dF9jb250ZW50LC5hZl9pbnB1dFRleHQuQUZQb3N0YWxDb2RlRmllbGRUZXh0TWFya2VyIC5hZl9pbnB1dFRleHRfY29udGVudCwuYWZfaW5wdXRUZXh0LkFGQWRkcmVzc0ZpZWxkVGV4dE1hcmtlciAuYWZfaW5wdXRUZXh0X2NvbnRlbnQsLmFmX2lucHV0Q2hvaWNlLkFGRmllbGRUZXh0TWFya2VyIC5hZl9pbnB1dENob2ljZV9jb250ZW50LWlucHV0LC5hZl9pbnB1dENob2ljZS5wX0FGRGlzYWJsZWQuQUZGaWVsZFRleHRNYXJrZXIgLmFmX2lucHV0Q2hvaWNlX2NvbnRlbnQtaW5wdXQsLmFmX2lucHV0Q2hvaWNlLkFGRmllbGRUZXh0TFRSTWFya2VyIC5hZl9pbnB1dENob2ljZV9jb250ZW50LWlucHV0LC5hZl9pbnB1dENob2ljZS5BRlBob25lRmllbGRUZXh0TWFya2VyIC5hZl9pbnB1dENob2ljZV9jb250ZW50LWlucHV0LC5hZl9pbnB1dENob2ljZS5BRlBvc3RhbENvZGVGaWVsZFRleHRNYXJrZXIgLmFmX2lucHV0Q2hvaWNlX2NvbnRlbnQtaW5wdXQsLmFmX2lucHV0Q2hvaWNlLkFGQWRkcmVzc0ZpZWxkVGV4dE1hcmtlciAuYWZfaW5wdXRDaG9pY2VfY29udGVudC1pbnB1dCwuYWZfaW5wdXROdW1iZXJTcGluYm94LkFGRmllbGRUZXh0TWFya2VyIC5hZl9pbnB1dE51bWJlclNwaW5ib3hfY29udGVudCwuYWZfaW5wdXROdW1iZXJTcGluYm94LnBfQUZEaXNhYmxlZC5BRkZpZWxkVGV4dE1hcmtlciAuYWZfaW5wdXROdW1iZXJTcGluYm94X2NvbnRlbnQsLmFmX2lucHV0TnVtYmVyU3BpbmJveC5BRkZpZWxkVGV4dExUUk1hcmtlciAuYWZfaW5wdXROdW1iZXJTcGluYm94X2NvbnRlbnQsLkFGRmllbGRUZXh0TFRSLC5BRlBob25lRmllbGRUZXh0LC5BRlBvc3RhbENvZGVGaWVsZFRleHQsLkFGQWRkcmVzc0ZpZWxkVGV4dCwuUG9ydGxldFRleHQxLC5Qb3J0bGV0VGV4dDIsLlBvcnRsZXRUZXh0MywuUG9ydGxldFRleHQ0LC5wb3J0bGV0LWZvcm0taW5wdXQtZmllbGQsLnBvcnRsZXQtZm9ybS1maWVsZCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojMDAwMDAwfQorLkFGSW5zdHJ1Y3Rpb25UZXh0RGlzYWJsZWQsLkFGRmllbGRUZXh0RGlzYWJsZWQsLmFmX2lucHV0VGV4dC5wX0FGRGlzYWJsZWQuQUZGaWVsZFRleHRMVFJNYXJrZXIgLmFmX2lucHV0VGV4dF9jb250ZW50LC5hZl9pbnB1dFRleHQucF9BRkRpc2FibGVkLkFGUGhvbmVGaWVsZFRleHRNYXJrZXIgLmFmX2lucHV0VGV4dF9jb250ZW50LC5hZl9pbnB1dFRleHQucF9BRkRpc2FibGVkLkFGUG9zdGFsQ29kZUZpZWxkVGV4dE1hcmtlciAuYWZfaW5wdXRUZXh0X2NvbnRlbnQsLmFmX2lucHV0VGV4dC5wX0FGRGlzYWJsZWQuQUZBZGRyZXNzRmllbGRUZXh0TWFya2VyIC5hZl9pbnB1dFRleHRfY29udGVudCwuYWZfaW5wdXRDaG9pY2UucF9BRkRpc2FibGVkLkFGRmllbGRUZXh0TFRSTWFya2VyIC5hZl9pbnB1dENob2ljZV9jb250ZW50LWlucHV0LC5hZl9pbnB1dENob2ljZS5wX0FGRGlzYWJsZWQuQUZQaG9uZUZpZWxkVGV4dE1hcmtlciAuYWZfaW5wdXRDaG9pY2VfY29udGVudC1pbnB1dCwuYWZfaW5wdXRDaG9pY2UucF9BRkRpc2FibGVkLkFGUG9zdGFsQ29kZUZpZWxkVGV4dE1hcmtlciAuYWZfaW5wdXRDaG9pY2VfY29udGVudC1pbnB1dCwuYWZfaW5wdXRDaG9pY2UucF9BRkRpc2FibGVkLkFGQWRkcmVzc0ZpZWxkVGV4dE1hcmtlciAuYWZfaW5wdXRDaG9pY2VfY29udGVudC1pbnB1dCwuYWZfaW5wdXROdW1iZXJTcGluYm94LnBfQUZEaXNhYmxlZC5BRkZpZWxkVGV4dExUUk1hcmtlciAuYWZfaW5wdXROdW1iZXJTcGluYm94X2NvbnRlbnQsLnBfSW5Db250ZXh0QnJhbmRpbmdUZXh0LC5BRkZpZWxkVGV4dExUUkRpc2FibGVkLC5BRlBob25lRmllbGRUZXh0RGlzYWJsZWQsLkFGUG9zdGFsQ29kZUZpZWxkVGV4dERpc2FibGVkLC5BRkFkZHJlc3NGaWVsZFRleHREaXNhYmxlZCwuT3JhSEdyaWROYXZSb3dJbmFjdGl2ZUxpbmssLk9yYU5hdkJhckluYWN0aXZlTGluaywucG9ydGxldC1mb250LWRpbSB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojOTk5OTk5fQorLkFGRGF0YVRleHQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpib2xkO2NvbG9yOiMwMDAwMDB9CisuQUZEYXRhVGV4dERpc2FibGVkIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjojOTk5OTk5fQorLkFGRGF0YU51bWJlciB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6IzAwMDAwMDt0ZXh0LWFsaWduOnJpZ2h0fQorLkFGRGF0YU51bWJlckRpc2FibGVkIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjojOTk5OTk5O3RleHQtYWxpZ246cmlnaHR9CisuQUZGaWVsZE51bWJlciwuYWZfaW5wdXRUZXh0LkFGRmllbGROdW1iZXJNYXJrZXIgLmFmX2lucHV0VGV4dF9jb250ZW50LC5hZl9pbnB1dENob2ljZS5BRkZpZWxkTnVtYmVyTWFya2VyIC5hZl9pbnB1dENob2ljZV9jb250ZW50LWlucHV0LC5hZl9pbnB1dE51bWJlclNwaW5ib3guQUZGaWVsZE51bWJlck1hcmtlciAuYWZfaW5wdXROdW1iZXJTcGluYm94X2NvbnRlbnQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7dGV4dC1hbGlnbjpyaWdodDtjb2xvcjojMDAwMDAwfQorLkFGRmllbGROdW1iZXJEaXNhYmxlZCwuYWZfaW5wdXRUZXh0LnBfQUZEaXNhYmxlZC5BRkZpZWxkTnVtYmVyTWFya2VyIC5hZl9pbnB1dFRleHRfY29udGVudCwuYWZfaW5wdXRDaG9pY2UucF9BRkRpc2FibGVkLkFGRmllbGROdW1iZXJNYXJrZXIgLmFmX2lucHV0Q2hvaWNlX2NvbnRlbnQtaW5wdXQsLmFmX2lucHV0TnVtYmVyU3BpbmJveC5wX0FGRGlzYWJsZWQuQUZGaWVsZE51bWJlck1hcmtlciAuYWZfaW5wdXROdW1iZXJTcGluYm94X2NvbnRlbnQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7dGV4dC1hbGlnbjpyaWdodDtjb2xvcjojOTk5OTk5fQorLkFGTGFiZWxUZXh0LC5hZl9vdXRwdXRMYWJlbCwuYWZfaW5wdXRDaG9pY2VfbGFiZWwsLmFmX2lucHV0RmlsZV9sYWJlbCwuYWZfaW5wdXROdW1iZXJTcGluYm94X2xhYmVsLC5hZl9pbnB1dFRleHRfbGFiZWwsLmFmX3NlbGVjdEJvb2xlYW5DaGVja2JveF9sYWJlbCwuYWZfc2VsZWN0Qm9vbGVhblJhZGlvX2xhYmVsLC5hZl9pbnB1dENvbG9yX2xhYmVsLC5hZl9pbnB1dERhdGVfbGFiZWwsLmFmX2lucHV0TGlzdE9mVmFsdWVzX2xhYmVsLC5hZl9zZWxlY3RNYW55Q2hlY2tib3hfbGFiZWwsLmFmX3NlbGVjdE1hbnlMaXN0Ym94X2xhYmVsLC5hZl9zZWxlY3RPbmVDaG9pY2VfbGFiZWwsLmFmX3NlbGVjdE9uZUxpc3Rib3hfbGFiZWwsLmFmX3NlbGVjdE9uZVJhZGlvX2xhYmVsLC5hZl9wYW5lbExhYmVsQW5kTWVzc2FnZV9sYWJlbCwuYWZfcGFuZWxGb3JtTGF5b3V0X2xhYmVsLWNlbGwsLnBvcnRsZXQtZm9ybS1sYWJlbCwucG9ydGxldC1pY29uLWxhYmVsLC5wb3J0bGV0LWRsZy1pY29uLWxhYmVsLC5wb3J0bGV0LWZvcm0tZmllbGQtbGFiZWwge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDt0ZXh0LWFsaWduOnJpZ2h0O2NvbG9yOiMwMDAwMDA7cGFkZGluZzowcHggOHB4IDBweCAwcHg7Zm9udC13ZWlnaHQ6bm9ybWFsfQorLkFGTGFiZWxDZWxsIHtwYWRkaW5nOjBweCA4cHggMHB4IDBweH0KKy5BRkVycm9ySWNvblN0eWxlIHtjb2xvcjojY2MwMDAwO2ZvbnQtZmFtaWx5Om1vbm9zcGFjZTtmb250LXdlaWdodDpib2xkfQorLkFGSW5mb0ljb25TdHlsZSwuQUZXYXJuaW5nSWNvblN0eWxlLC5BRlF1aWNrU2VsZWN0SWNvblN0eWxlIHtjb2xvcjojNjY5OTY2O2ZvbnQtZmFtaWx5Om1vbm9zcGFjZTtmb250LXdlaWdodDpib2xkfQorLkFGUmVxdWlyZWRJY29uU3R5bGUge2NvbG9yOiM2Njk5NjY7Zm9udC1mYW1pbHk6Q291cmllcixzYW5zLXNlcmlmfQorLkFGUXVpY2tTZWxlY3REaXNhYmxlZEljb25TdHlsZSB7Y29sb3I6Izk5OTk5OTtmb250LWZhbWlseTptb25vc3BhY2U7Zm9udC13ZWlnaHQ6Ym9sZH0KKy5PcmFMaW5rOmxpbmssLmFmX3RyZWVUYWJsZV9wYXRoLC5hZl9tZW51UGF0aCwuYWZfcGFuZWxMaXN0IEEsLmFmX3BhbmVsUG9wdXBfbGluaywuT3JhTGlua1RleHQsLk9yYUhHcmlkTmF2Um93QWN0aXZlTGluaywuT3JhTmF2QmFyQWN0aXZlTGluayB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojMDAzMzMzfQorLk9yYUxpbms6YWN0aXZlLC5PcmFBTGlua1RleHQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6IzAwNjY2Nn0KKy5PcmFMaW5rOnZpc2l0ZWQsLk9yYVZMaW5rVGV4dCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojMzM2NjY2fQorLk9yYUxpbmtEaXNhYmxlZCwuYWZfb3V0cHV0TGFiZWxfcmVxdWlyZWQtaWNvbi1zdHlsZSwuYWZfaW5wdXRDaG9pY2VfcmVxdWlyZWQtaWNvbi1zdHlsZSwuYWZfaW5wdXROdW1iZXJTcGluYm94X3JlcXVpcmVkLWljb24tc3R5bGUsLmFmX2lucHV0VGV4dF9yZXF1aXJlZC1pY29uLXN0eWxlLC5hZl9zZWxlY3RCb29sZWFuQ2hlY2tib3hfcmVxdWlyZWQtaWNvbi1zdHlsZSwuYWZfc2VsZWN0Qm9vbGVhblJhZGlvX3JlcXVpcmVkLWljb24tc3R5bGUsLmFmX2lucHV0RGF0ZV9yZXF1aXJlZC1pY29uLXN0eWxlLC5hZl9zZWxlY3RNYW55Q2hlY2tib3hfcmVxdWlyZWQtaWNvbi1zdHlsZSwuYWZfc2VsZWN0TWFueUxpc3Rib3hfcmVxdWlyZWQtaWNvbi1zdHlsZSwuYWZfc2VsZWN0T25lQ2hvaWNlX3JlcXVpcmVkLWljb24tc3R5bGUsLmFmX3NlbGVjdE9uZUxpc3Rib3hfcmVxdWlyZWQtaWNvbi1zdHlsZSwuYWZfc2VsZWN0T25lUmFkaW9fcmVxdWlyZWQtaWNvbi1zdHlsZSwuYWZfb3V0cHV0TGFiZWxfZ3JvdXAtaWNvbi1zdHlsZSwuYWZfaW5wdXRDaG9pY2VfZ3JvdXAtaWNvbi1zdHlsZSwuYWZfaW5wdXROdW1iZXJTcGluYm94X2dyb3VwLWljb24tc3R5bGUsLmFmX2lucHV0VGV4dF9ncm91cC1pY29uLXN0eWxlLC5hZl9zZWxlY3RCb29sZWFuQ2hlY2tib3hfZ3JvdXAtaWNvbi1zdHlsZSwuYWZfc2VsZWN0Qm9vbGVhblJhZGlvX2dyb3VwLWljb24tc3R5bGUsLmFmX2lucHV0RGF0ZV9ncm91cC1pY29uLXN0eWxlLC5hZl9zZWxlY3RNYW55Q2hlY2tib3hfZ3JvdXAtaWNvbi1zdHlsZSwuYWZfc2VsZWN0TWFueUxpc3Rib3hfZ3JvdXAtaWNvbi1zdHlsZSwuYWZfc2VsZWN0T25lQ2hvaWNlX2dyb3VwLWljb24tc3R5bGUsLmFmX3NlbGVjdE9uZUxpc3Rib3hfZ3JvdXAtaWNvbi1zdHlsZSwuYWZfc2VsZWN0T25lUmFkaW9fZ3JvdXAtaWNvbi1zdHlsZSwuYWZfbWVudUxpc3QsLmFmX25hdmlnYXRpb25QYW5lX2Nob2ljZS1sYWJlbCwuYWZfbmF2aWdhdGlvblBhbmVfY2hvaWNlLW9wdGlvbnMsLmFmX25hdmlnYXRpb25QYW5lX2Nob2ljZS1idXR0b24sLmFmX2JyZWFkQ3J1bWJzLC5hZl9zZWxlY3RNYW55U2h1dHRsZV9ib3gtY29udGVudCwuYWZfc2VsZWN0T3JkZXJTaHV0dGxlX2JveC1jb250ZW50LC5hZl9tZW51VGFicywuYWZfY29tbWFuZEJ1dHRvbiwuYWZfZ29CdXR0b24sLmFmX3Jlc2V0QnV0dG9uLC5wX09yYURpc2FibGVkLC5PcmFOYXYzLC5wX09yYVRyZWVSb3csLnBvcnRsZXQtZm9ybS1idXR0b24ge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWx9CisuYWZfb3V0cHV0RG9jdW1lbnRfdGl0bGUsLkFGSGVhZGVyTGV2ZWxPbmUsSDEuYWZfcGFuZWxIZWFkZXIsSDEuYWZfc2hvd0RldGFpbEhlYWRlciwuUG9ydGxldEhlYWRlclRleHQsLlBvcnRsZXRIZWFkaW5nMSwuUG9ydGxldFN1YkhlYWRlclRleHQsLnBvcnRsZXQtc2VjdGlvbi1oZWFkZXIsLnBvcnRsZXQtc2VjdGlvbi1zdWJoZWFkZXIsLnBvcnRsZXQtdGFibGUtaGVhZGVyLC5wb3J0bGV0LXRhYmxlLXN1YmhlYWRlciB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B0O2NvbG9yOiM2Njk5NjY7Zm9udC13ZWlnaHQ6Ym9sZDtwYWRkaW5nOjBweDttYXJnaW46MHB4fQorLmFmX291dHB1dERvY3VtZW50X3BhcmFncmFwaCB7dGV4dC1hbGlnbjpqdXN0aWZ5O3BhZGRpbmc6MHB4O21hcmdpbjowcHh9CisuYWZfb3V0cHV0RG9jdW1lbnRfc2VwYXJhdG9yIHt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjBweDttYXJnaW46MHB4fQorLmFmX3BhbmVsVGlwLC5PcmFQYWdlU3RhbXBUZXh0LC5hZl9zaW5nbGVTdGVwQnV0dG9uQmFyX2xhYmVsLC5PcmFOYXZCYXJWaWV3T25seSB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojNjY5OTY2fQorLmFmX3BhbmVsVGlwX2xhYmVsIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6Ym9sZH0KKy5hZl9wYW5lbEFjY29yZGlvbl90b29sYmFyLC5wX09yYUNvbnRlbnRGb290ZXJDaGlsZHJlbiB7ZmxvYXQ6cmlnaHR9CisuYWZfZGlhbG9nX2NvbnRhaW5lciwuYWZfcGFuZWxQb3B1cF9jb250YWluZXIge2JvcmRlci1jb2xvcjojMzM2NjMzO2JvcmRlcjoxcHggc29saWQ7YmFja2dyb3VuZC1jb2xvcjp3aGl0ZX0KKy5hZl9kaWFsb2dfdGl0bGUtYmFyLC5hZl9wYW5lbFBvcHVwX3RpdGxlLWJhciB7YmFja2dyb3VuZC1jb2xvcjojQ0NDQ0NDO2JvcmRlci1jb2xvcjojMzM2NjMzO2JvcmRlci1ib3R0b206MXB4IHNvbGlkO3BhZGRpbmc6MnB4IDJweCAycHggMnB4fQorLmFmX2RpYWxvZ190aXRsZS10ZXh0LC5hZl9wYW5lbFBvcHVwX3RpdGxlLXRleHQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTFwdDtmb250LXdlaWdodDpub3JtYWw7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbn0KKy5hZl9kaWFsb2dfY2xvc2UtaWNvbiB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMXB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDttYXJnaW4tbGVmdDo1cHg7YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL2Nsb3NlLmdpZik7YmFja2dyb3VuZC1wb3NpdGlvbjpjZW50ZXI7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2hlaWdodDoxM3B4O3dpZHRoOjEzcHh9CisuYWZfZGlhbG9nX2NvbnRlbnQsLmFmX3BhbmVsUG9wdXBfY29udGVudCB7YmFja2dyb3VuZC1jb2xvcjojZTllOGU4O2JvcmRlcjowcHh9CisuYWZfaW5wdXRDaG9pY2UucF9BRkRpc2FibGVkIC5hZl9pbnB1dENob2ljZV9sYWJlbCwuYWZfaW5wdXROdW1iZXJTcGluYm94LnBfQUZEaXNhYmxlZCAuYWZfaW5wdXROdW1iZXJTcGluYm94X2xhYmVsLC5hZl9pbnB1dFRleHQucF9BRkRpc2FibGVkIC5hZl9pbnB1dFRleHRfbGFiZWwsLmFmX3NlbGVjdEJvb2xlYW5DaGVja2JveC5wX0FGRGlzYWJsZWQgLmFmX3NlbGVjdEJvb2xlYW5DaGVja2JveF9sYWJlbCwuYWZfc2VsZWN0Qm9vbGVhblJhZGlvLnBfQUZEaXNhYmxlZCAuYWZfc2VsZWN0Qm9vbGVhblJhZGlvX2xhYmVsLC5hZl9pbnB1dENvbG9yLnBfQUZEaXNhYmxlZCAuYWZfaW5wdXRDb2xvcl9sYWJlbCwuYWZfaW5wdXREYXRlLnBfQUZEaXNhYmxlZCAuYWZfaW5wdXREYXRlX2xhYmVsLC5hZl9pbnB1dExpc3RPZlZhbHVlcy5wX0FGRGlzYWJsZWQgLmFmX2lucHV0TGlzdE9mVmFsdWVzX2xhYmVsLC5hZl9zZWxlY3RNYW55Q2hlY2tib3gucF9BRkRpc2FibGVkIC5hZl9zZWxlY3RNYW55Q2hlY2tib3hfbGFiZWwsLmFmX3NlbGVjdE1hbnlMaXN0Ym94LnBfQUZEaXNhYmxlZCAuYWZfc2VsZWN0TWFueUxpc3Rib3hfbGFiZWwsLmFmX3NlbGVjdE9uZUNob2ljZS5wX0FGRGlzYWJsZWQgLmFmX3NlbGVjdE9uZUNob2ljZV9sYWJlbCwuYWZfc2VsZWN0T25lTGlzdGJveC5wX0FGRGlzYWJsZWQgLmFmX3NlbGVjdE9uZUxpc3Rib3hfbGFiZWwsLmFmX3NlbGVjdE9uZVJhZGlvLnBfQUZEaXNhYmxlZCAuYWZfc2VsZWN0T25lUmFkaW9fbGFiZWwsLmFmX25hdmlnYXRpb25QYW5lX2Jhci1pbmFjdGl2ZS1lbmFibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItY29udGVudCwuYWZfbmF2aWdhdGlvblBhbmVfYmFyLWFjdGl2ZS1lbmFibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItY29udGVudCBhLC5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItaW5hY3RpdmUtZW5hYmxlZCAuYWZfbmF2aWdhdGlvblBhbmVfYmFyLWNvbnRlbnQgYSwuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1pbmFjdGl2ZSAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1taWQgQSB7Y29sb3I6IzAwMDAwMH0KKy5hZl9pbnB1dE51bWJlclNwaW5ib3hfaW5jcmVtZW50LWNlbGwsLmFmX2lucHV0TnVtYmVyU3BpbmJveF9kZWNyZW1lbnQtY2VsbCB7YmFja2dyb3VuZC1jb2xvcjojZTllOGU4O2JvcmRlci1jb2xvcjojOTk5OTk5O2JvcmRlci13aWR0aDoxcHg7Ym9yZGVyLXN0eWxlOnNvbGlkO3dpZHRoOjExcHg7aGVpZ2h0OjhweH0KKy5hZl9pbnB1dE51bWJlclNwaW5ib3hfc3BpbmJveC1jZWxsIHtwYWRkaW5nLWxlZnQ6MXB4fQorLmFmX21lbnVMaXN0X3NlbGVjdGVkLC5PcmFOYXYzU2VsZWN0ZWQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpib2xkO2JhY2tncm91bmQtY29sb3I6I2NjZmZjY30KKy5hZl9tZW51Q2hvaWNlX2xhYmVsLC5wb3J0bGV0LWZvbnQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6OHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbH0KK0JPRFksLnBvcnRsZXQtc2VjdGlvbi1ib2R5LC5wb3J0bGV0LXRhYmxlLWJvZHkge2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWZ9CisuYWZfdHJlZVRhYmxlX3BhdGgtc3RlcCwuYWZfbWVudVBhdGhfc3RlcCwuYWZfbWVudVBhdGhfc2VsZWN0ZWQtc3RlcCB7Y29sb3I6IzAwMzMzMztmb250LXNpemU6OXB0fQorLmFmX3RyZWVUYWJsZV9wYXRoLXNlbGVjdGVkLXN0ZXAge2ZvbnQtc2l6ZTo5cHQ7Y29sb3I6IzAwMDAwMH0KKy5hZl9wYW5lbExpc3QgVUwge21hcmdpbi10b3A6NHB4O21hcmdpbi1ib3R0b206NHB4fQorYnV0dG9uIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2JhY2tncm91bmQtY29sb3I6I2U5ZThlODtwYWRkaW5nOjBweDttYXJnaW46MXB4fQorLmFmX2lucHV0Q29sb3Jfc3dhdGNoLW92ZXJsYXkge3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6LTdweDt0b3A6NXB4fQorLmFmX25hdmlnYXRpb25QYW5lX2JhciB7YmFja2dyb3VuZC1jb2xvcjojRUZFRkVGO3BhZGRpbmctbGVmdDo2cHg7cGFkZGluZy1yaWdodDo2cHh9CisuYWZfbmF2aWdhdGlvblBhbmVfYmFyLWFjdGl2ZS1kaXNhYmxlZCwuYWZfbmF2aWdhdGlvblBhbmVfYmFyLWluYWN0aXZlLWRpc2FibGVkLC5hZl9uYXZpZ2F0aW9uUGFuZV9idXR0b25zLWFjdGl2ZS1kaXNhYmxlZCwuYWZfbmF2aWdhdGlvblBhbmVfYnV0dG9ucy1pbmFjdGl2ZS1kaXNhYmxlZCwuYWZfbmF2aWdhdGlvblBhbmVfbGlzdC1hY3RpdmUtZGlzYWJsZWQsLmFmX25hdmlnYXRpb25QYW5lX2xpc3QtaW5hY3RpdmUtZGlzYWJsZWQge2N1cnNvcjpkZWZhdWx0fQorLmFmX25hdmlnYXRpb25QYW5lX2Jhci1hY3RpdmUtZW5hYmxlZCwuYWZfbmF2aWdhdGlvblBhbmVfYmFyLWluYWN0aXZlLWVuYWJsZWQsLmFmX25hdmlnYXRpb25QYW5lX2J1dHRvbnMtYWN0aXZlLWVuYWJsZWQsLmFmX25hdmlnYXRpb25QYW5lX2J1dHRvbnMtaW5hY3RpdmUtZW5hYmxlZCwuYWZfbmF2aWdhdGlvblBhbmVfbGlzdC1hY3RpdmUtZW5hYmxlZCwuYWZfbmF2aWdhdGlvblBhbmVfbGlzdC1pbmFjdGl2ZS1lbmFibGVkLC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWFjdGl2ZSwuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1pbmFjdGl2ZSB7Y3Vyc29yOnBvaW50ZXJ9CisuYWZfbmF2aWdhdGlvblBhbmVfYmFyLWFjdGl2ZS1lbmFibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItY29udGVudCB7Y29sb3I6IzAwMDAwMDtmb250LXdlaWdodDpib2xkfQorLmFmX25hdmlnYXRpb25QYW5lX2Jhci1hY3RpdmUtZW5hYmxlZCAuYWZfbmF2aWdhdGlvblBhbmVfYmFyLWNvbnRlbnQgYTpob3ZlciwuYWZfbmF2aWdhdGlvblBhbmVfYmFyLWluYWN0aXZlLWVuYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX2Jhci1jb250ZW50IGE6aG92ZXIsLmFmX25hdmlnYXRpb25QYW5lX2J1dHRvbnMtYWN0aXZlLWVuYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX2J1dHRvbnMtY29udGVudCBhOmhvdmVyLC5hZl9uYXZpZ2F0aW9uUGFuZV9idXR0b25zLWluYWN0aXZlLWVuYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX2J1dHRvbnMtY29udGVudCBhOmhvdmVyLC5hZl9uYXZpZ2F0aW9uUGFuZV9saXN0LWFjdGl2ZS1lbmFibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV9saXN0LWNvbnRlbnQgYTpob3ZlciwuYWZfbmF2aWdhdGlvblBhbmVfbGlzdC1pbmFjdGl2ZS1lbmFibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV9saXN0LWNvbnRlbnQgYTpob3ZlciwuQUZBY2Nlc3NLZXlTdHlsZSB7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0KKy5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItYWN0aXZlLWRpc2FibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItY29udGVudCwuYWZfbmF2aWdhdGlvblBhbmVfYnV0dG9ucy1hY3RpdmUtZGlzYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX2J1dHRvbnMtY29udGVudCwuYWZfbmF2aWdhdGlvblBhbmVfbGlzdC1hY3RpdmUtZGlzYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX2xpc3QtY29udGVudCB7Y29sb3I6Z3JheTtmb250LXdlaWdodDpib2xkfQorLmFmX25hdmlnYXRpb25QYW5lX2Jhci1pbmFjdGl2ZS1kaXNhYmxlZCAuYWZfbmF2aWdhdGlvblBhbmVfYmFyLWNvbnRlbnQsLmFmX25hdmlnYXRpb25QYW5lX2Jhci1hY3RpdmUtZGlzYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX2Jhci1jb250ZW50IGEsLmFmX25hdmlnYXRpb25QYW5lX2Jhci1pbmFjdGl2ZS1kaXNhYmxlZCAuYWZfbmF2aWdhdGlvblBhbmVfYmFyLWNvbnRlbnQgYSwuYWZfbmF2aWdhdGlvblBhbmVfYnV0dG9ucy1pbmFjdGl2ZS1kaXNhYmxlZCAuYWZfbmF2aWdhdGlvblBhbmVfYnV0dG9ucy1jb250ZW50LC5hZl9uYXZpZ2F0aW9uUGFuZV9idXR0b25zLWFjdGl2ZS1kaXNhYmxlZCAuYWZfbmF2aWdhdGlvblBhbmVfYnV0dG9ucy1jb250ZW50IGEsLmFmX25hdmlnYXRpb25QYW5lX2J1dHRvbnMtaW5hY3RpdmUtZGlzYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX2J1dHRvbnMtY29udGVudCBhLC5hZl9uYXZpZ2F0aW9uUGFuZV9saXN0LWluYWN0aXZlLWRpc2FibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV9saXN0LWNvbnRlbnQsLmFmX25hdmlnYXRpb25QYW5lX2xpc3QtYWN0aXZlLWRpc2FibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV9saXN0LWNvbnRlbnQgYSwuYWZfbmF2aWdhdGlvblBhbmVfbGlzdC1pbmFjdGl2ZS1kaXNhYmxlZCAuYWZfbmF2aWdhdGlvblBhbmVfbGlzdC1jb250ZW50IGEsLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYWN0aXZlLnBfQUZEaXNhYmxlZCAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1taWQsLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtaW5hY3RpdmUucF9BRkRpc2FibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLW1pZCB7Y29sb3I6Z3JheX0KKy5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItY29udGVudCwuYWZfbmF2aWdhdGlvblBhbmVfYnV0dG9ucy1jb250ZW50LC5hZl9uYXZpZ2F0aW9uUGFuZV9saXN0LWNvbnRlbnQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7cGFkZGluZy10b3A6M3B4O3BhZGRpbmctYm90dG9tOjNweH0KKy5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItY29udGVudCBhLC5hZl9uYXZpZ2F0aW9uUGFuZV9idXR0b25zLWNvbnRlbnQgYSwuYWZfbmF2aWdhdGlvblBhbmVfbGlzdC1jb250ZW50IGEge3RleHQtZGVjb3JhdGlvbjpub25lfQorLmFmX25hdmlnYXRpb25QYW5lX2Jhci1zZXBhcmF0b3Ige2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7cGFkZGluZy1sZWZ0OjZweDtwYWRkaW5nLXJpZ2h0OjZweDtjb2xvcjpncmF5fQorLmFmX25hdmlnYXRpb25QYW5lX2J1dHRvbnMtYWN0aXZlLWVuYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX2J1dHRvbnMtY29udGVudCwuYWZfbmF2aWdhdGlvblBhbmVfbGlzdC1hY3RpdmUtZW5hYmxlZCAuYWZfbmF2aWdhdGlvblBhbmVfbGlzdC1jb250ZW50LC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWFjdGl2ZSAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1taWQgQSwuQUZMaW5rQWNjZXNzS2V5U3R5bGUsLmFmX2lucHV0RGF0ZV9zZWxlY3RlZCwuYWZfY2hvb3NlRGF0ZV9zZWxlY3RlZCB7Zm9udC13ZWlnaHQ6Ym9sZH0KKy5hZl9uYXZpZ2F0aW9uUGFuZV9idXR0b25zLXNlcGFyYXRvciB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtwYWRkaW5nLWxlZnQ6NnB4O3BhZGRpbmctcmlnaHQ6NnB4fQorLmFmX25hdmlnYXRpb25QYW5lX2xpc3QtYnVsbGV0IHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDoxN3B4O2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy9saXN0LWJ1bGxldC5naWYpO2JhY2tncm91bmQtcG9zaXRpb246Y2VudGVyO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdH0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzIHtoZWlnaHQ6MjZweDtvdmVyZmxvdzpoaWRkZW59CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1hY3RpdmUucF9BRkRpc2FibGVkLC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWluYWN0aXZlLnBfQUZEaXNhYmxlZCB7Y3Vyc29yOmRlZmF1bHQ7Y29sb3I6Z3JheX0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLXN0YXJ0LC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLXN0YXJ0LWpvaW4ge2hlaWdodDoyMnB4O3dpZHRoOjI2cHg7YmFja2dyb3VuZC1wb3NpdGlvbjp0b3AgcmlnaHR9CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1zdGFydC1qb2luLWZyb20tYWN0aXZlLC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLXN0YXJ0LWpvaW4tZnJvbS1pbmFjdGl2ZSB7aGVpZ2h0OjIycHg7d2lkdGg6MTRweDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXR9CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1taWQge2hlaWdodDoyMnB4O2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6IzAwMDAwMDtwYWRkaW5nLWxlZnQ6M3B4O3doaXRlLXNwYWNlOm5vd3JhcH0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWVuZC1qb2luLXRvLWluYWN0aXZlIHtoZWlnaHQ6MjJweDt3aWR0aDoxMnB4O2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdH0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWVuZCB7aGVpZ2h0OjIycHg7d2lkdGg6MTVweH0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWJvdHRvbS1zdGFydCwuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1ib3R0b20tbWlkLC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWJvdHRvbS1lbmQge2hlaWdodDo0cHg7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1ib3R0b20tc3RhcnQtY29udGVudCB7aGVpZ2h0OjRweDt3aWR0aDoxN3B4O2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdH0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWJvdHRvbS1taWQtY29udGVudCB7aGVpZ2h0OjRweH0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWJvdHRvbS1lbmQtY29udGVudCB7aGVpZ2h0OjRweDt3aWR0aDoxMDAlO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdH0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLW1pZCBBIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiMwMDAwMDA7dGV4dC1kZWNvcmF0aW9uOm5vbmV9CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1ib3R0b20tZW5kLWpvaW4ge2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYWN0aXZlIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLXN0YXJ0IHtiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvdGFiMy1zdGFydC1zZWxlY3RlZC5naWYpfQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYWN0aXZlIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLXN0YXJ0LWpvaW4ge2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy90YWIzLXN0YXJ0LWpvaW4tc2VsZWN0ZWQuZ2lmKX0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWFjdGl2ZSAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1ib3R0b20tc3RhcnQsLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYWN0aXZlIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWJvdHRvbS1taWQsLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYWN0aXZlIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWJvdHRvbS1lbmQge2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy90YWIzLWJvdC1taWQtc2VsZWN0ZWQuZ2lmKX0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWFjdGl2ZSAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1ib3R0b20tc3RhcnQtY29udGVudCB7YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL3RhYjMtYm90LXN0YXJ0LXNlbGVjdGVkLmdpZil9CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1hY3RpdmUgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtbWlkIHtiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvdGFiMy1taWQtc2VsZWN0ZWQuZ2lmKTtmb250LXdlaWdodDpib2xkfQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYWN0aXZlIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWVuZC1qb2luLXRvLWluYWN0aXZlIHtiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvdGFiMy1lbmQtam9pbi1zZWxlY3RlZC10by1kZXNlbGVjdGVkLmdpZil9CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1hY3RpdmUgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtZW5kIHtiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvdGFiMy1lbmQtc2VsZWN0ZWQuZ2lmKX0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWFjdGl2ZSAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1ib3R0b20tZW5kLWpvaW4sLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtaW5hY3RpdmUgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYm90dG9tLXN0YXJ0LC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWluYWN0aXZlIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWJvdHRvbS1taWQsLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtaW5hY3RpdmUgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYm90dG9tLWVuZCwuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1pbmFjdGl2ZSAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1ib3R0b20tZW5kLWpvaW4ge2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy90YWIzLWJvdC1kZXNlbGVjdGVkLmdpZil9CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1hY3RpdmUgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYm90dG9tLWVuZC1jb250ZW50IHtiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvdGFiMy1ib3QtZW5kLXNlbGVjdGVkLmdpZil9CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1pbmFjdGl2ZSAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1zdGFydCB7YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL3RhYjMtc3RhcnQtZGVzZWxlY3RlZC5naWYpfQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtaW5hY3RpdmUgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYm90dG9tLXN0YXJ0LWNvbnRlbnQsLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtaW5hY3RpdmUgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYm90dG9tLWVuZC1jb250ZW50IHtiYWNrZ3JvdW5kLWltYWdlOm5vbmV9CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1pbmFjdGl2ZSAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1zdGFydC1qb2luLWZyb20tYWN0aXZlIHtiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvdGFiMy1zdGFydC1qb2luLXNlbGVjdGVkLXRvLWRlc2VsZWN0ZWQuZ2lmKX0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWluYWN0aXZlIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLXN0YXJ0LWpvaW4tZnJvbS1pbmFjdGl2ZSB7YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL3RhYjMtc3RhcnQtam9pbi1kZXNlbGVjdGVkLXRvLWRlc2VsZWN0ZWQuZ2lmKX0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWluYWN0aXZlIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLW1pZCB7Y29sb3I6IzAwMDAwMDtiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvdGFiMy1taWQtZGVzZWxlY3RlZC5naWYpfQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtaW5hY3RpdmUgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtZW5kLWpvaW4tdG8taW5hY3RpdmUge2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy90YWIzLWVuZC1qb2luLWRlc2VsZWN0ZWQtdG8tZGVzZWxlY3RlZC5naWYpfQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtaW5hY3RpdmUgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtZW5kIHtiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvdGFiMy1lbmQtZGVzZWxlY3RlZC5naWYpfQorLmFmX3BhbmVsRm9ybUxheW91dF9jb2x1bW4sLnBfT3JhVHJlZUljb24ge3ZlcnRpY2FsLWFsaWduOnRvcH0KKy5hZl9wYW5lbEZvcm1MYXlvdXRfc2VwYXJhdG9yIHtiYWNrZ3JvdW5kLWNvbG9yOmdyYXk7aGVpZ2h0OjFweDtmb250LXNpemU6MXB4O21hcmdpbi10b3A6M3B4O21hcmdpbi1ib3R0b206M3B4fQorLmFmX3BhbmVsRm9ybUxheW91dF9jZWxsLC5hZl9wYW5lbEZvcm1MYXlvdXRfY29udGVudC1jZWxsLC5hZl9wYW5lbEZvcm1MYXlvdXRfbWVzc2FnZS1jZWxsIHtwYWRkaW5nOjFweCAwcHh9CisuYWZfcGFuZWxGb3JtTGF5b3V0X2xhYmVsLXN0YWNrZWQtY2VsbCB7cGFkZGluZzoxcHggMHB4O3RleHQtYWxpZ246bGVmdH0KKy5hZl9wYW5lbEJveF90cmFuc3BhcmVudCwuYWZfcGFuZWxCb3hfbGlnaHQsLmFmX3BhbmVsQm94X21lZGl1bSB7Ym9yZGVyLWNvbG9yOiM5OWNjOTk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDoxcHg7bWFyZ2luOjJweH0KKy5hZl9wYW5lbEJveF9kYXJrIHtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjFweDttYXJnaW46MnB4O2JvcmRlci1jb2xvcjojNjY5OTY2fQorLmFmX3BhbmVsQm94X3RyYW5zcGFyZW50IGltZywuYWZfcGFuZWxCb3hfbGlnaHQgaW1nLC5hZl9wYW5lbEJveF9tZWRpdW0gaW1nLC5hZl9wYW5lbEJveF9kYXJrIGltZywuYWZfc2VsZWN0TWFueVNodXR0bGVfYm94LWNvbnRlbnQgaW1nLC5hZl9zZWxlY3RPcmRlclNodXR0bGVfYm94LWNvbnRlbnQgaW1nLC5hZl9tZW51QmFyIGltZywuYWZfbWVzc2FnZXMgaW1nLC5hZl9tZW51VGFicyBpbWcge3ZlcnRpY2FsLWFsaWduOmJvdHRvbX0KKy5hZl9wYW5lbEJveF9ib2R5IHtwYWRkaW5nOjVweDtoZWlnaHQ6MjBweH0KKy5hZl9wYW5lbEJveF9saWdodCAuYWZfcGFuZWxCb3hfYm9keSwuYWZfc2VsZWN0TWFueVNodXR0bGVfYm94LWNvbnRlbnQgLmFmX3NlbGVjdE1hbnlTaHV0dGxlX2JveC1ib2R5LC5hZl9zZWxlY3RPcmRlclNodXR0bGVfYm94LWNvbnRlbnQgLmFmX3NlbGVjdE9yZGVyU2h1dHRsZV9ib3gtYm9keSwuYWZfcGFuZWxTaWRlQmFyX2JvZHksLk9yYUJHQWNjZW50TGlnaHQsLlBvcnRsZXRCb2R5Q29sb3IsLlBvcnRsZXRTdWJIZWFkZXJDb2xvciwuYWZfbWVzc2FnZXNfYm9keSB7YmFja2dyb3VuZC1jb2xvcjojZTllOGU4fQorLmFmX3BhbmVsQm94X21lZGl1bSAuYWZfcGFuZWxCb3hfYm9keSwuT3JhQkdBY2NlbnRNZWRpdW0ge2JhY2tncm91bmQtY29sb3I6I2ZmZmZjY30KKy5hZl9wYW5lbEJveF9kYXJrIC5hZl9wYW5lbEJveF9ib2R5LC5PcmFCR0FjY2VudERhcmsge2JhY2tncm91bmQtY29sb3I6I0NDQ0NDQ30KKy5hZl9wYW5lbEJveF9oZWFkZXIsLlBvcnRsZXRIZWFkZXJDb2xvciB7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjExcHQ7cGFkZGluZzowcHggM3B4O2ZvbnQtd2VpZ2h0OmJvbGR9CisuYWZfcGFuZWxCb3hfbGlnaHQgLmFmX3BhbmVsQm94X2hlYWRlciB7YmFja2dyb3VuZC1jb2xvcjojOTljYzk5O2NvbG9yOiNmZmZmZmZ9CisuYWZfcGFuZWxQYWdlX2NvcHlyaWdodCwuYWZfcGFuZWxQYWdlX3ByaXZhY3ksLmFmX3BhbmVsUGFnZV9hYm91dCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZTo4cHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiMwMDAwMDA7d2hpdGUtc3BhY2U6bm93cmFwO3BhZGRpbmc6NXB4fQorLmFmX3BhbmVsUGFnZV9jb3B5cmlnaHQgQSwuYWZfcGFuZWxQYWdlX3ByaXZhY3kgQSwuYWZfcGFuZWxQYWdlX2Fib3V0IEEsLmFmX3RyYWluX2xpbmssLmFmX3BhbmVsVGFiYmVkX3RhYiBBLC5wX09yYVRyZWVSb3cgQTpsaW5rLC5wX09yYVRyZWVSb3cgQTphY3RpdmUsLnBfT3JhVHJlZVJvdyBBOnZpc2l0ZWQge2NvbG9yOiMwMDMzMzN9CisuYWZfcGFuZWxDYXB0aW9uR3JvdXAge2JvcmRlci1jb2xvcjojZTllOGU4fQorLmFmX3BhbmVsQ2FwdGlvbkdyb3VwX2NhcHRpb24sLk9yYVBhZ2VTdGFtcExhYmVsLC5PcmFUYWJsZUNvbnRyb2xCYXJUZXh0LC5wX09yYVRyZWVSb3dTZWxlY3RlZCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6IzY2OTk2Nn0KKy5hZl9wYW5lbFBvcHVwX3RyaWdnZXIge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6IzAwMzMzMzt0ZXh0LWRlY29yYXRpb246bm9uZTt3aGl0ZS1zcGFjZTpub3dyYXB9CisuYWZfcGFuZWxQb3B1cF9jbG9zZS1pY29uIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjExcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO3RleHQtYWxpZ246cmlnaHQ7cGFkZGluZy1sZWZ0OjVweH0KKy5hZl9tZW51QnV0dG9uc190ZXh0IHtjb2xvcjojMDAzMzMzO2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7cGFkZGluZzowcHggMnB4IDJweCAycHh9CisuYWZfbWVudUJ1dHRvbnNfdGV4dC1zZWxlY3RlZCB7Y29sb3I6IzY2OTk2Njtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO3BhZGRpbmc6MHB4IDJweCAycHggMnB4fQorLmFmX21lbnVCdXR0b25zX3RleHQtZGlzYWJsZWQge2NvbG9yOiM5OTk5OTk7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtwYWRkaW5nOjBweCAycHggMnB4IDJweH0KKy5hZl9tZW51QmFyIHtiYWNrZ3JvdW5kLWNvbG9yOiM2Njk5NjY7Y29sb3I6I2ZmZmZmZjtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO21pbi1oZWlnaHQ6NHB4O3BhZGRpbmc6MHB4fQorLmFmX21lbnVCYXJfZW5hYmxlZCwuYWZfbWVudUJhcl9zZWxlY3RlZCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtwYWRkaW5nOjBweCAwcHggMHB4IDVweDt3aGl0ZS1zcGFjZTpub3dyYXB9CisuYWZfbWVudUJhcl9lbmFibGVkIEEsLmFmX21lbnVCYXJfc2VsZWN0ZWQgQSwuUG9ydGxldEhlYWRlckxpbmssLlBvcnRsZXRTdWJIZWFkZXJMaW5rIHtjb2xvcjojZmZmZmZmO3RleHQtZGVjb3JhdGlvbjpub25lfQorLmFmX21lbnVCYXJfc2VwYXJhdG9yIHtjb2xvcjojZmZmZmZmO2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWx9CisuYWZfdHJlZVRhYmxlX2V4cGFuc2lvbiB7Y29sb3I6IzY2OTk2Njtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MHB4O2xlZnQ6LTE4cHg7dGV4dC1kZWNvcmF0aW9uOm5vbmV9CisuYWZfdHJlZVRhYmxlX2ZvY3VzIHtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6IzY2OTk2Njtmb250LWZhbWlseTptb25vc3BhY2U7dGV4dC1kZWNvcmF0aW9uOm5vbmV9CisuYWZfdHJlZVRhYmxlX2xvY2F0b3Ige2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojOTk5OTk5O2ZvbnQtZmFtaWx5Om1vbm9zcGFjZX0KKy5hZl9zaG93T25lUGFuZWxfY29udGFpbmVyIHtib3JkZXItY29sb3I6Izk5OTk5OTtib3JkZXItd2lkdGg6MHB4IDFweCAxcHggMXB4O2JvcmRlci1zdHlsZTpzb2xpZH0KKy5hZl9zaG93T25lUGFuZWxfaGVhZGVyLWNvbGxhcHNlZCB7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7aGVpZ2h0OjIxcHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7d2hpdGUtc3BhY2U6bm93cmFwO3BhZGRpbmctcmlnaHQ6NXB4O2JvcmRlci13aWR0aDoxcHggMHB4IDBweCAwcHg7Ym9yZGVyLXN0eWxlOnNvbGlkO2N1cnNvcjpwb2ludGVyO3BhZGRpbmctbGVmdDo1cHh9CisuYWZfc2hvd09uZVBhbmVsX2hlYWRlci1leHBhbmRlZCB7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7aGVpZ2h0OjIxcHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7d2hpdGUtc3BhY2U6bm93cmFwO3BhZGRpbmctcmlnaHQ6NXB4O2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MXB4IDBweCAxcHggMHB4O3BhZGRpbmctbGVmdDoycHh9CisuYWZfc2hvd09uZVBhbmVsX2hlYWRlci1kaXNhYmxlZCB7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7aGVpZ2h0OjIxcHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7d2hpdGUtc3BhY2U6bm93cmFwO3BhZGRpbmctcmlnaHQ6NXB4O2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MXB4IDBweCAwcHggMHB4O3BhZGRpbmctbGVmdDoxOHB4fQorLmFmX3Nob3dPbmVQYW5lbF9jb250ZW50IHt2ZXJ0aWNhbC1hbGlnbjp0b3A7bWFyZ2luOjVweH0KKy5hZl9zaG93T25lUGFuZWxfdGl0bGUtbGluayB7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjojNjY5OTY2O2Rpc3BsYXk6YmxvY2s7cGFkZGluZy10b3A6MnB4O3RleHQtZGVjb3JhdGlvbjpub25lO2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpib2xkfQorLmFmX3Nob3dPbmVQYW5lbF90aXRsZS1kaXNhYmxlZC1saW5rIHtjb2xvcjojOTk5OTk5O2Rpc3BsYXk6YmxvY2s7cGFkZGluZy10b3A6MnB4O3RleHQtZGVjb3JhdGlvbjpub25lO2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpib2xkfQorLkFGSGVhZGVyTGV2ZWxUd28sSDIuYWZfcGFuZWxIZWFkZXIsSDIuYWZfc2hvd0RldGFpbEhlYWRlciwuUG9ydGxldEhlYWRpbmcyIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjExcHQ7Y29sb3I6IzY2OTk2Njtmb250LXdlaWdodDpib2xkO3BhZGRpbmc6MHB4O21hcmdpbjowcHh9CisuQUZIZWFkZXJMZXZlbFRocmVlUGx1cyxIMy5hZl9wYW5lbEhlYWRlcixINC5hZl9wYW5lbEhlYWRlcixINS5hZl9wYW5lbEhlYWRlcixINi5hZl9wYW5lbEhlYWRlcixIMy5hZl9zaG93RGV0YWlsSGVhZGVyLEg0LmFmX3Nob3dEZXRhaWxIZWFkZXIsSDUuYWZfc2hvd0RldGFpbEhlYWRlcixINi5hZl9zaG93RGV0YWlsSGVhZGVyLC5Qb3J0bGV0SGVhZGluZzMsLlBvcnRsZXRIZWFkaW5nNCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2NvbG9yOiM2Njk5NjY7Zm9udC13ZWlnaHQ6Ym9sZDtwYWRkaW5nOjBweDttYXJnaW46MHB4fQorLmFmX3BhbmVsSGVhZGVyX2Vycm9yLC5hZl9tZXNzYWdlc19lcnJvciwucG9ydGxldC1tc2ctZXJyb3Ige2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTNwdDtmb250LXdlaWdodDpib2xkO3BhZGRpbmc6MHB4O21hcmdpbjowcHg7Y29sb3I6I2NjMDAwMH0KKy5hZl9tZXNzYWdlc19oZWFkZXIge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTNwdDtjb2xvcjojNjY5OTY2O2ZvbnQtd2VpZ2h0OmJvbGQ7bWFyZ2luOjBweDtib3JkZXItY29sb3I6I0NDQ0NDQztib3JkZXItd2lkdGg6MHB4IDBweCAxcHggMHB4O2JvcmRlci1zdHlsZTpzb2xpZDt2ZXJ0aWNhbC1hbGlnbjpib3R0b207bWFyZ2luLWJvdHRvbTozcHg7cGFkZGluZzowcHggM3B4fQorLmFmX21lc3NhZ2VzIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiMzMzY2MzM7d2lkdGg6MTAwJTtib3JkZXItY29sb3I6Izk5OTk5OTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmY2M7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDoxcHg7cGFkZGluZzowcHg7bWFyZ2luOjVweCAwcHggMHB4fQorLmFmX21lc3NhZ2VzX21lc3NhZ2UtdGV4dCwuYWZfbWVzc2FnZXNfbGlzdCwucG9ydGxldC1tc2ctaW5mbyB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojNjY5OTY2O21hcmdpbjowcHggMHB4IDBweCAwcHg7cGFkZGluZzo1cHggMzBweCA1cHggMzBweH0KKy5hZl9wYW5lbFNpZGVCYXIge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6IzMzNjYzMztib3JkZXItY29sb3I6Izk5OTk5OTtib3JkZXItd2lkdGg6MHB4IDFweCAxcHg7Ym9yZGVyLXN0eWxlOnNvbGlkO3BhZGRpbmc6MHB4O21hcmdpbjowcHggNXB4IDBweCAwcHh9CisuQUZTb3J0YWJsZUhlYWRlclNvcnRJY29uIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjlwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6IzY2OTk2NjtwYWRkaW5nLWxlZnQ6NHB4O3RleHQtZGVjb3JhdGlvbjpub25lfQorLmFmX21lbnVUYWJzX2VuYWJsZWQge2JhY2tncm91bmQtY29sb3I6I2U5ZThlODt3aGl0ZS1zcGFjZTpub3dyYXA7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDoxcHggMXB4IDBweCAxcHg7cGFkZGluZzoycHggNnB4fQorLmFmX21lbnVUYWJzX3NlbGVjdGVkIHtiYWNrZ3JvdW5kLWNvbG9yOiM2Njk5NjY7d2hpdGUtc3BhY2U6bm93cmFwO2JvcmRlci1jb2xvcjojOTk5OTk5O2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MXB4IDFweCAwcHggMXB4O3BhZGRpbmc6MnB4IDZweH0KKy5hZl9tZW51VGFic19kaXNhYmxlZCB7YmFja2dyb3VuZC1jb2xvcjojZTllOGU4O2NvbG9yOiM5OTk5OTk7d2hpdGUtc3BhY2U6bm93cmFwO2JvcmRlci1jb2xvcjojOTk5OTk5O2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MXB4IDFweCAwcHggMXB4O3BhZGRpbmc6MnB4IDZweH0KKy5hZl9tZW51VGFic19lbmFibGVkIEEge3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMzMzY2MzN9CisuYWZfbWVudVRhYnNfc2VsZWN0ZWQgQSB7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6I2NjZmZjYztmb250LXdlaWdodDpib2xkfQorLmFmX21lbnVUYWJzX3NlcGFyYXRvciB7d2lkdGg6MHB4fQorLmFmX3RhYmxlX2NvbnRlbnQsLmFmX3RyZWVUYWJsZV9jb250ZW50IHtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDoxcHh9CisuYWZfdGFibGVfY29udHJvbC1iYXItdG9wLC5hZl90cmVlVGFibGVfY29udHJvbC1iYXItdG9wIHtiYWNrZ3JvdW5kLWNvbG9yOiNlOWU4ZTg7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDoxcHggMXB4IDBweDtwYWRkaW5nOjFweCAycHh9CisuYWZfdGFibGVfY29udHJvbC1iYXItYm90dG9tLC5hZl90cmVlVGFibGVfY29udHJvbC1iYXItYm90dG9tIHtiYWNrZ3JvdW5kLWNvbG9yOiNlOWU4ZTg7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDowcHggMXB4IDFweDtwYWRkaW5nOjFweCAycHh9CisuYWZfdGFibGVfc3ViLWNvbnRyb2wtYmFyLC5hZl90cmVlVGFibGVfc3ViLWNvbnRyb2wtYmFyIHtib3JkZXItY29sb3I6Izk5OTk5OTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjFweCAxcHggMHB4O3BhZGRpbmc6MXB4IDJweH0KKy5hZl9jb2x1bW5fY2VsbC10ZXh0LC5wb3J0bGV0LXNlY3Rpb24tc2VsZWN0ZWQsLnBvcnRsZXQtdGFibGUtc2VsZWN0ZWQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6IzAwMDAwMDt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTtiYWNrZ3JvdW5kLWNvbG9yOiNlOWU4ZTg7Ym9yZGVyLWNvbG9yOiM5OTk5OTl9CisuYWZfY29sdW1uX2NlbGwtdGV4dC1iYW5kLC5wb3J0bGV0LXNlY3Rpb24tYWx0ZXJuYXRlLC5wb3J0bGV0LXRhYmxlLWFsdGVybmF0ZSB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojMDAwMDAwO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjtib3JkZXItY29sb3I6Izk5OTk5OX0KKy5hZl9jb2x1bW5fY2VsbC1udW1iZXIge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6IzAwMDAwMDt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTtiYWNrZ3JvdW5kLWNvbG9yOiNlOWU4ZTg7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7dGV4dC1hbGlnbjpyaWdodDtwYWRkaW5nLXJpZ2h0OjJweH0KKy5hZl9jb2x1bW5fY2VsbC1udW1iZXItYmFuZCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojMDAwMDAwO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjtib3JkZXItY29sb3I6Izk5OTk5OTt0ZXh0LWFsaWduOnJpZ2h0O3BhZGRpbmctcmlnaHQ6MnB4fQorLmFmX2NvbHVtbl9jZWxsLWljb24tZm9ybWF0LC5hZl90YWJsZVNlbGVjdE9uZV9jZWxsLWljb24tZm9ybWF0LC5hZl90YWJsZVNlbGVjdE1hbnlfY2VsbC1pY29uLWZvcm1hdCwuT3JhVGFibGVDZWxsU2VsZWN0LC5wb3J0bGV0LXNlY3Rpb24tdGV4dCwucG9ydGxldC10YWJsZS10ZXh0IHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiMwMDAwMDA7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7YmFja2dyb3VuZC1jb2xvcjojZTllOGU4O2JvcmRlci1jb2xvcjojOTk5OTk5O3RleHQtYWxpZ246Y2VudGVyfQorLmFmX2NvbHVtbl9jZWxsLWljb24tZm9ybWF0LWJhbmQsLmFmX3RhYmxlU2VsZWN0T25lX2NlbGwtaWNvbi1mb3JtYXQtYmFuZCwuYWZfdGFibGVTZWxlY3RNYW55X2NlbGwtaWNvbi1mb3JtYXQtYmFuZCwuT3JhVGFibGVDZWxsU2VsZWN0QmFuZCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojMDAwMDAwO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjtib3JkZXItY29sb3I6Izk5OTk5OTt0ZXh0LWFsaWduOmNlbnRlcn0KKy5hZl9jb2x1bW5faGVhZGVyLXRleHQge2JvcmRlci1jb2xvcjojOTk5OTk5O2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpib2xkO3RleHQtYWxpZ246bGVmdDtiYWNrZ3JvdW5kLWNvbG9yOiNDQ0NDQ0M7Y29sb3I6IzY2OTk2Njt2ZXJ0aWNhbC1hbGlnbjpib3R0b219CisuYWZfY29sdW1uX2hlYWRlci1udW1iZXIge2JvcmRlci1jb2xvcjojOTk5OTk5O2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpib2xkO2JhY2tncm91bmQtY29sb3I6I0NDQ0NDQztjb2xvcjojNjY5OTY2O3ZlcnRpY2FsLWFsaWduOmJvdHRvbTt0ZXh0LWFsaWduOnJpZ2h0fQorLmFmX2NvbHVtbl9oZWFkZXItaWNvbi1mb3JtYXQge2JvcmRlci1jb2xvcjojOTk5OTk5O2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpib2xkO2JhY2tncm91bmQtY29sb3I6I0NDQ0NDQztjb2xvcjojNjY5OTY2O3ZlcnRpY2FsLWFsaWduOmJvdHRvbTt0ZXh0LWFsaWduOmNlbnRlcn0KKy5hZl9jb2x1bW5fcm93LWhlYWRlci10ZXh0IHtib3JkZXItY29sb3I6Izk5OTk5OTtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOnJpZ2h0O2JhY2tncm91bmQtY29sb3I6I0NDQ0NDQztjb2xvcjojNjY5OTY2fQorLmFmX3RhYmxlX2RldGFpbCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojMDAwMDAwO2JvcmRlci1jb2xvcjojOTk5OTk5O2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZn0KKy5hZl90YWJsZV9jb2x1bW4tZm9vdGVyLC5wb3J0bGV0LXNlY3Rpb24tZm9vdGVyLC5wb3J0bGV0LXRhYmxlLWZvb3RlciB7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGQ7dGV4dC1hbGlnbjpsZWZ0O2JhY2tncm91bmQtY29sb3I6I0NDQ0NDQztjb2xvcjojNjY5OTY2fQorLk9yYVRhYmxlVG90YWwge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpib2xkO3RleHQtYWxpZ246cmlnaHQ7YmFja2dyb3VuZC1jb2xvcjojQ0NDQ0NDO2NvbG9yOiM2Njk5NjZ9CisuYWZfY29sdW1uX3RvdGFsLW51bWJlciB7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGQ7dGV4dC1hbGlnbjpyaWdodDtiYWNrZ3JvdW5kLWNvbG9yOiNDQ0NDQ0M7Y29sb3I6IzAwMDAwMDt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX0KKy5hZl9jb2x1bW5fdG90YWwtdGV4dCB7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGQ7dGV4dC1hbGlnbjpsZWZ0O2JhY2tncm91bmQtY29sb3I6I0NDQ0NDQztjb2xvcjojMDAwMDAwO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfQorLmFmX2NvbHVtbl9zb3J0YWJsZS1oZWFkZXItdGV4dCB7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGQ7dGV4dC1hbGlnbjpsZWZ0O2JhY2tncm91bmQtY29sb3I6I0NDQ0NDQztjb2xvcjojNjY5OTY2O3ZlcnRpY2FsLWFsaWduOmJvdHRvbTtjdXJzb3I6cG9pbnRlcjtib3JkZXItd2lkdGg6MnB4O2JvcmRlci1zdHlsZTpvdXRzZXR9CisuYWZfY29sdW1uX3NvcnRhYmxlLWhlYWRlci1udW1iZXIge2JvcmRlci1jb2xvcjojOTk5OTk5O2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpib2xkO2JhY2tncm91bmQtY29sb3I6I0NDQ0NDQztjb2xvcjojNjY5OTY2O3ZlcnRpY2FsLWFsaWduOmJvdHRvbTtjdXJzb3I6cG9pbnRlcjtib3JkZXItd2lkdGg6MnB4O2JvcmRlci1zdHlsZTpvdXRzZXQ7dGV4dC1hbGlnbjpyaWdodH0KKy5hZl9jb2x1bW5fc29ydGFibGUtaGVhZGVyLWljb24tZm9ybWF0IHtib3JkZXItY29sb3I6Izk5OTk5OTtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6Ym9sZDtiYWNrZ3JvdW5kLWNvbG9yOiNDQ0NDQ0M7Y29sb3I6IzY2OTk2Njt2ZXJ0aWNhbC1hbGlnbjpib3R0b207Y3Vyc29yOnBvaW50ZXI7Ym9yZGVyLXdpZHRoOjJweDtib3JkZXItc3R5bGU6b3V0c2V0O3RleHQtYWxpZ246Y2VudGVyfQorLmFmX3RyYWluX3N0b3AtY29udGVudCwuYWZfdHJhaW5fb3ZlcmZsb3ctc3RhcnQtY29udGVudCwuYWZfdHJhaW5fb3ZlcmZsb3ctZW5kLWNvbnRlbnQsLmFmX3RyYWluX3BhcmVudC1zdGFydC1jb250ZW50LC5hZl90cmFpbl9wYXJlbnQtZW5kLWNvbnRlbnQge2JvcmRlci10b3Atc3R5bGU6c29saWQ7Ym9yZGVyLXRvcC13aWR0aDoycHg7fQorLmFmX3RyYWluX3N0b3AucF9BRlNlbGVjdGVkIHtjb2xvcjojNjY5OTY2O2ZvbnQtd2VpZ2h0OmJvbGQ7Ym9yZGVyLWNvbG9yOiM2Njk5NjZ9CisuYWZfdHJhaW5fc3RvcDp2aXNpdGVkLC5hZl90cmFpbl9zdG9wOnZpc2l0ZWQgLmFmX3RyYWluX2xpbmsge2NvbG9yOiM2NjY2NjZ9CisuYWZfdHJhaW5fc3RvcC5wX0FGRGlzYWJsZWQge2NvbG9yOiM5OTk5OTk7Ym9yZGVyLWNvbG9yOiNjY2NjY2N9CisuYWZfdHJhaW5fc3RvcC5wX0FGVW52aXNpdGVkIHtjb2xvcjojNjY5OTY2O2JvcmRlci1jb2xvcjojNjY5OTY2fQorLmFmX3RyYWluX3N0b3AucF9BRkRpc2FibGVkIC5hZl90cmFpbl9saW5rIHtjb2xvcjojNjY5OTk5fQorLk9yYUJHQ29sb3JWZXJ5RGFyayB7YmFja2dyb3VuZC1jb2xvcjojMzM2NjMzfQorLk9yYUJHQ29sb3JEYXJrLC5hZl9tZW51QmFyX2JvZHksLmFmX21lbnVCYXJfdGl0bGUsLmFmX21lbnVCYXJfZW1wdHkge2JhY2tncm91bmQtY29sb3I6IzY2OTk2Nn0KKy5PcmFCR0NvbG9yTWVkaXVtIHtiYWNrZ3JvdW5kLWNvbG9yOiM5OWNjOTl9CisuT3JhQkdDb2xvckxpZ2h0IHtiYWNrZ3JvdW5kLWNvbG9yOiNjY2ZmY2N9CisuT3JhQkdHcmF5VmVyeURhcmsge2JhY2tncm91bmQtY29sb3I6IzMzMzMzM30KKy5PcmFCR0dyYXlEYXJrIHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY2NjZ9CisuT3JhQkdHcmF5TWVkaXVtLC5PcmFCR0FjY2VudFZlcnlEYXJrLC5PcmFUYWJsZSB7YmFja2dyb3VuZC1jb2xvcjojOTk5OTk5fQorLk9yYUJHR3JheUxpZ2h0IHtiYWNrZ3JvdW5kLWNvbG9yOiNjY2NjY2N9CisuT3JhSW5saW5lSW5mb1RleHQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6OHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojNjY5OTY2fQorLk9yYVRleHRJbmxpbmUge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6OHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojOTljYzk5fQorLk9yYU1lc3NhZ2VCb3hFcnJvclRleHQsLkFGRXJyb3JUZXh0IHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiNjYzAwMDB9CisuT3JhRXJyb3JOYW1lVGV4dCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6I2NjMDAwMH0KKy5PcmFJbmxpbmVFcnJvclRleHQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6OHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojY2MwMDAwfQorLk9yYUdsb2JhbFBhZ2VUaXRsZSB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B0O2NvbG9yOiNmZmZmZmY7Zm9udC13ZWlnaHQ6Ym9sZH0KKy5wX09yYVNlbGVjdGVkIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6Ym9sZDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2ZmY2M7dGV4dC1kZWNvcmF0aW9uOm5vbmV9CisucF9PcmFIaWRkZW5MYWJlbCB7cG9zaXRpb246YWJzb2x1dGU7dG9wOi05OTlweDtsZWZ0OjBweDtmb250LXNpemU6MHB4fQorLnBfT3JhQ29sb3JGaWVsZFN3YXRjaCB7Ym9yZGVyLWNvbG9yOiMwMDAwMDA7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDoxcHh9CisucF9PcmFDb2xvclBhbGV0dGUge2JhY2tncm91bmQtY29sb3I6IzAwMDAwMH0KKy5wX09yYUNvbG9yUGFsZXR0ZUVtcHR5Q2VsbCB7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmfQorLmFmX2lucHV0RGF0ZV9uYXYgQSwuYWZfY2hvb3NlRGF0ZV9uYXYgQSB7Y29sb3I6IzAwMzMzMzt0ZXh0LWRlY29yYXRpb246bm9uZX0KKy5hZl9pbnB1dERhdGVfdGl0bGUsLmFmX2Nob29zZURhdGVfdGl0bGUge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTNwdDtmb250LXdlaWdodDpub3JtYWw7dGV4dC1hbGlnbjpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmO2NvbG9yOiM2Njk5NjY7cGFkZGluZzoycHh9CisuYWZfaW5wdXREYXRlX2hlYWRlciwuYWZfY2hvb3NlRGF0ZV9oZWFkZXIge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpib2xkO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiM2Njk5NjY7cGFkZGluZzoycHh9CisuYWZfaW5wdXREYXRlX2NvbnRlbnQgQSwuYWZfY2hvb3NlRGF0ZV9jb250ZW50IEEge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6IzAwMzMzM30KKy5hZl9jaG9vc2VEYXRlX2NvbnRlbnQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6Izk5OTk5OTt0ZXh0LWRlY29yYXRpb246bm9uZTtib3JkZXItd2lkdGg6MXB4O2JvcmRlci1zdHlsZTpzb2xpZDtwYWRkaW5nOjJweH0KKy5wX09yYUNvbnRlbnRGb290ZXJSdWxlIHtjb2xvcjojNjY5OTY2fQorLnBfT3JhQ29udGVudEZvb3RlclN0YXJ0IHtmbG9hdDpsZWZ0fQorLnBfT3JhQ29udGVudEZvb3RlckJvdHRvbSB7Y2xlYXI6Ym90aDttYXJnaW4tYm90dG9tOjVweH0KKy5wX09yYUZvb3RlciB7dGV4dC1hbGlnbjpjZW50ZXJ9CisucF9PcmFGb290ZXJCb3R0b20ge3BhZGRpbmctdG9wOjVweH0KKy5wX09yYUhlYWRlck5lc3Qge21hcmdpbjo1cHggMHB4IDBweCAxMnB4fQorLk9yYUhHcmlkTG9jYXRvckhlYWRlciB7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7YmFja2dyb3VuZC1jb2xvcjojZTllOGU4fQorLnBfT3JhSGlkZVNob3dEaXNjbG9zZWRTeW1ib2wsLmFmX3BhbmVsVGFiYmVkX3RhYi1zZWxlY3RlZCBBLC5wX09yYVRyZWVEaXNjbG9zZWRTeW1ib2wgQTpsaW5rLC5wX09yYVRyZWVEaXNjbG9zZWRTeW1ib2wgQTphY3RpdmUsLnBfT3JhVHJlZURpc2Nsb3NlZFN5bWJvbCBBOnZpc2l0ZWQsLnBfT3JhVHJlZVJvd1NlbGVjdGVkIEE6bGluaywucF9PcmFUcmVlUm93U2VsZWN0ZWQgQTphY3RpdmUsLnBfT3JhVHJlZVJvd1NlbGVjdGVkIEE6dmlzaXRlZCB7Y29sb3I6IzY2OTk2Njt0ZXh0LWRlY29yYXRpb246bm9uZX0KKy5hZl9tZXNzYWdlc19saXN0LXNpbmdsZSB7bGlzdC1zdHlsZS10eXBlOm5vbmV9CisucF9PcmFRdWlja1NlYXJjaEJveCB7YmFja2dyb3VuZC1jb2xvcjojZTllOGU4O2JvcmRlci1jb2xvcjojQ0NDQ0NDO2JvcmRlci1zdHlsZTpzb2xpZDtwYWRkaW5nOjBwdCA1cHQgNXB0IDVwdDtib3JkZXItd2lkdGg6MHB4IDBweCAxcHggMXB4fQorLnBfT3JhR2xvYmFsUXVpY2sge2JvcmRlci1jb2xvcjojQ0NDQ0NDO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MHB4IDBweCAwcHggMXB4fQorLnBfT3JhUHJvY2Vzc2luZ1N0YXR1cyB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6IzY2OTk2Njtib3JkZXItY29sb3I6Izk5Y2M5OTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjFweH0KKy5wX09yYVByb2R1Y3RCcmFuZGluZ1RleHQge2NvbG9yOiM2Njk5NjY7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1mYW1pbHk6R2FyYW1vbmQsIFRpbWVzLCBUaW1lcyBOZXcgUm9tYW4sIFNlcmlmO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MjRwdDtsaW5lLWhlaWdodDoyOC44cHQ7dG9wOi00LjhwdH0KKy5wX09yYVByb2R1Y3RCcmFuZGluZ0NvbXBhY3RUZXh0IHtjb2xvcjojNjY5OTY2O2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTNwdDttYXJnaW4tYm90dG9tOjBweDttYXJnaW4tdG9wOjBweDtmb250LXdlaWdodDpib2xkfQorLk9yYVNodXR0bGVIZWFkZXIge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6OXB0O2NvbG9yOiM2Njk5NjY7Zm9udC13ZWlnaHQ6Ym9sZDtwYWRkaW5nOjBweCAwcHggMHB4IDE4cHh9CisuT3JhU2h1dHRsZUxpbmtUZXh0IHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjlwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6IzAwMzMzM30KKy5wX09yYVNpZGVCYXJNaW5XaWR0aCB7d2lkdGg6MTQwcHh9CisuT3JhU3R5bGVkTGlzdCB7bGlzdC1zdHlsZS1wb3NpdGlvbjppbnNpZGU7cGFkZGluZzowcHg7bWFyZ2luOjBweH0KKy5PcmFTdHlsZWRMaXN0IC5PcmFTdHlsZWRMaXN0IHtwYWRkaW5nOjBwdCAwcHQgMHB0IDEwcHR9CisuYWZfcGFuZWxUYWJiZWRfb3JpZW50YXRpb24tdG9wIHtiYWNrZ3JvdW5kLWNvbG9yOiNlOWU4ZTg7Ym9yZGVyLWNvbG9yOiM5OWNjOTk7dGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVyLXN0eWxlOnNvbGlkO3BhZGRpbmc6MnB4IDBweDttYXJnaW46NHB4IDBweDtib3JkZXItd2lkdGg6MXB4IDBweCAwcHh9CisuYWZfcGFuZWxUYWJiZWRfb3JpZW50YXRpb24tYm90dG9tIHtiYWNrZ3JvdW5kLWNvbG9yOiNlOWU4ZTg7Ym9yZGVyLWNvbG9yOiM5OWNjOTk7dGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVyLXN0eWxlOnNvbGlkO3BhZGRpbmc6MnB4IDBweDttYXJnaW46NHB4IDBweDtib3JkZXItd2lkdGg6MHB4IDBweCAxcHh9CisuYWZfcGFuZWxUYWJiZWRfdGFiIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO3BhZGRpbmc6MHB4IDhweH0KKy5hZl9wYW5lbFRhYmJlZF90YWIgLnBfT3JhRGlzYWJsZWQge2NvbG9yOiM5OTk5OTl9CisuYWZfcGFuZWxUYWJiZWRfdGFiLXNlbGVjdGVkIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6Ym9sZDtwYWRkaW5nOjBweCA4cHh9CisuYWZfcGFuZWxUYWJiZWRfY2VsbC1zdGFydCB7d2lkdGg6MCV9CisuYWZfcGFuZWxUYWJiZWRfY2VsbC1lbmQge3dpZHRoOjEwMCV9CisuT3JhVGFibGVCb3JkZXIwMDAxIHtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjBweCAwcHggMHB4IDFweH0KKy5PcmFUYWJsZUJvcmRlcjAwMTAge2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MHB4IDBweCAxcHh9CisuT3JhVGFibGVCb3JkZXIwMDExIHtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjBweCAwcHggMXB4IDFweH0KKy5PcmFUYWJsZUJvcmRlcjAxMDAge2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MHB4IDFweCAwcHggMHB4fQorLk9yYVRhYmxlQm9yZGVyMDEwMSB7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDowcHggMXB4fQorLk9yYVRhYmxlQm9yZGVyMDExMCB7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDowcHggMXB4IDFweCAwcHh9CisuT3JhVGFibGVCb3JkZXIwMTExIHtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjBweCAxcHggMXB4fQorLk9yYVRhYmxlQm9yZGVyMTAwMCB7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDoxcHggMHB4IDBweH0KKy5PcmFUYWJsZUJvcmRlcjEwMDEge2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MXB4IDBweCAwcHggMXB4fQorLk9yYVRhYmxlQm9yZGVyMTAxMCB7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDoxcHggMHB4fQorLk9yYVRhYmxlQm9yZGVyMTAxMSB7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDoxcHggMHB4IDFweCAxcHh9CisuT3JhVGFibGVCb3JkZXIxMTAwIHtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjFweCAxcHggMHB4IDBweH0KKy5PcmFUYWJsZUJvcmRlcjExMDEge2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MXB4IDFweCAwcHh9CisuT3JhVGFibGVCb3JkZXIxMTEwIHtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjFweCAxcHggMXB4IDBweH0KKy5PcmFUYWJsZUJvcmRlcjExMTEge2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MXB4fQorLk9yYVRhYmxlVGl0bGUge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTNwdDtmb250LXdlaWdodDpub3JtYWw7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmO2NvbG9yOiM2Njk5NjZ9CisucF9PcmFUcmVlRGlzY2xvc2VkU3ltYm9sIHtjb2xvcjojNjY5OTY2O2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7dGV4dC1hbGlnbjpyaWdodH0KKy5wX09yYVRyZWVOb2RlQWRqdXN0IHtwYWRkaW5nLWJvdHRvbToycHh9CisuYWZfY2hhcnQge3dpZHRoOjQwMHB4O2hlaWdodDozMDBweDtiYWNrZ3JvdW5kLWNvbG9yOndoaXRlfQorLnBfT3JhT25lUGl4ZWxMaW5lIHtiYWNrZ3JvdW5kLWNvbG9yOiNDQ0NDQ0M7Zm9udC1zaXplOjBwdDtvdmVyZmxvdzpoaWRkZW47aGVpZ2h0OjFweDt3aWR0aDoxMDAlfQorLnBfT3JhRGlzcGxheUJsb2NrIHtkaXNwbGF5OmJsb2NrfQorLnBfT3JhSGlkZVNraXBOYXZpVGV4dCB7Zm9udC1zaXplOjBwdDttYXJnaW4tdG9wOjBweDttYXJnaW4tbGVmdDotOTk5cHh9CisuQUZMb2dvIHt3aWR0aDoxMDNweDtoZWlnaHQ6MTNweDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1wb3NpdGlvbjpjZW50ZXI7dmVydGljYWwtYWxpZ246bWlkZGxlO2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy9sb2dvLWRhcmsuZ2lmKX0KKy5hZl9wYW5lbEJveF9jb250ZW50LWRhcmsge2JvcmRlci1jb2xvcjojNjY5OTY2fQorLmFmX3RyYWluX3N0b3AucF9BRlZpc2l0ZWQge2JvcmRlci1jb2xvcjojOTk5OTk5fQorLmFmX3BhbmVsSGVhZGVyLC5hZl9zaG93RGV0YWlsSGVhZGVyIHtib3JkZXItY29sb3I6I0NDQ0NDQztib3JkZXItd2lkdGg6MHB4IDBweCAxcHggMHB4O2JvcmRlci1zdHlsZTpzb2xpZDt2ZXJ0aWNhbC1hbGlnbjpib3R0b207bWFyZ2luLWJvdHRvbTozcHg7cGFkZGluZzowcHggM3B4fQorLmFmX3BhbmVsSGVhZGVyX2ljb24tc3R5bGUge21hcmdpbi1yaWdodDozcHh9CisuYWZfb2JqZWN0U2VwYXJhdG9yIHtib3JkZXItY29sb3I6IzY2OTk2Njtib3JkZXItc3R5bGU6ZGFzaGVkIG5vbmUgbm9uZTtib3JkZXItd2lkdGg6MXB4IDBweCAwcHg7aGVpZ2h0OjFweDttYXJnaW46LTNweCAwcHggLTNweCAwcHg7cGFkZGluZzowcHh9Citib2R5IHttYXJnaW4tdG9wOjhweH0KKy5wX09yYU5hdjIge2JvcmRlci1jb2xvcjojOTljYzk5fQorLmFmX25hdmlnYXRpb25QYW5lIHtoZWlnaHQ6MjVweH0KKy8qIFRoZSBudW1iZXIgb2YgQ1NTIHNlbGVjdG9ycyBpbiB0aGlzIGZpbGUgaXMgNTY2ICovCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc2YuYXBhY2hlLnRyaW5pZGFkLnRhZ3N1cHBvcnQvZHRSZXpQcm92Q2FjaGUvbXlmYWNlcy5hcGFjaGUub3JnX3RyaW5pZGFkL3NraW5uaW5nL3NpbXBsZS5jc3MgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc2YuYXBhY2hlLnRyaW5pZGFkLnRhZ3N1cHBvcnQvZHRSZXpQcm92Q2FjaGUvbXlmYWNlcy5hcGFjaGUub3JnX3RyaW5pZGFkL3NraW5uaW5nL3NpbXBsZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhmZDY5NAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvc2ltcGxlLmNzcwpAQCAtMCwwICsxLDIyNiBAQAorLyogVGhpcyBDU1MgZmlsZSBnZW5lcmF0ZWQgb24gVGh1IEFwciAwMiAxNTo1Mjo0NiBQRFQgMjAwOSAqLworLkFGSW5zdHJ1Y3Rpb25UZXh0LC5BRkZpZWxkVGV4dCwuYWZfb3V0cHV0VGV4dCwuYWZfb3V0cHV0Rm9ybWF0dGVkLC5hZl9vdXRwdXREb2N1bWVudCwuYWZfaW5wdXRDaG9pY2VfY29udGVudCwuYWZfaW5wdXRDaG9pY2VfY29udGVudC1pbnB1dCwuYWZfaW5wdXRUZXh0X2NvbnRlbnQsLmFmX2lucHV0TnVtYmVyU3BpbmJveF9jb250ZW50LC5hZl9pbnB1dENvbG9yX2NvbnRlbnQsLmFmX2lucHV0RGF0ZV9jb250ZW50LC5hZl9pbnB1dExpc3RPZlZhbHVlc19jb250ZW50LC5hZl9zZWxlY3RNYW55Q2hlY2tib3hfY29udGVudCwuYWZfc2VsZWN0TWFueUxpc3Rib3hfY29udGVudCwuYWZfc2VsZWN0T25lQ2hvaWNlX2NvbnRlbnQsLmFmX3NlbGVjdE9uZUxpc3Rib3hfY29udGVudCwuYWZfc2VsZWN0T25lUmFkaW9fY29udGVudCwuYWZfaW5wdXRUZXh0LkFGRmllbGRUZXh0TWFya2VyIC5hZl9pbnB1dFRleHRfY29udGVudCwuYWZfaW5wdXRUZXh0LnBfQUZEaXNhYmxlZC5BRkZpZWxkVGV4dE1hcmtlciAuYWZfaW5wdXRUZXh0X2NvbnRlbnQsLmFmX2lucHV0VGV4dC5BRkZpZWxkVGV4dExUUk1hcmtlciAuYWZfaW5wdXRUZXh0X2NvbnRlbnQsLmFmX2lucHV0VGV4dC5BRlBob25lRmllbGRUZXh0TWFya2VyIC5hZl9pbnB1dFRleHRfY29udGVudCwuYWZfaW5wdXRUZXh0LkFGUG9zdGFsQ29kZUZpZWxkVGV4dE1hcmtlciAuYWZfaW5wdXRUZXh0X2NvbnRlbnQsLmFmX2lucHV0VGV4dC5BRkFkZHJlc3NGaWVsZFRleHRNYXJrZXIgLmFmX2lucHV0VGV4dF9jb250ZW50LC5hZl9pbnB1dENob2ljZS5BRkZpZWxkVGV4dE1hcmtlciAuYWZfaW5wdXRDaG9pY2VfY29udGVudC1pbnB1dCwuYWZfaW5wdXRDaG9pY2UucF9BRkRpc2FibGVkLkFGRmllbGRUZXh0TWFya2VyIC5hZl9pbnB1dENob2ljZV9jb250ZW50LWlucHV0LC5hZl9pbnB1dENob2ljZS5BRkZpZWxkVGV4dExUUk1hcmtlciAuYWZfaW5wdXRDaG9pY2VfY29udGVudC1pbnB1dCwuYWZfaW5wdXRDaG9pY2UuQUZQaG9uZUZpZWxkVGV4dE1hcmtlciAuYWZfaW5wdXRDaG9pY2VfY29udGVudC1pbnB1dCwuYWZfaW5wdXRDaG9pY2UuQUZQb3N0YWxDb2RlRmllbGRUZXh0TWFya2VyIC5hZl9pbnB1dENob2ljZV9jb250ZW50LWlucHV0LC5hZl9pbnB1dENob2ljZS5BRkFkZHJlc3NGaWVsZFRleHRNYXJrZXIgLmFmX2lucHV0Q2hvaWNlX2NvbnRlbnQtaW5wdXQsLmFmX2lucHV0TnVtYmVyU3BpbmJveC5BRkZpZWxkVGV4dE1hcmtlciAuYWZfaW5wdXROdW1iZXJTcGluYm94X2NvbnRlbnQsLmFmX2lucHV0TnVtYmVyU3BpbmJveC5wX0FGRGlzYWJsZWQuQUZGaWVsZFRleHRNYXJrZXIgLmFmX2lucHV0TnVtYmVyU3BpbmJveF9jb250ZW50LC5hZl9pbnB1dE51bWJlclNwaW5ib3guQUZGaWVsZFRleHRMVFJNYXJrZXIgLmFmX2lucHV0TnVtYmVyU3BpbmJveF9jb250ZW50LC5BRkZpZWxkVGV4dExUUiwuQUZQaG9uZUZpZWxkVGV4dCwuQUZQb3N0YWxDb2RlRmllbGRUZXh0LC5BRkFkZHJlc3NGaWVsZFRleHQsLlBvcnRsZXRUZXh0MSwuUG9ydGxldFRleHQyLC5Qb3J0bGV0VGV4dDMsLlBvcnRsZXRUZXh0NCwucG9ydGxldC1mb3JtLWlucHV0LWZpZWxkLC5wb3J0bGV0LWZvcm0tZmllbGQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6IzAwMDAwMH0KKy5BRkluc3RydWN0aW9uVGV4dERpc2FibGVkLC5BRkZpZWxkVGV4dERpc2FibGVkLC5hZl9pbnB1dFRleHQucF9BRkRpc2FibGVkLkFGRmllbGRUZXh0TFRSTWFya2VyIC5hZl9pbnB1dFRleHRfY29udGVudCwuYWZfaW5wdXRUZXh0LnBfQUZEaXNhYmxlZC5BRlBob25lRmllbGRUZXh0TWFya2VyIC5hZl9pbnB1dFRleHRfY29udGVudCwuYWZfaW5wdXRUZXh0LnBfQUZEaXNhYmxlZC5BRlBvc3RhbENvZGVGaWVsZFRleHRNYXJrZXIgLmFmX2lucHV0VGV4dF9jb250ZW50LC5hZl9pbnB1dFRleHQucF9BRkRpc2FibGVkLkFGQWRkcmVzc0ZpZWxkVGV4dE1hcmtlciAuYWZfaW5wdXRUZXh0X2NvbnRlbnQsLmFmX2lucHV0Q2hvaWNlLnBfQUZEaXNhYmxlZC5BRkZpZWxkVGV4dExUUk1hcmtlciAuYWZfaW5wdXRDaG9pY2VfY29udGVudC1pbnB1dCwuYWZfaW5wdXRDaG9pY2UucF9BRkRpc2FibGVkLkFGUGhvbmVGaWVsZFRleHRNYXJrZXIgLmFmX2lucHV0Q2hvaWNlX2NvbnRlbnQtaW5wdXQsLmFmX2lucHV0Q2hvaWNlLnBfQUZEaXNhYmxlZC5BRlBvc3RhbENvZGVGaWVsZFRleHRNYXJrZXIgLmFmX2lucHV0Q2hvaWNlX2NvbnRlbnQtaW5wdXQsLmFmX2lucHV0Q2hvaWNlLnBfQUZEaXNhYmxlZC5BRkFkZHJlc3NGaWVsZFRleHRNYXJrZXIgLmFmX2lucHV0Q2hvaWNlX2NvbnRlbnQtaW5wdXQsLmFmX2lucHV0TnVtYmVyU3BpbmJveC5wX0FGRGlzYWJsZWQuQUZGaWVsZFRleHRMVFJNYXJrZXIgLmFmX2lucHV0TnVtYmVyU3BpbmJveF9jb250ZW50LC5hZl9tZW51QnV0dG9uc190ZXh0LWRpc2FibGVkLC5wX0luQ29udGV4dEJyYW5kaW5nVGV4dCwuQUZGaWVsZFRleHRMVFJEaXNhYmxlZCwuQUZQaG9uZUZpZWxkVGV4dERpc2FibGVkLC5BRlBvc3RhbENvZGVGaWVsZFRleHREaXNhYmxlZCwuQUZBZGRyZXNzRmllbGRUZXh0RGlzYWJsZWQsLk9yYUhHcmlkTmF2Um93SW5hY3RpdmVMaW5rLC5PcmFOYXZCYXJJbmFjdGl2ZUxpbmssLnBvcnRsZXQtZm9udC1kaW0ge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6Izk5OTk5OX0KKy5BRkRhdGFUZXh0IHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjojMDAwMDAwfQorLkFGRGF0YVRleHREaXNhYmxlZCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6Izk5OTk5OX0KKy5BRkRhdGFOdW1iZXIge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpib2xkO2NvbG9yOiMwMDAwMDA7dGV4dC1hbGlnbjpyaWdodH0KKy5BRkRhdGFOdW1iZXJEaXNhYmxlZCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6Izk5OTk5OTt0ZXh0LWFsaWduOnJpZ2h0fQorLkFGRmllbGROdW1iZXIsLmFmX2lucHV0VGV4dC5BRkZpZWxkTnVtYmVyTWFya2VyIC5hZl9pbnB1dFRleHRfY29udGVudCwuYWZfaW5wdXRDaG9pY2UuQUZGaWVsZE51bWJlck1hcmtlciAuYWZfaW5wdXRDaG9pY2VfY29udGVudC1pbnB1dCwuYWZfaW5wdXROdW1iZXJTcGluYm94LkFGRmllbGROdW1iZXJNYXJrZXIgLmFmX2lucHV0TnVtYmVyU3BpbmJveF9jb250ZW50IHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO3RleHQtYWxpZ246cmlnaHQ7Y29sb3I6IzAwMDAwMH0KKy5BRkZpZWxkTnVtYmVyRGlzYWJsZWQsLmFmX2lucHV0VGV4dC5wX0FGRGlzYWJsZWQuQUZGaWVsZE51bWJlck1hcmtlciAuYWZfaW5wdXRUZXh0X2NvbnRlbnQsLmFmX2lucHV0Q2hvaWNlLnBfQUZEaXNhYmxlZC5BRkZpZWxkTnVtYmVyTWFya2VyIC5hZl9pbnB1dENob2ljZV9jb250ZW50LWlucHV0LC5hZl9pbnB1dE51bWJlclNwaW5ib3gucF9BRkRpc2FibGVkLkFGRmllbGROdW1iZXJNYXJrZXIgLmFmX2lucHV0TnVtYmVyU3BpbmJveF9jb250ZW50IHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO3RleHQtYWxpZ246cmlnaHQ7Y29sb3I6Izk5OTk5OX0KKy5BRkxhYmVsVGV4dCwuYWZfb3V0cHV0TGFiZWwsLmFmX2lucHV0Q2hvaWNlX2xhYmVsLC5hZl9pbnB1dEZpbGVfbGFiZWwsLmFmX2lucHV0TnVtYmVyU3BpbmJveF9sYWJlbCwuYWZfaW5wdXRUZXh0X2xhYmVsLC5hZl9zZWxlY3RCb29sZWFuQ2hlY2tib3hfbGFiZWwsLmFmX3NlbGVjdEJvb2xlYW5SYWRpb19sYWJlbCwuYWZfaW5wdXRDb2xvcl9sYWJlbCwuYWZfaW5wdXREYXRlX2xhYmVsLC5hZl9pbnB1dExpc3RPZlZhbHVlc19sYWJlbCwuYWZfc2VsZWN0TWFueUNoZWNrYm94X2xhYmVsLC5hZl9zZWxlY3RNYW55TGlzdGJveF9sYWJlbCwuYWZfc2VsZWN0T25lQ2hvaWNlX2xhYmVsLC5hZl9zZWxlY3RPbmVMaXN0Ym94X2xhYmVsLC5hZl9zZWxlY3RPbmVSYWRpb19sYWJlbCwuYWZfcGFuZWxMYWJlbEFuZE1lc3NhZ2VfbGFiZWwsLmFmX3BhbmVsRm9ybUxheW91dF9sYWJlbC1jZWxsLC5wb3J0bGV0LWZvcm0tbGFiZWwsLnBvcnRsZXQtaWNvbi1sYWJlbCwucG9ydGxldC1kbGctaWNvbi1sYWJlbCwucG9ydGxldC1mb3JtLWZpZWxkLWxhYmVsIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7dGV4dC1hbGlnbjpyaWdodDtjb2xvcjojMDAwMDAwO3BhZGRpbmc6MHB4IDhweCAwcHggMHB4O2ZvbnQtd2VpZ2h0Om5vcm1hbH0KKy5BRkxhYmVsQ2VsbCB7cGFkZGluZzowcHggOHB4IDBweCAwcHh9CisuQUZFcnJvckljb25TdHlsZSB7Y29sb3I6I2NjMDAwMDtmb250LWZhbWlseTptb25vc3BhY2U7Zm9udC13ZWlnaHQ6Ym9sZH0KKy5BRkluZm9JY29uU3R5bGUsLkFGV2FybmluZ0ljb25TdHlsZSwuQUZRdWlja1NlbGVjdEljb25TdHlsZSB7Y29sb3I6IzY2OTk2Njtmb250LWZhbWlseTptb25vc3BhY2U7Zm9udC13ZWlnaHQ6Ym9sZH0KKy5BRlJlcXVpcmVkSWNvblN0eWxlIHtjb2xvcjojNjY5OTY2O2ZvbnQtZmFtaWx5OkNvdXJpZXIsc2Fucy1zZXJpZn0KKy5BRlF1aWNrU2VsZWN0RGlzYWJsZWRJY29uU3R5bGUge2NvbG9yOiM5OTk5OTk7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO2ZvbnQtd2VpZ2h0OmJvbGR9CisuT3JhTGluazpsaW5rLC5hZl90cmVlVGFibGVfcGF0aCwuYWZfbWVudVBhdGgsLmFmX3BhbmVsTGlzdCBBLC5hZl9wYW5lbFBvcHVwX2xpbmssLmFmX21lbnVCdXR0b25zX3RleHQsLk9yYUxpbmtUZXh0LC5PcmFIR3JpZE5hdlJvd0FjdGl2ZUxpbmssLk9yYU5hdkJhckFjdGl2ZUxpbmsge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6IzAwMzMzM30KKy5PcmFMaW5rOmFjdGl2ZSwuT3JhQUxpbmtUZXh0IHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiMwMDY2NjZ9CisuT3JhTGluazp2aXNpdGVkLC5PcmFWTGlua1RleHQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6IzMzNjY2Nn0KKy5PcmFMaW5rRGlzYWJsZWQsLmFmX291dHB1dExhYmVsX3JlcXVpcmVkLWljb24tc3R5bGUsLmFmX2lucHV0Q2hvaWNlX3JlcXVpcmVkLWljb24tc3R5bGUsLmFmX2lucHV0TnVtYmVyU3BpbmJveF9yZXF1aXJlZC1pY29uLXN0eWxlLC5hZl9pbnB1dFRleHRfcmVxdWlyZWQtaWNvbi1zdHlsZSwuYWZfc2VsZWN0Qm9vbGVhbkNoZWNrYm94X3JlcXVpcmVkLWljb24tc3R5bGUsLmFmX3NlbGVjdEJvb2xlYW5SYWRpb19yZXF1aXJlZC1pY29uLXN0eWxlLC5hZl9pbnB1dERhdGVfcmVxdWlyZWQtaWNvbi1zdHlsZSwuYWZfc2VsZWN0TWFueUNoZWNrYm94X3JlcXVpcmVkLWljb24tc3R5bGUsLmFmX3NlbGVjdE1hbnlMaXN0Ym94X3JlcXVpcmVkLWljb24tc3R5bGUsLmFmX3NlbGVjdE9uZUNob2ljZV9yZXF1aXJlZC1pY29uLXN0eWxlLC5hZl9zZWxlY3RPbmVMaXN0Ym94X3JlcXVpcmVkLWljb24tc3R5bGUsLmFmX3NlbGVjdE9uZVJhZGlvX3JlcXVpcmVkLWljb24tc3R5bGUsLmFmX291dHB1dExhYmVsX2dyb3VwLWljb24tc3R5bGUsLmFmX2lucHV0Q2hvaWNlX2dyb3VwLWljb24tc3R5bGUsLmFmX2lucHV0TnVtYmVyU3BpbmJveF9ncm91cC1pY29uLXN0eWxlLC5hZl9pbnB1dFRleHRfZ3JvdXAtaWNvbi1zdHlsZSwuYWZfc2VsZWN0Qm9vbGVhbkNoZWNrYm94X2dyb3VwLWljb24tc3R5bGUsLmFmX3NlbGVjdEJvb2xlYW5SYWRpb19ncm91cC1pY29uLXN0eWxlLC5hZl9pbnB1dERhdGVfZ3JvdXAtaWNvbi1zdHlsZSwuYWZfc2VsZWN0TWFueUNoZWNrYm94X2dyb3VwLWljb24tc3R5bGUsLmFmX3NlbGVjdE1hbnlMaXN0Ym94X2dyb3VwLWljb24tc3R5bGUsLmFmX3NlbGVjdE9uZUNob2ljZV9ncm91cC1pY29uLXN0eWxlLC5hZl9zZWxlY3RPbmVMaXN0Ym94X2dyb3VwLWljb24tc3R5bGUsLmFmX3NlbGVjdE9uZVJhZGlvX2dyb3VwLWljb24tc3R5bGUsLmFmX21lbnVMaXN0LGJ1dHRvbiwuYWZfbmF2aWdhdGlvblBhbmVfY2hvaWNlLWxhYmVsLC5hZl9uYXZpZ2F0aW9uUGFuZV9jaG9pY2Utb3B0aW9ucywuYWZfbmF2aWdhdGlvblBhbmVfY2hvaWNlLWJ1dHRvbiwuYWZfYnJlYWRDcnVtYnMsLmFmX3NlbGVjdE1hbnlTaHV0dGxlX2JveC1jb250ZW50LC5hZl9zZWxlY3RPcmRlclNodXR0bGVfYm94LWNvbnRlbnQsLmFmX21lbnVUYWJzLC5hZl9jb21tYW5kQnV0dG9uLC5hZl9nb0J1dHRvbiwuYWZfcmVzZXRCdXR0b24sLnBfT3JhRGlzYWJsZWQsLk9yYU5hdjMsLnBfT3JhVHJlZVJvdywucG9ydGxldC1mb3JtLWJ1dHRvbiB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbH0KKy5hZl9vdXRwdXREb2N1bWVudF90aXRsZSB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojNjY5OTY2O3BhZGRpbmc6MHB4O21hcmdpbjowcHh9CisuYWZfb3V0cHV0RG9jdW1lbnRfcGFyYWdyYXBoIHt0ZXh0LWFsaWduOmp1c3RpZnk7cGFkZGluZzowcHg7bWFyZ2luOjBweH0KKy5hZl9vdXRwdXREb2N1bWVudF9zZXBhcmF0b3Ige3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6MHB4O21hcmdpbjowcHh9CisuYWZfcGFuZWxUaXAsLmFmX21lbnVCdXR0b25zX3RleHQtc2VsZWN0ZWQsLkFGSGVhZGVyTGV2ZWxUaHJlZVBsdXMsSDMuYWZfcGFuZWxIZWFkZXIsSDQuYWZfcGFuZWxIZWFkZXIsSDUuYWZfcGFuZWxIZWFkZXIsSDYuYWZfcGFuZWxIZWFkZXIsSDMuYWZfc2hvd0RldGFpbEhlYWRlcixINC5hZl9zaG93RGV0YWlsSGVhZGVyLEg1LmFmX3Nob3dEZXRhaWxIZWFkZXIsSDYuYWZfc2hvd0RldGFpbEhlYWRlciwuT3JhUGFnZVN0YW1wVGV4dCwuYWZfc2luZ2xlU3RlcEJ1dHRvbkJhcl9sYWJlbCwuT3JhTmF2QmFyVmlld09ubHksLlBvcnRsZXRIZWFkaW5nMywuUG9ydGxldEhlYWRpbmc0IHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiM2Njk5NjZ9CisuYWZfcGFuZWxUaXBfbGFiZWwge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpib2xkfQorLmFmX3BhbmVsQWNjb3JkaW9uX3Rvb2xiYXIsLnBfT3JhQ29udGVudEZvb3RlckNoaWxkcmVuIHtmbG9hdDpyaWdodH0KKy5hZl9kaWFsb2dfY29udGFpbmVyLC5hZl9wYW5lbFBvcHVwX2NvbnRhaW5lciB7Ym9yZGVyLWNvbG9yOiMzMzY2MzM7Ym9yZGVyOjFweCBzb2xpZDtiYWNrZ3JvdW5kLWNvbG9yOndoaXRlfQorLmFmX2RpYWxvZ190aXRsZS1iYXIsLmFmX3BhbmVsUG9wdXBfdGl0bGUtYmFyIHtiYWNrZ3JvdW5kLWNvbG9yOiNDQ0NDQ0M7Ym9yZGVyLWNvbG9yOiMzMzY2MzM7Ym9yZGVyLWJvdHRvbToxcHggc29saWQ7cGFkZGluZzoycHggMnB4IDJweCAycHh9CisuYWZfZGlhbG9nX3RpdGxlLXRleHQsLmFmX3BhbmVsUG9wdXBfdGl0bGUtdGV4dCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMXB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVufQorLmFmX2RpYWxvZ19jbG9zZS1pY29uIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjExcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO21hcmdpbi1sZWZ0OjVweDtiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvY2xvc2UuZ2lmKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlcjtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7aGVpZ2h0OjEzcHg7d2lkdGg6MTNweH0KKy5hZl9kaWFsb2dfY29udGVudCwuYWZfcGFuZWxQb3B1cF9jb250ZW50IHtiYWNrZ3JvdW5kLWNvbG9yOiNlOWU4ZTg7Ym9yZGVyOjBweH0KKy5hZl9pbnB1dENob2ljZS5wX0FGRGlzYWJsZWQgLmFmX2lucHV0Q2hvaWNlX2xhYmVsLC5hZl9pbnB1dE51bWJlclNwaW5ib3gucF9BRkRpc2FibGVkIC5hZl9pbnB1dE51bWJlclNwaW5ib3hfbGFiZWwsLmFmX2lucHV0VGV4dC5wX0FGRGlzYWJsZWQgLmFmX2lucHV0VGV4dF9sYWJlbCwuYWZfc2VsZWN0Qm9vbGVhbkNoZWNrYm94LnBfQUZEaXNhYmxlZCAuYWZfc2VsZWN0Qm9vbGVhbkNoZWNrYm94X2xhYmVsLC5hZl9zZWxlY3RCb29sZWFuUmFkaW8ucF9BRkRpc2FibGVkIC5hZl9zZWxlY3RCb29sZWFuUmFkaW9fbGFiZWwsLmFmX2lucHV0Q29sb3IucF9BRkRpc2FibGVkIC5hZl9pbnB1dENvbG9yX2xhYmVsLC5hZl9pbnB1dERhdGUucF9BRkRpc2FibGVkIC5hZl9pbnB1dERhdGVfbGFiZWwsLmFmX2lucHV0TGlzdE9mVmFsdWVzLnBfQUZEaXNhYmxlZCAuYWZfaW5wdXRMaXN0T2ZWYWx1ZXNfbGFiZWwsLmFmX3NlbGVjdE1hbnlDaGVja2JveC5wX0FGRGlzYWJsZWQgLmFmX3NlbGVjdE1hbnlDaGVja2JveF9sYWJlbCwuYWZfc2VsZWN0TWFueUxpc3Rib3gucF9BRkRpc2FibGVkIC5hZl9zZWxlY3RNYW55TGlzdGJveF9sYWJlbCwuYWZfc2VsZWN0T25lQ2hvaWNlLnBfQUZEaXNhYmxlZCAuYWZfc2VsZWN0T25lQ2hvaWNlX2xhYmVsLC5hZl9zZWxlY3RPbmVMaXN0Ym94LnBfQUZEaXNhYmxlZCAuYWZfc2VsZWN0T25lTGlzdGJveF9sYWJlbCwuYWZfc2VsZWN0T25lUmFkaW8ucF9BRkRpc2FibGVkIC5hZl9zZWxlY3RPbmVSYWRpb19sYWJlbCwuYWZfbmF2aWdhdGlvblBhbmVfYmFyLWluYWN0aXZlLWVuYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX2Jhci1jb250ZW50LC5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItYWN0aXZlLWVuYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX2Jhci1jb250ZW50IGEsLmFmX25hdmlnYXRpb25QYW5lX2Jhci1pbmFjdGl2ZS1lbmFibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItY29udGVudCBhLC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWluYWN0aXZlIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLW1pZCBBIHtjb2xvcjojMDAwMDAwfQorLmFmX2lucHV0TnVtYmVyU3BpbmJveF9pbmNyZW1lbnQtY2VsbCwuYWZfaW5wdXROdW1iZXJTcGluYm94X2RlY3JlbWVudC1jZWxsIHtiYWNrZ3JvdW5kLWNvbG9yOiNlOWU4ZTg7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7Ym9yZGVyLXdpZHRoOjFweDtib3JkZXItc3R5bGU6c29saWQ7d2lkdGg6MTFweDtoZWlnaHQ6OHB4fQorLmFmX2lucHV0TnVtYmVyU3BpbmJveF9zcGluYm94LWNlbGwge3BhZGRpbmctbGVmdDoxcHh9CisuYWZfbWVudUxpc3Rfc2VsZWN0ZWQsLk9yYU5hdjNTZWxlY3RlZCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGQ7YmFja2dyb3VuZC1jb2xvcjojY2NmZmNjfQorLmFmX21lbnVDaG9pY2VfbGFiZWwsLnBvcnRsZXQtZm9udCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZTo4cHQ7Zm9udC13ZWlnaHQ6bm9ybWFsfQorQk9EWSwucG9ydGxldC1zZWN0aW9uLWJvZHksLnBvcnRsZXQtdGFibGUtYm9keSB7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmO2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZn0KKy5hZl90cmVlVGFibGVfcGF0aC1zdGVwLC5hZl9tZW51UGF0aF9zdGVwLC5hZl9tZW51UGF0aF9zZWxlY3RlZC1zdGVwIHtjb2xvcjojMDAzMzMzO2ZvbnQtc2l6ZTo5cHR9CisuYWZfdHJlZVRhYmxlX3BhdGgtc2VsZWN0ZWQtc3RlcCB7Zm9udC1zaXplOjlwdDtjb2xvcjojMDAwMDAwfQorLmFmX3BhbmVsTGlzdCBVTCB7bWFyZ2luLXRvcDo0cHg7bWFyZ2luLWJvdHRvbTo0cHh9CisuYWZfaW5wdXRDb2xvcl9zd2F0Y2gtb3ZlcmxheSB7cG9zaXRpb246cmVsYXRpdmU7bGVmdDotN3B4O3RvcDo1cHh9CisuYWZfbmF2aWdhdGlvblBhbmVfYmFyIHtiYWNrZ3JvdW5kLWNvbG9yOiNFRkVGRUY7cGFkZGluZy1sZWZ0OjZweDtwYWRkaW5nLXJpZ2h0OjZweH0KKy5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItYWN0aXZlLWRpc2FibGVkLC5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItaW5hY3RpdmUtZGlzYWJsZWQsLmFmX25hdmlnYXRpb25QYW5lX2J1dHRvbnMtYWN0aXZlLWRpc2FibGVkLC5hZl9uYXZpZ2F0aW9uUGFuZV9idXR0b25zLWluYWN0aXZlLWRpc2FibGVkLC5hZl9uYXZpZ2F0aW9uUGFuZV9saXN0LWFjdGl2ZS1kaXNhYmxlZCwuYWZfbmF2aWdhdGlvblBhbmVfbGlzdC1pbmFjdGl2ZS1kaXNhYmxlZCB7Y3Vyc29yOmRlZmF1bHR9CisuYWZfbmF2aWdhdGlvblBhbmVfYmFyLWFjdGl2ZS1lbmFibGVkLC5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItaW5hY3RpdmUtZW5hYmxlZCwuYWZfbmF2aWdhdGlvblBhbmVfYnV0dG9ucy1hY3RpdmUtZW5hYmxlZCwuYWZfbmF2aWdhdGlvblBhbmVfYnV0dG9ucy1pbmFjdGl2ZS1lbmFibGVkLC5hZl9uYXZpZ2F0aW9uUGFuZV9saXN0LWFjdGl2ZS1lbmFibGVkLC5hZl9uYXZpZ2F0aW9uUGFuZV9saXN0LWluYWN0aXZlLWVuYWJsZWQsLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYWN0aXZlLC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWluYWN0aXZlIHtjdXJzb3I6cG9pbnRlcn0KKy5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItYWN0aXZlLWVuYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX2Jhci1jb250ZW50IHtjb2xvcjojMDAwMDAwO2ZvbnQtd2VpZ2h0OmJvbGR9CisuYWZfbmF2aWdhdGlvblBhbmVfYmFyLWFjdGl2ZS1lbmFibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItY29udGVudCBhOmhvdmVyLC5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItaW5hY3RpdmUtZW5hYmxlZCAuYWZfbmF2aWdhdGlvblBhbmVfYmFyLWNvbnRlbnQgYTpob3ZlciwuYWZfbmF2aWdhdGlvblBhbmVfYnV0dG9ucy1hY3RpdmUtZW5hYmxlZCAuYWZfbmF2aWdhdGlvblBhbmVfYnV0dG9ucy1jb250ZW50IGE6aG92ZXIsLmFmX25hdmlnYXRpb25QYW5lX2J1dHRvbnMtaW5hY3RpdmUtZW5hYmxlZCAuYWZfbmF2aWdhdGlvblBhbmVfYnV0dG9ucy1jb250ZW50IGE6aG92ZXIsLmFmX25hdmlnYXRpb25QYW5lX2xpc3QtYWN0aXZlLWVuYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX2xpc3QtY29udGVudCBhOmhvdmVyLC5hZl9uYXZpZ2F0aW9uUGFuZV9saXN0LWluYWN0aXZlLWVuYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX2xpc3QtY29udGVudCBhOmhvdmVyLC5BRkFjY2Vzc0tleVN0eWxlIHt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfQorLmFmX25hdmlnYXRpb25QYW5lX2Jhci1hY3RpdmUtZGlzYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX2Jhci1jb250ZW50LC5hZl9uYXZpZ2F0aW9uUGFuZV9idXR0b25zLWFjdGl2ZS1kaXNhYmxlZCAuYWZfbmF2aWdhdGlvblBhbmVfYnV0dG9ucy1jb250ZW50LC5hZl9uYXZpZ2F0aW9uUGFuZV9saXN0LWFjdGl2ZS1kaXNhYmxlZCAuYWZfbmF2aWdhdGlvblBhbmVfbGlzdC1jb250ZW50IHtjb2xvcjpncmF5O2ZvbnQtd2VpZ2h0OmJvbGR9CisuYWZfbmF2aWdhdGlvblBhbmVfYmFyLWluYWN0aXZlLWRpc2FibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItY29udGVudCwuYWZfbmF2aWdhdGlvblBhbmVfYmFyLWFjdGl2ZS1kaXNhYmxlZCAuYWZfbmF2aWdhdGlvblBhbmVfYmFyLWNvbnRlbnQgYSwuYWZfbmF2aWdhdGlvblBhbmVfYmFyLWluYWN0aXZlLWRpc2FibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItY29udGVudCBhLC5hZl9uYXZpZ2F0aW9uUGFuZV9idXR0b25zLWluYWN0aXZlLWRpc2FibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV9idXR0b25zLWNvbnRlbnQsLmFmX25hdmlnYXRpb25QYW5lX2J1dHRvbnMtYWN0aXZlLWRpc2FibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV9idXR0b25zLWNvbnRlbnQgYSwuYWZfbmF2aWdhdGlvblBhbmVfYnV0dG9ucy1pbmFjdGl2ZS1kaXNhYmxlZCAuYWZfbmF2aWdhdGlvblBhbmVfYnV0dG9ucy1jb250ZW50IGEsLmFmX25hdmlnYXRpb25QYW5lX2xpc3QtaW5hY3RpdmUtZGlzYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX2xpc3QtY29udGVudCwuYWZfbmF2aWdhdGlvblBhbmVfbGlzdC1hY3RpdmUtZGlzYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX2xpc3QtY29udGVudCBhLC5hZl9uYXZpZ2F0aW9uUGFuZV9saXN0LWluYWN0aXZlLWRpc2FibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV9saXN0LWNvbnRlbnQgYSwuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1hY3RpdmUucF9BRkRpc2FibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLW1pZCwuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1pbmFjdGl2ZS5wX0FGRGlzYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtbWlkIHtjb2xvcjpncmF5fQorLmFmX25hdmlnYXRpb25QYW5lX2Jhci1jb250ZW50LC5hZl9uYXZpZ2F0aW9uUGFuZV9idXR0b25zLWNvbnRlbnQsLmFmX25hdmlnYXRpb25QYW5lX2xpc3QtY29udGVudCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtwYWRkaW5nLXRvcDozcHg7cGFkZGluZy1ib3R0b206M3B4fQorLmFmX25hdmlnYXRpb25QYW5lX2Jhci1jb250ZW50IGEsLmFmX25hdmlnYXRpb25QYW5lX2J1dHRvbnMtY29udGVudCBhLC5hZl9uYXZpZ2F0aW9uUGFuZV9saXN0LWNvbnRlbnQgYSB7dGV4dC1kZWNvcmF0aW9uOm5vbmV9CisuYWZfbmF2aWdhdGlvblBhbmVfYmFyLXNlcGFyYXRvciB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtwYWRkaW5nLWxlZnQ6NnB4O3BhZGRpbmctcmlnaHQ6NnB4O2NvbG9yOmdyYXl9CisuYWZfbmF2aWdhdGlvblBhbmVfYnV0dG9ucy1hY3RpdmUtZW5hYmxlZCAuYWZfbmF2aWdhdGlvblBhbmVfYnV0dG9ucy1jb250ZW50LC5hZl9uYXZpZ2F0aW9uUGFuZV9saXN0LWFjdGl2ZS1lbmFibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV9saXN0LWNvbnRlbnQsLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYWN0aXZlIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLW1pZCBBLC5BRkxpbmtBY2Nlc3NLZXlTdHlsZSwuYWZfaW5wdXREYXRlX3NlbGVjdGVkLC5hZl9jaG9vc2VEYXRlX3NlbGVjdGVkIHtmb250LXdlaWdodDpib2xkfQorLmFmX25hdmlnYXRpb25QYW5lX2J1dHRvbnMtc2VwYXJhdG9yIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO3BhZGRpbmctbGVmdDo2cHg7cGFkZGluZy1yaWdodDo2cHh9CisuYWZfbmF2aWdhdGlvblBhbmVfbGlzdC1idWxsZXQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOjE3cHg7YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL2xpc3QtYnVsbGV0LmdpZik7YmFja2dyb3VuZC1wb3NpdGlvbjpjZW50ZXI7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0fQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMge2hlaWdodDoyNnB4O292ZXJmbG93OmhpZGRlbn0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWFjdGl2ZS5wX0FGRGlzYWJsZWQsLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtaW5hY3RpdmUucF9BRkRpc2FibGVkIHtjdXJzb3I6ZGVmYXVsdDtjb2xvcjpncmF5fQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtc3RhcnQsLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtc3RhcnQtam9pbiB7aGVpZ2h0OjIycHg7d2lkdGg6MjZweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOnRvcCByaWdodH0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLXN0YXJ0LWpvaW4tZnJvbS1hY3RpdmUsLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtc3RhcnQtam9pbi1mcm9tLWluYWN0aXZlIHtoZWlnaHQ6MjJweDt3aWR0aDoxNHB4O2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdH0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLW1pZCB7aGVpZ2h0OjIycHg7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojMDAwMDAwO3BhZGRpbmctbGVmdDozcHg7d2hpdGUtc3BhY2U6bm93cmFwfQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtZW5kLWpvaW4tdG8taW5hY3RpdmUge2hlaWdodDoyMnB4O3dpZHRoOjEycHg7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0fQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtZW5kIHtoZWlnaHQ6MjJweDt3aWR0aDoxNXB4fQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYm90dG9tLXN0YXJ0LC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWJvdHRvbS1taWQsLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYm90dG9tLWVuZCB7aGVpZ2h0OjRweDtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteH0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWJvdHRvbS1zdGFydC1jb250ZW50IHtoZWlnaHQ6NHB4O3dpZHRoOjE3cHg7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0fQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYm90dG9tLW1pZC1jb250ZW50IHtoZWlnaHQ6NHB4fQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYm90dG9tLWVuZC1jb250ZW50IHtoZWlnaHQ6NHB4O3dpZHRoOjEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0fQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtbWlkIEEge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6IzAwMDAwMDt0ZXh0LWRlY29yYXRpb246bm9uZX0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWJvdHRvbS1lbmQtam9pbiB7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1hY3RpdmUgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtc3RhcnQge2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy90YWIzLXN0YXJ0LXNlbGVjdGVkLmdpZil9CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1hY3RpdmUgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtc3RhcnQtam9pbiB7YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL3RhYjMtc3RhcnQtam9pbi1zZWxlY3RlZC5naWYpfQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYWN0aXZlIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWJvdHRvbS1zdGFydCwuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1hY3RpdmUgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYm90dG9tLW1pZCwuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1hY3RpdmUgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYm90dG9tLWVuZCB7YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL3RhYjMtYm90LW1pZC1zZWxlY3RlZC5naWYpfQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYWN0aXZlIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWJvdHRvbS1zdGFydC1jb250ZW50IHtiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvdGFiMy1ib3Qtc3RhcnQtc2VsZWN0ZWQuZ2lmKX0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWFjdGl2ZSAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1taWQge2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy90YWIzLW1pZC1zZWxlY3RlZC5naWYpO2ZvbnQtd2VpZ2h0OmJvbGR9CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1hY3RpdmUgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtZW5kLWpvaW4tdG8taW5hY3RpdmUge2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy90YWIzLWVuZC1qb2luLXNlbGVjdGVkLXRvLWRlc2VsZWN0ZWQuZ2lmKX0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWFjdGl2ZSAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1lbmQge2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy90YWIzLWVuZC1zZWxlY3RlZC5naWYpfQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYWN0aXZlIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWJvdHRvbS1lbmQtam9pbiwuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1pbmFjdGl2ZSAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1ib3R0b20tc3RhcnQsLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtaW5hY3RpdmUgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYm90dG9tLW1pZCwuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1pbmFjdGl2ZSAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1ib3R0b20tZW5kLC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWluYWN0aXZlIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWJvdHRvbS1lbmQtam9pbiB7YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL3RhYjMtYm90LWRlc2VsZWN0ZWQuZ2lmKX0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWFjdGl2ZSAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1ib3R0b20tZW5kLWNvbnRlbnQge2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy90YWIzLWJvdC1lbmQtc2VsZWN0ZWQuZ2lmKX0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWluYWN0aXZlIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLXN0YXJ0IHtiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvdGFiMy1zdGFydC1kZXNlbGVjdGVkLmdpZil9CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1pbmFjdGl2ZSAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1ib3R0b20tc3RhcnQtY29udGVudCwuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1pbmFjdGl2ZSAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1ib3R0b20tZW5kLWNvbnRlbnQge2JhY2tncm91bmQtaW1hZ2U6bm9uZX0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWluYWN0aXZlIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLXN0YXJ0LWpvaW4tZnJvbS1hY3RpdmUge2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy90YWIzLXN0YXJ0LWpvaW4tc2VsZWN0ZWQtdG8tZGVzZWxlY3RlZC5naWYpfQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtaW5hY3RpdmUgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtc3RhcnQtam9pbi1mcm9tLWluYWN0aXZlIHtiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvdGFiMy1zdGFydC1qb2luLWRlc2VsZWN0ZWQtdG8tZGVzZWxlY3RlZC5naWYpfQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtaW5hY3RpdmUgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtbWlkIHtjb2xvcjojMDAwMDAwO2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy90YWIzLW1pZC1kZXNlbGVjdGVkLmdpZil9CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1pbmFjdGl2ZSAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1lbmQtam9pbi10by1pbmFjdGl2ZSB7YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL3RhYjMtZW5kLWpvaW4tZGVzZWxlY3RlZC10by1kZXNlbGVjdGVkLmdpZil9CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1pbmFjdGl2ZSAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1lbmQge2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy90YWIzLWVuZC1kZXNlbGVjdGVkLmdpZil9CisuYWZfcGFuZWxGb3JtTGF5b3V0X2NvbHVtbiwucF9PcmFUcmVlSWNvbiB7dmVydGljYWwtYWxpZ246dG9wfQorLmFmX3BhbmVsRm9ybUxheW91dF9zZXBhcmF0b3Ige2JhY2tncm91bmQtY29sb3I6Z3JheTtoZWlnaHQ6MXB4O2ZvbnQtc2l6ZToxcHg7bWFyZ2luLXRvcDozcHg7bWFyZ2luLWJvdHRvbTozcHh9CisuYWZfcGFuZWxGb3JtTGF5b3V0X2NlbGwsLmFmX3BhbmVsRm9ybUxheW91dF9jb250ZW50LWNlbGwsLmFmX3BhbmVsRm9ybUxheW91dF9tZXNzYWdlLWNlbGwge3BhZGRpbmc6MHB4fQorLmFmX3BhbmVsRm9ybUxheW91dF9sYWJlbC1zdGFja2VkLWNlbGwge3BhZGRpbmc6MHB4O3RleHQtYWxpZ246bGVmdH0KKy5hZl9wYW5lbEJveF90cmFuc3BhcmVudCBpbWcsLmFmX3BhbmVsQm94X2xpZ2h0IGltZywuYWZfcGFuZWxCb3hfbWVkaXVtIGltZywuYWZfcGFuZWxCb3hfZGFyayBpbWcsLmFmX3NlbGVjdE1hbnlTaHV0dGxlX2JveC1jb250ZW50IGltZywuYWZfc2VsZWN0T3JkZXJTaHV0dGxlX2JveC1jb250ZW50IGltZywuYWZfbWVudUJhciBpbWcsLmFmX21lc3NhZ2VzIGltZywuYWZfbWVudVRhYnMgaW1nIHt2ZXJ0aWNhbC1hbGlnbjpib3R0b219CisuYWZfcGFuZWxCb3hfbGlnaHQgLmFmX3BhbmVsQm94X2JvZHksLmFmX3NlbGVjdE1hbnlTaHV0dGxlX2JveC1jb250ZW50IC5hZl9zZWxlY3RNYW55U2h1dHRsZV9ib3gtYm9keSwuYWZfc2VsZWN0T3JkZXJTaHV0dGxlX2JveC1jb250ZW50IC5hZl9zZWxlY3RPcmRlclNodXR0bGVfYm94LWJvZHksLmFmX3BhbmVsU2lkZUJhcl9ib2R5LC5PcmFCR0FjY2VudExpZ2h0LC5Qb3J0bGV0Qm9keUNvbG9yLC5Qb3J0bGV0U3ViSGVhZGVyQ29sb3IsLmFmX21lc3NhZ2VzX2JvZHkge2JhY2tncm91bmQtY29sb3I6I2U5ZThlOH0KKy5hZl9wYW5lbEJveF9tZWRpdW0gLmFmX3BhbmVsQm94X2JvZHksLk9yYUJHQWNjZW50TWVkaXVtIHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmY2N9CisuYWZfcGFuZWxCb3hfZGFyayAuYWZfcGFuZWxCb3hfYm9keSwuT3JhQkdBY2NlbnREYXJrIHtiYWNrZ3JvdW5kLWNvbG9yOiNDQ0NDQ0N9CisuYWZfcGFuZWxCb3hfaGVhZGVyLC5Qb3J0bGV0SGVhZGVyQ29sb3Ige3dpZHRoOjEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9CisuYWZfcGFuZWxCb3hfbGlnaHQgLmFmX3BhbmVsQm94X2hlYWRlciB7YmFja2dyb3VuZC1jb2xvcjojOTljYzk5O2NvbG9yOiNmZmZmZmZ9CisuYWZfcGFuZWxQYWdlX2NvcHlyaWdodCwuYWZfcGFuZWxQYWdlX3ByaXZhY3ksLmFmX3BhbmVsUGFnZV9hYm91dCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZTo4cHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiMwMDAwMDA7d2hpdGUtc3BhY2U6bm93cmFwfQorLmFmX3BhbmVsUGFnZV9jb3B5cmlnaHQgQSwuYWZfcGFuZWxQYWdlX3ByaXZhY3kgQSwuYWZfcGFuZWxQYWdlX2Fib3V0IEEsLmFmX3RyYWluX2xpbmssLmFmX3BhbmVsVGFiYmVkX3RhYiBBLC5wX09yYVRyZWVSb3cgQTpsaW5rLC5wX09yYVRyZWVSb3cgQTphY3RpdmUsLnBfT3JhVHJlZVJvdyBBOnZpc2l0ZWQge2NvbG9yOiMwMDMzMzN9CisuYWZfcGFuZWxDYXB0aW9uR3JvdXAge2JvcmRlci1jb2xvcjojZTllOGU4fQorLmFmX3BhbmVsQ2FwdGlvbkdyb3VwX2NhcHRpb24sLk9yYVBhZ2VTdGFtcExhYmVsLC5PcmFUYWJsZUNvbnRyb2xCYXJUZXh0LC5wX09yYVRyZWVSb3dTZWxlY3RlZCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6IzY2OTk2Nn0KKy5hZl9wYW5lbFBvcHVwX3RyaWdnZXIge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6IzAwMzMzMzt0ZXh0LWRlY29yYXRpb246bm9uZTt3aGl0ZS1zcGFjZTpub3dyYXB9CisuYWZfcGFuZWxQb3B1cF9jbG9zZS1pY29uIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjExcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO3RleHQtYWxpZ246cmlnaHQ7cGFkZGluZy1sZWZ0OjVweH0KKy5hZl9tZW51QmFyIHtiYWNrZ3JvdW5kLWNvbG9yOiM2Njk5NjY7Y29sb3I6I2ZmZmZmZjtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO21pbi1oZWlnaHQ6NHB4fQorLmFmX21lbnVCYXJfZW5hYmxlZCwuYWZfbWVudUJhcl9zZWxlY3RlZCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDt3aGl0ZS1zcGFjZTpub3dyYXB9CisuYWZfbWVudUJhcl9lbmFibGVkIEEsLmFmX21lbnVCYXJfc2VsZWN0ZWQgQSB7Y29sb3I6I2ZmZmZmZn0KKy5hZl9tZW51QmFyX3NlcGFyYXRvciB7Y29sb3I6I2ZmZmZmZjtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsfQorLmFmX3RyZWVUYWJsZV9leHBhbnNpb24ge2NvbG9yOiM2Njk5NjY7cG9zaXRpb246YWJzb2x1dGU7dG9wOjBweDtsZWZ0Oi0xOHB4fQorLmFmX3RyZWVUYWJsZV9mb2N1cyB7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiM2Njk5NjY7Zm9udC1mYW1pbHk6bW9ub3NwYWNlfQorLmFmX3RyZWVUYWJsZV9sb2NhdG9yIHtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6Izk5OTk5OTtmb250LWZhbWlseTptb25vc3BhY2V9CisuYWZfc2hvd09uZVBhbmVsX2NvbnRhaW5lciB7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7Ym9yZGVyLXdpZHRoOjBweCAxcHggMXB4IDFweDtib3JkZXItc3R5bGU6c29saWR9CisuYWZfc2hvd09uZVBhbmVsX2hlYWRlci1jb2xsYXBzZWQge2JvcmRlci1jb2xvcjojOTk5OTk5O2hlaWdodDoyMXB4O3RleHQtZGVjb3JhdGlvbjpub25lO3doaXRlLXNwYWNlOm5vd3JhcDtwYWRkaW5nLXJpZ2h0OjVweDtib3JkZXItd2lkdGg6MXB4IDBweCAwcHggMHB4O2JvcmRlci1zdHlsZTpzb2xpZDtjdXJzb3I6cG9pbnRlcjtwYWRkaW5nLWxlZnQ6NXB4fQorLmFmX3Nob3dPbmVQYW5lbF9oZWFkZXItZXhwYW5kZWQge2JvcmRlci1jb2xvcjojOTk5OTk5O2hlaWdodDoyMXB4O3RleHQtZGVjb3JhdGlvbjpub25lO3doaXRlLXNwYWNlOm5vd3JhcDtwYWRkaW5nLXJpZ2h0OjVweDtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjFweCAwcHggMXB4IDBweDtwYWRkaW5nLWxlZnQ6MnB4fQorLmFmX3Nob3dPbmVQYW5lbF9oZWFkZXItZGlzYWJsZWQge2JvcmRlci1jb2xvcjojOTk5OTk5O2hlaWdodDoyMXB4O3RleHQtZGVjb3JhdGlvbjpub25lO3doaXRlLXNwYWNlOm5vd3JhcDtwYWRkaW5nLXJpZ2h0OjVweDtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjFweCAwcHggMHB4IDBweDtwYWRkaW5nLWxlZnQ6MThweH0KKy5hZl9zaG93T25lUGFuZWxfY29udGVudCB7dmVydGljYWwtYWxpZ246dG9wO21hcmdpbjo1cHh9CisuYWZfc2hvd09uZVBhbmVsX3RpdGxlLWxpbmsge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjojNjY5OTY2O2Rpc3BsYXk6YmxvY2s7cGFkZGluZy10b3A6MnB4O3RleHQtZGVjb3JhdGlvbjpub25lfQorLmFmX3Nob3dPbmVQYW5lbF90aXRsZS1kaXNhYmxlZC1saW5rIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiM5OTk5OTk7ZGlzcGxheTpibG9jaztwYWRkaW5nLXRvcDoycHg7dGV4dC1kZWNvcmF0aW9uOm5vbmV9CisuQUZIZWFkZXJMZXZlbE9uZSxIMS5hZl9wYW5lbEhlYWRlcixIMS5hZl9zaG93RGV0YWlsSGVhZGVyLC5hZl9tZXNzYWdlc19oZWFkZXIsLlBvcnRsZXRIZWFkZXJUZXh0LC5Qb3J0bGV0SGVhZGluZzEsLlBvcnRsZXRTdWJIZWFkZXJUZXh0LC5wb3J0bGV0LXNlY3Rpb24taGVhZGVyLC5wb3J0bGV0LXNlY3Rpb24tc3ViaGVhZGVyLC5wb3J0bGV0LXRhYmxlLWhlYWRlciwucG9ydGxldC10YWJsZS1zdWJoZWFkZXIge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTNwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6IzY2OTk2Nn0KKy5BRkhlYWRlckxldmVsVHdvLEgyLmFmX3BhbmVsSGVhZGVyLEgyLmFmX3Nob3dEZXRhaWxIZWFkZXIsLlBvcnRsZXRIZWFkaW5nMiB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMXB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojNjY5OTY2fQorLmFmX3BhbmVsSGVhZGVyX2Vycm9yLC5hZl9tZXNzYWdlc19lcnJvciwucG9ydGxldC1tc2ctZXJyb3Ige2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTNwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6I2NjMDAwMH0KKy5hZl9tZXNzYWdlcyB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojMzM2NjMzO3dpZHRoOjEwMCV9CisuYWZfbWVzc2FnZXNfbWVzc2FnZS10ZXh0LC5hZl9tZXNzYWdlc19saXN0LC5wb3J0bGV0LW1zZy1pbmZvIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiM2Njk5NjY7bWFyZ2luOjBweCAwcHggMHB4IDBweDtwYWRkaW5nOjVweCAzMHB4IDVweCAzMHB4fQorLmFmX3BhbmVsU2lkZUJhciB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojMzM2NjMzO2JvcmRlci1jb2xvcjojOTk5OTk5fQorLkFGU29ydGFibGVIZWFkZXJTb3J0SWNvbiB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZTo5cHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiM2Njk5NjZ9CisuYWZfbWVudVRhYnNfZW5hYmxlZCB7YmFja2dyb3VuZC1jb2xvcjojZTllOGU4O3doaXRlLXNwYWNlOm5vd3JhcH0KKy5hZl9tZW51VGFic19zZWxlY3RlZCB7YmFja2dyb3VuZC1jb2xvcjojNjY5OTY2O3doaXRlLXNwYWNlOm5vd3JhcH0KKy5hZl9tZW51VGFic19kaXNhYmxlZCB7YmFja2dyb3VuZC1jb2xvcjojZTllOGU4O2NvbG9yOiM5OTk5OTk7d2hpdGUtc3BhY2U6bm93cmFwfQorLmFmX21lbnVUYWJzX2VuYWJsZWQgQSB7Y29sb3I6IzMzNjYzM30KKy5hZl9tZW51VGFic19zZWxlY3RlZCBBIHtjb2xvcjojY2NmZmNjfQorLmFmX21lbnVUYWJzX3NlcGFyYXRvciB7d2lkdGg6MHB4fQorLmFmX3RhYmxlX2NvbnRlbnQsLmFmX3RyZWVUYWJsZV9jb250ZW50IHtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDoxcHh9CisuYWZfdGFibGVfY29udHJvbC1iYXItdG9wLC5hZl90cmVlVGFibGVfY29udHJvbC1iYXItdG9wIHtiYWNrZ3JvdW5kLWNvbG9yOiNlOWU4ZTg7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDoxcHggMXB4IDBweDtwYWRkaW5nOjFweCAycHh9CisuYWZfdGFibGVfY29udHJvbC1iYXItYm90dG9tLC5hZl90cmVlVGFibGVfY29udHJvbC1iYXItYm90dG9tIHtiYWNrZ3JvdW5kLWNvbG9yOiNlOWU4ZTg7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDowcHggMXB4IDFweDtwYWRkaW5nOjFweCAycHh9CisuYWZfdGFibGVfc3ViLWNvbnRyb2wtYmFyLC5hZl90cmVlVGFibGVfc3ViLWNvbnRyb2wtYmFyIHtib3JkZXItY29sb3I6Izk5OTk5OTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjFweCAxcHggMHB4O3BhZGRpbmc6MXB4IDJweH0KKy5hZl9jb2x1bW5fY2VsbC10ZXh0LC5wb3J0bGV0LXNlY3Rpb24tc2VsZWN0ZWQsLnBvcnRsZXQtdGFibGUtc2VsZWN0ZWQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6IzAwMDAwMDt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTtiYWNrZ3JvdW5kLWNvbG9yOiNlOWU4ZTg7Ym9yZGVyLWNvbG9yOiM5OTk5OTl9CisuYWZfY29sdW1uX2NlbGwtdGV4dC1iYW5kLC5wb3J0bGV0LXNlY3Rpb24tYWx0ZXJuYXRlLC5wb3J0bGV0LXRhYmxlLWFsdGVybmF0ZSB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojMDAwMDAwO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjtib3JkZXItY29sb3I6Izk5OTk5OX0KKy5hZl9jb2x1bW5fY2VsbC1udW1iZXIge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6IzAwMDAwMDt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTtiYWNrZ3JvdW5kLWNvbG9yOiNlOWU4ZTg7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7dGV4dC1hbGlnbjpyaWdodDtwYWRkaW5nLXJpZ2h0OjJweH0KKy5hZl9jb2x1bW5fY2VsbC1udW1iZXItYmFuZCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojMDAwMDAwO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjtib3JkZXItY29sb3I6Izk5OTk5OTt0ZXh0LWFsaWduOnJpZ2h0O3BhZGRpbmctcmlnaHQ6MnB4fQorLmFmX2NvbHVtbl9jZWxsLWljb24tZm9ybWF0LC5hZl90YWJsZVNlbGVjdE9uZV9jZWxsLWljb24tZm9ybWF0LC5hZl90YWJsZVNlbGVjdE1hbnlfY2VsbC1pY29uLWZvcm1hdCwuT3JhVGFibGVDZWxsU2VsZWN0LC5wb3J0bGV0LXNlY3Rpb24tdGV4dCwucG9ydGxldC10YWJsZS10ZXh0IHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiMwMDAwMDA7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7YmFja2dyb3VuZC1jb2xvcjojZTllOGU4O2JvcmRlci1jb2xvcjojOTk5OTk5O3RleHQtYWxpZ246Y2VudGVyfQorLmFmX2NvbHVtbl9jZWxsLWljb24tZm9ybWF0LWJhbmQsLmFmX3RhYmxlU2VsZWN0T25lX2NlbGwtaWNvbi1mb3JtYXQtYmFuZCwuYWZfdGFibGVTZWxlY3RNYW55X2NlbGwtaWNvbi1mb3JtYXQtYmFuZCwuT3JhVGFibGVDZWxsU2VsZWN0QmFuZCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojMDAwMDAwO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjtib3JkZXItY29sb3I6Izk5OTk5OTt0ZXh0LWFsaWduOmNlbnRlcn0KKy5hZl9jb2x1bW5faGVhZGVyLXRleHQge2JvcmRlci1jb2xvcjojOTk5OTk5O2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpib2xkO3RleHQtYWxpZ246bGVmdDtiYWNrZ3JvdW5kLWNvbG9yOiNDQ0NDQ0M7Y29sb3I6IzY2OTk2Njt2ZXJ0aWNhbC1hbGlnbjpib3R0b219CisuYWZfY29sdW1uX2hlYWRlci1udW1iZXIge2JvcmRlci1jb2xvcjojOTk5OTk5O2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpib2xkO2JhY2tncm91bmQtY29sb3I6I0NDQ0NDQztjb2xvcjojNjY5OTY2O3ZlcnRpY2FsLWFsaWduOmJvdHRvbTt0ZXh0LWFsaWduOnJpZ2h0fQorLmFmX2NvbHVtbl9oZWFkZXItaWNvbi1mb3JtYXQge2JvcmRlci1jb2xvcjojOTk5OTk5O2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpib2xkO2JhY2tncm91bmQtY29sb3I6I0NDQ0NDQztjb2xvcjojNjY5OTY2O3ZlcnRpY2FsLWFsaWduOmJvdHRvbTt0ZXh0LWFsaWduOmNlbnRlcn0KKy5hZl9jb2x1bW5fcm93LWhlYWRlci10ZXh0IHtib3JkZXItY29sb3I6Izk5OTk5OTtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOnJpZ2h0O2JhY2tncm91bmQtY29sb3I6I0NDQ0NDQztjb2xvcjojNjY5OTY2fQorLmFmX3RhYmxlX2RldGFpbCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojMDAwMDAwO2JvcmRlci1jb2xvcjojOTk5OTk5O2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZn0KKy5hZl90YWJsZV9jb2x1bW4tZm9vdGVyLC5wb3J0bGV0LXNlY3Rpb24tZm9vdGVyLC5wb3J0bGV0LXRhYmxlLWZvb3RlciB7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGQ7dGV4dC1hbGlnbjpsZWZ0O2JhY2tncm91bmQtY29sb3I6I0NDQ0NDQztjb2xvcjojNjY5OTY2fQorLk9yYVRhYmxlVG90YWwge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpib2xkO3RleHQtYWxpZ246cmlnaHQ7YmFja2dyb3VuZC1jb2xvcjojQ0NDQ0NDO2NvbG9yOiM2Njk5NjZ9CisuYWZfY29sdW1uX3RvdGFsLW51bWJlciB7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGQ7dGV4dC1hbGlnbjpyaWdodDtiYWNrZ3JvdW5kLWNvbG9yOiNDQ0NDQ0M7Y29sb3I6IzAwMDAwMDt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX0KKy5hZl9jb2x1bW5fdG90YWwtdGV4dCB7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGQ7dGV4dC1hbGlnbjpsZWZ0O2JhY2tncm91bmQtY29sb3I6I0NDQ0NDQztjb2xvcjojMDAwMDAwO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfQorLmFmX2NvbHVtbl9zb3J0YWJsZS1oZWFkZXItdGV4dCB7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGQ7dGV4dC1hbGlnbjpsZWZ0O2JhY2tncm91bmQtY29sb3I6I0NDQ0NDQztjb2xvcjojNjY5OTY2O3ZlcnRpY2FsLWFsaWduOmJvdHRvbTtjdXJzb3I6cG9pbnRlcjtib3JkZXItd2lkdGg6MnB4O2JvcmRlci1zdHlsZTpvdXRzZXR9CisuYWZfY29sdW1uX3NvcnRhYmxlLWhlYWRlci1udW1iZXIge2JvcmRlci1jb2xvcjojOTk5OTk5O2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpib2xkO2JhY2tncm91bmQtY29sb3I6I0NDQ0NDQztjb2xvcjojNjY5OTY2O3ZlcnRpY2FsLWFsaWduOmJvdHRvbTtjdXJzb3I6cG9pbnRlcjtib3JkZXItd2lkdGg6MnB4O2JvcmRlci1zdHlsZTpvdXRzZXQ7dGV4dC1hbGlnbjpyaWdodH0KKy5hZl9jb2x1bW5fc29ydGFibGUtaGVhZGVyLWljb24tZm9ybWF0IHtib3JkZXItY29sb3I6Izk5OTk5OTtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6Ym9sZDtiYWNrZ3JvdW5kLWNvbG9yOiNDQ0NDQ0M7Y29sb3I6IzY2OTk2Njt2ZXJ0aWNhbC1hbGlnbjpib3R0b207Y3Vyc29yOnBvaW50ZXI7Ym9yZGVyLXdpZHRoOjJweDtib3JkZXItc3R5bGU6b3V0c2V0O3RleHQtYWxpZ246Y2VudGVyfQorLmFmX3RyYWluX3N0b3AucF9BRlNlbGVjdGVkIHtjb2xvcjojNjY5OTY2O2ZvbnQtd2VpZ2h0OmJvbGR9CisuYWZfdHJhaW5fc3RvcDp2aXNpdGVkLC5hZl90cmFpbl9zdG9wOnZpc2l0ZWQgLmFmX3RyYWluX2xpbmsge2NvbG9yOiM2NjY2NjZ9CisuYWZfdHJhaW5fc3RvcC5wX0FGRGlzYWJsZWQsLmFmX3BhbmVsVGFiYmVkX3RhYiAucF9PcmFEaXNhYmxlZCB7Y29sb3I6Izk5OTk5OX0KKy5hZl90cmFpbl9zdG9wLnBfQUZVbnZpc2l0ZWQsLnBfT3JhQ29udGVudEZvb3RlclJ1bGUge2NvbG9yOiM2Njk5NjZ9CisuYWZfdHJhaW5fc3RvcC5wX0FGRGlzYWJsZWQgLmFmX3RyYWluX2xpbmsge2NvbG9yOiM2Njk5OTl9CisuT3JhQkdDb2xvclZlcnlEYXJrIHtiYWNrZ3JvdW5kLWNvbG9yOiMzMzY2MzN9CisuT3JhQkdDb2xvckRhcmssLmFmX21lbnVCYXJfYm9keSwuYWZfbWVudUJhcl90aXRsZSwuYWZfbWVudUJhcl9lbXB0eSB7YmFja2dyb3VuZC1jb2xvcjojNjY5OTY2fQorLk9yYUJHQ29sb3JNZWRpdW0ge2JhY2tncm91bmQtY29sb3I6Izk5Y2M5OX0KKy5PcmFCR0NvbG9yTGlnaHQge2JhY2tncm91bmQtY29sb3I6I2NjZmZjY30KKy5PcmFCR0dyYXlWZXJ5RGFyayB7YmFja2dyb3VuZC1jb2xvcjojMzMzMzMzfQorLk9yYUJHR3JheURhcmsge2JhY2tncm91bmQtY29sb3I6IzY2NjY2Nn0KKy5PcmFCR0dyYXlNZWRpdW0sLk9yYUJHQWNjZW50VmVyeURhcmssLk9yYVRhYmxlIHtiYWNrZ3JvdW5kLWNvbG9yOiM5OTk5OTl9CisuT3JhQkdHcmF5TGlnaHQge2JhY2tncm91bmQtY29sb3I6I2NjY2NjY30KKy5PcmFJbmxpbmVJbmZvVGV4dCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZTo4cHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiM2Njk5NjZ9CisuT3JhVGV4dElubGluZSB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZTo4cHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiM5OWNjOTl9CisuT3JhTWVzc2FnZUJveEVycm9yVGV4dCwuQUZFcnJvclRleHQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6I2NjMDAwMH0KKy5PcmFFcnJvck5hbWVUZXh0IHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjojY2MwMDAwfQorLk9yYUlubGluZUVycm9yVGV4dCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZTo4cHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiNjYzAwMDB9CisuT3JhR2xvYmFsUGFnZVRpdGxlIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEzcHQ7Y29sb3I6I2ZmZmZmZjtmb250LXdlaWdodDpib2xkfQorLnBfT3JhU2VsZWN0ZWQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpib2xkO2JhY2tncm91bmQtY29sb3I6I2NjZmZjYzt0ZXh0LWRlY29yYXRpb246bm9uZX0KKy5wX09yYUhpZGRlbkxhYmVsIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTk5OXB4O2xlZnQ6MHB4O2ZvbnQtc2l6ZTowcHh9CisucF9PcmFDb2xvckZpZWxkU3dhdGNoIHtib3JkZXItY29sb3I6IzAwMDAwMDtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjFweH0KKy5wX09yYUNvbG9yUGFsZXR0ZSB7YmFja2dyb3VuZC1jb2xvcjojMDAwMDAwfQorLnBfT3JhQ29sb3JQYWxldHRlRW1wdHlDZWxsIHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmZ9CisuYWZfaW5wdXREYXRlX25hdiBBLC5hZl9jaG9vc2VEYXRlX25hdiBBIHtjb2xvcjojMDAzMzMzO3RleHQtZGVjb3JhdGlvbjpub25lfQorLmFmX2lucHV0RGF0ZV90aXRsZSwuYWZfY2hvb3NlRGF0ZV90aXRsZSB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B0O2ZvbnQtd2VpZ2h0Om5vcm1hbDt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY7Y29sb3I6IzY2OTk2NjtwYWRkaW5nOjJweH0KKy5hZl9pbnB1dERhdGVfaGVhZGVyLC5hZl9jaG9vc2VEYXRlX2hlYWRlciB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGQ7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6IzY2OTk2NjtwYWRkaW5nOjJweH0KKy5hZl9pbnB1dERhdGVfY29udGVudCBBLC5hZl9jaG9vc2VEYXRlX2NvbnRlbnQgQSB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojMDAzMzMzfQorLmFmX2Nob29zZURhdGVfY29udGVudCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojOTk5OTk5O3RleHQtZGVjb3JhdGlvbjpub25lO2JvcmRlci13aWR0aDoxcHg7Ym9yZGVyLXN0eWxlOnNvbGlkO3BhZGRpbmc6MnB4fQorLnBfT3JhQ29udGVudEZvb3RlclN0YXJ0IHtmbG9hdDpsZWZ0fQorLnBfT3JhQ29udGVudEZvb3RlckJvdHRvbSB7Y2xlYXI6Ym90aDttYXJnaW4tYm90dG9tOjVweH0KKy5wX09yYUZvb3RlciB7dGV4dC1hbGlnbjpjZW50ZXJ9CisucF9PcmFGb290ZXJCb3R0b20ge3BhZGRpbmctdG9wOjVweH0KKy5wX09yYUhlYWRlck5lc3Qge21hcmdpbjo1cHggMHB4IDBweCAxMnB4fQorLk9yYUhHcmlkTG9jYXRvckhlYWRlciB7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7YmFja2dyb3VuZC1jb2xvcjojZTllOGU4fQorLnBfT3JhSGlkZVNob3dEaXNjbG9zZWRTeW1ib2wsLmFmX3BhbmVsVGFiYmVkX3RhYi1zZWxlY3RlZCBBLC5wX09yYVRyZWVEaXNjbG9zZWRTeW1ib2wgQTpsaW5rLC5wX09yYVRyZWVEaXNjbG9zZWRTeW1ib2wgQTphY3RpdmUsLnBfT3JhVHJlZURpc2Nsb3NlZFN5bWJvbCBBOnZpc2l0ZWQsLnBfT3JhVHJlZVJvd1NlbGVjdGVkIEE6bGluaywucF9PcmFUcmVlUm93U2VsZWN0ZWQgQTphY3RpdmUsLnBfT3JhVHJlZVJvd1NlbGVjdGVkIEE6dmlzaXRlZCB7Y29sb3I6IzY2OTk2Njt0ZXh0LWRlY29yYXRpb246bm9uZX0KKy5hZl9tZXNzYWdlc19saXN0LXNpbmdsZSB7bGlzdC1zdHlsZS10eXBlOm5vbmV9CisucF9PcmFRdWlja1NlYXJjaEJveCB7YmFja2dyb3VuZC1jb2xvcjojZTllOGU4O2JvcmRlci1jb2xvcjojQ0NDQ0NDO2JvcmRlci1zdHlsZTpzb2xpZDtwYWRkaW5nOjBwdCA1cHQgNXB0IDVwdDtib3JkZXItd2lkdGg6MHB4IDBweCAxcHggMXB4fQorLnBfT3JhR2xvYmFsUXVpY2sge2JvcmRlci1jb2xvcjojQ0NDQ0NDO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MHB4IDBweCAwcHggMXB4fQorLnBfT3JhUHJvY2Vzc2luZ1N0YXR1cyB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6IzY2OTk2Njtib3JkZXItY29sb3I6Izk5Y2M5OTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjFweH0KKy5wX09yYVByb2R1Y3RCcmFuZGluZ1RleHQge2NvbG9yOiM2Njk5NjY7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1mYW1pbHk6R2FyYW1vbmQsIFRpbWVzLCBUaW1lcyBOZXcgUm9tYW4sIFNlcmlmO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MjRwdDtsaW5lLWhlaWdodDoyOC44cHQ7dG9wOi00LjhwdH0KKy5wX09yYVByb2R1Y3RCcmFuZGluZ0NvbXBhY3RUZXh0IHtjb2xvcjojNjY5OTY2O2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTNwdDttYXJnaW4tYm90dG9tOjBweDttYXJnaW4tdG9wOjBweDtmb250LXdlaWdodDpib2xkfQorLk9yYVNodXR0bGVIZWFkZXIge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6OXB0O2NvbG9yOiM2Njk5NjY7Zm9udC13ZWlnaHQ6Ym9sZDtwYWRkaW5nOjBweCAwcHggMHB4IDE4cHh9CisuT3JhU2h1dHRsZUxpbmtUZXh0IHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjlwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6IzAwMzMzM30KKy5wX09yYVNpZGVCYXJNaW5XaWR0aCB7d2lkdGg6MTQwcHh9CisuT3JhU3R5bGVkTGlzdCB7bGlzdC1zdHlsZS1wb3NpdGlvbjppbnNpZGU7cGFkZGluZzowcHg7bWFyZ2luOjBweH0KKy5PcmFTdHlsZWRMaXN0IC5PcmFTdHlsZWRMaXN0IHtwYWRkaW5nOjBwdCAwcHQgMHB0IDEwcHR9CisuYWZfcGFuZWxUYWJiZWRfdGFiIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO3BhZGRpbmc6MHB4IDhweH0KKy5hZl9wYW5lbFRhYmJlZF90YWItc2VsZWN0ZWQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpib2xkO3BhZGRpbmc6MHB4IDhweH0KKy5hZl9wYW5lbFRhYmJlZF9jZWxsLXN0YXJ0IHt3aWR0aDowJX0KKy5hZl9wYW5lbFRhYmJlZF9jZWxsLWVuZCB7d2lkdGg6MTAwJX0KKy5PcmFUYWJsZUJvcmRlcjAwMDEge2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MHB4IDBweCAwcHggMXB4fQorLk9yYVRhYmxlQm9yZGVyMDAxMCB7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDowcHggMHB4IDFweH0KKy5PcmFUYWJsZUJvcmRlcjAwMTEge2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MHB4IDBweCAxcHggMXB4fQorLk9yYVRhYmxlQm9yZGVyMDEwMCB7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDowcHggMXB4IDBweCAwcHh9CisuT3JhVGFibGVCb3JkZXIwMTAxIHtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjBweCAxcHh9CisuT3JhVGFibGVCb3JkZXIwMTEwIHtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjBweCAxcHggMXB4IDBweH0KKy5PcmFUYWJsZUJvcmRlcjAxMTEge2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MHB4IDFweCAxcHh9CisuT3JhVGFibGVCb3JkZXIxMDAwIHtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjFweCAwcHggMHB4fQorLk9yYVRhYmxlQm9yZGVyMTAwMSB7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDoxcHggMHB4IDBweCAxcHh9CisuT3JhVGFibGVCb3JkZXIxMDEwIHtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjFweCAwcHh9CisuT3JhVGFibGVCb3JkZXIxMDExIHtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjFweCAwcHggMXB4IDFweH0KKy5PcmFUYWJsZUJvcmRlcjExMDAge2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MXB4IDFweCAwcHggMHB4fQorLk9yYVRhYmxlQm9yZGVyMTEwMSB7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDoxcHggMXB4IDBweH0KKy5PcmFUYWJsZUJvcmRlcjExMTAge2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MXB4IDFweCAxcHggMHB4fQorLk9yYVRhYmxlQm9yZGVyMTExMSB7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDoxcHh9CisuT3JhVGFibGVUaXRsZSB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY7Y29sb3I6IzY2OTk2Nn0KKy5wX09yYVRyZWVEaXNjbG9zZWRTeW1ib2wge2NvbG9yOiM2Njk5NjY7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDt0ZXh0LWFsaWduOnJpZ2h0fQorLnBfT3JhVHJlZU5vZGVBZGp1c3Qge3BhZGRpbmctYm90dG9tOjJweH0KKy5hZl9jaGFydCB7d2lkdGg6NDAwcHg7aGVpZ2h0OjMwMHB4O2JhY2tncm91bmQtY29sb3I6d2hpdGV9CisucF9PcmFPbmVQaXhlbExpbmUge2JhY2tncm91bmQtY29sb3I6I0NDQ0NDQztmb250LXNpemU6MHB0O292ZXJmbG93OmhpZGRlbjtoZWlnaHQ6MXB4O3dpZHRoOjEwMCV9CisucF9PcmFEaXNwbGF5QmxvY2sge2Rpc3BsYXk6YmxvY2t9CisucF9PcmFIaWRlU2tpcE5hdmlUZXh0IHtmb250LXNpemU6MHB0O21hcmdpbi10b3A6MHB4O21hcmdpbi1sZWZ0Oi05OTlweH0KKy5Qb3J0bGV0SGVhZGVyTGluaywuUG9ydGxldFN1YkhlYWRlckxpbmsge2NvbG9yOiNmZmZmZmY7dGV4dC1kZWNvcmF0aW9uOm5vbmV9CisuQUZMb2dvIHt3aWR0aDoxMDNweDtoZWlnaHQ6MTNweDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1wb3NpdGlvbjpjZW50ZXI7dmVydGljYWwtYWxpZ246bWlkZGxlO2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy9sb2dvLWRhcmsuZ2lmKX0KK2JvZHkge21hcmdpbi10b3A6OHB4fQorLnBfT3JhTmF2MiB7Ym9yZGVyLWNvbG9yOiM5OWNjOTl9CisuYWZfbmF2aWdhdGlvblBhbmUge2hlaWdodDoyNXB4fQorLyogVGhlIG51bWJlciBvZiBDU1Mgc2VsZWN0b3JzIGluIHRoaXMgZmlsZSBpcyA1NDggKi8KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlL2pzcHNlYXJjaC8yNDU0MjczNTguaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS9qc3BzZWFyY2gvMjQ1NDI3MzU4LmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5N2MwNTIKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS9qc3BzZWFyY2gvMjQ1NDI3MzU4LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlL2pzcHNlYXJjaC8yNTE0NzYxMzY5LmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUvanNwc2VhcmNoLzI1MTQ3NjEzNjkuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M5NTVmMAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlL2pzcHNlYXJjaC8yNTE0NzYxMzY5LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlL3RhZ2xpYmluZGV4LzE5ODMwNjA0OTguZGF0IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUvdGFnbGliaW5kZXgvMTk4MzA2MDQ5OC5kYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU2YzE5MgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlL3RhZ2xpYmluZGV4LzE5ODMwNjA0OTguZGF0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlL3RhZ2xpYmluZGV4LzIwMDI0NTgyMjEuZGF0IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUvdGFnbGliaW5kZXgvMjAwMjQ1ODIyMS5kYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU2YzE5MgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlL3RhZ2xpYmluZGV4LzIwMDI0NTgyMjEuZGF0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlL3RhZ2xpYmluZGV4LzI5NDM4NTE5NjUuZGF0IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUvdGFnbGliaW5kZXgvMjk0Mzg1MTk2NS5kYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU2YzE5MgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlL3RhZ2xpYmluZGV4LzI5NDM4NTE5NjUuZGF0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlL3RhZ2xpYmluZGV4LzI5NTg5MzUzMTYuZGF0IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUvdGFnbGliaW5kZXgvMjk1ODkzNTMxNi5kYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU2YzE5MgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlL3RhZ2xpYmluZGV4LzI5NTg5MzUzMTYuZGF0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlL3RhZ2xpYmluZGV4LzM5MDAzOTc1MzkuZGF0IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUvdGFnbGliaW5kZXgvMzkwMDM5NzUzOS5kYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU2YzE5MgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlL3RhZ2xpYmluZGV4LzM5MDAzOTc1MzkuZGF0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2RpYWxvZ19zZXR0aW5ncy54bWwgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9kaWFsb2dfc2V0dGluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYTBiNzcKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9kaWFsb2dfc2V0dGluZ3MueG1sCkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzZWN0aW9uIG5hbWU9IldvcmtiZW5jaCI+Cis8L3NlY3Rpb24+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC53cy5qYXhycy5jb3JlL0pBWFJTTGlicmFyeVJlZ2lzdHJ5LnhtbCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLmNvcmUvSkFYUlNMaWJyYXJ5UmVnaXN0cnkueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YTQ0MWEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC53cy5qYXhycy5jb3JlL0pBWFJTTGlicmFyeVJlZ2lzdHJ5LnhtbApAQCAtMCwwICsxLDIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkFTQ0lJIj8+Cis8amF4cnNsaWJyZWc6SkFYUlNMaWJyYXJ5UmVnaXN0cnkgeG1sbnM6amF4cnNsaWJyZWc9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvamF4cnMvc2NoZW1hL2pheHJzbGlicmFyeXJlZ2lzdHJ5LnhzZCIvPgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkvZGlhbG9nX3NldHRpbmdzLnhtbCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpL2RpYWxvZ19zZXR0aW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNhMGI3NwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLnVpL2RpYWxvZ19zZXR0aW5ncy54bWwKQEAgLTAsMCArMSwzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHNlY3Rpb24gbmFtZT0iV29ya2JlbmNoIj4KKzwvc2VjdGlvbj4KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy8ud29ya3NwYWNlLzIwMTkvMTEvNDcvcmVmYWN0b3JpbmdzLmhpc3RvcnkgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvLndvcmtzcGFjZS8yMDE5LzExLzQ3L3JlZmFjdG9yaW5ncy5oaXN0b3J5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYTY1YmEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvLndvcmtzcGFjZS8yMDE5LzExLzQ3L3JlZmFjdG9yaW5ncy5oaXN0b3J5CkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzZXNzaW9uIHZlcnNpb249IjEuMCI+JiN4MEE7PHJlZmFjdG9yaW5nIGNvbW1lbnQ9IkRlbGV0ZSByZXNvdXJjZSAmYXBvcztnbGVtbSZhcG9zOyIgZGVsZXRlQ29udGVudHM9ImZhbHNlIiBkZXNjcmlwdGlvbj0iRGVsZXRlIHJlc291cmNlICZhcG9zO2dsZW1tJmFwb3M7IiBlbGVtZW50MT0iL2dsZW1tIiBmbGFncz0iNyIgaWQ9Im9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmRlbGV0ZS5yZXNvdXJjZXMiIHJlc291cmNlcz0iMSIgc3RhbXA9IjE1NzQyNjUwNzM5NzEiLz4mI3gwQTs8cmVmYWN0b3JpbmcgY29tbWVudD0iRGVsZXRlIHJlc291cmNlICZhcG9zO0dMRU1NLVNlcnZpY2UmYXBvczsiIGRlbGV0ZUNvbnRlbnRzPSJmYWxzZSIgZGVzY3JpcHRpb249IkRlbGV0ZSByZXNvdXJjZSAmYXBvcztHTEVNTS1TZXJ2aWNlJmFwb3M7IiBlbGVtZW50MT0iL0dMRU1NLVNlcnZpY2UiIGZsYWdzPSI3IiBpZD0ib3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZGVsZXRlLnJlc291cmNlcyIgcmVzb3VyY2VzPSIxIiBzdGFtcD0iMTU3NDI2NTE1ODg1MiIvPiYjeDBBOzxyZWZhY3RvcmluZyBjb21tZW50PSJEZWxldGUgcmVzb3VyY2UgJmFwb3M7R0xFTU0tU2VydmljZXMmYXBvczsiIGRlbGV0ZUNvbnRlbnRzPSJmYWxzZSIgZGVzY3JpcHRpb249IkRlbGV0ZSByZXNvdXJjZSAmYXBvcztHTEVNTS1TZXJ2aWNlcyZhcG9zOyIgZWxlbWVudDE9Ii9HTEVNTS1TZXJ2aWNlcyIgZmxhZ3M9IjciIGlkPSJvcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5kZWxldGUucmVzb3VyY2VzIiByZXNvdXJjZXM9IjEiIHN0YW1wPSIxNTc0MjY1MTY0NTQyIi8+JiN4MEE7PHJlZmFjdG9yaW5nIGNvbW1lbnQ9IkRlbGV0ZSByZXNvdXJjZSAmYXBvcztHbGVtbVNlcnZpY2VzJmFwb3M7IiBkZWxldGVDb250ZW50cz0iZmFsc2UiIGRlc2NyaXB0aW9uPSJEZWxldGUgcmVzb3VyY2UgJmFwb3M7R2xlbW1TZXJ2aWNlcyZhcG9zOyIgZWxlbWVudDE9Ii9HbGVtbVNlcnZpY2VzIiBmbGFncz0iNyIgaWQ9Im9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmRlbGV0ZS5yZXNvdXJjZXMiIHJlc291cmNlcz0iMSIgc3RhbXA9IjE1NzQyNjUxNjg1MjEiLz4mI3gwQTs8cmVmYWN0b3JpbmcgY29tbWVudD0iRGVsZXRlIHJlc291cmNlICZhcG9zO0dsZW1tU2VydmljZXMmYXBvczsiIGRlbGV0ZUNvbnRlbnRzPSJmYWxzZSIgZGVzY3JpcHRpb249IkRlbGV0ZSByZXNvdXJjZSAmYXBvcztHbGVtbVNlcnZpY2VzJmFwb3M7IiBlbGVtZW50MT0iL0dsZW1tU2VydmljZXMiIGZsYWdzPSI3IiBpZD0ib3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZGVsZXRlLnJlc291cmNlcyIgcmVzb3VyY2VzPSIxIiBzdGFtcD0iMTU3NDI2NTU5Mzc2OCIvPiYjeDBBOzxyZWZhY3RvcmluZyBjb21tZW50PSJEZWxldGUgcmVzb3VyY2UgJmFwb3M7R3Vlc3QmYXBvczsiIGRlbGV0ZUNvbnRlbnRzPSJmYWxzZSIgZGVzY3JpcHRpb249IkRlbGV0ZSByZXNvdXJjZSAmYXBvcztHdWVzdCZhcG9zOyIgZWxlbWVudDE9Ii9HdWVzdCIgZmxhZ3M9IjciIGlkPSJvcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5kZWxldGUucmVzb3VyY2VzIiByZXNvdXJjZXM9IjEiIHN0YW1wPSIxNTc0MjY1NTk5NDY3Ii8+JiN4MEE7PHJlZmFjdG9yaW5nIGNvbW1lbnQ9IkRlbGV0ZSByZXNvdXJjZSAmYXBvcztHTEVNTS1TZXJ2aWNlcyZhcG9zOyIgZGVsZXRlQ29udGVudHM9ImZhbHNlIiBkZXNjcmlwdGlvbj0iRGVsZXRlIHJlc291cmNlICZhcG9zO0dMRU1NLVNlcnZpY2VzJmFwb3M7IiBlbGVtZW50MT0iL0dMRU1NLVNlcnZpY2VzIiBmbGFncz0iNyIgaWQ9Im9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmRlbGV0ZS5yZXNvdXJjZXMiIHJlc291cmNlcz0iMSIgc3RhbXA9IjE1NzQzMjU4ODYxNTMiLz4mI3gwQTs8cmVmYWN0b3JpbmcgY29tbWVudD0iRGVsZXRlIHJlc291cmNlICZhcG9zO2dsZW1tJmFwb3M7IiBkZWxldGVDb250ZW50cz0iZmFsc2UiIGRlc2NyaXB0aW9uPSJEZWxldGUgcmVzb3VyY2UgJmFwb3M7Z2xlbW0mYXBvczsiIGVsZW1lbnQxPSIvZ2xlbW0iIGZsYWdzPSI3IiBpZD0ib3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZGVsZXRlLnJlc291cmNlcyIgcmVzb3VyY2VzPSIxIiBzdGFtcD0iMTU3NDMyNTkxMTc3NiIvPgorPC9zZXNzaW9uPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy8ud29ya3NwYWNlLzIwMTkvMTEvNDcvcmVmYWN0b3JpbmdzLmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzLy53b3Jrc3BhY2UvMjAxOS8xMS80Ny9yZWZhY3RvcmluZ3MuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg0ZjZkMAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy8ud29ya3NwYWNlLzIwMTkvMTEvNDcvcmVmYWN0b3JpbmdzLmluZGV4CkBAIC0wLDAgKzEsOCBAQAorMTU3NDI2NTA3Mzk3MQlEZWxldGUgcmVzb3VyY2UgJ2dsZW1tJworMTU3NDI2NTE1ODg1MglEZWxldGUgcmVzb3VyY2UgJ0dMRU1NLVNlcnZpY2UnCisxNTc0MjY1MTY0NTQyCURlbGV0ZSByZXNvdXJjZSAnR0xFTU0tU2VydmljZXMnCisxNTc0MjY1MTY4NTIxCURlbGV0ZSByZXNvdXJjZSAnR2xlbW1TZXJ2aWNlcycKKzE1NzQyNjU1OTM3NjgJRGVsZXRlIHJlc291cmNlICdHbGVtbVNlcnZpY2VzJworMTU3NDI2NTU5OTQ2NwlEZWxldGUgcmVzb3VyY2UgJ0d1ZXN0JworMTU3NDMyNTg4NjE1MwlEZWxldGUgcmVzb3VyY2UgJ0dMRU1NLVNlcnZpY2VzJworMTU3NDMyNTkxMTc3NglEZWxldGUgcmVzb3VyY2UgJ2dsZW1tJwpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzLy53b3Jrc3BhY2UvMjAyMC80LzE3L3JlZmFjdG9yaW5ncy5oaXN0b3J5IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzLy53b3Jrc3BhY2UvMjAyMC80LzE3L3JlZmFjdG9yaW5ncy5oaXN0b3J5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYzg1MjMKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvLndvcmtzcGFjZS8yMDIwLzQvMTcvcmVmYWN0b3JpbmdzLmhpc3RvcnkKQEAgLTAsMCArMSwzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHNlc3Npb24gdmVyc2lvbj0iMS4wIj4mI3gwQTs8cmVmYWN0b3JpbmcgY29tbWVudD0iRGVsZXRlIHJlc291cmNlICZhcG9zO0pzb25UcmF2ZXJzZSZhcG9zOyIgZGVsZXRlQ29udGVudHM9InRydWUiIGRlc2NyaXB0aW9uPSJEZWxldGUgcmVzb3VyY2UgJmFwb3M7SnNvblRyYXZlcnNlJmFwb3M7IiBlbGVtZW50MT0iL0pzb25UcmF2ZXJzZSIgZmxhZ3M9IjciIGlkPSJvcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5kZWxldGUucmVzb3VyY2VzIiByZXNvdXJjZXM9IjEiIHN0YW1wPSIxNTg3NTc3MTEzMzgwIi8+JiN4MEE7PHJlZmFjdG9yaW5nIGNvbW1lbnQ9IlJlbmFtZSByZXNvdXJjZSAmYXBvczt3Zm9ybVNlcnZpY2VzJmFwb3M7IHRvICZhcG9zO3dmb3JtU2VydmljZXMtd3JvbmcmYXBvczsiIGRlc2NyaXB0aW9uPSJSZW5hbWUgcmVzb3VyY2UgJmFwb3M7d2Zvcm1TZXJ2aWNlcyZhcG9zOyIgZmxhZ3M9IjciIGlkPSJvcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5yZW5hbWUucmVzb3VyY2UiIGlucHV0PSIvd2Zvcm1TZXJ2aWNlcyIgbmFtZT0id2Zvcm1TZXJ2aWNlcy13cm9uZyIgc3RhbXA9IjE1ODc3NDEwOTU0OTgiIHVwZGF0ZVJlZmVyZW5jZXM9InRydWUiLz4mI3gwQTs8cmVmYWN0b3JpbmcgY29tbWVudD0iUmVuYW1lIHJlc291cmNlICZhcG9zO3dmb3JtU2VydmljZXMyJmFwb3M7IHRvICZhcG9zO3dmb3JtU2VydmljZXMmYXBvczsiIGRlc2NyaXB0aW9uPSJSZW5hbWUgcmVzb3VyY2UgJmFwb3M7d2Zvcm1TZXJ2aWNlczImYXBvczsiIGZsYWdzPSI3IiBpZD0ib3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucmVuYW1lLnJlc291cmNlIiBpbnB1dD0iL3dmb3JtU2VydmljZXMyIiBuYW1lPSJ3Zm9ybVNlcnZpY2VzIiBzdGFtcD0iMTU4Nzc0MTEwODQ5NSIgdXBkYXRlUmVmZXJlbmNlcz0idHJ1ZSIvPiYjeDBBOzxyZWZhY3RvcmluZyBjb21tZW50PSJEZWxldGUgcmVzb3VyY2UgJmFwb3M7d2Zvcm1TZXJ2aWNlcy13cm9uZyZhcG9zOyIgZGVsZXRlQ29udGVudHM9InRydWUiIGRlc2NyaXB0aW9uPSJEZWxldGUgcmVzb3VyY2UgJmFwb3M7d2Zvcm1TZXJ2aWNlcy13cm9uZyZhcG9zOyIgZWxlbWVudDE9Ii93Zm9ybVNlcnZpY2VzLXdyb25nIiBmbGFncz0iNyIgaWQ9Im9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmRlbGV0ZS5yZXNvdXJjZXMiIHJlc291cmNlcz0iMSIgc3RhbXA9IjE1ODc3NDI3Njk1NDAiLz4KKzwvc2Vzc2lvbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvLndvcmtzcGFjZS8yMDIwLzQvMTcvcmVmYWN0b3JpbmdzLmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzLy53b3Jrc3BhY2UvMjAyMC80LzE3L3JlZmFjdG9yaW5ncy5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDBiMGFiCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzLy53b3Jrc3BhY2UvMjAyMC80LzE3L3JlZmFjdG9yaW5ncy5pbmRleApAQCAtMCwwICsxLDQgQEAKKzE1ODc1NzcxMTMzODAJRGVsZXRlIHJlc291cmNlICdKc29uVHJhdmVyc2UnCisxNTg3NzQxMDk1NDk4CVJlbmFtZSByZXNvdXJjZSAnd2Zvcm1TZXJ2aWNlcycKKzE1ODc3NDExMDg0OTUJUmVuYW1lIHJlc291cmNlICd3Zm9ybVNlcnZpY2VzMicKKzE1ODc3NDI3Njk1NDAJRGVsZXRlIHJlc291cmNlICd3Zm9ybVNlcnZpY2VzLXdyb25nJwpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzLy53b3Jrc3BhY2UvMjAyMC82LzI1L3JlZmFjdG9yaW5ncy5oaXN0b3J5IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzLy53b3Jrc3BhY2UvMjAyMC82LzI1L3JlZmFjdG9yaW5ncy5oaXN0b3J5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MWQyZjUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvLndvcmtzcGFjZS8yMDIwLzYvMjUvcmVmYWN0b3JpbmdzLmhpc3RvcnkKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHNlc3Npb24gdmVyc2lvbj0iMS4wIj4KKzxyZWZhY3RvcmluZyBjb21tZW50PSJSZW5hbWUgSmF2YSBwcm9qZWN0ICZhcG9zO0dsZW1tU2VydmljZXMyJmFwb3M7IHRvICZhcG9zO0dsZW1tU2VydmljZXMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIGVsZW1lbnQ6ICZhcG9zO0dsZW1tU2VydmljZXMyJmFwb3M7JiN4MEQ7JiN4MEE7LSBSZW5hbWVkIGVsZW1lbnQ6ICZhcG9zO0dsZW1tU2VydmljZXMyJmFwb3M7JiN4MEQ7JiN4MEE7LSBVcGRhdGUgcmVmZXJlbmNlcyB0byByZWZhY3RvcmVkIGVsZW1lbnQiIGRlc2NyaXB0aW9uPSJSZW5hbWUgSmF2YSBwcm9qZWN0ICZhcG9zO0dsZW1tU2VydmljZXMyJmFwb3M7IiBmbGFncz0iNyIgaWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5yZW5hbWUuamF2YS5wcm9qZWN0IiBpbnB1dD0iPUdsZW1tU2VydmljZXMyIiBuYW1lPSJHbGVtbVNlcnZpY2VzIiByZWZlcmVuY2VzPSJ0cnVlIiBzdGFtcD0iMTU5MjQxNzMzNjI4MyIgdmVyc2lvbj0iMS4wIi8+Cis8L3Nlc3Npb24+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzLy53b3Jrc3BhY2UvMjAyMC82LzI1L3JlZmFjdG9yaW5ncy5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy8ud29ya3NwYWNlLzIwMjAvNi8yNS9yZWZhY3RvcmluZ3MuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JiODQ2YwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy8ud29ya3NwYWNlLzIwMjAvNi8yNS9yZWZhY3RvcmluZ3MuaW5kZXgKQEAgLTAsMCArMSBAQAorMTU5MjQxNzMzNjI4MwlSZW5hbWUgSmF2YSBwcm9qZWN0ICdHbGVtbVNlcnZpY2VzMicKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy8ud29ya3NwYWNlLzIwMjEvOS8zOS9yZWZhY3RvcmluZ3MuaGlzdG9yeSBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy8ud29ya3NwYWNlLzIwMjEvOS8zOS9yZWZhY3RvcmluZ3MuaGlzdG9yeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzUzMjRmCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzLy53b3Jrc3BhY2UvMjAyMS85LzM5L3JlZmFjdG9yaW5ncy5oaXN0b3J5CkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzZXNzaW9uIHZlcnNpb249IjEuMCI+JiN4MEE7PHJlZmFjdG9yaW5nIGNvbW1lbnQ9IkRlbGV0ZSByZXNvdXJjZSAmYXBvcztHbGVtbUNsaWVudCZhcG9zOyIgZGVsZXRlQ29udGVudHM9ImZhbHNlIiBkZXNjcmlwdGlvbj0iRGVsZXRlIHJlc291cmNlICZhcG9zO0dsZW1tQ2xpZW50JmFwb3M7IiBlbGVtZW50MT0iL0dsZW1tQ2xpZW50IiBmbGFncz0iNyIgaWQ9Im9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmRlbGV0ZS5yZXNvdXJjZXMiIHJlc291cmNlcz0iMSIgc3RhbXA9IjE2MzI4MTM3MjEyMjMiLz4mI3gwQTs8cmVmYWN0b3JpbmcgY29tbWVudD0iRGVsZXRlIHJlc291cmNlICZhcG9zO0dsZW1tU2VydmljZXMmYXBvczsiIGRlbGV0ZUNvbnRlbnRzPSJmYWxzZSIgZGVzY3JpcHRpb249IkRlbGV0ZSByZXNvdXJjZSAmYXBvcztHbGVtbVNlcnZpY2VzJmFwb3M7IiBlbGVtZW50MT0iL0dsZW1tU2VydmljZXMiIGZsYWdzPSI3IiBpZD0ib3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZGVsZXRlLnJlc291cmNlcyIgcmVzb3VyY2VzPSIxIiBzdGFtcD0iMTYzMjgxMzk3MzcxMiIvPiYjeDBBOzxyZWZhY3RvcmluZyBjb21tZW50PSJEZWxldGUgcmVzb3VyY2UgJmFwb3M7SnNvblRyYXZlcnNlJmFwb3M7IiBkZWxldGVDb250ZW50cz0iZmFsc2UiIGRlc2NyaXB0aW9uPSJEZWxldGUgcmVzb3VyY2UgJmFwb3M7SnNvblRyYXZlcnNlJmFwb3M7IiBlbGVtZW50MT0iL0pzb25UcmF2ZXJzZSIgZmxhZ3M9IjciIGlkPSJvcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5kZWxldGUucmVzb3VyY2VzIiByZXNvdXJjZXM9IjEiIHN0YW1wPSIxNjMyODE1MTEyOTE4Ii8+JiN4MEE7PHJlZmFjdG9yaW5nIGNvbW1lbnQ9IkRlbGV0ZSByZXNvdXJjZSAmYXBvcztUZXN0cyZhcG9zOyIgZGVsZXRlQ29udGVudHM9ImZhbHNlIiBkZXNjcmlwdGlvbj0iRGVsZXRlIHJlc291cmNlICZhcG9zO1Rlc3RzJmFwb3M7IiBlbGVtZW50MT0iL1Rlc3RzIiBmbGFncz0iNyIgaWQ9Im9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmRlbGV0ZS5yZXNvdXJjZXMiIHJlc291cmNlcz0iMSIgc3RhbXA9IjE2MzI4MTUxNTU3NDciLz4mI3gwQTs8cmVmYWN0b3JpbmcgY29tbWVudD0iRGVsZXRlIHJlc291cmNlICZhcG9zO1V0aWxzJmFwb3M7IiBkZWxldGVDb250ZW50cz0iZmFsc2UiIGRlc2NyaXB0aW9uPSJEZWxldGUgcmVzb3VyY2UgJmFwb3M7VXRpbHMmYXBvczsiIGVsZW1lbnQxPSIvVXRpbHMiIGZsYWdzPSI3IiBpZD0ib3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZGVsZXRlLnJlc291cmNlcyIgcmVzb3VyY2VzPSIxIiBzdGFtcD0iMTYzMjgxNTE4NTE1NyIvPiYjeDBBOzxyZWZhY3RvcmluZyBjb21tZW50PSJEZWxldGUgcmVzb3VyY2UgJmFwb3M7d2Zvcm1TZXJ2aWNlSmFyJmFwb3M7IiBkZWxldGVDb250ZW50cz0iZmFsc2UiIGRlc2NyaXB0aW9uPSJEZWxldGUgcmVzb3VyY2UgJmFwb3M7d2Zvcm1TZXJ2aWNlSmFyJmFwb3M7IiBlbGVtZW50MT0iL3dmb3JtU2VydmljZUphciIgZmxhZ3M9IjciIGlkPSJvcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5kZWxldGUucmVzb3VyY2VzIiByZXNvdXJjZXM9IjEiIHN0YW1wPSIxNjMyODE1MjEzMTIzIi8+JiN4MEE7PHJlZmFjdG9yaW5nIGNvbW1lbnQ9IkRlbGV0ZSByZXNvdXJjZSAmYXBvczt3Zm9ybVNlcnZpY2VzJmFwb3M7IiBkZWxldGVDb250ZW50cz0iZmFsc2UiIGRlc2NyaXB0aW9uPSJEZWxldGUgcmVzb3VyY2UgJmFwb3M7d2Zvcm1TZXJ2aWNlcyZhcG9zOyIgZWxlbWVudDE9Ii93Zm9ybVNlcnZpY2VzIiBmbGFncz0iNyIgaWQ9Im9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmRlbGV0ZS5yZXNvdXJjZXMiIHJlc291cmNlcz0iMSIgc3RhbXA9IjE2MzI4MTUyMzExOTYiLz4KKzwvc2Vzc2lvbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvLndvcmtzcGFjZS8yMDIxLzkvMzkvcmVmYWN0b3JpbmdzLmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzLy53b3Jrc3BhY2UvMjAyMS85LzM5L3JlZmFjdG9yaW5ncy5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTIzNGYxCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzLy53b3Jrc3BhY2UvMjAyMS85LzM5L3JlZmFjdG9yaW5ncy5pbmRleApAQCAtMCwwICsxLDcgQEAKKzE2MzI4MTM3MjEyMjMJRGVsZXRlIHJlc291cmNlICdHbGVtbUNsaWVudCcKKzE2MzI4MTM5NzM3MTIJRGVsZXRlIHJlc291cmNlICdHbGVtbVNlcnZpY2VzJworMTYzMjgxNTExMjkxOAlEZWxldGUgcmVzb3VyY2UgJ0pzb25UcmF2ZXJzZScKKzE2MzI4MTUxNTU3NDcJRGVsZXRlIHJlc291cmNlICdUZXN0cycKKzE2MzI4MTUxODUxNTcJRGVsZXRlIHJlc291cmNlICdVdGlscycKKzE2MzI4MTUyMTMxMjMJRGVsZXRlIHJlc291cmNlICd3Zm9ybVNlcnZpY2VKYXInCisxNjMyODE1MjMxMTk2CURlbGV0ZSByZXNvdXJjZSAnd2Zvcm1TZXJ2aWNlcycKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9HbGVtbUNsaWVudC8yMDIwLzQvMTcvcmVmYWN0b3JpbmdzLmhpc3RvcnkgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvR2xlbW1DbGllbnQvMjAyMC80LzE3L3JlZmFjdG9yaW5ncy5oaXN0b3J5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NTRlODQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvR2xlbW1DbGllbnQvMjAyMC80LzE3L3JlZmFjdG9yaW5ncy5oaXN0b3J5CkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzZXNzaW9uIHZlcnNpb249IjEuMCI+JiN4MEE7PHJlZmFjdG9yaW5nIGFjY2Vzc29ycz0idHJ1ZSIgY29tbWVudD0iRGVsZXRlIGVsZW1lbnQgZnJvbSBwcm9qZWN0ICZhcG9zO0dsZW1tQ2xpZW50JmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBwcm9qZWN0OiAmYXBvcztHbGVtbUNsaWVudCZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgZWxlbWVudDogJmFwb3M7R2xlbW1DbGllbnQvc3JjL0dsZW1tQ2xpZW50U3JjJmFwb3M7IiBkZXNjcmlwdGlvbj0iRGVsZXRlIGVsZW1lbnQiIGVsZW1lbnQxPSIvc3JjJmx0O0dsZW1tQ2xpZW50U3JjIiBlbGVtZW50cz0iMSIgZmxhZ3M9IjU4OTgzMCIgaWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5kZWxldGUiIHJlc291cmNlcz0iMCIgc3RhbXA9IjE1ODc1NTE3MjYwMDEiIHN1YlBhY2thZ2VzPSJmYWxzZSIgdmVyc2lvbj0iMS4wIi8+JiN4MEE7PHJlZmFjdG9yaW5nIGFjY2Vzc29ycz0idHJ1ZSIgY29tbWVudD0iRGVsZXRlIGVsZW1lbnQgZnJvbSBwcm9qZWN0ICZhcG9zO0dsZW1tQ2xpZW50JmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBwcm9qZWN0OiAmYXBvcztHbGVtbUNsaWVudCZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgZWxlbWVudDogJmFwb3M7R2xlbW1DbGllbnQvc3JjL0dsZW1tQ2xpZW50U3JjJmFwb3M7IiBkZXNjcmlwdGlvbj0iRGVsZXRlIGVsZW1lbnQiIGVsZW1lbnQxPSIvc3JjJmx0O0dsZW1tQ2xpZW50U3JjIiBlbGVtZW50cz0iMSIgZmxhZ3M9IjU4OTgzMCIgaWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5kZWxldGUiIHJlc291cmNlcz0iMCIgc3RhbXA9IjE1ODc1NTE3ODkyNzUiIHN1YlBhY2thZ2VzPSJmYWxzZSIgdmVyc2lvbj0iMS4wIi8+JiN4MEE7PHJlZmFjdG9yaW5nIGFjY2Vzc29ycz0idHJ1ZSIgY29tbWVudD0iRGVsZXRlIGVsZW1lbnQgZnJvbSBwcm9qZWN0ICZhcG9zO0dsZW1tQ2xpZW50JmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBwcm9qZWN0OiAmYXBvcztHbGVtbUNsaWVudCZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgZWxlbWVudDogJmFwb3M7R2xlbW1DbGllbnQvc3JjL0dsZW1tQ2xpZW50U3JjJmFwb3M7IiBkZXNjcmlwdGlvbj0iRGVsZXRlIGVsZW1lbnQiIGVsZW1lbnQxPSIvc3JjJmx0O0dsZW1tQ2xpZW50U3JjIiBlbGVtZW50cz0iMSIgZmxhZ3M9IjU4OTgzMCIgaWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5kZWxldGUiIHJlc291cmNlcz0iMCIgc3RhbXA9IjE1ODc1NTE4Mjc3MTYiIHN1YlBhY2thZ2VzPSJmYWxzZSIgdmVyc2lvbj0iMS4wIi8+Cis8L3Nlc3Npb24+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL0dsZW1tQ2xpZW50LzIwMjAvNC8xNy9yZWZhY3RvcmluZ3MuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvR2xlbW1DbGllbnQvMjAyMC80LzE3L3JlZmFjdG9yaW5ncy5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzUzYWJhCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL0dsZW1tQ2xpZW50LzIwMjAvNC8xNy9yZWZhY3RvcmluZ3MuaW5kZXgKQEAgLTAsMCArMSwzIEBACisxNTg3NTUxNzI2MDAxCURlbGV0ZSBlbGVtZW50CisxNTg3NTUxNzg5Mjc1CURlbGV0ZSBlbGVtZW50CisxNTg3NTUxODI3NzE2CURlbGV0ZSBlbGVtZW50CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvR2xlbW1DbGllbnQvMjAyMC81LzE5L3JlZmFjdG9yaW5ncy5oaXN0b3J5IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL0dsZW1tQ2xpZW50LzIwMjAvNS8xOS9yZWZhY3RvcmluZ3MuaGlzdG9yeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWI5YTU3Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL0dsZW1tQ2xpZW50LzIwMjAvNS8xOS9yZWZhY3RvcmluZ3MuaGlzdG9yeQpAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8c2Vzc2lvbiB2ZXJzaW9uPSIxLjAiPgorPHJlZmFjdG9yaW5nIGFjY2Vzc29ycz0idHJ1ZSIgY29tbWVudD0iRGVsZXRlIGVsZW1lbnQgZnJvbSBwcm9qZWN0ICZhcG9zO0dsZW1tQ2xpZW50JmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBwcm9qZWN0OiAmYXBvcztHbGVtbUNsaWVudCZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgZWxlbWVudDogJmFwb3M7R2xlbW1DbGllbnQtMC4wLjEtU05BUFNIT1QuamFyJmFwb3M7IiBkZXNjcmlwdGlvbj0iRGVsZXRlIGVsZW1lbnQiIGVsZW1lbnQxPSJ0YXJnZXQvR2xlbW1DbGllbnQtMC4wLjEtU05BUFNIT1QuamFyIiBlbGVtZW50cz0iMCIgZmxhZ3M9IjU4OTgzMCIgaWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5kZWxldGUiIHJlc291cmNlcz0iMSIgc3RhbXA9IjE1ODg2MDk0NzIyNjUiIHN1YlBhY2thZ2VzPSJmYWxzZSIgdmVyc2lvbj0iMS4wIi8+Cis8L3Nlc3Npb24+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL0dsZW1tQ2xpZW50LzIwMjAvNS8xOS9yZWZhY3RvcmluZ3MuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvR2xlbW1DbGllbnQvMjAyMC81LzE5L3JlZmFjdG9yaW5ncy5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDdlYWUyCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL0dsZW1tQ2xpZW50LzIwMjAvNS8xOS9yZWZhY3RvcmluZ3MuaW5kZXgKQEAgLTAsMCArMSBAQAorMTU4ODYwOTQ3MjI2NQlEZWxldGUgZWxlbWVudApkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL0dsZW1tU2VydmljZXMvMjAxOS8xMS80Ny9yZWZhY3RvcmluZ3MuaGlzdG9yeSBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9HbGVtbVNlcnZpY2VzLzIwMTkvMTEvNDcvcmVmYWN0b3JpbmdzLmhpc3RvcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE2NDUxZAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9HbGVtbVNlcnZpY2VzLzIwMTkvMTEvNDcvcmVmYWN0b3JpbmdzLmhpc3RvcnkKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHNlc3Npb24gdmVyc2lvbj0iMS4wIj4KKzxyZWZhY3RvcmluZyBjb21tZW50PSJNb3ZlIHBhY2thZ2UgJmFwb3M7ZGUua29yYXAuc2VydmljZXMmYXBvczsgdG8gJmFwb3M7R2xlbW1TZXJ2aWNlcy9zcmMvbWFpbi9yZXNvdXJjZXMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIHByb2plY3Q6ICZhcG9zO0dsZW1tU2VydmljZXMmYXBvczsmI3gwRDsmI3gwQTstIERlc3RpbmF0aW9uIGVsZW1lbnQ6ICZhcG9zO0dsZW1tU2VydmljZXMvc3JjL21haW4vcmVzb3VyY2VzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBlbGVtZW50OiAmYXBvcztHbGVtbVNlcnZpY2VzL3NyYy9tYWluL2phdmEvZGUua29yYXAuc2VydmljZXMmYXBvczsmI3gwRDsmI3gwQTstIFVwZGF0ZSByZWZlcmVuY2VzIHRvIHJlZmFjdG9yZWQgZWxlbWVudCIgZGVzY3JpcHRpb249Ik1vdmUgcGFja2FnZSIgZGVzdGluYXRpb249Ii9zcmNcL21haW5cL3Jlc291cmNlcyIgZWxlbWVudDE9Ii9zcmNcL21haW5cL2phdmEmbHQ7ZGUua29yYXAuc2VydmljZXMiIGZsYWdzPSI1ODk4MzAiIGZyYWdtZW50cz0iMSIgaWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5tb3ZlIiBwb2xpY3k9Im9yZy5lY2xpcHNlLmpkdC51aS5tb3ZlUGFja2FnZXMiIHN0YW1wPSIxNTc0NDExNTMzMDkwIiB2ZXJzaW9uPSIxLjAiLz4KKzwvc2Vzc2lvbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvR2xlbW1TZXJ2aWNlcy8yMDE5LzExLzQ3L3JlZmFjdG9yaW5ncy5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9HbGVtbVNlcnZpY2VzLzIwMTkvMTEvNDcvcmVmYWN0b3JpbmdzLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NmU3MzAKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvR2xlbW1TZXJ2aWNlcy8yMDE5LzExLzQ3L3JlZmFjdG9yaW5ncy5pbmRleApAQCAtMCwwICsxIEBACisxNTc0NDExNTMzMDkwCU1vdmUgcGFja2FnZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL0dsZW1tU2VydmljZXMvMjAxOS8xMi80OS9yZWZhY3RvcmluZ3MuaGlzdG9yeSBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9HbGVtbVNlcnZpY2VzLzIwMTkvMTIvNDkvcmVmYWN0b3JpbmdzLmhpc3RvcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhkMGFlYQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9HbGVtbVNlcnZpY2VzLzIwMTkvMTIvNDkvcmVmYWN0b3JpbmdzLmhpc3RvcnkKQEAgLTAsMCArMSwzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHNlc3Npb24gdmVyc2lvbj0iMS4wIj4mI3gwQTs8cmVmYWN0b3JpbmcgYWNjZXNzb3JzPSJ0cnVlIiBjb21tZW50PSJEZWxldGUgZWxlbWVudCBmcm9tIHByb2plY3QgJmFwb3M7R2xlbW1TZXJ2aWNlcyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgcHJvamVjdDogJmFwb3M7R2xlbW1TZXJ2aWNlcyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgZWxlbWVudDogJmFwb3M7d2ViLnhtbCZhcG9zOyIgZGVzY3JpcHRpb249IkRlbGV0ZSBlbGVtZW50IiBlbGVtZW50MT0ic3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbCIgZWxlbWVudHM9IjAiIGZsYWdzPSI1ODk4MzAiIGlkPSJvcmcuZWNsaXBzZS5qZHQudWkuZGVsZXRlIiByZXNvdXJjZXM9IjEiIHN0YW1wPSIxNTc1NjI4Mzk1NjMyIiBzdWJQYWNrYWdlcz0iZmFsc2UiIHZlcnNpb249IjEuMCIvPiYjeDBBOzxyZWZhY3RvcmluZyBhY2Nlc3NvcnM9InRydWUiIGNvbW1lbnQ9IkRlbGV0ZSBlbGVtZW50IGZyb20gcHJvamVjdCAmYXBvcztHbGVtbVNlcnZpY2VzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBwcm9qZWN0OiAmYXBvcztHbGVtbVNlcnZpY2VzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBlbGVtZW50OiAmYXBvczt3ZWIueG1sLnYxJmFwb3M7IiBkZXNjcmlwdGlvbj0iRGVsZXRlIGVsZW1lbnQiIGVsZW1lbnQxPSJzcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sLnYxIiBlbGVtZW50cz0iMCIgZmxhZ3M9IjU4OTgzMCIgaWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5kZWxldGUiIHJlc291cmNlcz0iMSIgc3RhbXA9IjE1NzU2MjgzOTk0NDYiIHN1YlBhY2thZ2VzPSJmYWxzZSIgdmVyc2lvbj0iMS4wIi8+Cis8L3Nlc3Npb24+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL0dsZW1tU2VydmljZXMvMjAxOS8xMi80OS9yZWZhY3RvcmluZ3MuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvR2xlbW1TZXJ2aWNlcy8yMDE5LzEyLzQ5L3JlZmFjdG9yaW5ncy5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGU2MGUxCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL0dsZW1tU2VydmljZXMvMjAxOS8xMi80OS9yZWZhY3RvcmluZ3MuaW5kZXgKQEAgLTAsMCArMSwyIEBACisxNTc1NjI4Mzk1NjMyCURlbGV0ZSBlbGVtZW50CisxNTc1NjI4Mzk5NDQ2CURlbGV0ZSBlbGVtZW50CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvR2xlbW1TZXJ2aWNlcy8yMDIxLzEwLzQxL3JlZmFjdG9yaW5ncy5oaXN0b3J5IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL0dsZW1tU2VydmljZXMvMjAyMS8xMC80MS9yZWZhY3RvcmluZ3MuaGlzdG9yeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDQ3NDI1Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL0dsZW1tU2VydmljZXMvMjAyMS8xMC80MS9yZWZhY3RvcmluZ3MuaGlzdG9yeQpAQCAtMCwwICsxLDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8c2Vzc2lvbiB2ZXJzaW9uPSIxLjAiPiYjeDBBOzxyZWZhY3RvcmluZyBhY2Nlc3NvcnM9InRydWUiIGNvbW1lbnQ9IkRlbGV0ZSBlbGVtZW50IGZyb20gcHJvamVjdCAmYXBvcztHbGVtbVNlcnZpY2VzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBwcm9qZWN0OiAmYXBvcztHbGVtbVNlcnZpY2VzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBlbGVtZW50OiAmYXBvcztHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMmYXBvczsiIGRlc2NyaXB0aW9uPSJEZWxldGUgZWxlbWVudCIgZWxlbWVudDE9InJlc291cmNlcy9HbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiIGVsZW1lbnRzPSIwIiBmbGFncz0iNTg5ODMwIiBpZD0ib3JnLmVjbGlwc2UuamR0LnVpLmRlbGV0ZSIgcmVzb3VyY2VzPSIxIiBzdGFtcD0iMTYzNDIyNjYwODk4NCIgc3ViUGFja2FnZXM9ImZhbHNlIiB2ZXJzaW9uPSIxLjAiLz4mI3gwQTs8cmVmYWN0b3JpbmcgYWNjZXNzb3JzPSJ0cnVlIiBjb21tZW50PSJEZWxldGUgZWxlbWVudCBmcm9tIHByb2plY3QgJmFwb3M7R2xlbW1TZXJ2aWNlcyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgcHJvamVjdDogJmFwb3M7R2xlbW1TZXJ2aWNlcyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgZWxlbWVudDogJmFwb3M7cmVzb3VyY2VzJmFwb3M7IiBkZXNjcmlwdGlvbj0iRGVsZXRlIGVsZW1lbnQiIGVsZW1lbnQxPSJyZXNvdXJjZXMiIGVsZW1lbnRzPSIwIiBmbGFncz0iNTg5ODMwIiBpZD0ib3JnLmVjbGlwc2UuamR0LnVpLmRlbGV0ZSIgcmVzb3VyY2VzPSIxIiBzdGFtcD0iMTYzNDIyNjYxNTQ3OSIgc3ViUGFja2FnZXM9ImZhbHNlIiB2ZXJzaW9uPSIxLjAiLz4KKzwvc2Vzc2lvbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvR2xlbW1TZXJ2aWNlcy8yMDIxLzEwLzQxL3JlZmFjdG9yaW5ncy5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9HbGVtbVNlcnZpY2VzLzIwMjEvMTAvNDEvcmVmYWN0b3JpbmdzLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMjM2NjgKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvR2xlbW1TZXJ2aWNlcy8yMDIxLzEwLzQxL3JlZmFjdG9yaW5ncy5pbmRleApAQCAtMCwwICsxLDIgQEAKKzE2MzQyMjY2MDg5ODQJRGVsZXRlIGVsZW1lbnQKKzE2MzQyMjY2MTU0NzkJRGVsZXRlIGVsZW1lbnQKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9HbGVtbVNlcnZpY2VzMi8yMDIwLzQvMTcvcmVmYWN0b3JpbmdzLmhpc3RvcnkgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvR2xlbW1TZXJ2aWNlczIvMjAyMC80LzE3L3JlZmFjdG9yaW5ncy5oaXN0b3J5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3Mjk4N2EKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvR2xlbW1TZXJ2aWNlczIvMjAyMC80LzE3L3JlZmFjdG9yaW5ncy5oaXN0b3J5CkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzZXNzaW9uIHZlcnNpb249IjEuMCI+JiN4MEE7PHJlZmFjdG9yaW5nIGNvbW1lbnQ9Ik1vdmUgZWxlbWVudCAmYXBvcztXb3JkZm9ybVNlcnZpY2VzLmphdmEmYXBvczsgdG8gJmFwb3M7d2Zvcm1TZXJ2aWNlcy9zcmMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIHByb2plY3Q6ICZhcG9zO0dsZW1tU2VydmljZXMyJmFwb3M7JiN4MEQ7JiN4MEE7LSBEZXN0aW5hdGlvbiBlbGVtZW50OiAmYXBvczt3Zm9ybVNlcnZpY2VzL3NyYyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgZWxlbWVudDogJmFwb3M7ZGUua29yYXAuc2VydmljZXMuV29yZGZvcm1TZXJ2aWNlcy5qYXZhJmFwb3M7JiN4MEQ7JiN4MEE7LSBVcGRhdGUgcmVmZXJlbmNlcyB0byByZWZhY3RvcmVkIGVsZW1lbnQiIGRlc2NyaXB0aW9uPSJNb3ZlIGNvbXBpbGF0aW9uIHVuaXQiIGRlc3RpbmF0aW9uPSI9d2Zvcm1TZXJ2aWNlcy9zcmMiIGVsZW1lbnQxPSIvc3JjJmx0O2RlLmtvcmFwLnNlcnZpY2Vze1dvcmRmb3JtU2VydmljZXMuamF2YSIgZmlsZXM9IjAiIGZsYWdzPSI1ODk4MzAiIGZvbGRlcnM9IjAiIGlkPSJvcmcuZWNsaXBzZS5qZHQudWkubW92ZSIgcG9saWN5PSJvcmcuZWNsaXBzZS5qZHQudWkubW92ZVJlc291cmNlcyIgcXVhbGlmaWVkPSJmYWxzZSIgcmVmZXJlbmNlcz0idHJ1ZSIgc3RhbXA9IjE1ODc2MzY4Mjc0MTYiIHVuaXRzPSIxIiB2ZXJzaW9uPSIxLjAiLz4mI3gwQTs8cmVmYWN0b3JpbmcgY29tbWVudD0iTW92ZSBlbGVtZW50ICZhcG9zO0dsZW1tVXRpbHMuamF2YSZhcG9zOyB0byAmYXBvcztVdGlscy9zcmMvZGUua29yYXAuc2VydmljZXMudXRpbHMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIHByb2plY3Q6ICZhcG9zO0dsZW1tU2VydmljZXMyJmFwb3M7JiN4MEQ7JiN4MEE7LSBEZXN0aW5hdGlvbiBlbGVtZW50OiAmYXBvcztVdGlscy9zcmMvZGUua29yYXAuc2VydmljZXMudXRpbHMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIGVsZW1lbnQ6ICZhcG9zO2RlLmtvcmFwLnNlcnZpY2VzLkdsZW1tVXRpbHMuamF2YSZhcG9zOyYjeDBEOyYjeDBBOy0gVXBkYXRlIHJlZmVyZW5jZXMgdG8gcmVmYWN0b3JlZCBlbGVtZW50IiBkZXNjcmlwdGlvbj0iTW92ZSBjb21waWxhdGlvbiB1bml0IiBkZXN0aW5hdGlvbj0iPVV0aWxzL3NyYyZsdDtkZS5rb3JhcC5zZXJ2aWNlcy51dGlscyIgZWxlbWVudDE9Ii9zcmMmbHQ7ZGUua29yYXAuc2VydmljZXN7R2xlbW1VdGlscy5qYXZhIiBmaWxlcz0iMCIgZmxhZ3M9IjU4OTgzMCIgZm9sZGVycz0iMCIgaWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5tb3ZlIiBwYXR0ZXJucz0iKiIgcG9saWN5PSJvcmcuZWNsaXBzZS5qZHQudWkubW92ZVJlc291cmNlcyIgcXVhbGlmaWVkPSJmYWxzZSIgcmVmZXJlbmNlcz0idHJ1ZSIgc3RhbXA9IjE1ODc3MzQxNzYzNjciIHVuaXRzPSIxIiB2ZXJzaW9uPSIxLjAiLz4KKzwvc2Vzc2lvbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvR2xlbW1TZXJ2aWNlczIvMjAyMC80LzE3L3JlZmFjdG9yaW5ncy5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9HbGVtbVNlcnZpY2VzMi8yMDIwLzQvMTcvcmVmYWN0b3JpbmdzLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNzkzODEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvR2xlbW1TZXJ2aWNlczIvMjAyMC80LzE3L3JlZmFjdG9yaW5ncy5pbmRleApAQCAtMCwwICsxLDIgQEAKKzE1ODc2MzY4Mjc0MTYJTW92ZSBjb21waWxhdGlvbiB1bml0CisxNTg3NzM0MTc2MzY3CU1vdmUgY29tcGlsYXRpb24gdW5pdApkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL0dsZW1tU2VydmljZXMyLzIwMjAvNi8yNS9yZWZhY3RvcmluZ3MuaGlzdG9yeSBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9HbGVtbVNlcnZpY2VzMi8yMDIwLzYvMjUvcmVmYWN0b3JpbmdzLmhpc3RvcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFlYTY1YgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9HbGVtbVNlcnZpY2VzMi8yMDIwLzYvMjUvcmVmYWN0b3JpbmdzLmhpc3RvcnkKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHNlc3Npb24gdmVyc2lvbj0iMS4wIj4KKzxyZWZhY3RvcmluZyBjb21tZW50PSJNb3ZlIGVsZW1lbnQgJmFwb3M7TGVtbWFSZXNwb25zZS5qYXZhJmFwb3M7IHRvICZhcG9zO0pzb25UcmF2ZXJzZS9zcmMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIHByb2plY3Q6ICZhcG9zO0dsZW1tU2VydmljZXMyJmFwb3M7JiN4MEQ7JiN4MEE7LSBEZXN0aW5hdGlvbiBlbGVtZW50OiAmYXBvcztKc29uVHJhdmVyc2Uvc3JjJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBlbGVtZW50OiAmYXBvcztkZS5rb3JhcC5zZXJ2aWNlcy5MZW1tYVJlc3BvbnNlLmphdmEmYXBvczsmI3gwRDsmI3gwQTstIFVwZGF0ZSByZWZlcmVuY2VzIHRvIHJlZmFjdG9yZWQgZWxlbWVudCIgZGVzY3JpcHRpb249Ik1vdmUgY29tcGlsYXRpb24gdW5pdCIgZGVzdGluYXRpb249Ij1Kc29uVHJhdmVyc2Uvc3JjIiBlbGVtZW50MT0iL3NyYyZsdDtkZS5rb3JhcC5zZXJ2aWNlc3tMZW1tYVJlc3BvbnNlLmphdmEiIGZpbGVzPSIwIiBmbGFncz0iNTg5ODMwIiBmb2xkZXJzPSIwIiBpZD0ib3JnLmVjbGlwc2UuamR0LnVpLm1vdmUiIHBvbGljeT0ib3JnLmVjbGlwc2UuamR0LnVpLm1vdmVSZXNvdXJjZXMiIHF1YWxpZmllZD0iZmFsc2UiIHJlZmVyZW5jZXM9InRydWUiIHN0YW1wPSIxNTkyMzEzNTI2MTM4IiB1bml0cz0iMSIgdmVyc2lvbj0iMS4wIi8+Cis8L3Nlc3Npb24+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL0dsZW1tU2VydmljZXMyLzIwMjAvNi8yNS9yZWZhY3RvcmluZ3MuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvR2xlbW1TZXJ2aWNlczIvMjAyMC82LzI1L3JlZmFjdG9yaW5ncy5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTQ1ZGU1Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL0dsZW1tU2VydmljZXMyLzIwMjAvNi8yNS9yZWZhY3RvcmluZ3MuaW5kZXgKQEAgLTAsMCArMSBAQAorMTU5MjMxMzUyNjEzOAlNb3ZlIGNvbXBpbGF0aW9uIHVuaXQKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9UZXN0cy8yMDIwLzQvMTcvcmVmYWN0b3JpbmdzLmhpc3RvcnkgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvVGVzdHMvMjAyMC80LzE3L3JlZmFjdG9yaW5ncy5oaXN0b3J5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZmI3NjgKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvVGVzdHMvMjAyMC80LzE3L3JlZmFjdG9yaW5ncy5oaXN0b3J5CkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzZXNzaW9uIHZlcnNpb249IjEuMCI+JiN4MEE7PHJlZmFjdG9yaW5nIGFjY2Vzc29ycz0idHJ1ZSIgY29tbWVudD0iRGVsZXRlIGVsZW1lbnQgZnJvbSBwcm9qZWN0ICZhcG9zO1Rlc3RzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBwcm9qZWN0OiAmYXBvcztUZXN0cyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgZWxlbWVudDogJmFwb3M7VGVzdHMvR2xlbUNsaWVudENsYXNzZXMmYXBvczsiIGRlc2NyaXB0aW9uPSJEZWxldGUgZWxlbWVudCIgZWxlbWVudDE9Ii9HbGVtQ2xpZW50Q2xhc3NlcyIgZWxlbWVudHM9IjEiIGZsYWdzPSI1ODk4MzAiIGlkPSJvcmcuZWNsaXBzZS5qZHQudWkuZGVsZXRlIiByZXNvdXJjZXM9IjAiIHN0YW1wPSIxNTg3NDg3MjIxNDU3IiBzdWJQYWNrYWdlcz0iZmFsc2UiIHZlcnNpb249IjEuMCIvPiYjeDBBOzxyZWZhY3RvcmluZyBhY2Nlc3NvcnM9InRydWUiIGNvbW1lbnQ9IkRlbGV0ZSBlbGVtZW50IGZyb20gcHJvamVjdCAmYXBvcztUZXN0cyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgcHJvamVjdDogJmFwb3M7VGVzdHMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIGVsZW1lbnQ6ICZhcG9zO1Rlc3RzL0dsZW1DbGllbnRTcmMmYXBvczsiIGRlc2NyaXB0aW9uPSJEZWxldGUgZWxlbWVudCIgZWxlbWVudDE9Ii9HbGVtQ2xpZW50U3JjIiBlbGVtZW50cz0iMSIgZmxhZ3M9IjU4OTgzMCIgaWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5kZWxldGUiIHJlc291cmNlcz0iMCIgc3RhbXA9IjE1ODc1NTE1NzUzNjIiIHN1YlBhY2thZ2VzPSJmYWxzZSIgdmVyc2lvbj0iMS4wIi8+JiN4MEE7PHJlZmFjdG9yaW5nIGFjY2Vzc29ycz0idHJ1ZSIgY29tbWVudD0iRGVsZXRlIGVsZW1lbnQgZnJvbSBwcm9qZWN0ICZhcG9zO1Rlc3RzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBwcm9qZWN0OiAmYXBvcztUZXN0cyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgZWxlbWVudDogJmFwb3M7c2VydmljZXMmYXBvczsiIGRlc2NyaXB0aW9uPSJEZWxldGUgZWxlbWVudCIgZWxlbWVudDE9InNlcnZpY2VzIiBlbGVtZW50cz0iMCIgZmxhZ3M9IjU4OTgzMCIgaWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5kZWxldGUiIHJlc291cmNlcz0iMSIgc3RhbXA9IjE1ODc1NzE3NjA2ODAiIHN1YlBhY2thZ2VzPSJmYWxzZSIgdmVyc2lvbj0iMS4wIi8+JiN4MEE7PHJlZmFjdG9yaW5nIGNvbW1lbnQ9Ik1vdmUgcGFja2FnZSAmYXBvcztkZS5rb3JhcC5qc29uJmFwb3M7IHRvICZhcG9zO0pzb25UcmF2ZXJzZS9zcmMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIHByb2plY3Q6ICZhcG9zO1Rlc3RzJmFwb3M7JiN4MEQ7JiN4MEE7LSBEZXN0aW5hdGlvbiBlbGVtZW50OiAmYXBvcztKc29uVHJhdmVyc2Uvc3JjJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBlbGVtZW50OiAmYXBvcztUZXN0cy9zcmMvZGUua29yYXAuanNvbiZhcG9zOyYjeDBEOyYjeDBBOy0gVXBkYXRlIHJlZmVyZW5jZXMgdG8gcmVmYWN0b3JlZCBlbGVtZW50IiBkZXNjcmlwdGlvbj0iTW92ZSBwYWNrYWdlIiBkZXN0aW5hdGlvbj0iPUpzb25UcmF2ZXJzZS9zcmMiIGVsZW1lbnQxPSIvc3JjJmx0O2RlLmtvcmFwLmpzb24iIGZsYWdzPSI1ODk4MzAiIGZyYWdtZW50cz0iMSIgaWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5tb3ZlIiBwb2xpY3k9Im9yZy5lY2xpcHNlLmpkdC51aS5tb3ZlUGFja2FnZXMiIHN0YW1wPSIxNTg3NTc3NTQ2NDIzIiB2ZXJzaW9uPSIxLjAiLz4KKzwvc2Vzc2lvbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvVGVzdHMvMjAyMC80LzE3L3JlZmFjdG9yaW5ncy5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9UZXN0cy8yMDIwLzQvMTcvcmVmYWN0b3JpbmdzLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNDMzOTkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvVGVzdHMvMjAyMC80LzE3L3JlZmFjdG9yaW5ncy5pbmRleApAQCAtMCwwICsxLDQgQEAKKzE1ODc0ODcyMjE0NTcJRGVsZXRlIGVsZW1lbnQKKzE1ODc1NTE1NzUzNjIJRGVsZXRlIGVsZW1lbnQKKzE1ODc1NzE3NjA2ODAJRGVsZXRlIGVsZW1lbnQKKzE1ODc1Nzc1NDY0MjMJTW92ZSBwYWNrYWdlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvVGVzdHMvMjAyMC80LzE4L3JlZmFjdG9yaW5ncy5oaXN0b3J5IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL1Rlc3RzLzIwMjAvNC8xOC9yZWZhY3RvcmluZ3MuaGlzdG9yeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjQ3MmUxCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL1Rlc3RzLzIwMjAvNC8xOC9yZWZhY3RvcmluZ3MuaGlzdG9yeQpAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8c2Vzc2lvbiB2ZXJzaW9uPSIxLjAiPgorPHJlZmFjdG9yaW5nIGFjY2Vzc29ycz0idHJ1ZSIgY29tbWVudD0iRGVsZXRlIGVsZW1lbnQgZnJvbSBwcm9qZWN0ICZhcG9zO1Rlc3RzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBwcm9qZWN0OiAmYXBvcztUZXN0cyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgZWxlbWVudDogJmFwb3M7VGVzdHMvR2xlbW1DbGllbnRTcmMmYXBvczsiIGRlc2NyaXB0aW9uPSJEZWxldGUgZWxlbWVudCIgZWxlbWVudDE9Ii9HbGVtbUNsaWVudFNyYyIgZWxlbWVudHM9IjEiIGZsYWdzPSI1ODk4MzAiIGlkPSJvcmcuZWNsaXBzZS5qZHQudWkuZGVsZXRlIiByZXNvdXJjZXM9IjAiIHN0YW1wPSIxNTg4MTg0MTEwMzA4IiBzdWJQYWNrYWdlcz0iZmFsc2UiIHZlcnNpb249IjEuMCIvPgorPC9zZXNzaW9uPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9UZXN0cy8yMDIwLzQvMTgvcmVmYWN0b3JpbmdzLmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL1Rlc3RzLzIwMjAvNC8xOC9yZWZhY3RvcmluZ3MuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA4NTM4MwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9UZXN0cy8yMDIwLzQvMTgvcmVmYWN0b3JpbmdzLmluZGV4CkBAIC0wLDAgKzEgQEAKKzE1ODgxODQxMTAzMDgJRGVsZXRlIGVsZW1lbnQKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9UZXN0cy8yMDIwLzUvMTkvcmVmYWN0b3JpbmdzLmhpc3RvcnkgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvVGVzdHMvMjAyMC81LzE5L3JlZmFjdG9yaW5ncy5oaXN0b3J5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMDIzOGYKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvVGVzdHMvMjAyMC81LzE5L3JlZmFjdG9yaW5ncy5oaXN0b3J5CkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzZXNzaW9uIHZlcnNpb249IjEuMCI+JiN4MEE7PHJlZmFjdG9yaW5nIGFjY2Vzc29ycz0idHJ1ZSIgY29tbWVudD0iRGVsZXRlIGVsZW1lbnQgZnJvbSBwcm9qZWN0ICZhcG9zO1Rlc3RzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBwcm9qZWN0OiAmYXBvcztUZXN0cyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgZWxlbWVudDogJmFwb3M7VGVzdHMvc3JjL2RlLmtvcmFwLmpzb24mYXBvczsiIGRlc2NyaXB0aW9uPSJEZWxldGUgZWxlbWVudCIgZWxlbWVudDE9Ii9zcmMmbHQ7ZGUua29yYXAuanNvbiIgZWxlbWVudDI9Ii9zcmMmbHQ7ZGUua29yYXAiIGVsZW1lbnQzPSIvc3JjJmx0O2RlIiBlbGVtZW50cz0iMyIgZmxhZ3M9IjU4OTgzMCIgaWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5kZWxldGUiIHJlc291cmNlcz0iMCIgc3RhbXA9IjE1ODg2NjEzODMzOTQiIHN1YlBhY2thZ2VzPSJmYWxzZSIgdmVyc2lvbj0iMS4wIi8+JiN4MEE7PHJlZmFjdG9yaW5nIGFjY2Vzc29ycz0idHJ1ZSIgY29tbWVudD0iRGVsZXRlIGVsZW1lbnQgZnJvbSBwcm9qZWN0ICZhcG9zO1Rlc3RzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBwcm9qZWN0OiAmYXBvcztUZXN0cyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgZWxlbWVudDogJmFwb3M7VGVzdHMvanNvbiZhcG9zOyIgZGVzY3JpcHRpb249IkRlbGV0ZSBlbGVtZW50IiBlbGVtZW50MT0iL2pzb24iIGVsZW1lbnRzPSIxIiBmbGFncz0iNTg5ODMwIiBpZD0ib3JnLmVjbGlwc2UuamR0LnVpLmRlbGV0ZSIgcmVzb3VyY2VzPSIwIiBzdGFtcD0iMTU4ODY2MTc0NDQwNyIgc3ViUGFja2FnZXM9ImZhbHNlIiB2ZXJzaW9uPSIxLjAiLz4mI3gwQTs8cmVmYWN0b3JpbmcgYWNjZXNzb3JzPSJ0cnVlIiBjb21tZW50PSJEZWxldGUgZWxlbWVudCBmcm9tIHByb2plY3QgJmFwb3M7VGVzdHMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIHByb2plY3Q6ICZhcG9zO1Rlc3RzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBlbGVtZW50OiAmYXBvcztUZXN0cy9qc29uJmFwb3M7IiBkZXNjcmlwdGlvbj0iRGVsZXRlIGVsZW1lbnQiIGVsZW1lbnQxPSIvanNvbiIgZWxlbWVudHM9IjEiIGZsYWdzPSI1ODk4MzAiIGlkPSJvcmcuZWNsaXBzZS5qZHQudWkuZGVsZXRlIiByZXNvdXJjZXM9IjAiIHN0YW1wPSIxNTg4NjYxODIxMzk1IiBzdWJQYWNrYWdlcz0iZmFsc2UiIHZlcnNpb249IjEuMCIvPiYjeDBBOzxyZWZhY3RvcmluZyBhY2Nlc3NvcnM9InRydWUiIGNvbW1lbnQ9IkRlbGV0ZSBlbGVtZW50IGZyb20gcHJvamVjdCAmYXBvcztUZXN0cyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgcHJvamVjdDogJmFwb3M7VGVzdHMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIGVsZW1lbnQ6ICZhcG9zO1Rlc3RzL2pzb24va29yYXAuanNvbiZhcG9zOyIgZGVzY3JpcHRpb249IkRlbGV0ZSBlbGVtZW50IiBlbGVtZW50MT0iL2pzb24mbHQ7a29yYXAuanNvbiIgZWxlbWVudDI9Ii9qc29uJmx0O2tvcmFwIiBlbGVtZW50cz0iMiIgZmxhZ3M9IjU4OTgzMCIgaWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5kZWxldGUiIHJlc291cmNlcz0iMCIgc3RhbXA9IjE1ODg2NjI3NDE2NjkiIHN1YlBhY2thZ2VzPSJmYWxzZSIgdmVyc2lvbj0iMS4wIi8+JiN4MEE7PHJlZmFjdG9yaW5nIGFjY2Vzc29ycz0idHJ1ZSIgY29tbWVudD0iRGVsZXRlIGVsZW1lbnQgZnJvbSBwcm9qZWN0ICZhcG9zO1Rlc3RzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBwcm9qZWN0OiAmYXBvcztUZXN0cyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgZWxlbWVudDogJmFwb3M7VGVzdHMvanNvbiZhcG9zOyIgZGVzY3JpcHRpb249IkRlbGV0ZSBlbGVtZW50IiBlbGVtZW50MT0iL2pzb24iIGVsZW1lbnRzPSIxIiBmbGFncz0iNTg5ODMwIiBpZD0ib3JnLmVjbGlwc2UuamR0LnVpLmRlbGV0ZSIgcmVzb3VyY2VzPSIwIiBzdGFtcD0iMTU4ODY2MjgzNTMyNCIgc3ViUGFja2FnZXM9ImZhbHNlIiB2ZXJzaW9uPSIxLjAiLz4mI3gwQTs8cmVmYWN0b3JpbmcgYWNjZXNzb3JzPSJ0cnVlIiBjb21tZW50PSJEZWxldGUgZWxlbWVudCBmcm9tIHByb2plY3QgJmFwb3M7VGVzdHMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIHByb2plY3Q6ICZhcG9zO1Rlc3RzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBlbGVtZW50OiAmYXBvcztUZXN0cy9Kc29uJmFwb3M7IiBkZXNjcmlwdGlvbj0iRGVsZXRlIGVsZW1lbnQiIGVsZW1lbnQxPSIvSnNvbiIgZWxlbWVudHM9IjEiIGZsYWdzPSI1ODk4MzAiIGlkPSJvcmcuZWNsaXBzZS5qZHQudWkuZGVsZXRlIiByZXNvdXJjZXM9IjAiIHN0YW1wPSIxNTg4NjYzMzgwNjY4IiBzdWJQYWNrYWdlcz0iZmFsc2UiIHZlcnNpb249IjEuMCIvPiYjeDBBOzxyZWZhY3RvcmluZyBhY2Nlc3NvcnM9InRydWUiIGNvbW1lbnQ9IkRlbGV0ZSBlbGVtZW50IGZyb20gcHJvamVjdCAmYXBvcztUZXN0cyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgcHJvamVjdDogJmFwb3M7VGVzdHMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIGVsZW1lbnQ6ICZhcG9zO1Rlc3RzL3NyY0pzb24mYXBvczsiIGRlc2NyaXB0aW9uPSJEZWxldGUgZWxlbWVudCIgZWxlbWVudDE9Ii9zcmNKc29uIiBlbGVtZW50cz0iMSIgZmxhZ3M9IjU4OTgzMCIgaWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5kZWxldGUiIHJlc291cmNlcz0iMCIgc3RhbXA9IjE1ODg2NjM2NDUxOTYiIHN1YlBhY2thZ2VzPSJmYWxzZSIgdmVyc2lvbj0iMS4wIi8+JiN4MEE7PHJlZmFjdG9yaW5nIGFjY2Vzc29ycz0idHJ1ZSIgY29tbWVudD0iRGVsZXRlIGVsZW1lbnQgZnJvbSBwcm9qZWN0ICZhcG9zO1Rlc3RzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBwcm9qZWN0OiAmYXBvcztUZXN0cyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgZWxlbWVudDogJmFwb3M7VGVzdHMvc3JjSnNvbiZhcG9zOyIgZGVzY3JpcHRpb249IkRlbGV0ZSBlbGVtZW50IiBlbGVtZW50MT0iL3NyY0pzb24iIGVsZW1lbnRzPSIxIiBmbGFncz0iNTg5ODMwIiBpZD0ib3JnLmVjbGlwc2UuamR0LnVpLmRlbGV0ZSIgcmVzb3VyY2VzPSIwIiBzdGFtcD0iMTU4ODY2Mzc0MjQwNiIgc3ViUGFja2FnZXM9ImZhbHNlIiB2ZXJzaW9uPSIxLjAiLz4mI3gwQTs8cmVmYWN0b3JpbmcgYWNjZXNzb3JzPSJ0cnVlIiBjb21tZW50PSJEZWxldGUgZWxlbWVudCBmcm9tIHByb2plY3QgJmFwb3M7VGVzdHMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIHByb2plY3Q6ICZhcG9zO1Rlc3RzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBlbGVtZW50OiAmYXBvcztUZXN0cy9jbGFzc2VzJmFwb3M7IiBkZXNjcmlwdGlvbj0iRGVsZXRlIGVsZW1lbnQiIGVsZW1lbnQxPSIvY2xhc3NlcyIgZWxlbWVudHM9IjEiIGZsYWdzPSI1ODk4MzAiIGlkPSJvcmcuZWNsaXBzZS5qZHQudWkuZGVsZXRlIiByZXNvdXJjZXM9IjAiIHN0YW1wPSIxNTg4NjcyNTMwMjE3IiBzdWJQYWNrYWdlcz0iZmFsc2UiIHZlcnNpb249IjEuMCIvPiYjeDBBOzxyZWZhY3RvcmluZyBhY2Nlc3NvcnM9InRydWUiIGNvbW1lbnQ9IkRlbGV0ZSBlbGVtZW50IGZyb20gcHJvamVjdCAmYXBvcztUZXN0cyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgcHJvamVjdDogJmFwb3M7VGVzdHMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIGVsZW1lbnQ6ICZhcG9zO1Rlc3RzL3NyYy1HbGVtbVNlcnZpY2VzJmFwb3M7IiBkZXNjcmlwdGlvbj0iRGVsZXRlIGVsZW1lbnQiIGVsZW1lbnQxPSIvc3JjLUdsZW1tU2VydmljZXMiIGVsZW1lbnRzPSIxIiBmbGFncz0iNTg5ODMwIiBpZD0ib3JnLmVjbGlwc2UuamR0LnVpLmRlbGV0ZSIgcmVzb3VyY2VzPSIwIiBzdGFtcD0iMTU4ODY3MzEzNDIyNSIgc3ViUGFja2FnZXM9ImZhbHNlIiB2ZXJzaW9uPSIxLjAiLz4mI3gwQTs8cmVmYWN0b3JpbmcgYWNjZXNzb3JzPSJ0cnVlIiBjb21tZW50PSJEZWxldGUgZWxlbWVudCBmcm9tIHByb2plY3QgJmFwb3M7VGVzdHMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIHByb2plY3Q6ICZhcG9zO1Rlc3RzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBlbGVtZW50OiAmYXBvcztUZXN0cy9zcmMtanNvbiZhcG9zOyIgZGVzY3JpcHRpb249IkRlbGV0ZSBlbGVtZW50IiBlbGVtZW50MT0iL3NyYy1qc29uIiBlbGVtZW50cz0iMSIgZmxhZ3M9IjU4OTgzMCIgaWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5kZWxldGUiIHJlc291cmNlcz0iMCIgc3RhbXA9IjE1ODg2NzMxNjIwMTQiIHN1YlBhY2thZ2VzPSJmYWxzZSIgdmVyc2lvbj0iMS4wIi8+JiN4MEE7PHJlZmFjdG9yaW5nIGFjY2Vzc29ycz0idHJ1ZSIgY29tbWVudD0iRGVsZXRlIGVsZW1lbnQgZnJvbSBwcm9qZWN0ICZhcG9zO1Rlc3RzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBwcm9qZWN0OiAmYXBvcztUZXN0cyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgZWxlbWVudDogJmFwb3M7V29yZGZvcm1TZXJ2aWNlcy5qYXZhJmFwb3M7IiBkZXNjcmlwdGlvbj0iRGVsZXRlIGVsZW1lbnQiIGVsZW1lbnQxPSIvc3JjJmx0O3tXb3JkZm9ybVNlcnZpY2VzLmphdmEiIGVsZW1lbnRzPSIxIiBmbGFncz0iNTg5ODMwIiBpZD0ib3JnLmVjbGlwc2UuamR0LnVpLmRlbGV0ZSIgcmVzb3VyY2VzPSIwIiBzdGFtcD0iMTU4ODgzNjgzODQ5NiIgc3ViUGFja2FnZXM9ImZhbHNlIiB2ZXJzaW9uPSIxLjAiLz4KKzwvc2Vzc2lvbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvVGVzdHMvMjAyMC81LzE5L3JlZmFjdG9yaW5ncy5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9UZXN0cy8yMDIwLzUvMTkvcmVmYWN0b3JpbmdzLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYzA0NjQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvVGVzdHMvMjAyMC81LzE5L3JlZmFjdG9yaW5ncy5pbmRleApAQCAtMCwwICsxLDEyIEBACisxNTg4NjYxMzgzMzk0CURlbGV0ZSBlbGVtZW50CisxNTg4NjYxNzQ0NDA3CURlbGV0ZSBlbGVtZW50CisxNTg4NjYxODIxMzk1CURlbGV0ZSBlbGVtZW50CisxNTg4NjYyNzQxNjY5CURlbGV0ZSBlbGVtZW50CisxNTg4NjYyODM1MzI0CURlbGV0ZSBlbGVtZW50CisxNTg4NjYzMzgwNjY4CURlbGV0ZSBlbGVtZW50CisxNTg4NjYzNjQ1MTk2CURlbGV0ZSBlbGVtZW50CisxNTg4NjYzNzQyNDA2CURlbGV0ZSBlbGVtZW50CisxNTg4NjcyNTMwMjE3CURlbGV0ZSBlbGVtZW50CisxNTg4NjczMTM0MjI1CURlbGV0ZSBlbGVtZW50CisxNTg4NjczMTYyMDE0CURlbGV0ZSBlbGVtZW50CisxNTg4ODM2ODM4NDk2CURlbGV0ZSBlbGVtZW50CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvVGVzdHMvMjAyMC81LzIwL3JlZmFjdG9yaW5ncy5oaXN0b3J5IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL1Rlc3RzLzIwMjAvNS8yMC9yZWZhY3RvcmluZ3MuaGlzdG9yeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTJiOTY1Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL1Rlc3RzLzIwMjAvNS8yMC9yZWZhY3RvcmluZ3MuaGlzdG9yeQpAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8c2Vzc2lvbiB2ZXJzaW9uPSIxLjAiPgorPHJlZmFjdG9yaW5nIGFjY2Vzc29ycz0idHJ1ZSIgY29tbWVudD0iRGVsZXRlIGVsZW1lbnQgZnJvbSBwcm9qZWN0ICZhcG9zO1Rlc3RzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBwcm9qZWN0OiAmYXBvcztUZXN0cyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgZWxlbWVudDogJmFwb3M7c3JjLXdmb3JtU2VydmljZXMmYXBvczsiIGRlc2NyaXB0aW9uPSJEZWxldGUgZWxlbWVudCIgZWxlbWVudDE9InNyYy13Zm9ybVNlcnZpY2VzIiBlbGVtZW50cz0iMCIgZmxhZ3M9IjU4OTgzMCIgaWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5kZWxldGUiIHJlc291cmNlcz0iMSIgc3RhbXA9IjE1ODkzMDMyMDI4ODAiIHN1YlBhY2thZ2VzPSJmYWxzZSIgdmVyc2lvbj0iMS4wIi8+Cis8L3Nlc3Npb24+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL1Rlc3RzLzIwMjAvNS8yMC9yZWZhY3RvcmluZ3MuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvVGVzdHMvMjAyMC81LzIwL3JlZmFjdG9yaW5ncy5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjcyMTYyCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL1Rlc3RzLzIwMjAvNS8yMC9yZWZhY3RvcmluZ3MuaW5kZXgKQEAgLTAsMCArMSBAQAorMTU4OTMwMzIwMjg4MAlEZWxldGUgZWxlbWVudApkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL1V0aWxzLzIwMjAvNC8xNy9yZWZhY3RvcmluZ3MuaGlzdG9yeSBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9VdGlscy8yMDIwLzQvMTcvcmVmYWN0b3JpbmdzLmhpc3RvcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTczN2ZjMwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9VdGlscy8yMDIwLzQvMTcvcmVmYWN0b3JpbmdzLmhpc3RvcnkKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHNlc3Npb24gdmVyc2lvbj0iMS4wIj4KKzxyZWZhY3RvcmluZyBjb21tZW50PSJSZW5hbWUgdHlwZSAmYXBvcztkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5HbGVtbVV0aWxzJmFwb3M7IHRvICZhcG9zO1V0aWxzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBwcm9qZWN0OiAmYXBvcztVdGlscyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgZWxlbWVudDogJmFwb3M7ZGUua29yYXAuc2VydmljZXMudXRpbHMuR2xlbW1VdGlscyZhcG9zOyYjeDBEOyYjeDBBOy0gUmVuYW1lZCBlbGVtZW50OiAmYXBvcztkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlscyZhcG9zOyYjeDBEOyYjeDBBOy0gVXBkYXRlIHJlZmVyZW5jZXMgdG8gcmVmYWN0b3JlZCBlbGVtZW50JiN4MEQ7JiN4MEE7LSBVcGRhdGUgdGV4dHVhbCBvY2N1cnJlbmNlcyBpbiBjb21tZW50cyBhbmQgc3RyaW5ncyIgZGVzY3JpcHRpb249IlJlbmFtZSB0eXBlICZhcG9zO0dsZW1tVXRpbHMmYXBvczsiIGZsYWdzPSI1ODk4MzAiIGlkPSJvcmcuZWNsaXBzZS5qZHQudWkucmVuYW1lLnR5cGUiIGlucHV0PSIvc3JjJmx0O2RlLmtvcmFwLnNlcnZpY2VzLnV0aWxze0dsZW1tVXRpbHMuamF2YVtHbGVtbVV0aWxzIiBtYXRjaFN0cmF0ZWd5PSIxIiBuYW1lPSJVdGlscyIgcXVhbGlmaWVkPSJmYWxzZSIgcmVmZXJlbmNlcz0idHJ1ZSIgc2ltaWxhckRlY2xhcmF0aW9ucz0iZmFsc2UiIHN0YW1wPSIxNTg3NzM4MDc2NjMwIiB0ZXh0dWFsPSJmYWxzZSIgdmVyc2lvbj0iMS4wIi8+Cis8L3Nlc3Npb24+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL1V0aWxzLzIwMjAvNC8xNy9yZWZhY3RvcmluZ3MuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvVXRpbHMvMjAyMC80LzE3L3JlZmFjdG9yaW5ncy5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWNkOWI2Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL1V0aWxzLzIwMjAvNC8xNy9yZWZhY3RvcmluZ3MuaW5kZXgKQEAgLTAsMCArMSBAQAorMTU4NzczODA3NjYzMAlSZW5hbWUgdHlwZSAnR2xlbW1VdGlscycKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy93Zm9ybVNlcnZpY2VKYXIvMjAyMC81LzIwL3JlZmFjdG9yaW5ncy5oaXN0b3J5IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL3dmb3JtU2VydmljZUphci8yMDIwLzUvMjAvcmVmYWN0b3JpbmdzLmhpc3RvcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIzZTQwNwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy93Zm9ybVNlcnZpY2VKYXIvMjAyMC81LzIwL3JlZmFjdG9yaW5ncy5oaXN0b3J5CkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzZXNzaW9uIHZlcnNpb249IjEuMCI+JiN4MEE7PHJlZmFjdG9yaW5nIGFjY2Vzc29ycz0idHJ1ZSIgY29tbWVudD0iRGVsZXRlIGVsZW1lbnQgZnJvbSBwcm9qZWN0ICZhcG9zO3dmb3JtU2VydmljZUphciZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgcHJvamVjdDogJmFwb3M7d2Zvcm1TZXJ2aWNlSmFyJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBlbGVtZW50OiAmYXBvczt3Zm9ybVNlcnZpY2VKYXIvc2VydmljZXMmYXBvczsiIGRlc2NyaXB0aW9uPSJEZWxldGUgZWxlbWVudCIgZWxlbWVudDE9Ii9zZXJ2aWNlcyIgZWxlbWVudHM9IjEiIGZsYWdzPSI1ODk4MzAiIGlkPSJvcmcuZWNsaXBzZS5qZHQudWkuZGVsZXRlIiByZXNvdXJjZXM9IjAiIHN0YW1wPSIxNTg5MjgwNzA0MDg1IiBzdWJQYWNrYWdlcz0iZmFsc2UiIHZlcnNpb249IjEuMCIvPiYjeDBBOzxyZWZhY3RvcmluZyBhY2Nlc3NvcnM9InRydWUiIGNvbW1lbnQ9IkRlbGV0ZSBlbGVtZW50IGZyb20gcHJvamVjdCAmYXBvczt3Zm9ybVNlcnZpY2VKYXImYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIHByb2plY3Q6ICZhcG9zO3dmb3JtU2VydmljZUphciZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgZWxlbWVudDogJmFwb3M7d2Zvcm1TZXJ2aWNlSmFyL3NlcnZpY2VzJmFwb3M7IiBkZXNjcmlwdGlvbj0iRGVsZXRlIGVsZW1lbnQiIGVsZW1lbnQxPSIvc2VydmljZXMiIGVsZW1lbnRzPSIxIiBmbGFncz0iNTg5ODMwIiBpZD0ib3JnLmVjbGlwc2UuamR0LnVpLmRlbGV0ZSIgcmVzb3VyY2VzPSIwIiBzdGFtcD0iMTU4OTI4MDc0ODIyNiIgc3ViUGFja2FnZXM9ImZhbHNlIiB2ZXJzaW9uPSIxLjAiLz4mI3gwQTs8cmVmYWN0b3JpbmcgYWNjZXNzb3JzPSJ0cnVlIiBjb21tZW50PSJEZWxldGUgZWxlbWVudCBmcm9tIHByb2plY3QgJmFwb3M7d2Zvcm1TZXJ2aWNlSmFyJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBwcm9qZWN0OiAmYXBvczt3Zm9ybVNlcnZpY2VKYXImYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIGVsZW1lbnQ6ICZhcG9zO3dmb3JtU2VydmljZUphci9zcmMmYXBvczsiIGRlc2NyaXB0aW9uPSJEZWxldGUgZWxlbWVudCIgZWxlbWVudDE9Ii9zcmMiIGVsZW1lbnRzPSIxIiBmbGFncz0iNTg5ODMwIiBpZD0ib3JnLmVjbGlwc2UuamR0LnVpLmRlbGV0ZSIgcmVzb3VyY2VzPSIwIiBzdGFtcD0iMTU4OTU2NTA4NTA2MyIgc3ViUGFja2FnZXM9ImZhbHNlIiB2ZXJzaW9uPSIxLjAiLz4KKzwvc2Vzc2lvbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3Mvd2Zvcm1TZXJ2aWNlSmFyLzIwMjAvNS8yMC9yZWZhY3RvcmluZ3MuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3Mvd2Zvcm1TZXJ2aWNlSmFyLzIwMjAvNS8yMC9yZWZhY3RvcmluZ3MuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk3ZGRlNgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy93Zm9ybVNlcnZpY2VKYXIvMjAyMC81LzIwL3JlZmFjdG9yaW5ncy5pbmRleApAQCAtMCwwICsxLDMgQEAKKzE1ODkyODA3MDQwODUJRGVsZXRlIGVsZW1lbnQKKzE1ODkyODA3NDgyMjYJRGVsZXRlIGVsZW1lbnQKKzE1ODk1NjUwODUwNjMJRGVsZXRlIGVsZW1lbnQKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy93Zm9ybVNlcnZpY2VzLXdyb25nLzIwMjAvNC8xNy9yZWZhY3RvcmluZ3MuaGlzdG9yeSBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy93Zm9ybVNlcnZpY2VzLXdyb25nLzIwMjAvNC8xNy9yZWZhY3RvcmluZ3MuaGlzdG9yeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzgxOTlkCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL3dmb3JtU2VydmljZXMtd3JvbmcvMjAyMC80LzE3L3JlZmFjdG9yaW5ncy5oaXN0b3J5CkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzZXNzaW9uIHZlcnNpb249IjEuMCI+JiN4MEE7PHJlZmFjdG9yaW5nIGNvbW1lbnQ9Ik1vdmUgZWxlbWVudCAmYXBvczsmYXBvczsgdG8gJmFwb3M7ZGUua29yYXAuc2VydmljZXMud2Zvcm1SZXdyaXRlJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBwcm9qZWN0OiAmYXBvczt3Zm9ybVNlcnZpY2VzJmFwb3M7JiN4MEQ7JiN4MEE7LSBEZXN0aW5hdGlvbiBlbGVtZW50OiAmYXBvcztkZS5rb3JhcC5zZXJ2aWNlcy53Zm9ybVJld3JpdGUmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIGVsZW1lbnQ6ICZhcG9zO2RlLmtvcmFwLnNlcnZpY2VzLldvcmRmb3JtU2VydmljZXMudHJhdmVyc2VfYW5kX3Jld3JpdGVfS29yYWxRdWVyeSguLi4pJmFwb3M7JiN4MEQ7JiN4MEE7LSBUZXh0dWFsIG1vdmUgb25seSYjeDBEOyYjeDBBOy0gVXBkYXRlIHJlZmVyZW5jZXMgdG8gcmVmYWN0b3JlZCBlbGVtZW50IiBkZXNjcmlwdGlvbj0iTW92ZSBtZXRob2QiIGRlc3RpbmF0aW9uPSIvc3JjJmx0O2RlLmtvcmFwLnNlcnZpY2Vze3dmb3JtUmV3cml0ZS5qYXZhW3dmb3JtUmV3cml0ZSIgZWxlbWVudDE9Ii9zcmMmbHQ7ZGUua29yYXAuc2VydmljZXN7V29yZGZvcm1TZXJ2aWNlcy5qYXZhW1dvcmRmb3JtU2VydmljZXN+dHJhdmVyc2VfYW5kX3Jld3JpdGVfS29yYWxRdWVyeX5RU3RyaW5nOyIgZmxhZ3M9IjU4OTgzMCIgaWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5tb3ZlIiBtZW1iZXJzPSIxIiBwb2xpY3k9Im9yZy5lY2xpcHNlLmpkdC51aS5tb3ZlTWVtYmVycyIgc3RhbXA9IjE1ODc3MTU3NjI5OTkiIHZlcnNpb249IjEuMCIvPiYjeDBBOzxyZWZhY3RvcmluZyBjb21tZW50PSJNb3ZlIGVsZW1lbnQgJmFwb3M7JmFwb3M7IHRvICZhcG9zO2RlLmtvcmFwLnNlcnZpY2VzLndmb3JtUmV3cml0ZSZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgcHJvamVjdDogJmFwb3M7d2Zvcm1TZXJ2aWNlcyZhcG9zOyYjeDBEOyYjeDBBOy0gRGVzdGluYXRpb24gZWxlbWVudDogJmFwb3M7ZGUua29yYXAuc2VydmljZXMud2Zvcm1SZXdyaXRlJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBlbGVtZW50OiAmYXBvcztkZS5rb3JhcC5zZXJ2aWNlcy5Xb3JkZm9ybVNlcnZpY2VzLnRyYXZlcnNlX2FuZF9yZXdyaXRlX0tvcmFsUXVlcnlfMiguLi4pJmFwb3M7JiN4MEQ7JiN4MEE7LSBUZXh0dWFsIG1vdmUgb25seSYjeDBEOyYjeDBBOy0gVXBkYXRlIHJlZmVyZW5jZXMgdG8gcmVmYWN0b3JlZCBlbGVtZW50IiBkZXNjcmlwdGlvbj0iTW92ZSBtZXRob2QiIGRlc3RpbmF0aW9uPSIvc3JjJmx0O2RlLmtvcmFwLnNlcnZpY2Vze3dmb3JtUmV3cml0ZS5qYXZhW3dmb3JtUmV3cml0ZSIgZWxlbWVudDE9Ii9zcmMmbHQ7ZGUua29yYXAuc2VydmljZXN7V29yZGZvcm1TZXJ2aWNlcy5qYXZhW1dvcmRmb3JtU2VydmljZXN+dHJhdmVyc2VfYW5kX3Jld3JpdGVfS29yYWxRdWVyeV8yflFTdHJpbmc7IiBmbGFncz0iNTg5ODMwIiBpZD0ib3JnLmVjbGlwc2UuamR0LnVpLm1vdmUiIG1lbWJlcnM9IjEiIHBvbGljeT0ib3JnLmVjbGlwc2UuamR0LnVpLm1vdmVNZW1iZXJzIiBzdGFtcD0iMTU4NzcxNTc2ODA5OSIgdmVyc2lvbj0iMS4wIi8+JiN4MEE7PHJlZmFjdG9yaW5nIGNvbW1lbnQ9Ik1vdmUgZWxlbWVudCAmYXBvczsmYXBvczsgdG8gJmFwb3M7ZGUua29yYXAuc2VydmljZXMud2Zvcm1SZXdyaXRlJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBwcm9qZWN0OiAmYXBvczt3Zm9ybVNlcnZpY2VzJmFwb3M7JiN4MEQ7JiN4MEE7LSBEZXN0aW5hdGlvbiBlbGVtZW50OiAmYXBvcztkZS5rb3JhcC5zZXJ2aWNlcy53Zm9ybVJld3JpdGUmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIGVsZW1lbnQ6ICZhcG9zO2RlLmtvcmFwLnNlcnZpY2VzLldvcmRmb3JtU2VydmljZXMudHJhdmVyc2VKc29uVHJlZSguLi4pJmFwb3M7JiN4MEQ7JiN4MEE7LSBUZXh0dWFsIG1vdmUgb25seSYjeDBEOyYjeDBBOy0gVXBkYXRlIHJlZmVyZW5jZXMgdG8gcmVmYWN0b3JlZCBlbGVtZW50IiBkZXNjcmlwdGlvbj0iTW92ZSBtZXRob2QiIGRlc3RpbmF0aW9uPSIvc3JjJmx0O2RlLmtvcmFwLnNlcnZpY2Vze3dmb3JtUmV3cml0ZS5qYXZhW3dmb3JtUmV3cml0ZSIgZWxlbWVudDE9Ii9zcmMmbHQ7ZGUua29yYXAuc2VydmljZXN7V29yZGZvcm1TZXJ2aWNlcy5qYXZhW1dvcmRmb3JtU2VydmljZXN+dHJhdmVyc2VKc29uVHJlZX5RSnNvbk5vZGU7IiBmbGFncz0iNTg5ODMwIiBpZD0ib3JnLmVjbGlwc2UuamR0LnVpLm1vdmUiIG1lbWJlcnM9IjEiIHBvbGljeT0ib3JnLmVjbGlwc2UuamR0LnVpLm1vdmVNZW1iZXJzIiBzdGFtcD0iMTU4NzcxNTc3MjcxMSIgdmVyc2lvbj0iMS4wIi8+JiN4MEE7PHJlZmFjdG9yaW5nIGNvbW1lbnQ9IlJlbmFtZSB0eXBlICZhcG9zO2RlLmtvcmFwLnNlcnZpY2VzLndmb3JtUmV3cml0ZSZhcG9zOyB0byAmYXBvcztXZm9ybVJld3JpdGUmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIHByb2plY3Q6ICZhcG9zO3dmb3JtU2VydmljZXMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIGVsZW1lbnQ6ICZhcG9zO2RlLmtvcmFwLnNlcnZpY2VzLndmb3JtUmV3cml0ZSZhcG9zOyYjeDBEOyYjeDBBOy0gUmVuYW1lZCBlbGVtZW50OiAmYXBvcztkZS5rb3JhcC5zZXJ2aWNlcy5XZm9ybVJld3JpdGUmYXBvczsmI3gwRDsmI3gwQTstIFVwZGF0ZSByZWZlcmVuY2VzIHRvIHJlZmFjdG9yZWQgZWxlbWVudCYjeDBEOyYjeDBBOy0gVXBkYXRlIHRleHR1YWwgb2NjdXJyZW5jZXMgaW4gY29tbWVudHMgYW5kIHN0cmluZ3MiIGRlc2NyaXB0aW9uPSJSZW5hbWUgdHlwZSAmYXBvczt3Zm9ybVJld3JpdGUmYXBvczsiIGZsYWdzPSI1ODk4MzAiIGlkPSJvcmcuZWNsaXBzZS5qZHQudWkucmVuYW1lLnR5cGUiIGlucHV0PSIvc3JjJmx0O2RlLmtvcmFwLnNlcnZpY2Vze3dmb3JtUmV3cml0ZS5qYXZhW3dmb3JtUmV3cml0ZSIgbWF0Y2hTdHJhdGVneT0iMSIgbmFtZT0iV2Zvcm1SZXdyaXRlIiBxdWFsaWZpZWQ9ImZhbHNlIiByZWZlcmVuY2VzPSJ0cnVlIiBzaW1pbGFyRGVjbGFyYXRpb25zPSJmYWxzZSIgc3RhbXA9IjE1ODc3MTY2Njc3NDAiIHRleHR1YWw9ImZhbHNlIiB2ZXJzaW9uPSIxLjAiLz4mI3gwQTs8cmVmYWN0b3JpbmcgY29tbWVudD0iUmVuYW1lIHR5cGUgJmFwb3M7ZGUua29yYXAuc2VydmljZXMuV2Zvcm1SZXdyaXRlJmFwb3M7IHRvICZhcG9zO1dvcmRmb3JtUmV3cml0ZSZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgcHJvamVjdDogJmFwb3M7d2Zvcm1TZXJ2aWNlcyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgZWxlbWVudDogJmFwb3M7ZGUua29yYXAuc2VydmljZXMuV2Zvcm1SZXdyaXRlJmFwb3M7JiN4MEQ7JiN4MEE7LSBSZW5hbWVkIGVsZW1lbnQ6ICZhcG9zO2RlLmtvcmFwLnNlcnZpY2VzLldvcmRmb3JtUmV3cml0ZSZhcG9zOyYjeDBEOyYjeDBBOy0gVXBkYXRlIHJlZmVyZW5jZXMgdG8gcmVmYWN0b3JlZCBlbGVtZW50JiN4MEQ7JiN4MEE7LSBVcGRhdGUgdGV4dHVhbCBvY2N1cnJlbmNlcyBpbiBjb21tZW50cyBhbmQgc3RyaW5ncyIgZGVzY3JpcHRpb249IlJlbmFtZSB0eXBlICZhcG9zO1dmb3JtUmV3cml0ZSZhcG9zOyIgZmxhZ3M9IjU4OTgzMCIgaWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5yZW5hbWUudHlwZSIgaW5wdXQ9Ii9zcmMmbHQ7ZGUua29yYXAuc2VydmljZXN7V2Zvcm1SZXdyaXRlLmphdmFbV2Zvcm1SZXdyaXRlIiBtYXRjaFN0cmF0ZWd5PSIxIiBuYW1lPSJXb3JkZm9ybVJld3JpdGUiIHF1YWxpZmllZD0iZmFsc2UiIHJlZmVyZW5jZXM9InRydWUiIHNpbWlsYXJEZWNsYXJhdGlvbnM9ImZhbHNlIiBzdGFtcD0iMTU4NzczODkwOTMwNCIgdGV4dHVhbD0iZmFsc2UiIHZlcnNpb249IjEuMCIvPiYjeDBBOzxyZWZhY3RvcmluZyBjb21tZW50PSJNb3ZlIHBhY2thZ2UgJmFwb3M7ZGUua29yYXAuc2VydmljZXMmYXBvczsgdG8gJmFwb3M7d2Zvcm1TZXJ2aWNlczIvc3JjJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBwcm9qZWN0OiAmYXBvczt3Zm9ybVNlcnZpY2VzJmFwb3M7JiN4MEQ7JiN4MEE7LSBEZXN0aW5hdGlvbiBlbGVtZW50OiAmYXBvczt3Zm9ybVNlcnZpY2VzMi9zcmMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIGVsZW1lbnQ6ICZhcG9zO3dmb3JtU2VydmljZXMvc3JjL2RlLmtvcmFwLnNlcnZpY2VzJmFwb3M7JiN4MEQ7JiN4MEE7LSBVcGRhdGUgcmVmZXJlbmNlcyB0byByZWZhY3RvcmVkIGVsZW1lbnQiIGRlc2NyaXB0aW9uPSJNb3ZlIHBhY2thZ2UiIGRlc3RpbmF0aW9uPSI9d2Zvcm1TZXJ2aWNlczIvc3JjIiBlbGVtZW50MT0iL3NyYyZsdDtkZS5rb3JhcC5zZXJ2aWNlcyIgZmxhZ3M9IjU4OTgzMCIgZnJhZ21lbnRzPSIxIiBpZD0ib3JnLmVjbGlwc2UuamR0LnVpLm1vdmUiIHBvbGljeT0ib3JnLmVjbGlwc2UuamR0LnVpLm1vdmVQYWNrYWdlcyIgc3RhbXA9IjE1ODc3NDEwMDg0MDAiIHZlcnNpb249IjEuMCIvPgorPC9zZXNzaW9uPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy93Zm9ybVNlcnZpY2VzLXdyb25nLzIwMjAvNC8xNy9yZWZhY3RvcmluZ3MuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3Mvd2Zvcm1TZXJ2aWNlcy13cm9uZy8yMDIwLzQvMTcvcmVmYWN0b3JpbmdzLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNWUyMWEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3Mvd2Zvcm1TZXJ2aWNlcy13cm9uZy8yMDIwLzQvMTcvcmVmYWN0b3JpbmdzLmluZGV4CkBAIC0wLDAgKzEsNiBAQAorMTU4NzcxNTc2Mjk5OQlNb3ZlIG1ldGhvZAorMTU4NzcxNTc2ODA5OQlNb3ZlIG1ldGhvZAorMTU4NzcxNTc3MjcxMQlNb3ZlIG1ldGhvZAorMTU4NzcxNjY2Nzc0MAlSZW5hbWUgdHlwZSAnd2Zvcm1SZXdyaXRlJworMTU4NzczODkwOTMwNAlSZW5hbWUgdHlwZSAnV2Zvcm1SZXdyaXRlJworMTU4Nzc0MTAwODQwMAlNb3ZlIHBhY2thZ2UKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy93Zm9ybVNlcnZpY2VzLzIwMjAvNS8xOS9yZWZhY3RvcmluZ3MuaGlzdG9yeSBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy93Zm9ybVNlcnZpY2VzLzIwMjAvNS8xOS9yZWZhY3RvcmluZ3MuaGlzdG9yeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGU4NmZhCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL3dmb3JtU2VydmljZXMvMjAyMC81LzE5L3JlZmFjdG9yaW5ncy5oaXN0b3J5CkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzZXNzaW9uIHZlcnNpb249IjEuMCI+Cis8cmVmYWN0b3JpbmcgY29tbWVudD0iQ29weSBlbGVtZW50ICZhcG9zO1dvcmRmb3JtU2VydmljZXMuamF2YSZhcG9zOyB0byAmYXBvcztUZXN0cy9zcmMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIHByb2plY3Q6ICZhcG9zO3dmb3JtU2VydmljZXMmYXBvczsmI3gwRDsmI3gwQTstIERlc3RpbmF0aW9uIGVsZW1lbnQ6ICZhcG9zO1Rlc3RzL3NyYyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgZWxlbWVudDogJmFwb3M7ZGUua29yYXAuc2VydmljZXMuV29yZGZvcm1TZXJ2aWNlcy5qYXZhJmFwb3M7IiBkZXNjcmlwdGlvbj0iQ29weSBjb21waWxhdGlvbiB1bml0IiBkZXN0aW5hdGlvbj0iPVRlc3RzL3NyYyIgZWxlbWVudDE9Ii9zcmMmbHQ7ZGUua29yYXAuc2VydmljZXN7V29yZGZvcm1TZXJ2aWNlcy5qYXZhIiBmaWxlcz0iMCIgZmxhZ3M9IjU4OTgzMCIgZm9sZGVycz0iMCIgaWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5jb3B5IiBwb2xpY3k9Im9yZy5lY2xpcHNlLmpkdC51aS5jb3B5UmVzb3VyY2VzIiBzdGFtcD0iMTU4ODgzNjc5ODI1OSIgdW5pdHM9IjEiIHZlcnNpb249IjEuMCIvPgorPC9zZXNzaW9uPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy93Zm9ybVNlcnZpY2VzLzIwMjAvNS8xOS9yZWZhY3RvcmluZ3MuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3Mvd2Zvcm1TZXJ2aWNlcy8yMDIwLzUvMTkvcmVmYWN0b3JpbmdzLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YTQ2ZjUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3Mvd2Zvcm1TZXJ2aWNlcy8yMDIwLzUvMTkvcmVmYWN0b3JpbmdzLmluZGV4CkBAIC0wLDAgKzEgQEAKKzE1ODg4MzY3OTgyNTkJQ29weSBjb21waWxhdGlvbiB1bml0CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3Mvd2Zvcm1TZXJ2aWNlcy8yMDIwLzYvMjUvcmVmYWN0b3JpbmdzLmhpc3RvcnkgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3Mvd2Zvcm1TZXJ2aWNlcy8yMDIwLzYvMjUvcmVmYWN0b3JpbmdzLmhpc3RvcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJlMmJkNgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy93Zm9ybVNlcnZpY2VzLzIwMjAvNi8yNS9yZWZhY3RvcmluZ3MuaGlzdG9yeQpAQCAtMCwwICsxLDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8c2Vzc2lvbiB2ZXJzaW9uPSIxLjAiPiYjeDBBOzxyZWZhY3RvcmluZyBhY2Nlc3NvcnM9InRydWUiIGNvbW1lbnQ9IkRlbGV0ZSBlbGVtZW50IGZyb20gcHJvamVjdCAmYXBvczt3Zm9ybVNlcnZpY2VzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBwcm9qZWN0OiAmYXBvczt3Zm9ybVNlcnZpY2VzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBlbGVtZW50OiAmYXBvczt3Zm9ybVNlcnZpY2VzL3NyYy1HbGVtbVNlcnZpY2VzJmFwb3M7IiBkZXNjcmlwdGlvbj0iRGVsZXRlIGVsZW1lbnQiIGVsZW1lbnQxPSIvc3JjLUdsZW1tU2VydmljZXMiIGVsZW1lbnRzPSIxIiBmbGFncz0iNTg5ODMwIiBpZD0ib3JnLmVjbGlwc2UuamR0LnVpLmRlbGV0ZSIgcmVzb3VyY2VzPSIwIiBzdGFtcD0iMTU5MjI5ODMxMjMzOCIgc3ViUGFja2FnZXM9ImZhbHNlIiB2ZXJzaW9uPSIxLjAiLz4mI3gwQTs8cmVmYWN0b3JpbmcgYWNjZXNzb3JzPSJ0cnVlIiBjb21tZW50PSJEZWxldGUgZWxlbWVudCBmcm9tIHByb2plY3QgJmFwb3M7d2Zvcm1TZXJ2aWNlcyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgcHJvamVjdDogJmFwb3M7d2Zvcm1TZXJ2aWNlcyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgZWxlbWVudDogJmFwb3M7d2Zvcm1TZXJ2aWNlcy0wLjEtU05BUFNIT1QmYXBvczsiIGRlc2NyaXB0aW9uPSJEZWxldGUgZWxlbWVudCIgZWxlbWVudDE9InRhcmdldC93Zm9ybVNlcnZpY2VzLTAuMS1TTkFQU0hPVCIgZWxlbWVudHM9IjAiIGZsYWdzPSI1ODk4MzAiIGlkPSJvcmcuZWNsaXBzZS5qZHQudWkuZGVsZXRlIiByZXNvdXJjZXM9IjEiIHN0YW1wPSIxNTkyMzEzMzc3Nzg0IiBzdWJQYWNrYWdlcz0iZmFsc2UiIHZlcnNpb249IjEuMCIvPgorPC9zZXNzaW9uPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy93Zm9ybVNlcnZpY2VzLzIwMjAvNi8yNS9yZWZhY3RvcmluZ3MuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3Mvd2Zvcm1TZXJ2aWNlcy8yMDIwLzYvMjUvcmVmYWN0b3JpbmdzLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNDY4YzQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3Mvd2Zvcm1TZXJ2aWNlcy8yMDIwLzYvMjUvcmVmYWN0b3JpbmdzLmluZGV4CkBAIC0wLDAgKzEsMiBAQAorMTU5MjI5ODMxMjMzOAlEZWxldGUgZWxlbWVudAorMTU5MjMxMzM3Nzc4NAlEZWxldGUgZWxlbWVudApkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsudWkucmVmYWN0b3JpbmcvZGlhbG9nX3NldHRpbmdzLnhtbCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLnVpLnJlZmFjdG9yaW5nL2RpYWxvZ19zZXR0aW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZhZTg2OAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLnVpLnJlZmFjdG9yaW5nL2RpYWxvZ19zZXR0aW5ncy54bWwKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzZWN0aW9uIG5hbWU9IldvcmtiZW5jaCI+CisJPHNlY3Rpb24gbmFtZT0iUmVmYWN0b3JpbmdXaXphcmQucHJldmlldyI+CisJCTxpdGVtIHZhbHVlPSI2MDAiIGtleT0id2lkdGgiLz4KKwkJPGl0ZW0gdmFsdWU9IjQwMCIga2V5PSJoZWlnaHQiLz4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0ib3JnLmVjbGlwc2UubHRrLnVpLnJlZmFjdG9yaW5nLnNldHRpbmdzIj4KKwkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9ImRlbGV0ZVN1YlBhY2thZ2VzIi8+CisJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJtb3ZlV2l6YXJkLnVwZGF0ZVF1YWxpZmllZE5hbWVzIi8+CisJCTxpdGVtIHZhbHVlPSIqIiBrZXk9InBhdHRlcm5zIi8+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9IkluZmVyVHlwZUFyZ3VtZW50cyI+CisJCTxpdGVtIHZhbHVlPSJ0cnVlIiBrZXk9ImxlYXZlVW5jb25zdHJhaW5lZFJhdyIvPgorCQk8aXRlbSB2YWx1ZT0idHJ1ZSIga2V5PSJhc3N1bWVDbG9uZVJldHVybnNTYW1lVHlwZSIvPgorCTwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUudWkvZGlhbG9nX3NldHRpbmdzLnhtbCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUudWkvZGlhbG9nX3NldHRpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTczMmZjCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS51aS9kaWFsb2dfc2V0dGluZ3MueG1sCkBAIC0wLDAgKzEsMTY3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHNlY3Rpb24gbmFtZT0iV29ya2JlbmNoIj4KKwk8c2VjdGlvbiBuYW1lPSJvcmcuZWNsaXBzZS5tMmUuY29yZS5wb20uZGVwZW5kZW5jaWVzIj4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0iTWF2ZW5Qcm9qZWN0V2l6YXJkQXJjaGV0eXBlUGFnZSI+CisJCTxpdGVtIHZhbHVlPSJBbGwgQ2F0YWxvZ3MiIGtleT0iY2F0YWxvZyIvPgorCQk8bGlzdCBrZXk9InByb2plY3ROYW1lVGVtcGxhdGUiPgorCQkJPGl0ZW0gdmFsdWU9IlthcnRpZmFjdElkXSIvPgorCQkJPGl0ZW0gdmFsdWU9IlthcnRpZmFjdElkXS1UUlVOSyIvPgorCQkJPGl0ZW0gdmFsdWU9IlthcnRpZmFjdElkXS1bdmVyc2lvbl0iLz4KKwkJCTxpdGVtIHZhbHVlPSJbZ3JvdXBJZF0uW2FydGlmYWN0SWRdIi8+CisJCQk8aXRlbSB2YWx1ZT0iW2dyb3VwSWRdLlthcnRpZmFjdElkXS1bdmVyc2lvbl0iLz4KKwkJCTxpdGVtIHZhbHVlPSJbbmFtZV0iLz4KKwkJPC9saXN0PgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBuYW1lPSJ3aXphcmRQYWdlIj4KKwkJPGxpc3Qga2V5PSJncm91cElkIj4KKwkJCTxpdGVtIHZhbHVlPSJkZS5rb3JhcC5zZXJ2aWNlcyIvPgorCQkJPGl0ZW0gdmFsdWU9IlV0aWxzIi8+CisJCQk8aXRlbSB2YWx1ZT0id2Zvcm1TZXJ2aWNlcyIvPgorCQkJPGl0ZW0gdmFsdWU9Ikpzb25UcmF2ZXJzZSIvPgorCQkJPGl0ZW0gdmFsdWU9IkdsZW1tQ2xpZW50Ii8+CisJCQk8aXRlbSB2YWx1ZT0iR2xlbW1TZXJ2aWNlczIiLz4KKwkJPC9saXN0PgorCQk8bGlzdCBrZXk9Im5hbWUiPgorCQkJPGl0ZW0gdmFsdWU9Ildmb3JtU2VydmljZXMtSmFyIi8+CisJCQk8aXRlbSB2YWx1ZT0id2Zvcm1TZXJ2aWNlcyIvPgorCQkJPGl0ZW0gdmFsdWU9IlV0aWxzIi8+CisJCQk8aXRlbSB2YWx1ZT0iSnNvblRyYXZlcnNlIi8+CisJCQk8aXRlbSB2YWx1ZT0iR2xlbW0gQ2xpZW50IGxpYnJhcnkiLz4KKwkJCTxpdGVtIHZhbHVlPSJHbGVtbVNlcnZpY2VzIi8+CisJCTwvbGlzdD4KKwkJPGxpc3Qga2V5PSJhcnRpZmFjdElkIj4KKwkJCTxpdGVtIHZhbHVlPSJ3Zm9ybVNlcnZpY2VKYXIiLz4KKwkJCTxpdGVtIHZhbHVlPSJ3Zm9ybVNlcnZpY2VzIi8+CisJCQk8aXRlbSB2YWx1ZT0iVXRpbHMiLz4KKwkJCTxpdGVtIHZhbHVlPSJKc29uVHJhdmVyc2UiLz4KKwkJCTxpdGVtIHZhbHVlPSJHbGVtbUNsaWVudCIvPgorCQkJPGl0ZW0gdmFsdWU9IkdsZW1tU2VydmljZXMyIi8+CisJCTwvbGlzdD4KKwkJPGxpc3Qga2V5PSJ2ZXJzaW9uIj4KKwkJCTxpdGVtIHZhbHVlPSIwLjEtU05BUFNIT1QiLz4KKwkJCTxpdGVtIHZhbHVlPSIwLjAuMS1TTkFQU0hPVCIvPgorCQk8L2xpc3Q+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9Ik1hdmVuTW9kdWxlV2l6YXJkUGFyZW50UGFnZSI+CisJCTxsaXN0IGtleT0ibW9kdWxlTmFtZSI+CisJCTwvbGlzdD4KKwkJPGxpc3Qga2V5PSJwcm9qZWN0TmFtZVRlbXBsYXRlIj4KKwkJCTxpdGVtIHZhbHVlPSJbYXJ0aWZhY3RJZF0iLz4KKwkJCTxpdGVtIHZhbHVlPSJbYXJ0aWZhY3RJZF0tVFJVTksiLz4KKwkJCTxpdGVtIHZhbHVlPSJbYXJ0aWZhY3RJZF0tW3ZlcnNpb25dIi8+CisJCQk8aXRlbSB2YWx1ZT0iW2dyb3VwSWRdLlthcnRpZmFjdElkXSIvPgorCQkJPGl0ZW0gdmFsdWU9Iltncm91cElkXS5bYXJ0aWZhY3RJZF0tW3ZlcnNpb25dIi8+CisJCQk8aXRlbSB2YWx1ZT0iW25hbWVdIi8+CisJCTwvbGlzdD4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0ib3JnLmVjbGlwc2UubTJlLmNvcmUudWkuaW50ZXJuYWwud2l6YXJkcy5DdXN0b21BcmNoZXR5cGVEaWFsb2ciPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBuYW1lPSJNYXZlblByb2plY3RXaXphcmRBcnRpZmFjdFBhZ2UiPgorCQk8bGlzdCBrZXk9Imdyb3VwSWQiPgorCQkJPGl0ZW0gdmFsdWU9ImRlLmtvcmFwLnNlcnZpY2VzIi8+CisJCTwvbGlzdD4KKwkJPGxpc3Qga2V5PSJuYW1lIj4KKwkJPC9saXN0PgorCQk8bGlzdCBrZXk9ImFydGlmYWN0SWQiPgorCQkJPGl0ZW0gdmFsdWU9IkdsZW1tU2VydmljZXMyIi8+CisJCTwvbGlzdD4KKwkJPGxpc3Qga2V5PSJwcm9qZWN0TmFtZVRlbXBsYXRlIj4KKwkJCTxpdGVtIHZhbHVlPSJbYXJ0aWZhY3RJZF0iLz4KKwkJCTxpdGVtIHZhbHVlPSJbYXJ0aWZhY3RJZF0tVFJVTksiLz4KKwkJCTxpdGVtIHZhbHVlPSJbYXJ0aWZhY3RJZF0tW3ZlcnNpb25dIi8+CisJCQk8aXRlbSB2YWx1ZT0iW2dyb3VwSWRdLlthcnRpZmFjdElkXSIvPgorCQkJPGl0ZW0gdmFsdWU9Iltncm91cElkXS5bYXJ0aWZhY3RJZF0tW3ZlcnNpb25dIi8+CisJCQk8aXRlbSB2YWx1ZT0iW25hbWVdIi8+CisJCTwvbGlzdD4KKwkJPGxpc3Qga2V5PSJ2ZXJzaW9uIj4KKwkJCTxpdGVtIHZhbHVlPSIwLjAuMS1TTkFQU0hPVCIvPgorCQk8L2xpc3Q+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9Im9yZy5lY2xpcHNlLm0yZS5jb3JlLnBvbS5vdmVydmlldyI+CisJCTxsaXN0IGtleT0iY2lNYW5hZ2VtZW50VXJsIj4KKwkJPC9saXN0PgorCQk8bGlzdCBrZXk9ImNpTWFuYWdlbWVudFN5c3RlbSI+CisJCTwvbGlzdD4KKwkJPGxpc3Qga2V5PSJpc3N1ZU1hbmFnZW1lbnRTeXN0ZW0iPgorCQk8L2xpc3Q+CisJCTxsaXN0IGtleT0iaXNzdWVNYW5hZ2VtZW50VXJsIj4KKwkJPC9saXN0PgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBuYW1lPSJvcmcuZWNsaXBzZS5tMmUuY29yZS51aS5pbnRlcm5hbC5kaWFsb2dzLkVkaXREZXBlbmRlbmN5RGlhbG9nIj4KKwkJPGl0ZW0gdmFsdWU9IjQ4MCIga2V5PSJ3aWR0aCIvPgorCQk8aXRlbSB2YWx1ZT0iNzIwIiBrZXk9IngiLz4KKwkJPGl0ZW0gdmFsdWU9IjIyMCIga2V5PSJ5Ii8+CisJCTxpdGVtIHZhbHVlPSI0NTAiIGtleT0iaGVpZ2h0Ii8+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9Im9yZy5lY2xpcHNlLm0yZS5jb3JlLnVpLmludGVybmFsLmRpYWxvZ3MuTWF2ZW5SZXBvc2l0b3J5U2VhcmNoRGlhbG9nIj4KKwkJPGl0ZW0gdmFsdWU9IjQ4MCIga2V5PSJ3aWR0aCIvPgorCQk8aXRlbSB2YWx1ZT0iNzA3IiBrZXk9IngiLz4KKwkJPGl0ZW0gdmFsdWU9IjE2NyIga2V5PSJ5Ii8+CisJCTxpdGVtIHZhbHVlPSI1MzEiIGtleT0iaGVpZ2h0Ii8+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9Ik1hdmVuUHJvamVjdEltcG9ydFdpemFyZFBhZ2UiPgorCQk8bGlzdCBrZXk9InJvb3REaXJlY3RvcnkiPgorCQkJPGl0ZW0gdmFsdWU9IkM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzIi8+CisJCQk8aXRlbSB2YWx1ZT0iQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZUphciIvPgorCQkJPGl0ZW0gdmFsdWU9IkM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxVdGlscyIvPgorCQkJPGl0ZW0gdmFsdWU9IkM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxQcm9qZWN0LVRlc3RzIi8+CisJCQk8aXRlbSB2YWx1ZT0iQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEpzb25UcmF2ZXJzZSIvPgorCQkJPGl0ZW0gdmFsdWU9IkM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzIi8+CisJCQk8aXRlbSB2YWx1ZT0iQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tQ2xpZW50Ii8+CisJCQk8aXRlbSB2YWx1ZT0iQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnQiLz4KKwkJCTxpdGVtIHZhbHVlPSJGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcyIvPgorCQkJPGl0ZW0gdmFsdWU9IkY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHTEVNTS1TZXJ2aWNlcyIvPgorCQk8L2xpc3Q+CisJCTxsaXN0IGtleT0icHJvamVjdE5hbWVUZW1wbGF0ZSI+CisJCQk8aXRlbSB2YWx1ZT0iW2FydGlmYWN0SWRdIi8+CisJCQk8aXRlbSB2YWx1ZT0iW2FydGlmYWN0SWRdLVRSVU5LIi8+CisJCQk8aXRlbSB2YWx1ZT0iW2FydGlmYWN0SWRdLVt2ZXJzaW9uXSIvPgorCQkJPGl0ZW0gdmFsdWU9Iltncm91cElkXS5bYXJ0aWZhY3RJZF0iLz4KKwkJCTxpdGVtIHZhbHVlPSJbZ3JvdXBJZF0uW2FydGlmYWN0SWRdLVt2ZXJzaW9uXSIvPgorCQkJPGl0ZW0gdmFsdWU9IltuYW1lXSIvPgorCQk8L2xpc3Q+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9Ik1hdmVuUHJvamVjdFdpemFyZExvY2F0aW9uUGFnZSI+CisJCTxsaXN0IGtleT0ibG9jYXRpb24iPgorCQkJPGl0ZW0gdmFsdWU9IkY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHTEVNTS1TZXJ2aWNlcyIvPgorCQkJPGl0ZW0gdmFsdWU9IkY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHTEVNTS1TZXJ2aWNlc1xzcmNcZ3Vlc3RcR3Vlc3QuamF2YSIvPgorCQkJPGl0ZW0gdmFsdWU9IkY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlcyIvPgorCQk8L2xpc3Q+CisJCTxsaXN0IGtleT0icHJvamVjdE5hbWVUZW1wbGF0ZSI+CisJCQk8aXRlbSB2YWx1ZT0iW2FydGlmYWN0SWRdIi8+CisJCQk8aXRlbSB2YWx1ZT0iW2FydGlmYWN0SWRdLVRSVU5LIi8+CisJCQk8aXRlbSB2YWx1ZT0iW2FydGlmYWN0SWRdLVt2ZXJzaW9uXSIvPgorCQkJPGl0ZW0gdmFsdWU9Iltncm91cElkXS5bYXJ0aWZhY3RJZF0iLz4KKwkJCTxpdGVtIHZhbHVlPSJbZ3JvdXBJZF0uW2FydGlmYWN0SWRdLVt2ZXJzaW9uXSIvPgorCQkJPGl0ZW0gdmFsdWU9IltuYW1lXSIvPgorCQk8L2xpc3Q+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9Ik1hdmVuMlByb2plY3RXaXphcmRBcmNoaWZhY3RQYWdlIj4KKwkJPGxpc3Qga2V5PSJwYWNrYWdlIj4KKwkJCTxpdGVtIHZhbHVlPSJkZS5rb3JhcC5zZXJ2aWNlcyIvPgorCQk8L2xpc3Q+CisJCTxsaXN0IGtleT0iZ3JvdXBJZCI+CisJCQk8aXRlbSB2YWx1ZT0iZGUua29yYXAuc2VydmljZXMiLz4KKwkJPC9saXN0PgorCQk8bGlzdCBrZXk9ImFydGlmYWN0SWQiPgorCQk8L2xpc3Q+CisJCTxsaXN0IGtleT0icHJvamVjdE5hbWVUZW1wbGF0ZSI+CisJCQk8aXRlbSB2YWx1ZT0iW2FydGlmYWN0SWRdIi8+CisJCQk8aXRlbSB2YWx1ZT0iW2FydGlmYWN0SWRdLVRSVU5LIi8+CisJCQk8aXRlbSB2YWx1ZT0iW2FydGlmYWN0SWRdLVt2ZXJzaW9uXSIvPgorCQkJPGl0ZW0gdmFsdWU9Iltncm91cElkXS5bYXJ0aWZhY3RJZF0iLz4KKwkJCTxpdGVtIHZhbHVlPSJbZ3JvdXBJZF0uW2FydGlmYWN0SWRdLVt2ZXJzaW9uXSIvPgorCQkJPGl0ZW0gdmFsdWU9IltuYW1lXSIvPgorCQk8L2xpc3Q+CisJCTxsaXN0IGtleT0idmVyc2lvbiI+CisJCQk8aXRlbSB2YWx1ZT0iMC4wLjEtU05BUFNIT1QiLz4KKwkJPC9saXN0PgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBuYW1lPSJvcmcuZWNsaXBzZS5tMmUuZWRpdG9yLmRpYWxvZ3MuTWFuYWdlRGVwZW5kZW5jaWVzRGlhbG9nIj4KKwkJPGl0ZW0gdmFsdWU9IjcwMyIga2V5PSJ3aWR0aCIvPgorCQk8aXRlbSB2YWx1ZT0iNzM2IiBrZXk9IngiLz4KKwkJPGl0ZW0gdmFsdWU9IjMzNyIga2V5PSJ5Ii8+CisJCTxpdGVtIHZhbHVlPSI0NTAiIGtleT0iaGVpZ2h0Ii8+CisJPC9zZWN0aW9uPgorPC9zZWN0aW9uPgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9HbGVtbUNsaWVudC5saWZlY3ljbGVtYXBwaW5nIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9HbGVtbUNsaWVudC5saWZlY3ljbGVtYXBwaW5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0Yzc3OWMKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL0dsZW1tQ2xpZW50LmxpZmVjeWNsZW1hcHBpbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9HbGVtbVNlcnZpY2VzLmxpZmVjeWNsZW1hcHBpbmcgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL0dsZW1tU2VydmljZXMubGlmZWN5Y2xlbWFwcGluZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmZiZTk4Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9HbGVtbVNlcnZpY2VzLmxpZmVjeWNsZW1hcHBpbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9HbGVtbVNlcnZpY2VzMi5saWZlY3ljbGVtYXBwaW5nIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9HbGVtbVNlcnZpY2VzMi5saWZlY3ljbGVtYXBwaW5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZmJlOTgKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL0dsZW1tU2VydmljZXMyLmxpZmVjeWNsZW1hcHBpbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9Kc29uVHJhdmVyc2UubGlmZWN5Y2xlbWFwcGluZyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvSnNvblRyYXZlcnNlLmxpZmVjeWNsZW1hcHBpbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRjNzc5YwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvSnNvblRyYXZlcnNlLmxpZmVjeWNsZW1hcHBpbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9UZXN0cy5saWZlY3ljbGVtYXBwaW5nIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9UZXN0cy5saWZlY3ljbGVtYXBwaW5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0Yzc3OWMKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL1Rlc3RzLmxpZmVjeWNsZW1hcHBpbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9VdGlscy5saWZlY3ljbGVtYXBwaW5nIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9VdGlscy5saWZlY3ljbGVtYXBwaW5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0Yzc3OWMKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL1V0aWxzLmxpZmVjeWNsZW1hcHBpbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wMDA4ODYwMDM0M2ZmMWQ2NTg4OTNiYzY5OWMwOWE3Ni9fM3cuY2ZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wMDA4ODYwMDM0M2ZmMWQ2NTg4OTNiYzY5OWMwOWE3Ni9fM3cuY2ZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYmU1MTkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L18zdy5jZnMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wMDA4ODYwMDM0M2ZmMWQ2NTg4OTNiYzY5OWMwOWE3Ni9fM3dfMS5kZWwgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L18zd18xLmRlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDEwODU3Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wMDA4ODYwMDM0M2ZmMWQ2NTg4OTNiYzY5OWMwOWE3Ni9fM3dfMS5kZWwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wMDA4ODYwMDM0M2ZmMWQ2NTg4OTNiYzY5OWMwOWE3Ni9fM3guY2ZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wMDA4ODYwMDM0M2ZmMWQ2NTg4OTNiYzY5OWMwOWE3Ni9fM3guY2ZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMmUzZjEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L18zeC5jZnMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wMDA4ODYwMDM0M2ZmMWQ2NTg4OTNiYzY5OWMwOWE3Ni9fM3hfMS5kZWwgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L18zeF8xLmRlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjQ3M2JkCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wMDA4ODYwMDM0M2ZmMWQ2NTg4OTNiYzY5OWMwOWE3Ni9fM3hfMS5kZWwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wMDA4ODYwMDM0M2ZmMWQ2NTg4OTNiYzY5OWMwOWE3Ni9fM3kuY2ZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wMDA4ODYwMDM0M2ZmMWQ2NTg4OTNiYzY5OWMwOWE3Ni9fM3kuY2ZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlOWZjMTMKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L18zeS5jZnMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wMDA4ODYwMDM0M2ZmMWQ2NTg4OTNiYzY5OWMwOWE3Ni9fM3lfMS5kZWwgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L18zeV8xLmRlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjQ3M2JkCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wMDA4ODYwMDM0M2ZmMWQ2NTg4OTNiYzY5OWMwOWE3Ni9fM3lfMS5kZWwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wMDA4ODYwMDM0M2ZmMWQ2NTg4OTNiYzY5OWMwOWE3Ni9fM3ouY2ZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wMDA4ODYwMDM0M2ZmMWQ2NTg4OTNiYzY5OWMwOWE3Ni9fM3ouY2ZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NTBjNDgKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L18zei5jZnMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wMDA4ODYwMDM0M2ZmMWQ2NTg4OTNiYzY5OWMwOWE3Ni9fM3pfMS5kZWwgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L18zel8xLmRlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjQ3M2JkCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wMDA4ODYwMDM0M2ZmMWQ2NTg4OTNiYzY5OWMwOWE3Ni9fM3pfMS5kZWwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wMDA4ODYwMDM0M2ZmMWQ2NTg4OTNiYzY5OWMwOWE3Ni9fNDAuY2ZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wMDA4ODYwMDM0M2ZmMWQ2NTg4OTNiYzY5OWMwOWE3Ni9fNDAuY2ZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YjM5NzYKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L180MC5jZnMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wMDA4ODYwMDM0M2ZmMWQ2NTg4OTNiYzY5OWMwOWE3Ni9fNDBfMS5kZWwgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L180MF8xLmRlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjQ3M2JkCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wMDA4ODYwMDM0M2ZmMWQ2NTg4OTNiYzY5OWMwOWE3Ni9fNDBfMS5kZWwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wMDA4ODYwMDM0M2ZmMWQ2NTg4OTNiYzY5OWMwOWE3Ni9fNDEuY2ZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wMDA4ODYwMDM0M2ZmMWQ2NTg4OTNiYzY5OWMwOWE3Ni9fNDEuY2ZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYTRkZDQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L180MS5jZnMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wMDA4ODYwMDM0M2ZmMWQ2NTg4OTNiYzY5OWMwOWE3Ni9zZWdtZW50cy5nZW4gYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L3NlZ21lbnRzLmdlbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTc2ZTJhCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wMDA4ODYwMDM0M2ZmMWQ2NTg4OTNiYzY5OWMwOWE3Ni9zZWdtZW50cy5nZW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wMDA4ODYwMDM0M2ZmMWQ2NTg4OTNiYzY5OWMwOWE3Ni9zZWdtZW50c18zcCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvMDAwODg2MDAzNDNmZjFkNjU4ODkzYmM2OTljMDlhNzYvc2VnbWVudHNfM3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZlODk2MgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvMDAwODg2MDAzNDNmZjFkNjU4ODkzYmM2OTljMDlhNzYvc2VnbWVudHNfM3AKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wMDA4ODYwMDM0M2ZmMWQ2NTg4OTNiYzY5OWMwOWE3Ni93cml0ZS5sb2NrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wMDA4ODYwMDM0M2ZmMWQ2NTg4OTNiYzY5OWMwOWE3Ni93cml0ZS5sb2NrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L3dyaXRlLmxvY2sKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvMDViMGZlODUyNDg2MGJkNzNjYmIwN2VmMzBmYjM0Y2MvXzJpLmNmcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvMDViMGZlODUyNDg2MGJkNzNjYmIwN2VmMzBmYjM0Y2MvXzJpLmNmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYThhNWQyCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wNWIwZmU4NTI0ODYwYmQ3M2NiYjA3ZWYzMGZiMzRjYy9fMmkuY2ZzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvMDViMGZlODUyNDg2MGJkNzNjYmIwN2VmMzBmYjM0Y2MvXzJpXzEuZGVsIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wNWIwZmU4NTI0ODYwYmQ3M2NiYjA3ZWYzMGZiMzRjYy9fMmlfMS5kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI0NzNiZAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvMDViMGZlODUyNDg2MGJkNzNjYmIwN2VmMzBmYjM0Y2MvXzJpXzEuZGVsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvMDViMGZlODUyNDg2MGJkNzNjYmIwN2VmMzBmYjM0Y2MvXzJqLmNmcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvMDViMGZlODUyNDg2MGJkNzNjYmIwN2VmMzBmYjM0Y2MvXzJqLmNmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODg3YzczCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wNWIwZmU4NTI0ODYwYmQ3M2NiYjA3ZWYzMGZiMzRjYy9fMmouY2ZzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvMDViMGZlODUyNDg2MGJkNzNjYmIwN2VmMzBmYjM0Y2MvXzJqXzEuZGVsIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wNWIwZmU4NTI0ODYwYmQ3M2NiYjA3ZWYzMGZiMzRjYy9fMmpfMS5kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI0NzNiZAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvMDViMGZlODUyNDg2MGJkNzNjYmIwN2VmMzBmYjM0Y2MvXzJqXzEuZGVsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvMDViMGZlODUyNDg2MGJkNzNjYmIwN2VmMzBmYjM0Y2MvXzJrLmNmcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvMDViMGZlODUyNDg2MGJkNzNjYmIwN2VmMzBmYjM0Y2MvXzJrLmNmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGQwNGMzCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wNWIwZmU4NTI0ODYwYmQ3M2NiYjA3ZWYzMGZiMzRjYy9fMmsuY2ZzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvMDViMGZlODUyNDg2MGJkNzNjYmIwN2VmMzBmYjM0Y2Mvc2VnbWVudHMuZ2VuIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wNWIwZmU4NTI0ODYwYmQ3M2NiYjA3ZWYzMGZiMzRjYy9zZWdtZW50cy5nZW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJhN2VhNAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvMDViMGZlODUyNDg2MGJkNzNjYmIwN2VmMzBmYjM0Y2Mvc2VnbWVudHMuZ2VuCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvMDViMGZlODUyNDg2MGJkNzNjYmIwN2VmMzBmYjM0Y2Mvc2VnbWVudHNfMmQgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzA1YjBmZTg1MjQ4NjBiZDczY2JiMDdlZjMwZmIzNGNjL3NlZ21lbnRzXzJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMThhZmIKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzA1YjBmZTg1MjQ4NjBiZDczY2JiMDdlZjMwZmIzNGNjL3NlZ21lbnRzXzJkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvMDViMGZlODUyNDg2MGJkNzNjYmIwN2VmMzBmYjM0Y2Mvd3JpdGUubG9jayBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvMDViMGZlODUyNDg2MGJkNzNjYmIwN2VmMzBmYjM0Y2Mvd3JpdGUubG9jawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wNWIwZmU4NTI0ODYwYmQ3M2NiYjA3ZWYzMGZiMzRjYy93cml0ZS5sb2NrCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzgzMGJjMTE4MzMyZTc3MjkyOTQ5ZWQxZTZkMmZhYmUwL181YS5jZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzgzMGJjMTE4MzMyZTc3MjkyOTQ5ZWQxZTZkMmZhYmUwL181YS5jZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBhNmFjYwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzVhLmNmcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzgzMGJjMTE4MzMyZTc3MjkyOTQ5ZWQxZTZkMmZhYmUwL181YV8xLmRlbCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzVhXzEuZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNTYyYzAKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzgzMGJjMTE4MzMyZTc3MjkyOTQ5ZWQxZTZkMmZhYmUwL181YV8xLmRlbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzgzMGJjMTE4MzMyZTc3MjkyOTQ5ZWQxZTZkMmZhYmUwL181Yi5jZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzgzMGJjMTE4MzMyZTc3MjkyOTQ5ZWQxZTZkMmZhYmUwL181Yi5jZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODljYzc4YwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzViLmNmcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzgzMGJjMTE4MzMyZTc3MjkyOTQ5ZWQxZTZkMmZhYmUwL181Yl8xLmRlbCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzViXzEuZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNDczYmQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzgzMGJjMTE4MzMyZTc3MjkyOTQ5ZWQxZTZkMmZhYmUwL181Yl8xLmRlbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzgzMGJjMTE4MzMyZTc3MjkyOTQ5ZWQxZTZkMmZhYmUwL181Yy5jZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzgzMGJjMTE4MzMyZTc3MjkyOTQ5ZWQxZTZkMmZhYmUwL181Yy5jZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU4YzBkZgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzVjLmNmcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzgzMGJjMTE4MzMyZTc3MjkyOTQ5ZWQxZTZkMmZhYmUwL181Y18xLmRlbCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzVjXzEuZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNDczYmQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzgzMGJjMTE4MzMyZTc3MjkyOTQ5ZWQxZTZkMmZhYmUwL181Y18xLmRlbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzgzMGJjMTE4MzMyZTc3MjkyOTQ5ZWQxZTZkMmZhYmUwL181ZC5jZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzgzMGJjMTE4MzMyZTc3MjkyOTQ5ZWQxZTZkMmZhYmUwL181ZC5jZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIyYTE0ZAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzVkLmNmcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzgzMGJjMTE4MzMyZTc3MjkyOTQ5ZWQxZTZkMmZhYmUwL181ZF8xLmRlbCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzVkXzEuZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNDczYmQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzgzMGJjMTE4MzMyZTc3MjkyOTQ5ZWQxZTZkMmZhYmUwL181ZF8xLmRlbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzgzMGJjMTE4MzMyZTc3MjkyOTQ5ZWQxZTZkMmZhYmUwL181ZS5jZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzgzMGJjMTE4MzMyZTc3MjkyOTQ5ZWQxZTZkMmZhYmUwL181ZS5jZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY0NzEwNAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzVlLmNmcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzgzMGJjMTE4MzMyZTc3MjkyOTQ5ZWQxZTZkMmZhYmUwL181ZV8xLmRlbCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzVlXzEuZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNDczYmQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzgzMGJjMTE4MzMyZTc3MjkyOTQ5ZWQxZTZkMmZhYmUwL181ZV8xLmRlbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzgzMGJjMTE4MzMyZTc3MjkyOTQ5ZWQxZTZkMmZhYmUwL181Zi5jZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzgzMGJjMTE4MzMyZTc3MjkyOTQ5ZWQxZTZkMmZhYmUwL181Zi5jZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFmMDUzMQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzVmLmNmcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzgzMGJjMTE4MzMyZTc3MjkyOTQ5ZWQxZTZkMmZhYmUwL181Zl8xLmRlbCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzVmXzEuZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNDczYmQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzgzMGJjMTE4MzMyZTc3MjkyOTQ5ZWQxZTZkMmZhYmUwL181Zl8xLmRlbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzgzMGJjMTE4MzMyZTc3MjkyOTQ5ZWQxZTZkMmZhYmUwL181Zy5jZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzgzMGJjMTE4MzMyZTc3MjkyOTQ5ZWQxZTZkMmZhYmUwL181Zy5jZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE1MWU4OQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzVnLmNmcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzgzMGJjMTE4MzMyZTc3MjkyOTQ5ZWQxZTZkMmZhYmUwL3NlZ21lbnRzLmdlbiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvc2VnbWVudHMuZ2VuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNDdhMjIKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzgzMGJjMTE4MzMyZTc3MjkyOTQ5ZWQxZTZkMmZhYmUwL3NlZ21lbnRzLmdlbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzgzMGJjMTE4MzMyZTc3MjkyOTQ5ZWQxZTZkMmZhYmUwL3NlZ21lbnRzXzR6IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy84MzBiYzExODMzMmU3NzI5Mjk0OWVkMWU2ZDJmYWJlMC9zZWdtZW50c180egpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTU2MDhkCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy84MzBiYzExODMzMmU3NzI5Mjk0OWVkMWU2ZDJmYWJlMC9zZWdtZW50c180egpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzgzMGJjMTE4MzMyZTc3MjkyOTQ5ZWQxZTZkMmZhYmUwL3dyaXRlLmxvY2sgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzgzMGJjMTE4MzMyZTc3MjkyOTQ5ZWQxZTZkMmZhYmUwL3dyaXRlLmxvY2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvd3JpdGUubG9jawpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy9kMDI5MzI4OTc4MmM3YTRmNjc2ZmI2Mjg4ZjY4Y2M5Ny9fMXkuY2ZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy9kMDI5MzI4OTc4MmM3YTRmNjc2ZmI2Mjg4ZjY4Y2M5Ny9fMXkuY2ZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NzU5NjUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzL2QwMjkzMjg5NzgyYzdhNGY2NzZmYjYyODhmNjhjYzk3L18xeS5jZnMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy9kMDI5MzI4OTc4MmM3YTRmNjc2ZmI2Mjg4ZjY4Y2M5Ny9fMXouY2ZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy9kMDI5MzI4OTc4MmM3YTRmNjc2ZmI2Mjg4ZjY4Y2M5Ny9fMXouY2ZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3M2ExY2UKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzL2QwMjkzMjg5NzgyYzdhNGY2NzZmYjYyODhmNjhjYzk3L18xei5jZnMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy9kMDI5MzI4OTc4MmM3YTRmNjc2ZmI2Mjg4ZjY4Y2M5Ny9fMjAuY2ZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy9kMDI5MzI4OTc4MmM3YTRmNjc2ZmI2Mjg4ZjY4Y2M5Ny9fMjAuY2ZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YzkyMTUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzL2QwMjkzMjg5NzgyYzdhNGY2NzZmYjYyODhmNjhjYzk3L18yMC5jZnMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy9kMDI5MzI4OTc4MmM3YTRmNjc2ZmI2Mjg4ZjY4Y2M5Ny9zZWdtZW50cy5nZW4gYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzL2QwMjkzMjg5NzgyYzdhNGY2NzZmYjYyODhmNjhjYzk3L3NlZ21lbnRzLmdlbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDczNjM5Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy9kMDI5MzI4OTc4MmM3YTRmNjc2ZmI2Mjg4ZjY4Y2M5Ny9zZWdtZW50cy5nZW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy9kMDI5MzI4OTc4MmM3YTRmNjc2ZmI2Mjg4ZjY4Y2M5Ny9zZWdtZW50c18xdiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvZDAyOTMyODk3ODJjN2E0ZjY3NmZiNjI4OGY2OGNjOTcvc2VnbWVudHNfMXYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMyZTAxMQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvZDAyOTMyODk3ODJjN2E0ZjY3NmZiNjI4OGY2OGNjOTcvc2VnbWVudHNfMXYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy9kMDI5MzI4OTc4MmM3YTRmNjc2ZmI2Mjg4ZjY4Y2M5Ny93cml0ZS5sb2NrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy9kMDI5MzI4OTc4MmM3YTRmNjc2ZmI2Mjg4ZjY4Y2M5Ny93cml0ZS5sb2NrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzL2QwMjkzMjg5NzgyYzdhNGY2NzZmYjYyODhmNjhjYzk3L3dyaXRlLmxvY2sKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvd2Zvcm1TZXJ2aWNlSmFyLmxpZmVjeWNsZW1hcHBpbmcgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL3dmb3JtU2VydmljZUphci5saWZlY3ljbGVtYXBwaW5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0Yzc3OWMKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL3dmb3JtU2VydmljZUphci5saWZlY3ljbGVtYXBwaW5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvd2Zvcm1TZXJ2aWNlcy5saWZlY3ljbGVtYXBwaW5nIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS93Zm9ybVNlcnZpY2VzLmxpZmVjeWNsZW1hcHBpbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkyNDMxOQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvd2Zvcm1TZXJ2aWNlcy5saWZlY3ljbGVtYXBwaW5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvd29ya3NwYWNlU3RhdGUuc2VyIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS93b3Jrc3BhY2VTdGF0ZS5zZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFhZmRlYQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvd29ya3NwYWNlU3RhdGUuc2VyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvd29ya3NwYWNlc3RhdGUucHJvcGVydGllcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvd29ya3NwYWNlc3RhdGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTZmZjRlCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS93b3Jrc3BhY2VzdGF0ZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjIgQEAKKyNTYXQgT2N0IDIzIDE5OjMzOjM5IENFU1QgMjAyMQorZGUua29yYXAuc2VydmljZXNcOnV0aWxzXDpwb21cOlw6MC4xLVNOQVBTSE9UPUNcOlxcbXlJRFNcXERhdGVuXFxLb3JBUFxcU2VydmljZXMtMC4xXFxVdGlsc1xccG9tLnhtbAorZGUua29yYXAuc2VydmljZXNcOndmb3JtU2VydmljZUphclw6amFyXDp0ZXN0c1w6MC4xLVNOQVBTSE9UPUNcOlxcbXlJRFNcXERhdGVuXFxLb3JBUFxcU2VydmljZXMtMC4xXFxXZm9ybVNlcnZpY2VKYXJcXHRhcmdldFxcdGVzdC1jbGFzc2VzCitkZS5rb3JhcC5qc29uXDpKc29uVHJhdmVyc2VcOmphclw6XDowLjEtU05BUFNIT1Q9Q1w6XFxteUlEU1xcRGF0ZW5cXEtvckFQXFxTZXJ2aWNlcy0wLjFcXEpzb25UcmF2ZXJzZVxcdGFyZ2V0XFxjbGFzc2VzCitkZS5rb3JhcC5zZXJ2aWNlc1w6dXRpbHNcOmphclw6dGVzdHNcOjAuMS1TTkFQU0hPVD1DXDpcXG15SURTXFxEYXRlblxcS29yQVBcXFNlcnZpY2VzLTAuMVxcVXRpbHNcXHRhcmdldFxcdGVzdC1jbGFzc2VzCitkZS5rb3JhcC5zZXJ2aWNlc1w6dXRpbHNcOmphclw6XDowLjEtU05BUFNIT1Q9Q1w6XFxteUlEU1xcRGF0ZW5cXEtvckFQXFxTZXJ2aWNlcy0wLjFcXFV0aWxzXFx0YXJnZXRcXGNsYXNzZXMKK2RlLmtvcmFwLmpzb25cOkpzb25UcmF2ZXJzZVw6amFyXDp0ZXN0c1w6MC4xLVNOQVBTSE9UPUNcOlxcbXlJRFNcXERhdGVuXFxLb3JBUFxcU2VydmljZXMtMC4xXFxKc29uVHJhdmVyc2VcXHRhcmdldFxcdGVzdC1jbGFzc2VzCitkZS5rb3JhcC5zZXJ2aWNlc1w6R2xlbW1TZXJ2aWNlc1w6d2FyXDpcOjAuMi1UZXN0PUNcOlxcbXlJRFNcXERhdGVuXFxLb3JBUFxcU2VydmljZXMtMC4xXFxHbGVtbVNlcnZpY2VzXFx0YXJnZXRcXGNsYXNzZXMKK2RlLmtvcmFwLnNlcnZpY2VzXDpHbGVtbVNlcnZpY2VzXDpqYXJcOnRlc3RzXDowLjItVGVzdD1DXDpcXG15SURTXFxEYXRlblxcS29yQVBcXFNlcnZpY2VzLTAuMVxcR2xlbW1TZXJ2aWNlc1xcdGFyZ2V0XFx0ZXN0LWNsYXNzZXMKK2RlLmtvcmFwLnNlcnZpY2VzXDp3Zm9ybVNlcnZpY2VKYXJcOnBvbVw6XDowLjEtU05BUFNIT1Q9Q1w6XFxteUlEU1xcRGF0ZW5cXEtvckFQXFxTZXJ2aWNlcy0wLjFcXFdmb3JtU2VydmljZUphclxccG9tLnhtbAorZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50XDpHbGVtbUNsaWVudFw6cG9tXDpcOjAuMi1UZXN0PUNcOlxcbXlJRFNcXERhdGVuXFxLb3JBUFxcU2VydmljZXMtMC4xXFxHbGVtbUNsaWVudFxccG9tLnhtbAorZGUua29yYXAuc2VydmljZXNcOndmb3JtU2VydmljZUphclw6amFyXDpcOjAuMS1TTkFQU0hPVD1DXDpcXG15SURTXFxEYXRlblxcS29yQVBcXFNlcnZpY2VzLTAuMVxcV2Zvcm1TZXJ2aWNlSmFyXFx0YXJnZXRcXGNsYXNzZXMKK2RlLmtvcmFwLnNlcnZpY2VzXDp3Zm9ybVNlcnZpY2VzXDpwb21cOlw6MC4yLVRlc3Q9Q1w6XFxteUlEU1xcRGF0ZW5cXEtvckFQXFxTZXJ2aWNlcy0wLjFcXFdmb3JtU2VydmljZXNcXHBvbS54bWwKK2RlLmtvcmFwLnNlcnZpY2VzXDp0ZXN0c1w6cG9tXDpcOjAuMT1DXDpcXG15SURTXFxEYXRlblxcS29yQVBcXFNlcnZpY2VzLTAuMVxcUHJvamVjdC1UZXN0c1xccG9tLnhtbAorZGUua29yYXAuc2VydmljZXNcOnRlc3RzXDpqYXJcOlw6MC4xPUNcOlxcbXlJRFNcXERhdGVuXFxLb3JBUFxcU2VydmljZXMtMC4xXFxQcm9qZWN0LVRlc3RzXFx0YXJnZXRcXGNsYXNzZXMKK2RlLmtvcmFwLnNlcnZpY2VzXDp0ZXN0c1w6amFyXDp0ZXN0c1w6MC4xPUNcOlxcbXlJRFNcXERhdGVuXFxLb3JBUFxcU2VydmljZXMtMC4xXFxQcm9qZWN0LVRlc3RzXFx0YXJnZXRcXHRlc3QtY2xhc3NlcworZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50XDpHbGVtbUNsaWVudFw6amFyXDp0ZXN0c1w6MC4yLVRlc3Q9Q1w6XFxteUlEU1xcRGF0ZW5cXEtvckFQXFxTZXJ2aWNlcy0wLjFcXEdsZW1tQ2xpZW50XFx0YXJnZXRcXHRlc3QtY2xhc3NlcworZGUua29yYXAuc2VydmljZXNcOndmb3JtU2VydmljZXNcOndhclw6XDowLjItVGVzdD1DXDpcXG15SURTXFxEYXRlblxcS29yQVBcXFNlcnZpY2VzLTAuMVxcV2Zvcm1TZXJ2aWNlc1xcdGFyZ2V0XFxjbGFzc2VzCitkZS5rb3JhcC5zZXJ2aWNlc1w6R2xlbW1TZXJ2aWNlc1w6cG9tXDpcOjAuMi1UZXN0PUNcOlxcbXlJRFNcXERhdGVuXFxLb3JBUFxcU2VydmljZXMtMC4xXFxHbGVtbVNlcnZpY2VzXFxwb20ueG1sCitkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnRcOkdsZW1tQ2xpZW50XDpqYXJcOlw6MC4yLVRlc3Q9Q1w6XFxteUlEU1xcRGF0ZW5cXEtvckFQXFxTZXJ2aWNlcy0wLjFcXEdsZW1tQ2xpZW50XFx0YXJnZXRcXGNsYXNzZXMKK2RlLmtvcmFwLmpzb25cOkpzb25UcmF2ZXJzZVw6cG9tXDpcOjAuMS1TTkFQU0hPVD1DXDpcXG15SURTXFxEYXRlblxcS29yQVBcXFNlcnZpY2VzLTAuMVxcSnNvblRyYXZlcnNlXFxwb20ueG1sCitkZS5rb3JhcC5zZXJ2aWNlc1w6d2Zvcm1TZXJ2aWNlc1w6amFyXDp0ZXN0c1w6MC4yLVRlc3Q9Q1w6XFxteUlEU1xcRGF0ZW5cXEtvckFQXFxTZXJ2aWNlcy0wLjFcXFdmb3JtU2VydmljZXNcXHRhcmdldFxcdGVzdC1jbGFzc2VzCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5qZHQvR2xlbW1DbGllbnQuY29udGFpbmVyIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuamR0L0dsZW1tQ2xpZW50LmNvbnRhaW5lcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzk5Y2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuamR0L0dsZW1tQ2xpZW50LmNvbnRhaW5lcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5qZHQvR2xlbW1TZXJ2aWNlcy5jb250YWluZXIgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5qZHQvR2xlbW1TZXJ2aWNlcy5jb250YWluZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY4MjM0ZQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmpkdC9HbGVtbVNlcnZpY2VzLmNvbnRhaW5lcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5qZHQvR2xlbW1TZXJ2aWNlczIuY29udGFpbmVyIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuamR0L0dsZW1tU2VydmljZXMyLmNvbnRhaW5lcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzA0NTY5Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuamR0L0dsZW1tU2VydmljZXMyLmNvbnRhaW5lcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5qZHQvSnNvblRyYXZlcnNlLmNvbnRhaW5lciBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmpkdC9Kc29uVHJhdmVyc2UuY29udGFpbmVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMGZlNDYKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5qZHQvSnNvblRyYXZlcnNlLmNvbnRhaW5lcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5qZHQvVGVzdHMuY29udGFpbmVyIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuamR0L1Rlc3RzLmNvbnRhaW5lcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDkzODljCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuamR0L1Rlc3RzLmNvbnRhaW5lcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5qZHQvVXRpbHMuY29udGFpbmVyIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuamR0L1V0aWxzLmNvbnRhaW5lcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTI5MjEyCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuamR0L1V0aWxzLmNvbnRhaW5lcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5qZHQvd2Zvcm1TZXJ2aWNlSmFyLmNvbnRhaW5lciBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmpkdC93Zm9ybVNlcnZpY2VKYXIuY29udGFpbmVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4YTc1MmEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5qZHQvd2Zvcm1TZXJ2aWNlSmFyLmNvbnRhaW5lcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5qZHQvd2Zvcm1TZXJ2aWNlcy5jb250YWluZXIgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5qZHQvd2Zvcm1TZXJ2aWNlcy5jb250YWluZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMxZmU2YgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmpkdC93Zm9ybVNlcnZpY2VzLmNvbnRhaW5lcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5sYXVuY2hpbmcvbGF1bmNoZXMvbTJjb25mNjMyMDk5NDEzMDUyOTc0NTU2MS50bXAgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5sYXVuY2hpbmcvbGF1bmNoZXMvbTJjb25mNjMyMDk5NDEzMDUyOTc0NTU2MS50bXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMwNjFiMgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmxhdW5jaGluZy9sYXVuY2hlcy9tMmNvbmY2MzIwOTk0MTMwNTI5NzQ1NTYxLnRtcApAQCAtMCwwICsxLDQ1IEBACittYWluIGlzIG9yZy5hcGFjaGUubWF2ZW4uY2xpLk1hdmVuQ2xpIGZyb20gcGxleHVzLmNvcmUKK1twbGV4dXMuY29yZV0KK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVwKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXG1hdmVuLXJlc29sdmVyLXV0aWwtMS4xLjEuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xtYXZlbi1tb2RlbC0zLjUuMy5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXGNvbW1vbnMtaW8tMi41LmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcY29tbW9ucy1jbGktMS40LmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcbWF2ZW4tcmVzb2x2ZXItY29ubmVjdG9yLWJhc2ljLTEuMS4xLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcbWF2ZW4tY29yZS0zLjUuMy5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXHBsZXh1cy1pbnRlcnBvbGF0aW9uLTEuMjQuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xndWljZS00LjAtbm9fYW9wLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcb3JnLmVjbGlwc2Uuc2lzdS5pbmplY3QtMC4zLjMuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xwbGV4dXMtc2VjLWRpc3BhdGNoZXItMS40LmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNccGxleHVzLWNpcGhlci0xLjcuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xtYXZlbi1zZXR0aW5ncy1idWlsZGVyLTMuNS4zLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcbWF2ZW4tY29tcGF0LTMuNS4zLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcbWF2ZW4tZW1iZWRkZXItMy41LjMuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xhZXRoZXItY29ubmVjdG9yLW9raHR0cC0wLjE3LjMuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xvcmcuZWNsaXBzZS5zaXN1LnBsZXh1cy0wLjMuMy5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXGNkaS1hcGktMS4wLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcb2tpby0xLjEyLjAuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xtYXZlbi1zZXR0aW5ncy0zLjUuMy5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXG9raHR0cC0zLjcuMC5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXG1hdmVuLXJlc29sdmVyLWFwaS0xLjEuMS5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXHBsZXh1cy1jb21wb25lbnQtYW5ub3RhdGlvbnMtMS43LjEuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xtYXZlbi1yZXNvbHZlci1pbXBsLTEuMS4xLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcanNyMjUwLWFwaS0xLjAuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1x3YWdvbi1maWxlLTMuMC4wLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcbWF2ZW4tcmVzb2x2ZXItcHJvdmlkZXItMy41LjMuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xtYXZlbi1yZXNvbHZlci10cmFuc3BvcnQtd2Fnb24tMS4xLjEuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xjb21tb25zLWxhbmczLTMuNS5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXGd1YXZhLTIwLjAuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xtYXZlbi1yZXNvbHZlci1zcGktMS4xLjEuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xtYXZlbi1hcnRpZmFjdC0zLjUuMy5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXHBsZXh1cy11dGlscy0zLjEuMC5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXG1hdmVuLXJlcG9zaXRvcnktbWV0YWRhdGEtMy41LjMuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1x3YWdvbi1wcm92aWRlci1hcGktMy4wLjAuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xtYXZlbi1idWlsZGVyLXN1cHBvcnQtMy41LjMuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xtYXZlbi1zaGFyZWQtdXRpbHMtMy4yLjEuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xtYXZlbi1tb2RlbC1idWlsZGVyLTMuNS4zLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcbWF2ZW4tcGx1Z2luLWFwaS0zLjUuMy5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWUuc2xmNGouc2ltcGxlXzEuOS4wLjIwMTgwNjA2LTIwMzVcCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lLnNsZjRqLnNpbXBsZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcc2xmNGotc2ltcGxlLTEuNy41LmphcgorbG9hZCBDOlxVc2Vyc1xCb2RtZXJcLmVjbGlwc2Vcb3JnLmVjbGlwc2UucGxhdGZvcm1fNC44LjBfMTcwOTk4MDQ4MV93aW4zMl93aW4zMl94ODZfNjRcY29uZmlndXJhdGlvblxvcmcuZWNsaXBzZS5vc2dpXDI3XDBcLmNwXAorbG9hZCBDOlxVc2Vyc1xCb2RtZXJcLmVjbGlwc2Vcb3JnLmVjbGlwc2UucGxhdGZvcm1fNC44LjBfMTcwOTk4MDQ4MV93aW4zMl93aW4zMl94ODZfNjRcY29uZmlndXJhdGlvblxvcmcuZWNsaXBzZS5vc2dpXDk4N1wwXC5jcFwKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmxhdW5jaGluZy9sYXVuY2hlcy9tMmNvbmY2NTYwMTI5MDg1ODQ5NzMxMjAxLnRtcCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmxhdW5jaGluZy9sYXVuY2hlcy9tMmNvbmY2NTYwMTI5MDg1ODQ5NzMxMjAxLnRtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzA2MWIyCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUubGF1bmNoaW5nL2xhdW5jaGVzL20yY29uZjY1NjAxMjkwODU4NDk3MzEyMDEudG1wCkBAIC0wLDAgKzEsNDUgQEAKK21haW4gaXMgb3JnLmFwYWNoZS5tYXZlbi5jbGkuTWF2ZW5DbGkgZnJvbSBwbGV4dXMuY29yZQorW3BsZXh1cy5jb3JlXQorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XAorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcbWF2ZW4tcmVzb2x2ZXItdXRpbC0xLjEuMS5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXG1hdmVuLW1vZGVsLTMuNS4zLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcY29tbW9ucy1pby0yLjUuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xjb21tb25zLWNsaS0xLjQuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xtYXZlbi1yZXNvbHZlci1jb25uZWN0b3ItYmFzaWMtMS4xLjEuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xtYXZlbi1jb3JlLTMuNS4zLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNccGxleHVzLWludGVycG9sYXRpb24tMS4yNC5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXGd1aWNlLTQuMC1ub19hb3AuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xvcmcuZWNsaXBzZS5zaXN1LmluamVjdC0wLjMuMy5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXHBsZXh1cy1zZWMtZGlzcGF0Y2hlci0xLjQuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xwbGV4dXMtY2lwaGVyLTEuNy5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXG1hdmVuLXNldHRpbmdzLWJ1aWxkZXItMy41LjMuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xtYXZlbi1jb21wYXQtMy41LjMuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xtYXZlbi1lbWJlZGRlci0zLjUuMy5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXGFldGhlci1jb25uZWN0b3Itb2todHRwLTAuMTcuMy5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXG9yZy5lY2xpcHNlLnNpc3UucGxleHVzLTAuMy4zLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcY2RpLWFwaS0xLjAuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xva2lvLTEuMTIuMC5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXG1hdmVuLXNldHRpbmdzLTMuNS4zLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcb2todHRwLTMuNy4wLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcbWF2ZW4tcmVzb2x2ZXItYXBpLTEuMS4xLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNccGxleHVzLWNvbXBvbmVudC1hbm5vdGF0aW9ucy0xLjcuMS5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXG1hdmVuLXJlc29sdmVyLWltcGwtMS4xLjEuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xqc3IyNTAtYXBpLTEuMC5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXHdhZ29uLWZpbGUtMy4wLjAuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xtYXZlbi1yZXNvbHZlci1wcm92aWRlci0zLjUuMy5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXG1hdmVuLXJlc29sdmVyLXRyYW5zcG9ydC13YWdvbi0xLjEuMS5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXGNvbW1vbnMtbGFuZzMtMy41LmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcZ3VhdmEtMjAuMC5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXG1hdmVuLXJlc29sdmVyLXNwaS0xLjEuMS5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXG1hdmVuLWFydGlmYWN0LTMuNS4zLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNccGxleHVzLXV0aWxzLTMuMS4wLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcbWF2ZW4tcmVwb3NpdG9yeS1tZXRhZGF0YS0zLjUuMy5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXHdhZ29uLXByb3ZpZGVyLWFwaS0zLjAuMC5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXG1hdmVuLWJ1aWxkZXItc3VwcG9ydC0zLjUuMy5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXG1hdmVuLXNoYXJlZC11dGlscy0zLjIuMS5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXG1hdmVuLW1vZGVsLWJ1aWxkZXItMy41LjMuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xtYXZlbi1wbHVnaW4tYXBpLTMuNS4zLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZS5zbGY0ai5zaW1wbGVfMS45LjAuMjAxODA2MDYtMjAzNVwKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWUuc2xmNGouc2ltcGxlXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xzbGY0ai1zaW1wbGUtMS43LjUuamFyCitsb2FkIEM6XFVzZXJzXEJvZG1lclwuZWNsaXBzZVxvcmcuZWNsaXBzZS5wbGF0Zm9ybV80LjguMF8xNzA5OTgwNDgxX3dpbjMyX3dpbjMyX3g4Nl82NFxjb25maWd1cmF0aW9uXG9yZy5lY2xpcHNlLm9zZ2lcMjdcMFwuY3BcCitsb2FkIEM6XFVzZXJzXEJvZG1lclwuZWNsaXBzZVxvcmcuZWNsaXBzZS5wbGF0Zm9ybV80LjguMF8xNzA5OTgwNDgxX3dpbjMyX3dpbjMyX3g4Nl82NFxjb25maWd1cmF0aW9uXG9yZy5lY2xpcHNlLm9zZ2lcOTg3XDBcLmNwXApkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUubG9nYmFjay5jb25maWd1cmF0aW9uLzAubG9nIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUubG9nYmFjay5jb25maWd1cmF0aW9uLzAubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NGYyNTUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmNvbmZpZ3VyYXRpb24vMC5sb2cKQEAgLTAsMCArMSw5OTg3IEBACisyMDE5LTExLTEyIDEyOjI2OjQ3LDU1MSBbV29ya2VyLTQ6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDE5LTExLTE1IDEzOjU1OjA5LDE0OSBbTW9kYWxDb250ZXh0XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vYXJjaGV0eXBlcy9tYXZlbi1hcmNoZXR5cGUtYXJjaGV0eXBlLzEuMC9tYXZlbi1hcmNoZXR5cGUtYXJjaGV0eXBlLTEuMC5qYXIKKzIwMTktMTEtMTUgMTM6NTU6MDksMTgyIFtNb2RhbENvbnRleHRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL2FyY2hldHlwZXMvbWF2ZW4tYXJjaGV0eXBlLWFyY2hldHlwZS8xLjAvbWF2ZW4tYXJjaGV0eXBlLWFyY2hldHlwZS0xLjAuamFyCisyMDE5LTExLTE1IDEzOjU1OjA5LDE5NCBbTW9kYWxDb250ZXh0XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vYXJjaGV0eXBlcy9tYXZlbi1hcmNoZXR5cGUtYXJjaGV0eXBlLzEuMC9tYXZlbi1hcmNoZXR5cGUtYXJjaGV0eXBlLTEuMC5wb20KKzIwMTktMTEtMTUgMTM6NTU6MDksMjA1IFtNb2RhbENvbnRleHRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL2FyY2hldHlwZXMvbWF2ZW4tYXJjaGV0eXBlLWFyY2hldHlwZS8xLjAvbWF2ZW4tYXJjaGV0eXBlLWFyY2hldHlwZS0xLjAucG9tCisyMDE5LTExLTIwIDE2OjIxOjU1LDU3NiBbV29ya2VyLTE6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgb3V0LW9mLWRhdGUuIFRyeWluZyB0byB1cGRhdGUuCisyMDE5LTExLTIwIDE2OjIyOjEyLDMyMyBbV29ya2VyLTE6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gVXBkYXRpbmcgR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgZmFpbGVkLiBVc2luZyBvdXRkYXRlZCBjYWNoZS4KKzIwMTktMTEtMjAgMTY6NDg6NDIsNzA2IFtNb2RhbENvbnRleHRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9hcmNoZXR5cGVzL21hdmVuLWFyY2hldHlwZS13ZWJhcHAvMS4wL21hdmVuLWFyY2hldHlwZS13ZWJhcHAtMS4wLmphcgorMjAxOS0xMS0yMCAxNjo0ODo0Miw3MzkgW01vZGFsQ29udGV4dF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vYXJjaGV0eXBlcy9tYXZlbi1hcmNoZXR5cGUtd2ViYXBwLzEuMC9tYXZlbi1hcmNoZXR5cGUtd2ViYXBwLTEuMC5qYXIKKzIwMTktMTEtMjAgMTY6NDg6NDIsNzU3IFtNb2RhbENvbnRleHRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9hcmNoZXR5cGVzL21hdmVuLWFyY2hldHlwZS13ZWJhcHAvMS4wL21hdmVuLWFyY2hldHlwZS13ZWJhcHAtMS4wLnBvbQorMjAxOS0xMS0yMCAxNjo0ODo0Miw3NzEgW01vZGFsQ29udGV4dF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vYXJjaGV0eXBlcy9tYXZlbi1hcmNoZXR5cGUtd2ViYXBwLzEuMC9tYXZlbi1hcmNoZXR5cGUtd2ViYXBwLTEuMC5wb20KKzIwMTktMTEtMjAgMTY6NDk6NDksNDU2IFtXb3JrZXItMjI6IENyZWF0aW5nIG1hdmVuLWFyY2hldHlwZS13ZWJhcHBdIElORk8gIG8uZS5tLmMuaS5wLlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciAtIENvbGxlY3RpbmcgcHJvamVjdCBpbmZvICcvcG9tLnhtbCcgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXGdsZW1tXHBvbS54bWwKKzIwMTktMTEtMjAgMTY6NDk6NTMsMzc2IFtXb3JrZXItMjI6IENyZWF0aW5nIG1hdmVuLWFyY2hldHlwZS13ZWJhcHBdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtY29tcGlsZXItbWFuYWdlci8yLjIvcGxleHVzLWNvbXBpbGVyLW1hbmFnZXItMi4yLnBvbQorMjAxOS0xMS0yMCAxNjo0OTo1MywzOTcgW1dvcmtlci0yMjogQ3JlYXRpbmcgbWF2ZW4tYXJjaGV0eXBlLXdlYmFwcF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWNvbXBpbGVyLW1hbmFnZXIvMi4yL3BsZXh1cy1jb21waWxlci1tYW5hZ2VyLTIuMi5wb20KKzIwMTktMTEtMjAgMTY6NDk6NTMsNDE1IFtXb3JrZXItMjI6IENyZWF0aW5nIG1hdmVuLWFyY2hldHlwZS13ZWJhcHBdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtY29tcGlsZXItamF2YWMvMi4yL3BsZXh1cy1jb21waWxlci1qYXZhYy0yLjIucG9tCisyMDE5LTExLTIwIDE2OjQ5OjUzLDQzMCBbV29ya2VyLTIyOiBDcmVhdGluZyBtYXZlbi1hcmNoZXR5cGUtd2ViYXBwXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtY29tcGlsZXItamF2YWMvMi4yL3BsZXh1cy1jb21waWxlci1qYXZhYy0yLjIucG9tCisyMDE5LTExLTIwIDE2OjQ5OjUzLDQ0NiBbV29ya2VyLTIyOiBDcmVhdGluZyBtYXZlbi1hcmNoZXR5cGUtd2ViYXBwXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWNvbXBpbGVycy8yLjIvcGxleHVzLWNvbXBpbGVycy0yLjIucG9tCisyMDE5LTExLTIwIDE2OjQ5OjUzLDQ2MSBbV29ya2VyLTIyOiBDcmVhdGluZyBtYXZlbi1hcmNoZXR5cGUtd2ViYXBwXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtY29tcGlsZXJzLzIuMi9wbGV4dXMtY29tcGlsZXJzLTIuMi5wb20KKzIwMTktMTEtMjAgMTY6NDk6NTMsNzE0IFtXb3JrZXItMjI6IENyZWF0aW5nIG1hdmVuLWFyY2hldHlwZS13ZWJhcHBdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9zaGFyZWQvbWF2ZW4tc2hhcmVkLXV0aWxzLzAuMS9tYXZlbi1zaGFyZWQtdXRpbHMtMC4xLmphcgorMjAxOS0xMS0yMCAxNjo0OTo1Myw3NjYgW1dvcmtlci0yMjogQ3JlYXRpbmcgbWF2ZW4tYXJjaGV0eXBlLXdlYmFwcF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vc2hhcmVkL21hdmVuLXNoYXJlZC11dGlscy8wLjEvbWF2ZW4tc2hhcmVkLXV0aWxzLTAuMS5qYXIKKzIwMTktMTEtMjAgMTY6NDk6NTMsNzc3IFtXb3JrZXItMjI6IENyZWF0aW5nIG1hdmVuLWFyY2hldHlwZS13ZWJhcHBdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtY29tcGlsZXItbWFuYWdlci8yLjIvcGxleHVzLWNvbXBpbGVyLW1hbmFnZXItMi4yLmphcgorMjAxOS0xMS0yMCAxNjo0OTo1Myw3OTIgW1dvcmtlci0yMjogQ3JlYXRpbmcgbWF2ZW4tYXJjaGV0eXBlLXdlYmFwcF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWNvbXBpbGVyLW1hbmFnZXIvMi4yL3BsZXh1cy1jb21waWxlci1tYW5hZ2VyLTIuMi5qYXIKKzIwMTktMTEtMjAgMTY6NDk6NTMsODAzIFtXb3JrZXItMjI6IENyZWF0aW5nIG1hdmVuLWFyY2hldHlwZS13ZWJhcHBdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtY29tcGlsZXItamF2YWMvMi4yL3BsZXh1cy1jb21waWxlci1qYXZhYy0yLjIuamFyCisyMDE5LTExLTIwIDE2OjQ5OjUzLDgxOSBbV29ya2VyLTIyOiBDcmVhdGluZyBtYXZlbi1hcmNoZXR5cGUtd2ViYXBwXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtY29tcGlsZXItamF2YWMvMi4yL3BsZXh1cy1jb21waWxlci1qYXZhYy0yLjIuamFyCisyMDE5LTExLTIwIDE2OjQ5OjU0LDcyMiBbV29ya2VyLTIyOiBDcmVhdGluZyBtYXZlbi1hcmNoZXR5cGUtd2ViYXBwXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpnbGVtbTowLjAuMS1TTkFQU0hPVCBAIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xnbGVtbVxwb20ueG1sLgorMjAxOS0xMS0yMCAxNjo0OTo1NiwxOTYgW1dvcmtlci0yMjogQ3JlYXRpbmcgbWF2ZW4tYXJjaGV0eXBlLXdlYmFwcF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBBZGRpbmcgc291cmNlIGZvbGRlciAvZ2xlbW0vc3JjL21haW4vamF2YQorMjAxOS0xMS0yMCAxNjo0OTo1NiwxOTcgW1dvcmtlci0yMjogQ3JlYXRpbmcgbWF2ZW4tYXJjaGV0eXBlLXdlYmFwcF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBBZGRpbmcgcmVzb3VyY2UgZm9sZGVyIC9nbGVtbS9zcmMvbWFpbi9yZXNvdXJjZXMKKzIwMTktMTEtMjAgMTY6NDk6NTYsMTk3IFtXb3JrZXItMjI6IENyZWF0aW5nIG1hdmVuLWFyY2hldHlwZS13ZWJhcHBdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gQWRkaW5nIHNvdXJjZSBmb2xkZXIgL2dsZW1tL3NyYy90ZXN0L2phdmEKKzIwMTktMTEtMjAgMTY6NDk6NTcsMTYzIFtXb3JrZXItMjU6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvanVuaXQvanVuaXQvMy44LjEvanVuaXQtMy44LjEtc291cmNlcy5qYXIKKzIwMTktMTEtMjAgMTY6NDk6NTcsMTk4IFtXb3JrZXItMjU6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9qdW5pdC9qdW5pdC8zLjguMS9qdW5pdC0zLjguMS1zb3VyY2VzLmphcgorMjAxOS0xMS0yMCAxNjo0OTo1NywzNTEgW1dvcmtlci0yNTogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uai5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IgLSBEb3dubG9hZGVkIHNvdXJjZXMgZm9yIGp1bml0Omp1bml0OjMuOC4xCisyMDE5LTExLTIwIDE2OjQ5OjU3LDM1NCBbV29ya2VyLTI1OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5qLmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiAtIERvd25sb2FkZWQgc291cmNlcyBmb3IganVuaXQ6anVuaXQ6My44LjEKKzIwMTktMTEtMjAgMTY6NDk6NTksMzYzIFtXb3JrZXItMjI6IENyZWF0aW5nIG1hdmVuLWFyY2hldHlwZS13ZWJhcHBdIElORk8gIG8uZS5tLmMuaS5wLlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciAtIEltcG9ydGVkIGFuZCBjb25maWd1cmVkIDEgcHJvamVjdChzKSBpbiA5IHNlYworMjAxOS0xMS0yMCAxNjo0OTo1OSw2NzcgW1dvcmtlci0yNzogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjAgMTY6NDk6NTksNjk1IFtXb3JrZXItMjc6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBDb3B5aW5nIDAgcmVzb3VyY2UKKzIwMTktMTEtMjAgMTY6NDk6NTksNjk3IFtXb3JrZXItMjc6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIwIDE2OjQ5OjU5LDY5OCBbV29ya2VyLTI3OiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXGdsZW1tXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMS0yMCAxNjo1MjowMywxNzkgW1dvcmtlci0yODogQ3JlYXRpbmcgbWF2ZW4tYXJjaGV0eXBlLXF1aWNrc3RhcnRdIElORk8gIG8uZS5tLmMuaS5wLlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciAtIENvbGxlY3RpbmcgcHJvamVjdCBpbmZvICcvcG9tLnhtbCcgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXNccG9tLnhtbAorMjAxOS0xMS0yMCAxNjo1MjowMyw1NjMgW1dvcmtlci0yODogQ3JlYXRpbmcgbWF2ZW4tYXJjaGV0eXBlLXF1aWNrc3RhcnRdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXM6MC4wLjEtU05BUFNIT1QgQCBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAxOS0xMS0yMCAxNjo1MjowMyw5MzAgW1dvcmtlci0yODogQ3JlYXRpbmcgbWF2ZW4tYXJjaGV0eXBlLXF1aWNrc3RhcnRdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gQWRkaW5nIHNvdXJjZSBmb2xkZXIgL0dsZW1tU2VydmljZXMvc3JjL21haW4vamF2YQorMjAxOS0xMS0yMCAxNjo1MjowMyw5MzMgW1dvcmtlci0yODogQ3JlYXRpbmcgbWF2ZW4tYXJjaGV0eXBlLXF1aWNrc3RhcnRdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gQWRkaW5nIHNvdXJjZSBmb2xkZXIgL0dsZW1tU2VydmljZXMvc3JjL3Rlc3QvamF2YQorMjAxOS0xMS0yMCAxNjo1MjowMyw5NjcgW1dvcmtlci0yODogQ3JlYXRpbmcgbWF2ZW4tYXJjaGV0eXBlLXF1aWNrc3RhcnRdIElORk8gIG8uZS5tLmMuaS5wLlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciAtIEltcG9ydGVkIGFuZCBjb25maWd1cmVkIDEgcHJvamVjdChzKSBpbiAwIHNlYworMjAxOS0xMS0yMCAxNjo1MjowNCwyNjMgW1dvcmtlci0yODogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nICdVVEYtOCcgZW5jb2RpbmcgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMuCisyMDE5LTExLTIwIDE2OjUyOjA0LDI2NCBbV29ya2VyLTI4OiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDE5LTExLTIwIDE2OjUyOjA0LDI2NiBbV29ya2VyLTI4OiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgJ1VURi04JyBlbmNvZGluZyB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcy4KKzIwMTktMTEtMjAgMTY6NTI6MDQsMjY2IFtXb3JrZXItMjg6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMTktMTEtMjAgMTY6NTQ6NDAsNzM2IFtXb3JrZXItMjg6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6R2xlbW1TZXJ2aWNlczowLjAuMS1TTkFQU0hPVCBAIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHBvbS54bWwuCisyMDE5LTExLTIwIDE2OjU0OjQwLDg4MiBbV29ya2VyLTI4OiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gQWRkaW5nIHNvdXJjZSBmb2xkZXIgL0dsZW1tU2VydmljZXMvc3JjL21haW4vamF2YQorMjAxOS0xMS0yMCAxNjo1NDo0MCw4ODMgW1dvcmtlci0yODogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIEFkZGluZyBzb3VyY2UgZm9sZGVyIC9HbGVtbVNlcnZpY2VzL3NyYy90ZXN0L2phdmEKKzIwMTktMTEtMjAgMTY6NTQ6NDAsOTA4IFtXb3JrZXItMjg6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyIC0gSW1wb3J0ZWQgYW5kIGNvbmZpZ3VyZWQgMSBwcm9qZWN0KHMpIGluIDAgc2VjCisyMDE5LTExLTIwIDE2OjU0OjQxLDIyMyBbV29ya2VyLTMwOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgJ1VURi04JyBlbmNvZGluZyB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcy4KKzIwMTktMTEtMjAgMTY6NTQ6NDEsMjIzIFtXb3JrZXItMzA6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMTktMTEtMjAgMTY6NTQ6NDEsMjI1IFtXb3JrZXItMzA6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyAnVVRGLTgnIGVuY29kaW5nIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLgorMjAxOS0xMS0yMCAxNjo1NDo0MSwyMjUgW1dvcmtlci0zMDogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMS0yMCAxNzowMTo0MSw5NDIgW1dvcmtlci0zMjogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpnbGVtbTowLjAuMS1TTkFQU0hPVCBAIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xnbGVtbVxwb20ueG1sLgorMjAxOS0xMS0yMCAxNzowMTo0Miw1NjQgW1dvcmtlci0zMjogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjAgMTc6MDE6NDIsNTY2IFtXb3JrZXItMzI6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBDb3B5aW5nIDAgcmVzb3VyY2UKKzIwMTktMTEtMjAgMTc6MDE6NDIsNTY4IFtXb3JrZXItMzI6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIwIDE3OjAxOjQyLDU2OSBbV29ya2VyLTMyOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXGdsZW1tXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMS0yMCAxNzowMTo0Miw1NjkgW1dvcmtlci0zMjogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIGdsZW1tCisyMDE5LTExLTIwIDE3OjAxOjQyLDU3MCBbV29ya2VyLTMyOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIGdsZW1tCisyMDE5LTExLTIwIDE3OjAxOjQyLDU3NSBbV29ya2VyLTMyOiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMCAxNzowMTo0Myw2OTggW1dvcmtlci0zNzogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjAgMTc6MDE6NDMsNzA1IFtXb3JrZXItMzc6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBDb3B5aW5nIDAgcmVzb3VyY2UKKzIwMTktMTEtMjAgMTc6MDE6NDMsNzA2IFtXb3JrZXItMzc6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIwIDE3OjAxOjQzLDcwNyBbV29ya2VyLTM3OiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXGdsZW1tXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMS0yMCAxNzowMzowOCw5OTUgW1dvcmtlci0zMDogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjAgMTc6MDM6MDgsOTk3IFtXb3JrZXItMzA6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBDb3B5aW5nIDAgcmVzb3VyY2UKKzIwMTktMTEtMjAgMTc6MDM6MDgsOTk4IFtXb3JrZXItMzA6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIwIDE3OjAzOjA5LDAwMSBbV29ya2VyLTMwOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXGdsZW1tXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMS0yMSAwOTowOToxOSwyMjcgW1dvcmtlci0zMDogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpnbGVtbTowLjAuMS1TTkFQU0hPVCBAIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xnbGVtbVxwb20ueG1sLgorMjAxOS0xMS0yMSAwOTowOToxOSw2NTQgW1dvcmtlci0zMDogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjEgMDk6MDk6MTksNjU3IFtXb3JrZXItMzA6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBDb3B5aW5nIDAgcmVzb3VyY2UKKzIwMTktMTEtMjEgMDk6MDk6MTksNjU5IFtXb3JrZXItMzA6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDA5OjA5OjE5LDY2MCBbV29ya2VyLTMwOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXGdsZW1tXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMS0yMSAwOTowOToxOSw2NjAgW1dvcmtlci0zMDogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIGdsZW1tCisyMDE5LTExLTIxIDA5OjA5OjE5LDY2MCBbV29ya2VyLTMwOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIGdsZW1tCisyMDE5LTExLTIxIDA5OjA5OjE5LDY2MyBbV29ya2VyLTMwOiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMSAwOTo0NDozMiw4MTYgW1dvcmtlci02MjogQ3JlYXRpbmcgbWF2ZW4tYXJjaGV0eXBlLXdlYmFwcF0gSU5GTyAgby5lLm0uYy5pLnAuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyIC0gQ29sbGVjdGluZyBwcm9qZWN0IGluZm8gJy9wb20ueG1sJyBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sCisyMDE5LTExLTIxIDA5OjQ0OjMyLDkwMSBbV29ya2VyLTYyOiBDcmVhdGluZyBtYXZlbi1hcmNoZXR5cGUtd2ViYXBwXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzOjAuMC4xLVNOQVBTSE9UIEAgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMTktMTEtMjEgMDk6NDQ6MzIsOTg5IFtXb3JrZXItNjI6IENyZWF0aW5nIG1hdmVuLWFyY2hldHlwZS13ZWJhcHBdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gQWRkaW5nIHNvdXJjZSBmb2xkZXIgL0dsZW1tU2VydmljZXMvc3JjL21haW4vamF2YQorMjAxOS0xMS0yMSAwOTo0NDozMiw5ODkgW1dvcmtlci02MjogQ3JlYXRpbmcgbWF2ZW4tYXJjaGV0eXBlLXdlYmFwcF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBBZGRpbmcgcmVzb3VyY2UgZm9sZGVyIC9HbGVtbVNlcnZpY2VzL3NyYy9tYWluL3Jlc291cmNlcworMjAxOS0xMS0yMSAwOTo0NDozMiw5ODkgW1dvcmtlci02MjogQ3JlYXRpbmcgbWF2ZW4tYXJjaGV0eXBlLXdlYmFwcF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBBZGRpbmcgc291cmNlIGZvbGRlciAvR2xlbW1TZXJ2aWNlcy9zcmMvdGVzdC9qYXZhCisyMDE5LTExLTIxIDA5OjQ0OjMzLDg4NiBbV29ya2VyLTYyOiBDcmVhdGluZyBtYXZlbi1hcmNoZXR5cGUtd2ViYXBwXSBJTkZPICBvLmUubS5jLmkucC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIgLSBJbXBvcnRlZCBhbmQgY29uZmlndXJlZCAxIHByb2plY3QocykgaW4gMSBzZWMKKzIwMTktMTEtMjEgMDk6NDQ6MzQsMDYyIFtXb3JrZXItNjA6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDA5OjQ0OjM0LDA2MyBbV29ya2VyLTYwOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gQ29weWluZyAwIHJlc291cmNlCisyMDE5LTExLTIxIDA5OjQ0OjM0LDA2NCBbV29ya2VyLTYwOiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMSAwOTo0NDozNCwwNjUgW1dvcmtlci02MDogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMS0yMSAwOTo0NDozNCwyNTkgW1dvcmtlci00NTogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjEgMDk6NDQ6MzQsMjYwIFtXb3JrZXItNDU6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBDb3B5aW5nIDAgcmVzb3VyY2UKKzIwMTktMTEtMjEgMDk6NDQ6MzQsMjYxIFtXb3JrZXItNDU6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDA5OjQ0OjM0LDI2MSBbV29ya2VyLTQ1OiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDE5LTExLTIxIDA5OjQ4OjAyLDA3OSBbV29ya2VyLTYwOiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMSAwOTo0ODowMiwwODEgW1dvcmtlci02MDogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIENvcHlpbmcgMCByZXNvdXJjZQorMjAxOS0xMS0yMSAwOTo0ODowMiwwODIgW1dvcmtlci02MDogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjEgMDk6NDg6MDIsMDg1IFtXb3JrZXItNjA6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMTktMTEtMjEgMDk6NDg6MjcsNTQzIFtXb3JrZXItNjA6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6R2xlbW1TZXJ2aWNlczowLjAuMS1TTkFQU0hPVCBAIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHBvbS54bWwuCisyMDE5LTExLTIxIDA5OjQ4OjI4LDA0MyBbV29ya2VyLTYwOiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMSAwOTo0ODoyOCwwNDYgW1dvcmtlci02MDogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIENvcHlpbmcgMCByZXNvdXJjZQorMjAxOS0xMS0yMSAwOTo0ODoyOCwwNDcgW1dvcmtlci02MDogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjEgMDk6NDg6MjgsMDQ4IFtXb3JrZXItNjA6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMTktMTEtMjEgMDk6NDg6MjgsMDQ5IFtXb3JrZXItNjA6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDE5LTExLTIxIDA5OjQ4OjI4LDA0OSBbV29ya2VyLTYwOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjEgMDk6NDg6MjgsMDUzIFtXb3JrZXItNjA6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDA5OjU0OjQyLDY3MSBbV29ya2VyLTY5OiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMSAwOTo1NDo0Miw2NzIgW1dvcmtlci02OTogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIENvcHlpbmcgMCByZXNvdXJjZQorMjAxOS0xMS0yMSAwOTo1NDo0Miw2NzMgW1dvcmtlci02OTogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjEgMDk6NTQ6NDIsNjc0IFtXb3JrZXItNjk6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMTktMTEtMjEgMTA6NDg6MTcsNzI3IFtXb3JrZXItODA6IEJ1aWxkaW5nIFByb2plY3QgR2xlbW1TZXJ2aWNlc10gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDEwOjQ4OjE3LDcyOCBbV29ya2VyLTgwOiBCdWlsZGluZyBQcm9qZWN0IEdsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gQ29weWluZyAwIHJlc291cmNlCisyMDE5LTExLTIxIDEwOjQ4OjE3LDcyOSBbV29ya2VyLTgwOiBCdWlsZGluZyBQcm9qZWN0IEdsZW1tU2VydmljZXNdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMSAxMDo0ODoxNyw3MzAgW1dvcmtlci04MDogQnVpbGRpbmcgUHJvamVjdCBHbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMS0yMSAxMDo0OTowMSw5MTggW1dvcmtlci04MzogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjEgMTA6NDk6MDEsOTE5IFtXb3JrZXItODM6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBDb3B5aW5nIDAgcmVzb3VyY2UKKzIwMTktMTEtMjEgMTA6NDk6MDEsOTIwIFtXb3JrZXItODM6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDEwOjQ5OjAxLDkyMiBbV29ya2VyLTgzOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDE5LTExLTIxIDEwOjU0OjI4LDg1OSBbV29ya2VyLTgxOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXM6MC4wLjEtU05BUFNIT1QgQCBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAxOS0xMS0yMSAxMDo1NDoyOSwyNjYgW1dvcmtlci04MTogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjEgMTA6NTQ6MjksMjY4IFtXb3JrZXItODE6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBDb3B5aW5nIDAgcmVzb3VyY2UKKzIwMTktMTEtMjEgMTA6NTQ6MjksMjcxIFtXb3JrZXItODE6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDEwOjU0OjI5LDI3MiBbV29ya2VyLTgxOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDE5LTExLTIxIDEwOjU0OjI5LDI3MiBbV29ya2VyLTgxOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yMSAxMDo1NDoyOSwyNzIgW1dvcmtlci04MTogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDE5LTExLTIxIDEwOjU0OjI5LDI3NiBbV29ya2VyLTgxOiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMSAxMDo1NDozMCwzNTYgW1dvcmtlci04NzogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjEgMTA6NTQ6MzAsMzU3IFtXb3JrZXItODc6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBDb3B5aW5nIDAgcmVzb3VyY2UKKzIwMTktMTEtMjEgMTA6NTQ6MzAsMzU4IFtXb3JrZXItODc6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDEwOjU0OjMwLDM1OSBbV29ya2VyLTg3OiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDE5LTExLTIxIDEwOjU2OjMzLDE4OSBbV29ya2VyLTg5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yMSAxMDo1NjozMywxOTAgW1dvcmtlci04OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTIxIDEwOjU2OjM3LDA1OSBbV29ya2VyLTg0OiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMSAxMDo1NjozNywwNjEgW1dvcmtlci04NDogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIENvcHlpbmcgMCByZXNvdXJjZQorMjAxOS0xMS0yMSAxMDo1NjozNywwNjIgW1dvcmtlci04NDogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjEgMTA6NTY6MzcsMDYzIFtXb3JrZXItODQ6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMTktMTEtMjEgMTM6MTk6NTYsMjc5IFtXb3JrZXItMTAxOiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMSAxMzoxOTo1NiwzNDIgW1dvcmtlci0xMDE6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBDb3B5aW5nIDAgcmVzb3VyY2UKKzIwMTktMTEtMjEgMTM6MTk6NTYsMzQzIFtXb3JrZXItMTAxOiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMSAxMzoxOTo1NiwzNDQgW1dvcmtlci0xMDE6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMTktMTEtMjEgMTM6MjA6NTAsNTgzIFtXb3JrZXItMTAyOiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMSAxMzoyMDo1MCw1ODQgW1dvcmtlci0xMDI6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBDb3B5aW5nIDAgcmVzb3VyY2UKKzIwMTktMTEtMjEgMTM6MjA6NTAsNTg1IFtXb3JrZXItMTAyOiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMSAxMzoyMDo1MCw1ODYgW1dvcmtlci0xMDI6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMTktMTEtMjEgMTM6MjI6MDEsNjU2IFtXb3JrZXItMTAzOiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMSAxMzoyMjowMSw2NTggW1dvcmtlci0xMDM6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBDb3B5aW5nIDAgcmVzb3VyY2UKKzIwMTktMTEtMjEgMTM6MjI6MDEsNjU5IFtXb3JrZXItMTAzOiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMSAxMzoyMjowMSw2NjAgW1dvcmtlci0xMDM6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMTktMTEtMjEgMTM6MjI6MzEsNTM3IFtXb3JrZXItMTAyOiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMSAxMzoyMjozMSw1MzggW1dvcmtlci0xMDI6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBDb3B5aW5nIDAgcmVzb3VyY2UKKzIwMTktMTEtMjEgMTM6MjI6MzEsNTM5IFtXb3JrZXItMTAyOiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMSAxMzoyMjozMSw1NDIgW1dvcmtlci0xMDI6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMTktMTEtMjEgMTM6MjQ6MDYsMDk3IFtXb3JrZXItMTAzOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXM6MC4wLjEtU05BUFNIT1QgQCBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAxOS0xMS0yMSAxMzoyNDowNiw1ODggW1dvcmtlci0xMDM6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDEzOjI0OjA2LDU5MCBbV29ya2VyLTEwMzogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIENvcHlpbmcgMCByZXNvdXJjZQorMjAxOS0xMS0yMSAxMzoyNDowNiw1OTIgW1dvcmtlci0xMDM6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDEzOjI0OjA2LDU5MiBbV29ya2VyLTEwMzogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMS0yMSAxMzoyNDowNiw1OTMgW1dvcmtlci0xMDM6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDE5LTExLTIxIDEzOjI0OjA2LDU5MyBbV29ya2VyLTEwMzogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDE5LTExLTIxIDEzOjI0OjA2LDU5NyBbV29ya2VyLTEwMzogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjEgMTM6MjQ6MDcsNTk5IFtXb3JrZXItMTA2OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2phdmF4L3dzL3JzL2phdmF4LndzLnJzLWFwaS8yLjAvamF2YXgud3MucnMtYXBpLTIuMC1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyNDowNyw2MzUgW1dvcmtlci0xMDY6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9qYXZheC93cy9ycy9qYXZheC53cy5ycy1hcGkvMi4wL2phdmF4LndzLnJzLWFwaS0yLjAtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6MjQ6MDcsNjg3IFtXb3JrZXItMTA0OiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMSAxMzoyNDowNyw2ODggW1dvcmtlci0xMDQ6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBDb3B5aW5nIDAgcmVzb3VyY2UKKzIwMTktMTEtMjEgMTM6MjQ6MDcsNjkwIFtXb3JrZXItMTA0OiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMSAxMzoyNDowNyw2OTEgW1dvcmtlci0xMDQ6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMTktMTEtMjEgMTM6MjQ6MDcsODcwIFtXb3JrZXItMTA2OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5qLmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiAtIERvd25sb2FkZWQgc291cmNlcyBmb3IgamF2YXgud3MucnM6amF2YXgud3MucnMtYXBpOjIuMAorMjAxOS0xMS0yMSAxMzoyNDowOCw3MzMgW1dvcmtlci0xMDM6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDEzOjI0OjA4LDczNCBbV29ya2VyLTEwMzogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIENvcHlpbmcgMCByZXNvdXJjZQorMjAxOS0xMS0yMSAxMzoyNDowOCw3MzUgW1dvcmtlci0xMDM6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDEzOjI0OjA4LDczNyBbV29ya2VyLTEwMzogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMS0yMSAxMzoyNjoxMSwzODkgW1dvcmtlci05ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjEgMTM6MjY6MTEsMzg5IFtXb3JrZXItOTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMS0yMSAxMzoyNjoxMyw1ODkgW1dvcmtlci05ODogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjEgMTM6MjY6MTMsNTkxIFtXb3JrZXItOTg6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBDb3B5aW5nIDAgcmVzb3VyY2UKKzIwMTktMTEtMjEgMTM6MjY6MTMsNTkyIFtXb3JrZXItOTg6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDEzOjI2OjEzLDU5NCBbV29ya2VyLTk4OiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDE5LTExLTIxIDEzOjI4OjM3LDYzNiBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2lvL3Rha2FyaS9tMmUvd29ya3NwYWNlL29yZy5lY2xpcHNlLm0yZS53b3Jrc3BhY2UuY2xpLzAuMy4xL29yZy5lY2xpcHNlLm0yZS53b3Jrc3BhY2UuY2xpLTAuMy4xLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjM3LDY0NCBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvaW8vdGFrYXJpL20yZS93b3Jrc3BhY2Uvb3JnLmVjbGlwc2UubTJlLndvcmtzcGFjZS5jbGkvMC4zLjEvb3JnLmVjbGlwc2UubTJlLndvcmtzcGFjZS5jbGktMC4zLjEtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6MzcsODY2IFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtY2xhc3N3b3JsZHMvMi41LjIvcGxleHVzLWNsYXNzd29ybGRzLTIuNS4yLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjM3LDk0NyBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtY2xhc3N3b3JsZHMvMi41LjIvcGxleHVzLWNsYXNzd29ybGRzLTIuNS4yLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjM4LDA5MCBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vcmVzb2x2ZXIvbWF2ZW4tcmVzb2x2ZXItdXRpbC8xLjEuMS9tYXZlbi1yZXNvbHZlci11dGlsLTEuMS4xLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjM4LDEwOSBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9yZXNvbHZlci9tYXZlbi1yZXNvbHZlci11dGlsLzEuMS4xL21hdmVuLXJlc29sdmVyLXV0aWwtMS4xLjEtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6MzgsMzA0IFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1tb2RlbC8zLjUuMy9tYXZlbi1tb2RlbC0zLjUuMy1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODozOCwzMjQgW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tbW9kZWwvMy41LjMvbWF2ZW4tbW9kZWwtMy41LjMtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6MzgsNDk0IFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tbW9ucy1pby9jb21tb25zLWlvLzIuNS9jb21tb25zLWlvLTIuNS1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODozOCw1MjMgW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbW1vbnMtaW8vY29tbW9ucy1pby8yLjUvY29tbW9ucy1pby0yLjUtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6MzgsNzcyIFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tbW9ucy1jbGkvY29tbW9ucy1jbGkvMS40L2NvbW1vbnMtY2xpLTEuNC1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODozOCw3OTcgW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbW1vbnMtY2xpL2NvbW1vbnMtY2xpLzEuNC9jb21tb25zLWNsaS0xLjQtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6MzksMDQ1IFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9yZXNvbHZlci9tYXZlbi1yZXNvbHZlci1jb25uZWN0b3ItYmFzaWMvMS4xLjEvbWF2ZW4tcmVzb2x2ZXItY29ubmVjdG9yLWJhc2ljLTEuMS4xLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjM5LDA1OSBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9yZXNvbHZlci9tYXZlbi1yZXNvbHZlci1jb25uZWN0b3ItYmFzaWMvMS4xLjEvbWF2ZW4tcmVzb2x2ZXItY29ubmVjdG9yLWJhc2ljLTEuMS4xLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjM5LDI0MCBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tY29yZS8zLjUuMy9tYXZlbi1jb3JlLTMuNS4zLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjM5LDM2MSBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1jb3JlLzMuNS4zL21hdmVuLWNvcmUtMy41LjMtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6MzksNTMyIFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtaW50ZXJwb2xhdGlvbi8xLjI0L3BsZXh1cy1pbnRlcnBvbGF0aW9uLTEuMjQtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6MzksNTg5IFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1pbnRlcnBvbGF0aW9uLzEuMjQvcGxleHVzLWludGVycG9sYXRpb24tMS4yNC1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODozOSw3NTAgW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvc29uYXR5cGUvcGxleHVzL3BsZXh1cy1zZWMtZGlzcGF0Y2hlci8xLjQvcGxleHVzLXNlYy1kaXNwYXRjaGVyLTEuNC1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODozOSw3ODEgW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9zb25hdHlwZS9wbGV4dXMvcGxleHVzLXNlYy1kaXNwYXRjaGVyLzEuNC9wbGV4dXMtc2VjLWRpc3BhdGNoZXItMS40LXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjM5LDk2MSBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tc2V0dGluZ3MtYnVpbGRlci8zLjUuMy9tYXZlbi1zZXR0aW5ncy1idWlsZGVyLTMuNS4zLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjM5LDk3MiBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1zZXR0aW5ncy1idWlsZGVyLzMuNS4zL21hdmVuLXNldHRpbmdzLWJ1aWxkZXItMy41LjMtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6NDAsMTA3IFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1jb21wYXQvMy41LjMvbWF2ZW4tY29tcGF0LTMuNS4zLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjQwLDEzOSBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1jb21wYXQvMy41LjMvbWF2ZW4tY29tcGF0LTMuNS4zLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjQwLDI4NiBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tZW1iZWRkZXIvMy41LjMvbWF2ZW4tZW1iZWRkZXItMy41LjMtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6NDAsMzAzIFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLWVtYmVkZGVyLzMuNS4zL21hdmVuLWVtYmVkZGVyLTMuNS4zLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjQwLDQ0MSBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2lvL3Rha2FyaS9hZXRoZXIvYWV0aGVyLWNvbm5lY3Rvci1va2h0dHAvMC4xNy4zL2FldGhlci1jb25uZWN0b3Itb2todHRwLTAuMTcuMy1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODo0MCw0NjIgW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2lvL3Rha2FyaS9hZXRoZXIvYWV0aGVyLWNvbm5lY3Rvci1va2h0dHAvMC4xNy4zL2FldGhlci1jb25uZWN0b3Itb2todHRwLTAuMTcuMy1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODo0MCw2NjcgW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb20vc3F1YXJldXAvb2tpby9va2lvLzEuMTIuMC9va2lvLTEuMTIuMC1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODo0MCw2OTMgW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbS9zcXVhcmV1cC9va2lvL29raW8vMS4xMi4wL29raW8tMS4xMi4wLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjQwLDk0NiBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tc2V0dGluZ3MvMy41LjMvbWF2ZW4tc2V0dGluZ3MtMy41LjMtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6NDAsOTYwIFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLXNldHRpbmdzLzMuNS4zL21hdmVuLXNldHRpbmdzLTMuNS4zLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjQxLDEyMSBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbS9zcXVhcmV1cC9va2h0dHAzL29raHR0cC8zLjcuMC9va2h0dHAtMy43LjAtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6NDEsMTU4IFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb20vc3F1YXJldXAvb2todHRwMy9va2h0dHAvMy43LjAvb2todHRwLTMuNy4wLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjQxLDM4OCBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vcmVzb2x2ZXIvbWF2ZW4tcmVzb2x2ZXItYXBpLzEuMS4xL21hdmVuLXJlc29sdmVyLWFwaS0xLjEuMS1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODo0MSw0MTAgW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vcmVzb2x2ZXIvbWF2ZW4tcmVzb2x2ZXItYXBpLzEuMS4xL21hdmVuLXJlc29sdmVyLWFwaS0xLjEuMS1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODo0MSw1NTMgW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1jb21wb25lbnQtYW5ub3RhdGlvbnMvMS43LjEvcGxleHVzLWNvbXBvbmVudC1hbm5vdGF0aW9ucy0xLjcuMS1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODo0MSw1NjIgW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWNvbXBvbmVudC1hbm5vdGF0aW9ucy8xLjcuMS9wbGV4dXMtY29tcG9uZW50LWFubm90YXRpb25zLTEuNy4xLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjQxLDcxOCBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vcmVzb2x2ZXIvbWF2ZW4tcmVzb2x2ZXItaW1wbC8xLjEuMS9tYXZlbi1yZXNvbHZlci1pbXBsLTEuMS4xLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjQxLDc0NyBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9yZXNvbHZlci9tYXZlbi1yZXNvbHZlci1pbXBsLzEuMS4xL21hdmVuLXJlc29sdmVyLWltcGwtMS4xLjEtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6NDEsODk4IFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi93YWdvbi93YWdvbi1maWxlLzMuMC4wL3dhZ29uLWZpbGUtMy4wLjAtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6NDEsOTEwIFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3dhZ29uL3dhZ29uLWZpbGUvMy4wLjAvd2Fnb24tZmlsZS0zLjAuMC1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODo0MiwwNzcgW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLXJlc29sdmVyLXByb3ZpZGVyLzMuNS4zL21hdmVuLXJlc29sdmVyLXByb3ZpZGVyLTMuNS4zLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjQyLDA4NyBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1yZXNvbHZlci1wcm92aWRlci8zLjUuMy9tYXZlbi1yZXNvbHZlci1wcm92aWRlci0zLjUuMy1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODo0MiwyMjUgW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3Jlc29sdmVyL21hdmVuLXJlc29sdmVyLXRyYW5zcG9ydC13YWdvbi8xLjEuMS9tYXZlbi1yZXNvbHZlci10cmFuc3BvcnQtd2Fnb24tMS4xLjEtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6NDIsMjM0IFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3Jlc29sdmVyL21hdmVuLXJlc29sdmVyLXRyYW5zcG9ydC13YWdvbi8xLjEuMS9tYXZlbi1yZXNvbHZlci10cmFuc3BvcnQtd2Fnb24tMS4xLjEtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6NDIsNDE5IFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tL2dvb2dsZS9ndWF2YS9ndWF2YS8yMC4wL2d1YXZhLTIwLjAtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6NDIsNDk4IFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb20vZ29vZ2xlL2d1YXZhL2d1YXZhLzIwLjAvZ3VhdmEtMjAuMC1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODo0Miw2ODMgW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3Jlc29sdmVyL21hdmVuLXJlc29sdmVyLXNwaS8xLjEuMS9tYXZlbi1yZXNvbHZlci1zcGktMS4xLjEtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6NDIsNzAwIFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3Jlc29sdmVyL21hdmVuLXJlc29sdmVyLXNwaS8xLjEuMS9tYXZlbi1yZXNvbHZlci1zcGktMS4xLjEtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6NDIsODM4IFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1hcnRpZmFjdC8zLjUuMy9tYXZlbi1hcnRpZmFjdC0zLjUuMy1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODo0Miw4NDkgW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tYXJ0aWZhY3QvMy41LjMvbWF2ZW4tYXJ0aWZhY3QtMy41LjMtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6NDMsMDEzIFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtdXRpbHMvMy4xLjAvcGxleHVzLXV0aWxzLTMuMS4wLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjQzLDA0MCBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtdXRpbHMvMy4xLjAvcGxleHVzLXV0aWxzLTMuMS4wLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjQzLDE3OCBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tcmVwb3NpdG9yeS1tZXRhZGF0YS8zLjUuMy9tYXZlbi1yZXBvc2l0b3J5LW1ldGFkYXRhLTMuNS4zLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjQzLDE4NyBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1yZXBvc2l0b3J5LW1ldGFkYXRhLzMuNS4zL21hdmVuLXJlcG9zaXRvcnktbWV0YWRhdGEtMy41LjMtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6NDMsMzYzIFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi93YWdvbi93YWdvbi1wcm92aWRlci1hcGkvMy4wLjAvd2Fnb24tcHJvdmlkZXItYXBpLTMuMC4wLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjQzLDM4MCBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi93YWdvbi93YWdvbi1wcm92aWRlci1hcGkvMy4wLjAvd2Fnb24tcHJvdmlkZXItYXBpLTMuMC4wLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjQzLDU0MiBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tYnVpbGRlci1zdXBwb3J0LzMuNS4zL21hdmVuLWJ1aWxkZXItc3VwcG9ydC0zLjUuMy1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODo0Myw1NTEgW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tYnVpbGRlci1zdXBwb3J0LzMuNS4zL21hdmVuLWJ1aWxkZXItc3VwcG9ydC0zLjUuMy1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODo0Myw3MjUgW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3NoYXJlZC9tYXZlbi1zaGFyZWQtdXRpbHMvMy4yLjEvbWF2ZW4tc2hhcmVkLXV0aWxzLTMuMi4xLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjQzLDc1MSBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9zaGFyZWQvbWF2ZW4tc2hhcmVkLXV0aWxzLzMuMi4xL21hdmVuLXNoYXJlZC11dGlscy0zLjIuMS1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODo0Myw5MTUgW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLW1vZGVsLWJ1aWxkZXIvMy41LjMvbWF2ZW4tbW9kZWwtYnVpbGRlci0zLjUuMy1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODo0Myw5MzggW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tbW9kZWwtYnVpbGRlci8zLjUuMy9tYXZlbi1tb2RlbC1idWlsZGVyLTMuNS4zLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjQ0LDExMyBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tcGx1Z2luLWFwaS8zLjUuMy9tYXZlbi1wbHVnaW4tYXBpLTMuNS4zLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjQ0LDEyOCBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1wbHVnaW4tYXBpLzMuNS4zL21hdmVuLXBsdWdpbi1hcGktMy41LjMtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6MzU6MzAsMTM4IFtXb3JrZXItMTA4OiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMSAxMzozNTozMCwxMzkgW1dvcmtlci0xMDg6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBDb3B5aW5nIDAgcmVzb3VyY2UKKzIwMTktMTEtMjEgMTM6MzU6MzAsMTQxIFtXb3JrZXItMTA4OiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMSAxMzozNTozMCwxNDggW1dvcmtlci0xMDg6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMTktMTEtMjEgMTM6MzU6NDMsMDQzIFtXb3JrZXItMTEzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yMSAxMzozNTo0MywwNDMgW1dvcmtlci0xMTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMS0yMSAxMzozNTo0NSw2ODIgW1dvcmtlci0xMTU6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDEzOjM1OjQ1LDY4MyBbV29ya2VyLTExNTogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIENvcHlpbmcgMCByZXNvdXJjZQorMjAxOS0xMS0yMSAxMzozNTo0NSw2ODUgW1dvcmtlci0xMTU6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDEzOjM1OjQ1LDY4NiBbV29ya2VyLTExNTogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMS0yMSAxMzo1NzoxOSw2MzYgW1dvcmtlci0xMTk6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDEzOjU3OjE5LDYzNyBbV29ya2VyLTExOTogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIENvcHlpbmcgMCByZXNvdXJjZQorMjAxOS0xMS0yMSAxMzo1NzoxOSw2MzggW1dvcmtlci0xMTk6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDEzOjU3OjE5LDY0MCBbV29ya2VyLTExOTogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMS0yMSAxMzo1NzoyNSw1MzQgW1dvcmtlci0xMjA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTExLTIxIDEzOjU3OjI1LDUzNCBbV29ya2VyLTEyMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTIxIDEzOjU3OjI4LDEzNSBbV29ya2VyLTEyMTogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjEgMTM6NTc6MjgsMTM2IFtXb3JrZXItMTIxOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gQ29weWluZyAwIHJlc291cmNlCisyMDE5LTExLTIxIDEzOjU3OjI4LDEzOCBbV29ya2VyLTEyMTogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjEgMTM6NTc6MjgsMTM5IFtXb3JrZXItMTIxOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDE5LTExLTIyIDA5OjIyOjA2LDM1MiBbV29ya2VyLTEzMDogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjIgMDk6MjI6MDYsMzU1IFtXb3JrZXItMTMwOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gQ29weWluZyAwIHJlc291cmNlCisyMDE5LTExLTIyIDA5OjIyOjA2LDM1NyBbV29ya2VyLTEzMDogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjIgMDk6MjI6MDYsMzYyIFtXb3JrZXItMTMwOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDE5LTExLTIyIDA5OjIyOjEyLDg0MiBbV29ya2VyLTEzNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjIgMDk6MjI6MTIsODQyIFtXb3JrZXItMTM0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTEtMjIgMDk6MjI6MTUsNDYxIFtXb3JrZXItMTM2OiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMiAwOToyMjoxNSw0NjMgW1dvcmtlci0xMzY6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBDb3B5aW5nIDAgcmVzb3VyY2UKKzIwMTktMTEtMjIgMDk6MjI6MTUsNDY0IFtXb3JrZXItMTM2OiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMiAwOToyMjoxNSw0NjcgW1dvcmtlci0xMzY6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMTktMTEtMjIgMDk6MjY6MjQsMTYxIFtXb3JrZXItMTM3OiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMiAwOToyNjoyNCwxNjMgW1dvcmtlci0xMzc6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBDb3B5aW5nIDAgcmVzb3VyY2UKKzIwMTktMTEtMjIgMDk6MjY6MjQsMTY1IFtXb3JrZXItMTM3OiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMiAwOToyNjoyNCwxNjYgW1dvcmtlci0xMzc6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMTktMTEtMjIgMDk6MjY6MzAsNzc1IFtXb3JrZXItMTM5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yMiAwOToyNjozMCw3NzUgW1dvcmtlci0xMzk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMS0yMiAwOToyNjozMywzMjMgW1dvcmtlci0xMzA6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIyIDA5OjI2OjMzLDMyNCBbV29ya2VyLTEzMDogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIENvcHlpbmcgMCByZXNvdXJjZQorMjAxOS0xMS0yMiAwOToyNjozMywzMjYgW1dvcmtlci0xMzA6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIyIDA5OjI2OjMzLDMyOCBbV29ya2VyLTEzMDogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMS0yMiAwOTozMjoxMywyMzAgW1dvcmtlci0xNDE6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIyIDA5OjMyOjEzLDIzMiBbV29ya2VyLTE0MTogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIENvcHlpbmcgMSByZXNvdXJjZQorMjAxOS0xMS0yMiAwOTozMjoxMywyNDEgW1dvcmtlci0xNDE6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIyIDA5OjMyOjEzLDI0MiBbV29ya2VyLTE0MTogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMS0yMiAwOTozMjo0OSw4NzMgW1dvcmtlci0xMzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTExLTIyIDA5OjMyOjQ5LDg3MyBbV29ya2VyLTEzNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTIyIDA5OjMyOjUyLDUzNCBbV29ya2VyLTEzMDogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjIgMDk6MzI6NTIsNTM1IFtXb3JrZXItMTMwOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gQ29weWluZyAwIHJlc291cmNlCisyMDE5LTExLTIyIDA5OjMyOjUyLDUzNyBbV29ya2VyLTEzMDogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjIgMDk6MzI6NTIsNTM4IFtXb3JrZXItMTMwOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDE5LTExLTIyIDA5OjQzOjAzLDEyOSBbV29ya2VyLTE0NjogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjIgMDk6NDM6MDMsMTMxIFtXb3JrZXItMTQ2OiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gQ29weWluZyAxIHJlc291cmNlCisyMDE5LTExLTIyIDA5OjQzOjAzLDEzNCBbV29ya2VyLTE0NjogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjIgMDk6NDM6MDMsMTM2IFtXb3JrZXItMTQ2OiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDE5LTExLTIyIDA5OjQzOjEyLDUzMiBbV29ya2VyLTE0NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjIgMDk6NDM6MTIsNTMyIFtXb3JrZXItMTQ0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTEtMjIgMDk6NDM6MTUsMDIwIFtXb3JrZXItMTQ1OiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMiAwOTo0MzoxNSwwMjEgW1dvcmtlci0xNDU6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBDb3B5aW5nIDAgcmVzb3VyY2UKKzIwMTktMTEtMjIgMDk6NDM6MTUsMDI0IFtXb3JrZXItMTQ1OiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMiAwOTo0MzoxNSwwMjYgW1dvcmtlci0xNDU6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMTktMTEtMjIgMDk6NDU6MzgsMDU4IFtXb3JrZXItMTQ5OiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMiAwOTo0NTozOCwwNjAgW1dvcmtlci0xNDk6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBDb3B5aW5nIDAgcmVzb3VyY2UKKzIwMTktMTEtMjIgMDk6NDU6MzgsMDYxIFtXb3JrZXItMTQ5OiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMiAwOTo0NTozOCwwNjUgW1dvcmtlci0xNDk6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMTktMTEtMjIgMDk6NDY6NTYsMjQ4IFtXb3JrZXItMTQ1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yMiAwOTo0Njo1NiwyNDggW1dvcmtlci0xNDU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMS0yMiAxMjo0OTo1NywwOTQgW1dvcmtlci0yNDU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTExLTIyIDEyOjQ5OjU3LDA5NCBbV29ya2VyLTI0NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTIyIDE0OjI2OjAwLDM1MSBbV29ya2VyLTI4NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjIgMTQ6MjY6MDAsMzUxIFtXb3JrZXItMjg0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTEtMjIgMTQ6Mzc6MzEsOTc4IFtXb3JrZXItMjkwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yMiAxNDozNzozMSw5NzggW1dvcmtlci0yOTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMS0yMiAxNjoxMzoyMSw3MTMgW1dvcmtlci0zMjI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTExLTIyIDE2OjEzOjIxLDcxMyBbV29ya2VyLTMyMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTI1IDEyOjMwOjEzLDkxNiBbV29ya2VyLTM6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgb3V0LW9mLWRhdGUuIFRyeWluZyB0byB1cGRhdGUuCisyMDE5LTExLTI1IDEyOjMwOjIwLDMzNCBbV29ya2VyLTA6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTI1IDEyOjMwOjIwLDM1NSBbV29ya2VyLTA6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBDb3B5aW5nIDEgcmVzb3VyY2UKKzIwMTktMTEtMjUgMTI6MzA6MjAsMzY3IFtXb3JrZXItMDogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjUgMTI6MzA6MjAsMzc4IFtXb3JrZXItMDogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMS0yNSAxNDo1NDo0NywzODQgW1dvcmtlci0yMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjUgMTQ6NTQ6NDcsMzg0IFtXb3JrZXItMjM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMS0yNSAxNTowMjo0Myw0MTkgW1dvcmtlci0yNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjUgMTU6MDI6NDMsNDE5IFtXb3JrZXItMjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMS0yNSAxNTowNTozMSwwNzYgW1dvcmtlci0zMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjUgMTU6MDU6MzEsMDc2IFtXb3JrZXItMzA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMS0yNSAxNTo0NTo1MSw1NTggW1dvcmtlci0zNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjUgMTU6NDU6NTEsNTU4IFtXb3JrZXItMzY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMS0yNSAxNjowNTo0NCw4MTcgW1dvcmtlci00NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjUgMTY6MDU6NDQsODE3IFtXb3JrZXItNDY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMS0yNiAwOTozMzowNSwzMjcgW1dvcmtlci0zMjA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTExLTI2IDA5OjMzOjA1LDMyNyBbV29ya2VyLTMyMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTI2IDA5OjQ0OjI3LDI0NiBbV29ya2VyLTMyMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjYgMDk6NDQ6MjcsMjQ2IFtXb3JrZXItMzIxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTEtMjYgMDk6NTE6MzMsMzk1IFtXb3JrZXItMzMwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yNiAwOTo1MTozMywzOTYgW1dvcmtlci0zMzA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMS0yNiAxMDozMjowNSw4NTggW1dvcmtlci0zNDg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTExLTI2IDEwOjMyOjA1LDg1OSBbV29ya2VyLTM0ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTI2IDEwOjM4OjEyLDYwNSBbV29ya2VyLTM1MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjYgMTA6Mzg6MTIsNjA1IFtXb3JrZXItMzUwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTEtMjYgMTA6NDE6NDksNzQ0IFtXb3JrZXItMzUwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yNiAxMDo0MTo0OSw3NDQgW1dvcmtlci0zNTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMS0yNiAxMDo0MzowNSw5NzQgW1dvcmtlci0zNTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTExLTI2IDEwOjQzOjA1LDk3NCBbV29ya2VyLTM1MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTI2IDExOjEyOjE0LDE4NCBbV29ya2VyLTM2NzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjYgMTE6MTI6MTQsMzA4IFtXb3JrZXItMzY2OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yNiAxMToxMjoxNCwzMTAgW1dvcmtlci0zNjY6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBDb3B5aW5nIDEgcmVzb3VyY2UKKzIwMTktMTEtMjYgMTE6MTI6MTQsMzE1IFtXb3JrZXItMzY2OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yNiAxMToxMjoxNCwzMTYgW1dvcmtlci0zNjY6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMTktMTEtMjYgMTE6MTI6MTQsMzE2IFtXb3JrZXItMzY2OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yNiAxMToxMjoxNCwzNTEgW1dvcmtlci0zNjY6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yNiAxMToxMjoxNCw0MTcgW1dvcmtlci0zNjY6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTI2IDExOjEyOjI5LDk0MCBbV29ya2VyLTM3MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjYgMTE6MTI6MjksOTQxIFtXb3JrZXItMzcwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTEtMjcgMTQ6MDM6NDMsODkyIFtXb3JrZXItODcxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yNyAxNDowMzo0Myw5MjkgW1dvcmtlci04NzE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMS0yNyAxNTozNDo0Nyw2NjEgW1dvcmtlci05MTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTExLTI3IDE1OjM0OjQ3LDY2MSBbV29ya2VyLTkxMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTI3IDE1OjM4OjUzLDE2NiBbV29ya2VyLTkxMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjcgMTU6Mzg6NTMsMTY4IFtXb3JrZXItOTExOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTEtMjcgMTU6NDk6NTMsNTY0IFtXb3JrZXItOTE1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yNyAxNTo0OTo1Myw1NjUgW1dvcmtlci05MTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMS0yNyAxNjowNjo1OSw5MzcgW1dvcmtlci05MjU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTExLTI3IDE2OjA2OjU5LDkzNyBbV29ya2VyLTkyNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTI3IDE2OjQyOjQ4LDAwNSBbV29ya2VyLTkzNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjcgMTY6NDI6NDgsMDA1IFtXb3JrZXItOTM3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTEtMjcgMTY6NDg6NDIsMzA2IFtXb3JrZXItOTM4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yNyAxNjo0ODo0MiwzMDYgW1dvcmtlci05Mzg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMS0yNyAxNjo1MDoyMCw2NTggW1dvcmtlci05NDQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTExLTI3IDE2OjUwOjIwLDY1OCBbV29ya2VyLTk0NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTI3IDE2OjUyOjE5LDE5MCBbV29ya2VyLTk0MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjcgMTY6NTI6MTksMTkwIFtXb3JrZXItOTQxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTEtMjcgMTY6NTQ6MjMsODcyIFtXb3JrZXItOTQ1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yNyAxNjo1NDoyMyw4NzMgW1dvcmtlci05NDU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMS0yNyAxNzowNDo0MCw3MDAgW1dvcmtlci05NDc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTExLTI3IDE3OjA0OjQwLDcwMCBbV29ya2VyLTk0NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTI4IDEwOjE3OjEzLDk2NyBbV29ya2VyLTEyNTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTExLTI4IDEwOjE3OjEzLDk2NyBbV29ya2VyLTEyNTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMS0yOCAxMDo0ODoyMiwzOTkgW1dvcmtlci0xMjYzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yOCAxMDo0ODoyMiwzOTkgW1dvcmtlci0xMjYzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTEtMjggMTA6NTA6MDksNTk2IFtXb3JrZXItMTI2MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjggMTA6NTA6MDksNTk2IFtXb3JrZXItMTI2MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTI4IDEwOjU4OjAyLDA4NCBbV29ya2VyLTEyNjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTExLTI4IDEwOjU4OjAyLDA4NCBbV29ya2VyLTEyNjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMS0yOCAxMjo0MDo0OCw1MDAgW1dvcmtlci0xMzAxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yOCAxMjo0MDo0OCw1MDEgW1dvcmtlci0xMzAxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTEtMjggMTM6MjY6MzgsMTAwIFtXb3JrZXItMTMxNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjggMTM6MjY6MzgsMTAwIFtXb3JrZXItMTMxNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTI4IDEzOjI4OjU2LDM5MiBbV29ya2VyLTEzMTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTExLTI4IDEzOjI4OjU2LDM5MyBbV29ya2VyLTEzMTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMS0yOCAxMzozMDozNSwyMDIgW1dvcmtlci0xMzE5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yOCAxMzozMDozNSwyMDIgW1dvcmtlci0xMzE5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTEtMjggMTM6MzQ6MDYsOTA1IFtXb3JrZXItMTMxOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjggMTM6MzQ6MDYsOTA2IFtXb3JrZXItMTMxOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTI4IDE0OjAzOjU4LDI5OSBbV29ya2VyLTEzMzA6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzCisyMDE5LTExLTI4IDE0OjAzOjU4LDMyNCBbV29ya2VyLTEzMzE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTI4IDE0OjAzOjU4LDMyNiBbV29ya2VyLTEzMzE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBDb3B5aW5nIDEgcmVzb3VyY2UKKzIwMTktMTEtMjggMTQ6MDM6NTgsMzMwIFtXb3JrZXItMTMzMTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjggMTQ6MDM6NTgsMzMxIFtXb3JrZXItMTMzMTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMS0yOCAxNDowMzo1OCwzMzEgW1dvcmtlci0xMzMxOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yOCAxNDowMzo1OCwzMzEgW1dvcmtlci0xMzMxOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjggMTQ6MDM6NTgsMzQzIFtXb3JrZXItMTMzMTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjggMTQ6MDQ6MTMsNTA4IFtXb3JrZXItMTMzMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjggMTQ6MDQ6MTMsNTA4IFtXb3JrZXItMTMzMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTI4IDE0OjQ5OjI4LDUwNCBbV29ya2VyLTEzNDg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTExLTI4IDE0OjQ5OjI4LDUwNCBbV29ya2VyLTEzNDg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMS0yOCAxNDo1MToxMiwyNjcgW1dvcmtlci0xMzQ3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yOCAxNDo1MToxMiwyNjggW1dvcmtlci0xMzQ3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMDYgMTA6MzE6MDAsMjQyIFtXb3JrZXItMTogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMTktMTItMDYgMTE6MDA6NDksODIwIFtXb3JrZXItMTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTEyLTA2IDExOjAwOjQ5LDgyOCBbV29ya2VyLTE2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMDYgMTE6MDM6NTgsMzE2IFtXb3JrZXItMjQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTEyLTA2IDExOjAzOjU4LDMxNiBbV29ya2VyLTI0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMDYgMTE6MDQ6MzcsNzQ1IFtXb3JrZXItMjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTEyLTA2IDExOjA0OjM3LDc0NiBbV29ya2VyLTI3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMDYgMTE6MDg6NTIsODE1IFtXb3JrZXItMjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTEyLTA2IDExOjA4OjUyLDgxNiBbV29ya2VyLTI4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMDYgMTE6MjY6MDEsNDQzIFtXb3JrZXItMzM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTEyLTA2IDExOjI2OjAxLDQ0NCBbV29ya2VyLTMzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMDYgMTE6MzI6MzcsNjUwIFtXb3JrZXItNDA6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzCisyMDE5LTEyLTA2IDExOjMyOjM4LDY3MSBbV29ya2VyLTM1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMi0wNiAxMTozMjozOCw3MDYgW1dvcmtlci0zNTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIENvcHlpbmcgMSByZXNvdXJjZQorMjAxOS0xMi0wNiAxMTozMjozOCw3MjQgW1dvcmtlci0zNTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTItMDYgMTE6MzI6MzgsNzI1IFtXb3JrZXItMzU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMTktMTItMDYgMTE6MzI6MzgsNzI2IFtXb3JrZXItMzU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDE5LTEyLTA2IDExOjMyOjM4LDcyOCBbV29ya2VyLTM1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMTktMTItMDYgMTE6MzI6MzgsNzkzIFtXb3JrZXItMzU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTEyLTA2IDExOjMzOjU1LDY1MSBbV29ya2VyLTM4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMi0wNiAxMTozMzo1NSw2NTIgW1dvcmtlci0zODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTA2IDExOjM0OjEzLDQ1MyBbV29ya2VyLTQxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMi0wNiAxMTozNDoxMyw0NTMgW1dvcmtlci00MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTA2IDExOjQ5OjU4LDc3MyBbV29ya2VyLTQ6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDE5LTEyLTA2IDExOjU1OjA0LDU4MCBbV29ya2VyLTE3OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlcworMjAxOS0xMi0wNiAxMTo1NTowNSwyNTYgW1dvcmtlci0xOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMi0wNiAxMTo1NTowNSwyNjUgW1dvcmtlci0xOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gQ29weWluZyAxIHJlc291cmNlCisyMDE5LTEyLTA2IDExOjU1OjA1LDI4MyBbV29ya2VyLTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTEyLTA2IDExOjU1OjA1LDI4NCBbV29ya2VyLTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMTktMTItMDYgMTE6NTU6MDUsMjg2IFtXb3JrZXItMTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMTktMTItMDYgMTE6NTU6MDUsMjg3IFtXb3JrZXItMTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDE5LTEyLTA2IDExOjU1OjA1LDMxNSBbV29ya2VyLTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTEyLTA2IDExOjU1OjEyLDMzNSBbV29ya2VyLTE4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMi0wNiAxMTo1NToxMiwzMzcgW1dvcmtlci0xODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTA2IDEyOjE4OjUwLDEwNSBbV29ya2VyLTI2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMi0wNiAxMjoxODo1MCwxMDcgW1dvcmtlci0yNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTA2IDEyOjM2OjA5LDcwNyBbV29ya2VyLTI5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMi0wNiAxMjozNjowOSw3MDggW1dvcmtlci0yOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTA2IDEyOjM4OjIxLDkxNiBbV29ya2VyLTM0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMi0wNiAxMjozODoyMSw5MTYgW1dvcmtlci0zNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTA2IDEyOjM5OjM2LDQyMyBbV29ya2VyLTM2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMi0wNiAxMjozOTozNiw0MjMgW1dvcmtlci0zNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTA2IDEyOjQxOjI2LDE1NiBbV29ya2VyLTQwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMi0wNiAxMjo0MToyNiwxNTYgW1dvcmtlci00MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTA2IDEyOjQzOjIyLDE1OCBbV29ya2VyLTM0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMi0wNiAxMjo0MzoyMiwxNTkgW1dvcmtlci0zNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTA5IDExOjAwOjExLDAzOCBbV29ya2VyLTEwODQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTEyLTA5IDExOjAwOjExLDA0MSBbV29ya2VyLTEwODQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0wOSAxMTo0MzoyMywzNDIgW1dvcmtlci0xMDk1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMi0wOSAxMTo0MzoyMywzNDIgW1dvcmtlci0xMDk1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMDkgMTI6MDA6MzIsODQ4IFtXb3JrZXItMTEwNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTItMDkgMTI6MDA6MzIsODQ5IFtXb3JrZXItMTEwNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTA5IDEyOjAxOjM0LDM3OCBbV29ya2VyLTExMDM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTEyLTA5IDEyOjAxOjM0LDM3OCBbV29ya2VyLTExMDM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0wOSAxMjoxODowOSwwMTkgW1dvcmtlci0xMTA5OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlcworMjAxOS0xMi0wOSAxMjoxODowOSwwNzYgW1dvcmtlci0xMTA3OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMi0wOSAxMjoxODowOSwwNzkgW1dvcmtlci0xMTA3OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gQ29weWluZyAxIHJlc291cmNlCisyMDE5LTEyLTA5IDEyOjE4OjA5LDA4OSBbV29ya2VyLTExMDc6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTEyLTA5IDEyOjE4OjA5LDA5MSBbV29ya2VyLTExMDc6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMTktMTItMDkgMTI6MTg6MDksMDkxIFtXb3JrZXItMTEwNzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMTktMTItMDkgMTI6MTg6MDksMDkxIFtXb3JrZXItMTEwNzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDE5LTEyLTA5IDEyOjE4OjA5LDEyOSBbV29ya2VyLTExMDc6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTEyLTA5IDEyOjE4OjE0LDY5MyBbV29ya2VyLTExMDc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTEyLTA5IDEyOjE4OjE0LDY5MyBbV29ya2VyLTExMDc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0wOSAxMzo1NzowMiwzNzYgW1dvcmtlci0xMTQ2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMi0wOSAxMzo1NzowMiwzNzcgW1dvcmtlci0xMTQ2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMDkgMTQ6MTU6NDMsNzA2IFtXb3JrZXItNTogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMTktMTItMDkgMTU6NDQ6NDYsODMxIFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3BsdWdpbnMvbWF2ZW4td2FyLXBsdWdpbi8zLjIuMS9tYXZlbi13YXItcGx1Z2luLTMuMi4xLmphcgorMjAxOS0xMi0wOSAxNTo0NDo0Niw5NDIgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9wbHVnaW5zL21hdmVuLXdhci1wbHVnaW4vMy4yLjEvbWF2ZW4td2FyLXBsdWdpbi0zLjIuMS5qYXIKKzIwMTktMTItMDkgMTU6NDQ6NDksNTEzIFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogR2xlbW1TZXJ2aWNlczI6R2xlbW1TZXJ2aWNlczI6MC4wLjEtU05BUFNIT1QgQCBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczJccG9tLnhtbC4KKzIwMTktMTItMDkgMTU6NDQ6NDksNjM4IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3BsdWdpbnMvbWF2ZW4td2FyLXBsdWdpbi8zLjIuMS9tYXZlbi13YXItcGx1Z2luLTMuMi4xLnBvbQorMjAxOS0xMi0wOSAxNTo0NDo0OSw2NTQgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9wbHVnaW5zL21hdmVuLXdhci1wbHVnaW4vMy4yLjEvbWF2ZW4td2FyLXBsdWdpbi0zLjIuMS5wb20KKzIwMTktMTItMDkgMTU6NDQ6NDksNjcwIFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3BsdWdpbnMvbWF2ZW4tcGx1Z2lucy8zMS9tYXZlbi1wbHVnaW5zLTMxLnBvbQorMjAxOS0xMi0wOSAxNTo0NDo0OSw2ODkgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9wbHVnaW5zL21hdmVuLXBsdWdpbnMvMzEvbWF2ZW4tcGx1Z2lucy0zMS5wb20KKzIwMTktMTItMDkgMTU6NDQ6NDksNzA0IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLXBhcmVudC8zMS9tYXZlbi1wYXJlbnQtMzEucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjQ5LDcyNyBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLXBhcmVudC8zMS9tYXZlbi1wYXJlbnQtMzEucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjQ5LDc0NiBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9hcGFjaGUvMTkvYXBhY2hlLTE5LnBvbQorMjAxOS0xMi0wOSAxNTo0NDo0OSw3NjMgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9hcGFjaGUvMTkvYXBhY2hlLTE5LnBvbQorMjAxOS0xMi0wOSAxNTo0NDo1MCwxMTkgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWNvbXBvbmVudC1hbm5vdGF0aW9ucy8xLjcuMS9wbGV4dXMtY29tcG9uZW50LWFubm90YXRpb25zLTEuNy4xLnBvbQorMjAxOS0xMi0wOSAxNTo0NDo1MCwxMzUgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtY29tcG9uZW50LWFubm90YXRpb25zLzEuNy4xL3BsZXh1cy1jb21wb25lbnQtYW5ub3RhdGlvbnMtMS43LjEucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUwLDE1MiBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtY29udGFpbmVycy8xLjcuMS9wbGV4dXMtY29udGFpbmVycy0xLjcuMS5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTAsMTY4IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWNvbnRhaW5lcnMvMS43LjEvcGxleHVzLWNvbnRhaW5lcnMtMS43LjEucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUwLDM4MSBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1hcmNoaXZlci8zLjIuMC9tYXZlbi1hcmNoaXZlci0zLjIuMC5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTAsMzk1IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tYXJjaGl2ZXIvMy4yLjAvbWF2ZW4tYXJjaGl2ZXItMy4yLjAucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUwLDQyNiBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9zaGFyZWQvbWF2ZW4tc2hhcmVkLXV0aWxzLzMuMi4wL21hdmVuLXNoYXJlZC11dGlscy0zLjIuMC5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTAsNDQxIFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vc2hhcmVkL21hdmVuLXNoYXJlZC11dGlscy8zLjIuMC9tYXZlbi1zaGFyZWQtdXRpbHMtMy4yLjAucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUwLDQ3NiBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtYXJjaGl2ZXIvMy41L3BsZXh1cy1hcmNoaXZlci0zLjUucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUwLDQ5NCBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1hcmNoaXZlci8zLjUvcGxleHVzLWFyY2hpdmVyLTMuNS5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTAsNTEwIFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy81LjAvcGxleHVzLTUuMC5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTAsNTI5IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLzUuMC9wbGV4dXMtNS4wLnBvbQorMjAxOS0xMi0wOSAxNTo0NDo1MCw1NDkgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLXV0aWxzLzMuMC4yNC9wbGV4dXMtdXRpbHMtMy4wLjI0LnBvbQorMjAxOS0xMi0wOSAxNTo0NDo1MCw1NjMgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtdXRpbHMvMy4wLjI0L3BsZXh1cy11dGlscy0zLjAuMjQucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUwLDU4MiBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtaW8vMy4wLjAvcGxleHVzLWlvLTMuMC4wLnBvbQorMjAxOS0xMi0wOSAxNTo0NDo1MCw1OTYgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtaW8vMy4wLjAvcGxleHVzLWlvLTMuMC4wLnBvbQorMjAxOS0xMi0wOSAxNTo0NDo1MCw2ODggW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvY29tbW9ucy9jb21tb25zLWNvbXByZXNzLzEuMTQvY29tbW9ucy1jb21wcmVzcy0xLjE0LnBvbQorMjAxOS0xMi0wOSAxNTo0NDo1MCw3MDUgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9jb21tb25zL2NvbW1vbnMtY29tcHJlc3MvMS4xNC9jb21tb25zLWNvbXByZXNzLTEuMTQucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUwLDc2NiBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2lxODAvc25hcHB5L3NuYXBweS8wLjQvc25hcHB5LTAuNC5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTAsNzgzIFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9pcTgwL3NuYXBweS9zbmFwcHkvMC40L3NuYXBweS0wLjQucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUwLDgwMyBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL3R1a2FhbmkveHovMS42L3h6LTEuNi5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTAsODE4IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy90dWthYW5pL3h6LzEuNi94ei0xLjYucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUwLDgzNiBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtaW50ZXJwb2xhdGlvbi8xLjIyL3BsZXh1cy1pbnRlcnBvbGF0aW9uLTEuMjIucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUwLDg1MyBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1pbnRlcnBvbGF0aW9uLzEuMjIvcGxleHVzLWludGVycG9sYXRpb24tMS4yMi5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTAsODk0IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1hcmNoaXZlci8zLjYuMC9wbGV4dXMtYXJjaGl2ZXItMy42LjAucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUwLDkwOSBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1hcmNoaXZlci8zLjYuMC9wbGV4dXMtYXJjaGl2ZXItMy42LjAucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUwLDk0NiBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtdXRpbHMvMy4xLjAvcGxleHVzLXV0aWxzLTMuMS4wLnBvbQorMjAxOS0xMi0wOSAxNTo0NDo1MCw5NzAgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtdXRpbHMvMy4xLjAvcGxleHVzLXV0aWxzLTMuMS4wLnBvbQorMjAxOS0xMi0wOSAxNTo0NDo1MCw5OTAgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWlvLzMuMC4xL3BsZXh1cy1pby0zLjAuMS5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTEsMDA0IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWlvLzMuMC4xL3BsZXh1cy1pby0zLjAuMS5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTEsMDU1IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL2NvbW1vbnMvY29tbW9ucy1jb21wcmVzcy8xLjE2LjEvY29tbW9ucy1jb21wcmVzcy0xLjE2LjEucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUxLDA3MCBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL2NvbW1vbnMvY29tbW9ucy1jb21wcmVzcy8xLjE2LjEvY29tbW9ucy1jb21wcmVzcy0xLjE2LjEucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUxLDA4NSBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9jb21tb25zL2NvbW1vbnMtcGFyZW50LzQzL2NvbW1vbnMtcGFyZW50LTQzLnBvbQorMjAxOS0xMi0wOSAxNTo0NDo1MSwxMTAgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9jb21tb25zL2NvbW1vbnMtcGFyZW50LzQzL2NvbW1vbnMtcGFyZW50LTQzLnBvbQorMjAxOS0xMi0wOSAxNTo0NDo1MSwxMzIgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9vYmplbmVzaXMvb2JqZW5lc2lzLzIuNi9vYmplbmVzaXMtMi42LnBvbQorMjAxOS0xMi0wOSAxNTo0NDo1MSwxODEgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL29iamVuZXNpcy9vYmplbmVzaXMvMi42L29iamVuZXNpcy0yLjYucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUxLDE5NyBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL29iamVuZXNpcy9vYmplbmVzaXMtcGFyZW50LzIuNi9vYmplbmVzaXMtcGFyZW50LTIuNi5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTEsMjEzIFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9vYmplbmVzaXMvb2JqZW5lc2lzLXBhcmVudC8yLjYvb2JqZW5lc2lzLXBhcmVudC0yLjYucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUxLDIzMSBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL3R1a2FhbmkveHovMS44L3h6LTEuOC5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTEsMjQ2IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy90dWthYW5pL3h6LzEuOC94ei0xLjgucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUxLDI3MSBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtaW50ZXJwb2xhdGlvbi8xLjI0L3BsZXh1cy1pbnRlcnBvbGF0aW9uLTEuMjQucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUxLDI4NiBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1pbnRlcnBvbGF0aW9uLzEuMjQvcGxleHVzLWludGVycG9sYXRpb24tMS4yNC5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTEsMzA0IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb20vdGhvdWdodHdvcmtzL3hzdHJlYW0veHN0cmVhbS8xLjQuMTAveHN0cmVhbS0xLjQuMTAucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUxLDM0NiBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb20vdGhvdWdodHdvcmtzL3hzdHJlYW0veHN0cmVhbS8xLjQuMTAveHN0cmVhbS0xLjQuMTAucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUxLDM2NiBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tL3Rob3VnaHR3b3Jrcy94c3RyZWFtL3hzdHJlYW0tcGFyZW50LzEuNC4xMC94c3RyZWFtLXBhcmVudC0xLjQuMTAucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUxLDM4NiBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb20vdGhvdWdodHdvcmtzL3hzdHJlYW0veHN0cmVhbS1wYXJlbnQvMS40LjEwL3hzdHJlYW0tcGFyZW50LTEuNC4xMC5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTEsNDQxIFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3NoYXJlZC9tYXZlbi1maWx0ZXJpbmcvMy4xLjEvbWF2ZW4tZmlsdGVyaW5nLTMuMS4xLnBvbQorMjAxOS0xMi0wOSAxNTo0NDo1MSw0NTYgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9zaGFyZWQvbWF2ZW4tZmlsdGVyaW5nLzMuMS4xL21hdmVuLWZpbHRlcmluZy0zLjEuMS5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTEsODIzIFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3NoYXJlZC9tYXZlbi1tYXBwaW5nLzMuMC4wL21hdmVuLW1hcHBpbmctMy4wLjAucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUxLDg0NSBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3NoYXJlZC9tYXZlbi1tYXBwaW5nLzMuMC4wL21hdmVuLW1hcHBpbmctMy4wLjAucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUxLDg2MyBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9zaGFyZWQvbWF2ZW4tc2hhcmVkLWNvbXBvbmVudHMvMjIvbWF2ZW4tc2hhcmVkLWNvbXBvbmVudHMtMjIucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUxLDg4MiBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3NoYXJlZC9tYXZlbi1zaGFyZWQtY29tcG9uZW50cy8yMi9tYXZlbi1zaGFyZWQtY29tcG9uZW50cy0yMi5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTIsMDIzIFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1jb21wb25lbnQtYW5ub3RhdGlvbnMvMS43LjEvcGxleHVzLWNvbXBvbmVudC1hbm5vdGF0aW9ucy0xLjcuMS5qYXIKKzIwMTktMTItMDkgMTU6NDQ6NTIsMDM5IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWNvbXBvbmVudC1hbm5vdGF0aW9ucy8xLjcuMS9wbGV4dXMtY29tcG9uZW50LWFubm90YXRpb25zLTEuNy4xLmphcgorMjAxOS0xMi0wOSAxNTo0NDo1MiwwNDYgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tYXJjaGl2ZXIvMy4yLjAvbWF2ZW4tYXJjaGl2ZXItMy4yLjAuamFyCisyMDE5LTEyLTA5IDE1OjQ0OjUyLDA2MyBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLWFyY2hpdmVyLzMuMi4wL21hdmVuLWFyY2hpdmVyLTMuMi4wLmphcgorMjAxOS0xMi0wOSAxNTo0NDo1MiwwNzMgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vc2hhcmVkL21hdmVuLXNoYXJlZC11dGlscy8zLjIuMC9tYXZlbi1zaGFyZWQtdXRpbHMtMy4yLjAuamFyCisyMDE5LTEyLTA5IDE1OjQ0OjUyLDEwOCBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3NoYXJlZC9tYXZlbi1zaGFyZWQtdXRpbHMvMy4yLjAvbWF2ZW4tc2hhcmVkLXV0aWxzLTMuMi4wLmphcgorMjAxOS0xMi0wOSAxNTo0NDo1MiwxMTcgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWFyY2hpdmVyLzMuNi4wL3BsZXh1cy1hcmNoaXZlci0zLjYuMC5qYXIKKzIwMTktMTItMDkgMTU6NDQ6NTIsMTQ3IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWFyY2hpdmVyLzMuNi4wL3BsZXh1cy1hcmNoaXZlci0zLjYuMC5qYXIKKzIwMTktMTItMDkgMTU6NDQ6NTIsMTU2IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1pby8zLjAuMS9wbGV4dXMtaW8tMy4wLjEuamFyCisyMDE5LTEyLTA5IDE1OjQ0OjUyLDE3NiBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1pby8zLjAuMS9wbGV4dXMtaW8tMy4wLjEuamFyCisyMDE5LTEyLTA5IDE1OjQ0OjUyLDE4NSBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9jb21tb25zL2NvbW1vbnMtY29tcHJlc3MvMS4xNi4xL2NvbW1vbnMtY29tcHJlc3MtMS4xNi4xLmphcgorMjAxOS0xMi0wOSAxNTo0NDo1MiwyNDIgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9jb21tb25zL2NvbW1vbnMtY29tcHJlc3MvMS4xNi4xL2NvbW1vbnMtY29tcHJlc3MtMS4xNi4xLmphcgorMjAxOS0xMi0wOSAxNTo0NDo1MiwyNTAgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9vYmplbmVzaXMvb2JqZW5lc2lzLzIuNi9vYmplbmVzaXMtMi42LmphcgorMjAxOS0xMi0wOSAxNTo0NDo1MiwyNjkgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL29iamVuZXNpcy9vYmplbmVzaXMvMi42L29iamVuZXNpcy0yLjYuamFyCisyMDE5LTEyLTA5IDE1OjQ0OjUyLDI3NiBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2lxODAvc25hcHB5L3NuYXBweS8wLjQvc25hcHB5LTAuNC5qYXIKKzIwMTktMTItMDkgMTU6NDQ6NTIsMjk3IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9pcTgwL3NuYXBweS9zbmFwcHkvMC40L3NuYXBweS0wLjQuamFyCisyMDE5LTEyLTA5IDE1OjQ0OjUyLDMwNSBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL3R1a2FhbmkveHovMS44L3h6LTEuOC5qYXIKKzIwMTktMTItMDkgMTU6NDQ6NTIsMzI4IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy90dWthYW5pL3h6LzEuOC94ei0xLjguamFyCisyMDE5LTEyLTA5IDE1OjQ0OjUyLDMzNiBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtaW50ZXJwb2xhdGlvbi8xLjI0L3BsZXh1cy1pbnRlcnBvbGF0aW9uLTEuMjQuamFyCisyMDE5LTEyLTA5IDE1OjQ0OjUyLDM1OCBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1pbnRlcnBvbGF0aW9uLzEuMjQvcGxleHVzLWludGVycG9sYXRpb24tMS4yNC5qYXIKKzIwMTktMTItMDkgMTU6NDQ6NTIsMzY2IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb20vdGhvdWdodHdvcmtzL3hzdHJlYW0veHN0cmVhbS8xLjQuMTAveHN0cmVhbS0xLjQuMTAuamFyCisyMDE5LTEyLTA5IDE1OjQ0OjUyLDQyMyBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb20vdGhvdWdodHdvcmtzL3hzdHJlYW0veHN0cmVhbS8xLjQuMTAveHN0cmVhbS0xLjQuMTAuamFyCisyMDE5LTEyLTA5IDE1OjQ0OjUyLDQzMiBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtdXRpbHMvMy4xLjAvcGxleHVzLXV0aWxzLTMuMS4wLmphcgorMjAxOS0xMi0wOSAxNTo0NDo1Miw0NjQgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtdXRpbHMvMy4xLjAvcGxleHVzLXV0aWxzLTMuMS4wLmphcgorMjAxOS0xMi0wOSAxNTo0NDo1Miw0NzIgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vc2hhcmVkL21hdmVuLWZpbHRlcmluZy8zLjEuMS9tYXZlbi1maWx0ZXJpbmctMy4xLjEuamFyCisyMDE5LTEyLTA5IDE1OjQ0OjUyLDQ4OSBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3NoYXJlZC9tYXZlbi1maWx0ZXJpbmcvMy4xLjEvbWF2ZW4tZmlsdGVyaW5nLTMuMS4xLmphcgorMjAxOS0xMi0wOSAxNTo0NDo1Miw0OTcgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vc2hhcmVkL21hdmVuLW1hcHBpbmcvMy4wLjAvbWF2ZW4tbWFwcGluZy0zLjAuMC5qYXIKKzIwMTktMTItMDkgMTU6NDQ6NTIsNTEyIFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vc2hhcmVkL21hdmVuLW1hcHBpbmcvMy4wLjAvbWF2ZW4tbWFwcGluZy0zLjAuMC5qYXIKKzIwMTktMTItMDkgMTU6NDQ6NTUsNDIzIFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBBZGRpbmcgc291cmNlIGZvbGRlciAvR2xlbW1TZXJ2aWNlczIvc3JjCisyMDE5LTEyLTA5IDE1OjQ0OjU1LDQyNCBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gTm90IGFkZGluZyBzb3VyY2UgZm9sZGVyIC9HbGVtbVNlcnZpY2VzMi9zcmMvdGVzdC9qYXZhIGJlY2F1c2UgaXQgb3ZlcmxhcHMgd2l0aCAvR2xlbW1TZXJ2aWNlczIvc3JjCisyMDE5LTEyLTA5IDE1OjQ0OjU2LDIzMyBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5wLlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciAtIFVwZGF0ZSBzdGFydGVkCisyMDE5LTEyLTA5IDE1OjQ0OjU2LDcxOCBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IEdsZW1tU2VydmljZXMyOkdsZW1tU2VydmljZXMyOjAuMC4xLVNOQVBTSE9UIEAgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyXHBvbS54bWwuCisyMDE5LTEyLTA5IDE1OjQ0OjU3LDY5NCBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gQWRkaW5nIHNvdXJjZSBmb2xkZXIgL0dsZW1tU2VydmljZXMyL3NyYworMjAxOS0xMi0wOSAxNTo0NDo1Nyw2OTYgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIE5vdCBhZGRpbmcgc291cmNlIGZvbGRlciAvR2xlbW1TZXJ2aWNlczIvc3JjL3Rlc3QvamF2YSBiZWNhdXNlIGl0IG92ZXJsYXBzIHdpdGggL0dsZW1tU2VydmljZXMyL3NyYworMjAxOS0xMi0wOSAxNTo0NDo1OCwyMjkgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTA5IDE1OjQ0OjU4LDI1MCBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5wLlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciAtIFVwZGF0ZSBjb21wbGV0ZWQ6IDIgc2VjCisyMDE5LTEyLTA5IDE1OjUxOjExLDYwNiBbV29ya2VyLTUyOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXMyOjAuMC4xLVNOQVBTSE9UIEAgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyXHBvbS54bWwuCisyMDE5LTEyLTA5IDE1OjUxOjEyLDUwOCBbV29ya2VyLTUyOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMDkgMTU6NTE6MTMsMDAzIFtXb3JrZXItNTM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTEyLTA5IDE1OjUxOjEzLDAwNSBbV29ya2VyLTUzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyXHNyY1xtYWluXHJlc291cmNlcworMjAxOS0xMi0wOSAxNTo1MToxMywwMDggW1dvcmtlci01MzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTItMDkgMTU6NTE6MTMsMDA5IFtXb3JrZXItNTM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczJcc3JjXHRlc3RccmVzb3VyY2VzCisyMDE5LTEyLTA5IDE1OjUxOjEzLDAxMCBbV29ya2VyLTUzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMDkgMTU6NTE6MTMsMDExIFtXb3JrZXItNTM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMDkgMTU6NTE6MTMsMDY2IFtXb3JrZXItNTM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTEyLTA5IDE1OjUxOjE4LDAxOCBbV29ya2VyLTU2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTA5IDE1OjUxOjE4LDAxOSBbV29ya2VyLTU2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTA5IDE1OjU4OjIyLDgwNCBbV29ya2VyLTU5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTA5IDE1OjU4OjIyLDgwNSBbV29ya2VyLTU5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTA5IDE2OjAzOjA5LDAyNiBbV29ya2VyLTU4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTA5IDE2OjAzOjA5LDAyNiBbV29ya2VyLTU4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTA5IDE2OjE2OjU1LDA0MSBbV29ya2VyLTY3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTA5IDE2OjE2OjU1LDA0MiBbV29ya2VyLTY3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTEwIDA5OjQ4OjUwLDc0MCBbV29ya2VyLTU6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDE5LTEyLTEwIDA5OjQ5OjQ0LDE2MCBbV29ya2VyLTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTAgMDk6NDk6NDQsMTYyIFtXb3JrZXItNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xMCAxMDozNjo0NSw3MjggW1dvcmtlci0yMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xMCAxMDozNjo0NSw3MjkgW1dvcmtlci0yMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xMCAxMDo1MDoyOSw2NDcgW1dvcmtlci0yODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xMCAxMDo1MDoyOSw2NDcgW1dvcmtlci0yODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xMCAxMTowMToxNCw0NjMgW1dvcmtlci0yOTogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDE5LTEyLTEwIDExOjAzOjEyLDYxMiBbV29ya2VyLTMwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTEwIDExOjAzOjEyLDYxMiBbV29ya2VyLTMwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTEwIDExOjA1OjM4LDE4NyBbV29ya2VyLTMzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTEwIDExOjA1OjM4LDE4OCBbV29ya2VyLTMzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTEwIDExOjA2OjE4LDkyMyBbV29ya2VyLTI5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTEwIDExOjA2OjE4LDkyNCBbV29ya2VyLTI5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTEwIDExOjA3OjIxLDM3MSBbV29ya2VyLTM0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTEwIDExOjA3OjIxLDM3MSBbV29ya2VyLTM0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTEwIDExOjEyOjQwLDkwNiBbV29ya2VyLTMyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTEwIDExOjEyOjQwLDkwNyBbV29ya2VyLTMyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTExIDEwOjE0OjA1LDAxNyBbV29ya2VyLTM3NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xMSAxMDoxNDowNSwwMTggW1dvcmtlci0zNzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTEgMTE6MDk6NDcsNDQ1IFtXb3JrZXItMzk0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTExIDExOjA5OjQ3LDQ0NSBbV29ya2VyLTM5NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xMSAxMjo1NTo0MywwNTAgW1dvcmtlci00Mzg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTEgMTI6NTU6NDMsMDUxIFtXb3JrZXItNDM4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTExIDEzOjA1OjUxLDQxMyBbV29ya2VyLTQ0MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xMSAxMzowNTo1MSw0MTQgW1dvcmtlci00NDE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTEgMTM6MDg6NTksMDYwIFtXb3JrZXItNDQzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTExIDEzOjA4OjU5LDA2MCBbV29ya2VyLTQ0MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xMSAxNDo1MjoxNywxMzUgW1dvcmtlci00Nzk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTEgMTQ6NTI6MTcsMTM1IFtXb3JrZXItNDc5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTExIDE1OjAwOjM0LDgyNyBbV29ya2VyLTQ4MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xMSAxNTowMDozNCw4MjggW1dvcmtlci00ODI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTIgMTE6Mjg6MDEsODM1IFtXb3JrZXItNDogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMTktMTItMTIgMTE6MzE6MjUsODc1IFtXb3JrZXItMTQ6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAxOS0xMi0xMiAxMTo1MTo1NSwzNTggW1dvcmtlci0yMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xMiAxMTo1MTo1NSwzNjAgW1dvcmtlci0yMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xMiAxMTo1ODoxMiw1NjMgW1dvcmtlci0yMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xMiAxMTo1ODoxMiw1NjMgW1dvcmtlci0yMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xMiAxMjozNDoxMSw4MzQgW1dvcmtlci0zMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xMiAxMjozNDoxMSw4MzUgW1dvcmtlci0zMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xMiAxMjozODozNSwxOTQgW1dvcmtlci0zNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xMiAxMjozODozNSwxOTQgW1dvcmtlci0zNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xMiAxMjo0MzoyNywyMDQgW1dvcmtlci0zNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xMiAxMjo0MzoyNywyMDQgW1dvcmtlci0zNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xMiAxNDoyMDo0Niw0MjMgW1dvcmtlci00NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xMiAxNDoyMDo0Niw0MjMgW1dvcmtlci00NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xMiAxNDozNToxNiwxNzIgW1dvcmtlci01MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xMiAxNDozNToxNiwxNzMgW1dvcmtlci01MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xMiAxNDozODozNSw0MzYgW1dvcmtlci01MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xMiAxNDozODozNSw0MzYgW1dvcmtlci01MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xMiAxNToxMTo1OCwwMDkgW1dvcmtlci01ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xMiAxNToxMTo1OCwwMTAgW1dvcmtlci01ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xMiAxNToyMTowNSwwNDAgW1dvcmtlci01OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xMiAxNToyMTowNSwwNDAgW1dvcmtlci01OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xMiAxNToyMjowNyw0MzcgW1dvcmtlci02NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xMiAxNToyMjowNyw0MzggW1dvcmtlci02NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xMiAxNToyMzozOSw3NTUgW1dvcmtlci02NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xMiAxNToyMzozOSw3NTUgW1dvcmtlci02NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xMiAxNToyNzozMywxMDQgW1dvcmtlci02NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xMiAxNToyNzozMywxMDUgW1dvcmtlci02NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xMiAxNTozMTowNiwyMjIgW1dvcmtlci02ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xMiAxNTozMTowNiwyMjIgW1dvcmtlci02ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xMyAwOToxNjo1NCw0MDIgW1dvcmtlci0zNzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTMgMDk6MTY6NTQsNDAyIFtXb3JrZXItMzc1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTEzIDA5OjQxOjMzLDQ3NiBbV29ya2VyLTM4ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xMyAwOTo0MTozMyw0NzYgW1dvcmtlci0zODg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTMgMDk6NDY6MDYsNzQ3IFtXb3JrZXItMzkyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTEzIDA5OjQ2OjA2LDc0NyBbV29ya2VyLTM5MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xMyAwOTo1MzowOCw2MzAgW1dvcmtlci0zOTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTMgMDk6NTM6MDgsNjMwIFtXb3JrZXItMzk5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTEzIDA5OjU2OjQzLDI1OCBbV29ya2VyLTM5OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xMyAwOTo1Njo0MywyNTkgW1dvcmtlci0zOTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTMgMTA6MDU6NTcsODIwIFtXb3JrZXItNDA2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTEzIDEwOjA1OjU3LDgyMCBbV29ya2VyLTQwNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xMyAxMDowODoxNSw0NzIgW1dvcmtlci00MDg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTMgMTA6MDg6MTUsNDczIFtXb3JrZXItNDA4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTEzIDExOjI1OjU1LDk4NSBbV29ya2VyLTQxOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xMyAxMToyNTo1NSw5ODUgW1dvcmtlci00MTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTMgMTU6Mzc6MTYsMzQxIFtXb3JrZXItNDU5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTEzIDE1OjM3OjE2LDM0MiBbV29ya2VyLTQ1OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xMyAxNjoyMzowMyw4ODYgW1dvcmtlci00ODM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTMgMTY6MjM6MDMsODg2IFtXb3JrZXItNDgzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTEzIDE2OjI2OjAzLDg2NCBbV29ya2VyLTQ4MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xMyAxNjoyNjowMyw4NjQgW1dvcmtlci00ODM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTMgMTY6Mjc6MzMsNjE5IFtXb3JrZXItNDg5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTEzIDE2OjI3OjMzLDYxOSBbV29ya2VyLTQ4OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xNyAwOTozOToxMCw4NTYgW1dvcmtlci0wOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAxOS0xMi0xNyAwOTo0NDowMCw2MzMgW1dvcmtlci0xOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xNyAwOTo0NDowMCw2MzUgW1dvcmtlci0xOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xNyAwOTo1Mzo0NCwzNDUgW1dvcmtlci0xODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xNyAwOTo1Mzo0NCwzNDUgW1dvcmtlci0xODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xNyAxMTozODoxMywyNDIgW1dvcmtlci0zMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xNyAxMTozODoxMywyNDMgW1dvcmtlci0zMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xNyAxMTo0NjowNyw1NzEgW1dvcmtlci0zMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xNyAxMTo0NjowNyw1NzEgW1dvcmtlci0zMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xNyAxMTo0ODo0NCwxODYgW1dvcmtlci0zMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xNyAxMTo0ODo0NCwxODYgW1dvcmtlci0zMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xNyAxMjowNTowMSw3OTkgW1dvcmtlci0zNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xNyAxMjowNTowMSw4MDAgW1dvcmtlci0zNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xOCAwOTo0MjozMyw2NzIgW1dvcmtlci0zMzM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTggMDk6NDI6MzMsNjczIFtXb3JrZXItMzMzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTE5IDA5OjAzOjEzLDYyMyBbV29ya2VyLTQ6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgb3V0LW9mLWRhdGUuIFRyeWluZyB0byB1cGRhdGUuCisyMDE5LTEyLTE5IDA5OjEyOjQ0LDQ3MSBbV29ya2VyLTIwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTE5IDA5OjEyOjQ0LDQ3NCBbV29ya2VyLTIwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTE5IDA5OjIwOjE1LDM4NSBbV29ya2VyLTI0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTE5IDA5OjIwOjE1LDM4NiBbV29ya2VyLTI0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTE5IDA5OjI0OjE5LDExMSBbV29ya2VyLTI1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTE5IDA5OjI0OjE5LDExMSBbV29ya2VyLTI1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTE5IDA5OjMyOjEzLDM3NSBbV29ya2VyLTMwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTE5IDA5OjMyOjEzLDM3NSBbV29ya2VyLTMwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTE5IDA5OjM1OjA4LDA5MiBbV29ya2VyLTMwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTE5IDA5OjM1OjA4LDA5MiBbV29ya2VyLTMwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTE5IDA5OjM2OjQ5LDQxOSBbV29ya2VyLTM0OiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMTktMTItMTkgMDk6NDM6MDUsNTA3IFtXb3JrZXItMzM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTkgMDk6NDM6MDUsNTA3IFtXb3JrZXItMzM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTkgMDk6NTQ6MzgsMTkxIFtXb3JrZXItMzg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTkgMDk6NTQ6MzgsMTkyIFtXb3JrZXItMzg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTkgMDk6NTk6NDAsNjgxIFtXb3JrZXItNDE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTkgMDk6NTk6NDAsNjgxIFtXb3JrZXItNDE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTkgMTQ6NDc6NDcsMzQ1IFtXb3JrZXItNjA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTkgMTQ6NDc6NDcsMzQ1IFtXb3JrZXItNjA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTkgMTQ6NDk6MTAsMjczIFtXb3JrZXItNTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTkgMTQ6NDk6MTAsMjc0IFtXb3JrZXItNTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTkgMTQ6NTA6MjAsMjU2IFtXb3JrZXItNjA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTkgMTQ6NTA6MjAsMjU2IFtXb3JrZXItNjA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTkgMTQ6NTM6MDIsOTU2IFtXb3JrZXItNjQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTkgMTQ6NTM6MDIsOTU2IFtXb3JrZXItNjQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTkgMTU6Mjc6MTEsMTMxIFtXb3JrZXItNzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTkgMTU6Mjc6MTEsMTMxIFtXb3JrZXItNzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTkgMTU6Mzc6NTAsMTk1IFtXb3JrZXItNzg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTkgMTU6Mzc6NTAsMTk2IFtXb3JrZXItNzg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTkgMTU6NDI6MDQsMDM4IFtXb3JrZXItODM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTkgMTU6NDI6MDQsMDM4IFtXb3JrZXItODM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTkgMTU6NTA6NDYsOTg4IFtXb3JrZXItODQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTkgMTU6NTA6NDYsOTg4IFtXb3JrZXItODQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTkgMTU6NTI6MDgsMzUyIFtXb3JrZXItODQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTkgMTU6NTI6MDgsMzUzIFtXb3JrZXItODQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTkgMTU6NTU6MDIsOTk5IFtXb3JrZXItOTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTkgMTU6NTU6MDIsOTk5IFtXb3JrZXItOTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTkgMTY6MjA6MDksODc5IFtXb3JrZXItOTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTkgMTY6MjA6MDksODgwIFtXb3JrZXItOTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTkgMTY6MjQ6NDgsNjU3IFtXb3JrZXItOTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTkgMTY6MjQ6NDgsNjU4IFtXb3JrZXItOTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTkgMTY6MzA6MTgsMjkyIFtXb3JrZXItMTAyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTE5IDE2OjMwOjE4LDI5MyBbV29ya2VyLTEwMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xOSAxNjozMjoyOCwwODAgW1dvcmtlci0xMDQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTkgMTY6MzI6MjgsMDgxIFtXb3JrZXItMTA0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTE5IDE2OjQ5OjMzLDQxNSBbV29ya2VyLTEwODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xOSAxNjo0OTozMyw0MTUgW1dvcmtlci0xMDg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTkgMTY6NTA6MzMsNTE5IFtXb3JrZXItMTAxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTE5IDE2OjUwOjMzLDUxOSBbV29ya2VyLTEwMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0wOCAwOTowOToyMiw5OTUgW1dvcmtlci0zOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMC0wMS0wOCAxNDoxNDo0OSwyNzEgW1dvcmtlci04NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0wOCAxNDoxNDo0OSwyNzEgW1dvcmtlci04NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0wOCAxNDo1Mjo0NiwxOTEgW1dvcmtlci04NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0wOCAxNDo1Mjo0NiwxOTEgW1dvcmtlci04NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0wOCAxNDo1NToyOSwzNzAgW1dvcmtlci05NDogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzMjowLjAuMS1TTkFQU0hPVCBAIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMlxwb20ueG1sLgorMjAyMC0wMS0wOCAxNDo1NTozMSwxMjAgW1dvcmtlci05NDogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTA4IDE0OjU1OjMyLDAyNiBbV29ya2VyLTk5OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wMS0wOCAxNDo1NTozMiwwMjYgW1dvcmtlci05OTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMlxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDEtMDggMTQ6NTU6MzIsMDQyIFtXb3JrZXItOTk6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTAxLTA4IDE0OjU1OjMyLDA0MiBbV29ya2VyLTk5OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wMS0wOCAxNDo1NTozMiwwNDIgW1dvcmtlci05OTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTA4IDE0OjU1OjMyLDA0MiBbV29ya2VyLTk5OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTA4IDE0OjU1OjMyLDEwNCBbV29ya2VyLTk5OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wMS0wOCAxNDo1OToxOCw0MjUgW1dvcmtlci0xMDA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMDggMTQ6NTk6MTgsNDI1IFtXb3JrZXItMTAwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTA4IDE1OjMzOjIyLDQ5NCBbV29ya2VyLTExMDogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTA4IDE1OjMzOjU1LDI5NyBbV29ya2VyLTExMDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDEtMDggMTU6MzM6NTUsMzEzIFtXb3JrZXItMTEwOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wMS0wOCAxNTozMzo1NSwzMTMgW1dvcmtlci0xMTA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTAxLTA4IDE1OjMzOjU1LDMxMyBbV29ya2VyLTExMDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMlxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDEtMDggMTU6MzM6NTUsMzEzIFtXb3JrZXItMTEwOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMDggMTU6MzM6NTUsMzEzIFtXb3JrZXItMTEwOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTA4IDE1OjMzOjU1LDM1OSBbV29ya2VyLTExMDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDEtMDkgMDg6NTU6MzgsMjMwIFtXb3JrZXItMzExOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTA5IDA4OjU1OjM4LDIzMCBbV29ya2VyLTMxMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0wOSAwOToxMzo1MCw1MDYgW1dvcmtlci0zMTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMDkgMDk6MTM6NTAsNTA2IFtXb3JrZXItMzE2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTA5IDA5OjE4OjI1LDIyOSBbV29ya2VyLTMxNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0wOSAwOToxODoyNSwyMjkgW1dvcmtlci0zMTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMDkgMDk6NDU6NDksNDM4IFtXb3JrZXItMzI1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTA5IDA5OjQ1OjQ5LDQzOCBbV29ya2VyLTMyNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0wOSAxMTozOToyMyw1OTkgW1dvcmtlci0zNjI6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMC0wMS0wOSAxMTo0NDoxMSw0MzggW1dvcmtlci0zNjE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMDkgMTE6NDQ6MTEsNDM4IFtXb3JrZXItMzYxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTA5IDExOjUyOjQzLDg0NiBbV29ya2VyLTE6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgb3V0LW9mLWRhdGUuIFRyeWluZyB0byB1cGRhdGUuCisyMDIwLTAxLTA5IDEzOjQxOjE2LDY5NyBbV29ya2VyLTI3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTA5IDEzOjQxOjE2LDY5NyBbV29ya2VyLTI3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTA5IDE0OjIwOjUxLDUxMiBbV29ya2VyLTQ4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTA5IDE0OjIwOjUxLDUxMiBbV29ya2VyLTQ4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTA5IDE0OjMwOjIzLDc4NSBbV29ya2VyLTUxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTA5IDE0OjMwOjIzLDc4NSBbV29ya2VyLTUxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTA5IDE0OjM1OjA0LDgzMCBbV29ya2VyLTQwOiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjAtMDEtMDkgMTU6MDQ6MTAsMzY1IFtXb3JrZXItNjU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMDkgMTU6MDQ6MTAsMzY1IFtXb3JrZXItNjU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMDkgMTU6MDY6NTAsNzcyIFtXb3JrZXItNjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMDkgMTU6MDY6NTAsNzcyIFtXb3JrZXItNjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMDkgMTU6MTk6MzQsMjUwIFtXb3JrZXItNjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMDkgMTU6MTk6MzQsMjUwIFtXb3JrZXItNjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTAgMTM6MjM6NTQsNjI0IFtXb3JrZXItMzY3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTEwIDEzOjIzOjU0LDYyNCBbV29ya2VyLTM2NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xMCAxMzo1ODoxNSwyNzUgW1dvcmtlci0zODI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTAgMTM6NTg6MTUsMjc1IFtXb3JrZXItMzgyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTEzIDA5OjQ3OjIxLDQ1MiBbV29ya2VyLTQ6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgb3V0LW9mLWRhdGUuIFRyeWluZyB0byB1cGRhdGUuCisyMDIwLTAxLTEzIDEwOjM4OjA5LDA2OSBbV29ya2VyLTMyOiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjAtMDEtMTMgMTE6MTc6NDgsNDY0IFtXb3JrZXItMzk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTMgMTE6MTc6NDgsNDY0IFtXb3JrZXItMzk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTMgMTE6MjA6MTQsMzA0IFtXb3JrZXItMzk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTMgMTE6MjA6MTQsMzA0IFtXb3JrZXItMzk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTMgMTE6MjU6MTYsODk2IFtXb3JrZXItNDg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTMgMTE6MjU6MTYsODk2IFtXb3JrZXItNDg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTMgMTE6Mjg6MzgsNTg4IFtXb3JrZXItNDk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTMgMTE6Mjg6MzgsNTg4IFtXb3JrZXItNDk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTMgMTE6MzA6NDEsNDkyIFtXb3JrZXItNDg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTMgMTE6MzA6NDEsNDkyIFtXb3JrZXItNDg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTMgMTE6NTY6NDAsMDc0IFtXb3JrZXItNjU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTMgMTE6NTY6NDAsMDc0IFtXb3JrZXItNjU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTMgMTI6MDE6MDgsMjg3IFtXb3JrZXItNjk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTMgMTI6MDE6MDgsMjg3IFtXb3JrZXItNjk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTMgMTI6MDE6MjcsMTk5IFtXb3JrZXItNDk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTMgMTI6MDE6MjcsMTk5IFtXb3JrZXItNDk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTMgMTI6MDU6MzMsOTIzIFtXb3JrZXItNzM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTMgMTI6MDU6MzMsOTIzIFtXb3JrZXItNzM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTMgMTI6MDY6MzgsODk0IFtXb3JrZXItNjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTMgMTI6MDY6MzgsODk0IFtXb3JrZXItNjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTMgMTM6NDI6NDgsMjc2IFtXb3JrZXItOTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTMgMTM6NDI6NDgsMjc2IFtXb3JrZXItOTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTMgMTM6NDU6MDgsMDE3IFtXb3JrZXItODg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTMgMTM6NDU6MDgsMDE3IFtXb3JrZXItODg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTMgMTM6NTM6MzUsNTA5IFtXb3JrZXItODk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTMgMTM6NTM6MzUsNTA5IFtXb3JrZXItODk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTMgMTQ6MDU6MzAsNTM0IFtXb3JrZXItOTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTMgMTQ6MDU6MzAsNTM0IFtXb3JrZXItOTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTMgMTQ6MTM6MjAsNTMyIFtXb3JrZXItOTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTMgMTQ6MTM6MjAsNTMyIFtXb3JrZXItOTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTMgMTQ6MTY6MzEsMDUxIFtXb3JrZXItMTA4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTEzIDE0OjE2OjMxLDA1MSBbV29ya2VyLTEwODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xMyAxNDoxNzo0OSw0MTIgW1dvcmtlci05NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xMyAxNDoxNzo0OSw0MTIgW1dvcmtlci05NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xMyAxNDoxOToxNCwxNzEgW1dvcmtlci0xMDk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTMgMTQ6MTk6MTQsMTcxIFtXb3JrZXItMTA5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTEzIDE0OjMwOjAzLDkyOCBbV29ya2VyLTExNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xMyAxNDozMDowMyw5MjggW1dvcmtlci0xMTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTMgMTQ6NDE6MzcsODA0IFtXb3JrZXItMTE4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTEzIDE0OjQxOjM3LDgwNCBbV29ya2VyLTExODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xMyAxNDo0OTozMyw3NzAgW1dvcmtlci0xMjM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTMgMTQ6NDk6MzMsNzcwIFtXb3JrZXItMTIzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTEzIDE1OjEyOjI4LDg2MiBbV29ya2VyLTEzMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xMyAxNToxMjoyOCw4NjIgW1dvcmtlci0xMzE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTMgMTU6MTQ6MjksNDIwIFtXb3JrZXItMTMyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTEzIDE1OjE0OjI5LDQyMCBbV29ya2VyLTEzMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xMyAxNTozNjowNCw1NzAgW1dvcmtlci0xMzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTMgMTU6MzY6MDQsNTcwIFtXb3JrZXItMTMyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTE0IDA5OjA0OjQ4LDMxNyBbV29ya2VyLTMzOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNCAwOTowNDo0OCwzMTcgW1dvcmtlci0zMzk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTQgMTI6MDg6MDIsMDkwIFtXb3JrZXItNDI0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTE0IDEyOjA4OjAyLDA5MCBbV29ya2VyLTQyNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xNCAxMjoxMDowNiwwNTggW1dvcmtlci00MjI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTQgMTI6MTA6MDYsMDU4IFtXb3JrZXItNDIyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTE0IDEyOjE0OjM1LDIzMCBbV29ya2VyLTQzMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNCAxMjoxNDozNSwyMzAgW1dvcmtlci00MzE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTQgMTI6MjI6MjQsODE0IFtXb3JrZXItNDI5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTE0IDEyOjIyOjI0LDgxNCBbV29ya2VyLTQyOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xNCAxMjozMTowNiw3NTUgW1dvcmtlci00MzQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTQgMTI6MzE6MDYsNzU1IFtXb3JrZXItNDM0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTE1IDA5OjAwOjA3LDA0MiBbV29ya2VyLTc2MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNSAwOTowMDowNywwNDIgW1dvcmtlci03NjI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTUgMDk6MTM6MjEsNjIyIFtXb3JrZXItNzcwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTE1IDA5OjEzOjIxLDYyMiBbV29ya2VyLTc3MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xNSAwOToyNDowMyw5NzUgW1dvcmtlci03NzM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTUgMDk6MjQ6MDMsOTkxIFtXb3JrZXItNzczOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTE1IDA5OjMwOjMwLDkwMCBbV29ya2VyLTc3NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNSAwOTozMDozMCw5MDAgW1dvcmtlci03NzY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTUgMDk6MzU6NTksNzc0IFtXb3JrZXItNzc3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTE1IDA5OjM1OjU5LDc5MCBbV29ya2VyLTc3NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xNSAxMDowMjoyOSw0NzMgW1dvcmtlci03OTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTUgMTA6MDI6MjksNDczIFtXb3JrZXItNzk3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTE1IDEwOjEwOjM2LDQ0MCBbV29ya2VyLTc5NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNSAxMDoxMDozNiw0NDAgW1dvcmtlci03OTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTUgMTA6NDA6NDksMDI3IFtXb3JrZXItODA4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTE1IDEwOjQwOjQ5LDAyNyBbV29ya2VyLTgwODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xNSAxMDo0MTo1MSw1OTYgW1dvcmtlci04MDY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTUgMTA6NDE6NTEsNTk2IFtXb3JrZXItODA2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTE1IDEwOjUxOjI3LDIyNyBbV29ya2VyLTgxMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNSAxMDo1MToyNywyMjcgW1dvcmtlci04MTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTUgMTQ6Mzk6MTgsNzMyIFtXb3JrZXItODcxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTE1IDE0OjM5OjE4LDczMiBbV29ya2VyLTg3MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xNSAxNTowMzozMywyMjggW1dvcmtlci04ODc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTUgMTU6MDM6MzMsMjI4IFtXb3JrZXItODg3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTE1IDE1OjA3OjUyLDQzMSBbV29ya2VyLTg3NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNSAxNTowNzo1Miw0MzEgW1dvcmtlci04NzY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTUgMTU6NTA6NTUsMzcxIFtXb3JrZXItOTE3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTE1IDE1OjUwOjU1LDM3MSBbV29ya2VyLTkxNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xNSAxNTo1MzowMywyNzAgW1dvcmtlci05MTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTUgMTU6NTM6MDMsMjcwIFtXb3JrZXItOTE4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTE1IDE2OjAxOjM3LDg4NyBbV29ya2VyLTkyNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNSAxNjowMTozNyw4ODcgW1dvcmtlci05MjQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTUgMTc6MTk6NDQsMDc4IFtXb3JrZXItOTU1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTE1IDE3OjE5OjQ0LDA3OCBbV29ya2VyLTk1NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xNSAxNzoyODo1MCw2NzQgW1dvcmtlci05NDk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTUgMTc6Mjg6NTAsNjc0IFtXb3JrZXItOTQ5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTE1IDE3OjM4OjQ1LDc2MiBbV29ya2VyLTk2NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNSAxNzozODo0NSw3NjIgW1dvcmtlci05NjU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTUgMTc6NDA6MTAsNzgzIFtXb3JrZXItOTY2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTE1IDE3OjQwOjEwLDc4MyBbV29ya2VyLTk2NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xNSAxNzo0NDozNiw3OTQgW1dvcmtlci05NzQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTUgMTc6NDQ6MzYsNzk0IFtXb3JrZXItOTc0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTE1IDE3OjQ4OjM3LDUzNSBbV29ya2VyLTk3NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNSAxNzo0ODozNyw1MzUgW1dvcmtlci05NzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTUgMTc6NTE6MTcsMjU3IFtXb3JrZXItOTY2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTE1IDE3OjUxOjE3LDI1NyBbV29ya2VyLTk2NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xNSAxNzo1Mzo1OCw4NTMgW1dvcmtlci05NzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTUgMTc6NTM6NTgsODUzIFtXb3JrZXItOTc1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTE1IDE3OjU5OjQwLDY2OSBbV29ya2VyLTk4MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNSAxNzo1OTo0MCw2NjkgW1dvcmtlci05ODI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTYgMDg6NDI6NDQsNTYwIFtXb3JrZXItMDogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjAtMDEtMTYgMDg6NTI6MzgsNTczIFtXb3JrZXItMjE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTYgMDg6NTI6MzgsNTc2IFtXb3JrZXItMjE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTYgMDg6NTU6MTEsNzczIFtXb3JrZXItMjI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTYgMDg6NTU6MTEsNzc0IFtXb3JrZXItMjI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTYgMDk6MjM6MjQsMTY5IFtXb3JrZXItMzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTYgMDk6MjM6MjQsMTY5IFtXb3JrZXItMzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTYgMDk6Mjg6NDMsMTEwIFtXb3JrZXItMzY6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMC0wMS0xNiAwOTozNzozNiw2NzEgW1dvcmtlci0zNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNiAwOTozNzozNiw2NzEgW1dvcmtlci0zNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xNiAxMToxMjo0Myw5MjYgW1dvcmtlci03MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNiAxMToxMjo0Myw5MjYgW1dvcmtlci03MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xNiAxMToyMTo0NiwxNDggW1dvcmtlci03NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNiAxMToyMTo0NiwxNDggW1dvcmtlci03NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xNiAxMToyNzoyMCw4NDkgW1dvcmtlci03NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNiAxMToyNzoyMCw4NDkgW1dvcmtlci03NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xNiAxMTo0MzoyMiwxMzkgW1dvcmtlci04MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNiAxMTo0MzoyMiwxMzkgW1dvcmtlci04MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xNiAxMzozMzowMiw3MzggW1dvcmtlci0xMDc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTYgMTM6MzM6MDIsNzM4IFtXb3JrZXItMTA3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTE3IDA5OjI5OjE1LDAxOSBbV29ya2VyLTM0MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNyAwOToyOToxNSwwMTkgW1dvcmtlci0zNDE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTcgMDk6MzQ6MjQsMTM2IFtXb3JrZXItMzQ2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTE3IDA5OjM0OjI0LDEzNiBbV29ya2VyLTM0NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xNyAwOTo0MzoyMyw3ODAgW1dvcmtlci0zNTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTcgMDk6NDM6MjMsNzgwIFtXb3JrZXItMzUyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTE3IDA5OjQ5OjQyLDcxMCBbV29ya2VyLTM1NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNyAwOTo0OTo0Miw3MTAgW1dvcmtlci0zNTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTcgMDk6NTM6MTEsMzgzIFtXb3JrZXItMzU3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTE3IDA5OjUzOjExLDM4MyBbV29ya2VyLTM1NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xNyAxMTo1Mjo0NCwwMjQgW1dvcmtlci0zNzg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTcgMTE6NTI6NDQsMDI0IFtXb3JrZXItMzc4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTE3IDExOjUzOjI1LDY2OCBbV29ya2VyLTM3NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNyAxMTo1MzoyNSw2NjggW1dvcmtlci0zNzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTcgMTM6MzI6NDgsMjQxIFtXb3JrZXItMzk1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTE3IDEzOjMyOjQ4LDI0MSBbV29ya2VyLTM5NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0yMCAwOToxMjozOCwxOTAgW1dvcmtlci0xOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMC0wMS0yMCAwOToyNjo1MiwyODEgW1dvcmtlci00OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMC0wMS0yMCAxMDowNDoyOCw3MDUgW1dvcmtlci0yNDogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIwLTAxLTIwIDEwOjA1OjA2LDc5MSBbV29ya2VyLTIyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTIwIDEwOjA1OjA2LDgwNiBbV29ya2VyLTIyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTIwIDEwOjE4OjAxLDk2NyBbV29ya2VyLTMwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTIwIDEwOjE4OjAxLDk2NyBbV29ya2VyLTMwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTIzIDExOjUyOjAzLDg2NSBbV29ya2VyLTM6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgb3V0LW9mLWRhdGUuIFRyeWluZyB0byB1cGRhdGUuCisyMDIwLTAxLTI0IDA4OjU3OjA2LDYyMiBbV29ya2VyLTIzNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0yNCAwODo1NzowNiw2MzggW1dvcmtlci0yMzQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMjQgMDk6MzI6MTcsODIxIFtXb3JrZXItMjUzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTI0IDA5OjMyOjE3LDg1MiBbV29ya2VyLTI1MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0yNCAwOTozMjozNywzNTYgW1dvcmtlci0yNTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMjQgMDk6MzI6MzcsMzU2IFtXb3JrZXItMjU0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTI0IDA5OjM0OjU2LDI4OSBbV29ya2VyLTI1ODogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIwLTAxLTI0IDEwOjAxOjM4LDI1NyBbV29ya2VyLTI3MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0yNCAxMDowMTozOCwyNTcgW1dvcmtlci0yNzA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMjQgMTA6MDM6MzEsODI2IFtXb3JrZXItMjcyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTI0IDEwOjAzOjMxLDgyNiBbV29ya2VyLTI3MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0yNCAxMDowNDo0NSw1MjAgW1dvcmtlci0yNzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMjQgMTA6MDQ6NDUsNTIwIFtXb3JrZXItMjcyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTI0IDEwOjQ4OjQ4LDY4NSBbV29ya2VyLTI2ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0yNCAxMDo0ODo0OCw2ODUgW1dvcmtlci0yNjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMjQgMTA6NTU6NTIsMTU1IFtXb3JrZXItMjg0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTI0IDEwOjU1OjUyLDE1NSBbV29ya2VyLTI4NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0yNCAxMTowMTowOCw5ODEgW1dvcmtlci0yOTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMjQgMTE6MDE6MDgsOTgxIFtXb3JrZXItMjkwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTI0IDExOjA1OjIxLDM0NSBbV29ya2VyLTI2ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0yNCAxMTowNToyMSwzNDUgW1dvcmtlci0yNjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMjQgMTE6MTc6NDAsNzUyIFtXb3JrZXItMzA0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTI0IDExOjE3OjQwLDc1MiBbV29ya2VyLTMwNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0yNCAxMToxOTo0Myw5NTggW1dvcmtlci0zMDI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMjQgMTE6MTk6NDMsOTU4IFtXb3JrZXItMzAyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTI0IDExOjIyOjAwLDA4NyBbV29ya2VyLTMwNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0yNCAxMToyMjowMCwwODcgW1dvcmtlci0zMDY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMjQgMTE6MjM6MDgsNzgzIFtXb3JrZXItMzAxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTI0IDExOjIzOjA4LDc4MyBbV29ya2VyLTMwMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0yNCAxMTozNjo1Nyw3NjQgW1dvcmtlci0zMDk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMjQgMTE6MzY6NTcsNzY0IFtXb3JrZXItMzA5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTI0IDEyOjE4OjE3LDkyMSBbV29ya2VyLTMxODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0yNCAxMjoxODoxNyw5MjEgW1dvcmtlci0zMTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMjQgMTM6MDg6NTksODA5IFtXb3JrZXItMzMzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTI0IDEzOjA4OjU5LDgyNSBbV29ya2VyLTMzMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0yNCAxMzoxMTowOSw5NjcgW1dvcmtlci0zMzQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMjQgMTM6MTE6MDksOTY3IFtXb3JrZXItMzM0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTI0IDEzOjIwOjQyLDg3NSBbV29ya2VyLTM0MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0yNCAxMzoyMDo0Miw4NzUgW1dvcmtlci0zNDI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMjQgMTM6Mjc6MjcsNzEzIFtXb3JrZXItMzQyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTI0IDEzOjI3OjI3LDcxMyBbV29ya2VyLTM0MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0yNCAxMzoyOTowMSwzNzUgW1dvcmtlci0zNDc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMjQgMTM6Mjk6MDEsMzc1IFtXb3JrZXItMzQ3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTI0IDEzOjQ0OjE0LDYyOSBbV29ya2VyLTM1MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0yNCAxMzo0NDoxNCw2MjkgW1dvcmtlci0zNTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMjQgMTQ6MDA6MTMsNzg1IFtXb3JrZXItMzU2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTI0IDE0OjAwOjEzLDc4NSBbV29ya2VyLTM1NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0yNCAxNDowMzo1Niw0MDAgW1dvcmtlci0zNjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMjQgMTQ6MDM6NTYsNDAwIFtXb3JrZXItMzY3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTI0IDE0OjA1OjE5LDIxMCBbV29ya2VyLTM2ODogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzMjowLjAuMS1TTkFQU0hPVCBAIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMlxwb20ueG1sLgorMjAyMC0wMS0yNCAxNDowNToyMSwxMDEgW1dvcmtlci0zNjg6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0yNCAxNDowNToyMiwxMDEgW1dvcmtlci0zNjQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTAxLTI0IDE0OjA1OjIyLDEwMSBbV29ya2VyLTM2NDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMlxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDEtMjQgMTQ6MDU6MjIsMTAxIFtXb3JrZXItMzY0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wMS0yNCAxNDowNToyMiwxMDEgW1dvcmtlci0zNjQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczJcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTAxLTI0IDE0OjA1OjIyLDEwMSBbV29ya2VyLTM2NDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTI0IDE0OjA1OjIyLDEwMSBbV29ya2VyLTM2NDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0yNCAxNDowNToyMiwxNzkgW1dvcmtlci0zNjQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTAxLTI0IDE0OjA1OjMyLDEwMCBbV29ya2VyLTM3MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0yNCAxNDowNTozMiwxMDAgW1dvcmtlci0zNzE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMjQgMTQ6MDc6MzEsODY3IFtXb3JrZXItMzc1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTI0IDE0OjA3OjMxLDg2NyBbV29ya2VyLTM3NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0yNCAxNDoxNTowNiwwMjggW1dvcmtlci0zNzg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMjQgMTQ6MTU6MDYsMDI4IFtXb3JrZXItMzc4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTI0IDE0OjE3OjU4LDUwOCBbV29ya2VyLTM4NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0yNCAxNDoxNzo1OCw1MDggW1dvcmtlci0zODc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMjQgMTQ6Mzk6MzUsNzMwIFtXb3JrZXItMzkyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTI0IDE0OjM5OjM1LDczMCBbV29ya2VyLTM5MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0yNCAxNDo0MTo0MCwxMDIgW1dvcmtlci0zODI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMjQgMTQ6NDE6NDAsMTAyIFtXb3JrZXItMzgyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTI0IDE0OjUxOjUzLDAzNiBbV29ya2VyLTM5NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0yNCAxNDo1MTo1MywwMzYgW1dvcmtlci0zOTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMjcgMTE6MDE6MDgsOTg5IFtXb3JrZXItMzogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjAtMDEtMjcgMTQ6MDc6NDUsNjk3IFtXb3JrZXItNTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMjcgMTQ6MDc6NDUsNjk3IFtXb3JrZXItNTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMjcgMTQ6NTU6NDYsNTE3IFtXb3JrZXItNzk6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMC0wMS0yNyAxNTo1MDoxNyw3NzYgW1dvcmtlci0xMTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMjcgMTU6NTA6MTcsNzc2IFtXb3JrZXItMTEyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTI3IDE1OjU1OjAzLDI2MyBbV29ya2VyLTExOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0yNyAxNTo1NTowMywyNjMgW1dvcmtlci0xMTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMjcgMTY6NDg6NDUsOTI1IFtXb3JrZXItMTMxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTI3IDE2OjQ4OjQ1LDkyNSBbV29ya2VyLTEzMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0yOCAwOTozNjozMSw2NDYgW1dvcmtlci0xOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMC0wMS0yOCAwOTo1Njo1OCw2NjMgW1dvcmtlci01OiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjAtMDEtMjggMTI6MDM6MDksMzQ1IFtXb3JrZXItNTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMjggMTI6MDM6MDksMzQ1IFtXb3JrZXItNTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMzAgMDg6Mzk6MzEsNjIyIFtXb3JrZXItNDkwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTMwIDA4OjM5OjMxLDYyMiBbV29ya2VyLTQ5MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0zMCAwOToxNDoxMyw1MzcgW1dvcmtlci01MTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMzAgMDk6MTQ6MTMsNTM3IFtXb3JrZXItNTEyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTMwIDA5OjI0OjAzLDUxNiBbV29ya2VyLTUyMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0zMCAwOToyNDowMyw1MTYgW1dvcmtlci01MjA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMzAgMTA6NDI6MzUsODAxIFtXb3JrZXItNTMwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTMwIDEwOjQyOjM1LDgwMSBbV29ya2VyLTUzMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0zMCAxMDo1OTo1OCwyNDIgW1dvcmtlci01NDY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMzAgMTA6NTk6NTgsMjQyIFtXb3JrZXItNTQ2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTMwIDEzOjMyOjAwLDIzNCBbV29ya2VyLTU3NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0zMCAxMzozMjowMCwyMzQgW1dvcmtlci01NzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMzAgMTM6Mzg6NDcsMjI3IFtXb3JrZXItNTc0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTMwIDEzOjM4OjQ3LDIyNyBbV29ya2VyLTU3NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0zMCAxMzo0MTozNCw5NzMgW1dvcmtlci01ODE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMzAgMTM6NDE6MzQsOTczIFtXb3JrZXItNTgxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTMwIDEzOjQzOjM5LDU2MyBbV29ya2VyLTU4MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0zMCAxMzo0MzozOSw1NjMgW1dvcmtlci01ODM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMzAgMTM6NDc6MjksMzY0IFtXb3JrZXItNTg1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTMwIDEzOjQ3OjI5LDM2NCBbV29ya2VyLTU4NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0zMSAwOTo1MzoxMCw5NTQgW1dvcmtlci04MDc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMzEgMDk6NTM6MTAsOTU0IFtXb3JrZXItODA3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTMxIDEwOjAzOjM2LDA0NCBbV29ya2VyLTgxMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0zMSAxMDowMzozNiwwNDQgW1dvcmtlci04MTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDItMTEgMTE6MDY6NDQsMjc3IFtXb3JrZXItNjogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjAtMDItMTEgMTE6MjY6NDcsNzIzIFtXb3JrZXItMjU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDItMTEgMTE6MjY6NDcsNzIzIFtXb3JrZXItMjU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDItMTEgMTE6NDA6MTQsMjg0IFtXb3JrZXItMzQ6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMC0wMi0xMSAxMTo0NTozOSw2MDMgW1dvcmtlci0zODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMi0xMSAxMTo0NTozOSw2MDMgW1dvcmtlci0zODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMi0xMSAxMTo0Nzo0OCw4NTAgW1dvcmtlci00MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMi0xMSAxMTo0Nzo0OCw4NTAgW1dvcmtlci00MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMi0xNCAxNDoxODo1NSw3ODYgW1dvcmtlci0yOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMC0wMi0xNyAwOTozMDoyNSw1NjIgW1dvcmtlci0zOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMC0wMi0xNyAwOTo0NDoyMCwzOTggW1dvcmtlci0yMzogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIwLTAyLTE3IDA5OjQ1OjE2LDg1OCBbV29ya2VyLTIzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAyLTE3IDA5OjQ1OjE2LDg1OSBbV29ya2VyLTIzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAyLTE3IDEwOjAxOjI4LDQ5MyBbV29ya2VyLTMyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAyLTE3IDEwOjAxOjI4LDQ5MyBbV29ya2VyLTMyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAyLTE3IDEwOjM3OjM0LDQyOSBbV29ya2VyLTUzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAyLTE3IDEwOjM3OjM0LDQyOSBbV29ya2VyLTUzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAyLTE3IDExOjA2OjA3LDU3MiBbV29ya2VyLTY3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAyLTE3IDExOjA2OjA3LDU3MiBbV29ya2VyLTY3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAyLTE3IDEzOjQ3OjM5LDc4MCBbV29ya2VyLTk4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAyLTE3IDEzOjQ3OjM5LDc4MCBbV29ya2VyLTk4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAyLTE3IDE0OjAzOjM4LDg1MyBbV29ya2VyLTU6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTAyLTE3IDE0OjE2OjU0LDMxOCBbV29ya2VyLTE2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAyLTE3IDE0OjE2OjU0LDMyMCBbV29ya2VyLTE2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAyLTE3IDE0OjIwOjE5LDc4MyBbV29ya2VyLTIzOiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjAtMDItMTcgMTQ6MjY6MTQsNDIzIFtXb3JrZXItMjQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDItMTcgMTQ6MjY6MTQsNDIzIFtXb3JrZXItMjQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDItMTcgMTU6MzM6NTQsMTI3IFtXb3JrZXItNDg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDItMTcgMTU6MzM6NTQsMTI3IFtXb3JrZXItNDg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDItMTcgMTU6MzU6NDAsNjcyIFtXb3JrZXItNDc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDItMTcgMTU6MzU6NDAsNjcyIFtXb3JrZXItNDc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDItMTggMTI6MTI6MDEsNDIzIFtXb3JrZXItMjE2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAyLTE4IDEyOjEyOjAxLDQyMyBbV29ya2VyLTIxNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMi0xOCAxMjoxNDozNSw2NjggW1dvcmtlci0yMDk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDItMTggMTI6MTQ6MzUsNjY4IFtXb3JrZXItMjA5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAyLTE4IDEyOjE5OjUyLDI4OSBbV29ya2VyLTIxNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMi0xOCAxMjoxOTo1MiwyODkgW1dvcmtlci0yMTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDItMTggMTI6MjU6MjksMDQyIFtXb3JrZXItMjIxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAyLTE4IDEyOjI1OjI5LDA0MiBbV29ya2VyLTIyMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMi0xOCAxMjozNTo0OSw2NjEgW1dvcmtlci0yMjE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDItMTggMTI6MzU6NDksNjYxIFtXb3JrZXItMjIxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAyLTIwIDExOjQ2OjU2LDExNiBbV29ya2VyLTcxNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMi0yMCAxMTo0Njo1NiwxMTYgW1dvcmtlci03MTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDItMjAgMTI6MDM6MzgsNjQ3IFtXb3JrZXItNzE3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAyLTIwIDEyOjAzOjM4LDY0NyBbV29ya2VyLTcxNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMi0yMCAxMjowODo1MSwxODIgW1dvcmtlci03MzA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDItMjAgMTI6MDg6NTEsMTgyIFtXb3JrZXItNzMwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAyLTIwIDEyOjE5OjM2LDAxNSBbV29ya2VyLTczNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMi0yMCAxMjoxOTozNiwwMTUgW1dvcmtlci03MzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDItMjAgMTI6MjI6MzEsNjk5IFtXb3JrZXItNzMxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAyLTIwIDEyOjIyOjMxLDY5OSBbV29ya2VyLTczMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMi0yMCAxNTo0NjowMCw4ODEgW1dvcmtlci03Nzc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDItMjAgMTU6NDY6MDAsODgxIFtXb3JrZXItNzc3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAyLTIwIDE1OjQ4OjI0LDExNiBbV29ya2VyLTc3OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMi0yMCAxNTo0ODoyNCwxMTYgW1dvcmtlci03Nzk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDItMjAgMTU6NTM6NDMsNjkxIFtXb3JrZXItNzc5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAyLTIwIDE1OjUzOjQzLDY5MSBbV29ya2VyLTc3OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMi0yMCAxNTo1NDowMSw2MzIgW1dvcmtlci03Nzk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDItMjAgMTU6NTQ6MDEsNjMyIFtXb3JrZXItNzc5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAyLTIwIDE2OjA0OjA5LDE0OSBbV29ya2VyLTc4MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMi0yMCAxNjowNDowOSwxNDkgW1dvcmtlci03ODM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDItMjAgMTY6NDg6MTMsMDM0IFtXb3JrZXItNzk4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAyLTIwIDE2OjQ4OjEzLDAzNCBbV29ya2VyLTc5ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMi0yMCAxNjo1NToxNCw2NDQgW1dvcmtlci04MDM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDItMjAgMTY6NTU6MTQsNjQ0IFtXb3JrZXItODAzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAyLTIxIDEyOjUzOjQ5LDIyNSBbV29ya2VyLTEwNzE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDItMjEgMTI6NTM6NDksMjc5IFtXb3JrZXItMTA3MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMi0yMSAxMzowMDoxNSwzNjggW1dvcmtlci0xMDcyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAyLTIxIDEzOjAwOjE1LDM2OCBbV29ya2VyLTEwNzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDItMjEgMTM6MDc6MjEsODkyIFtXb3JrZXItMTA3NzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzMjowLjAuMS1TTkFQU0hPVCBAIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMlxwb20ueG1sLgorMjAyMC0wMi0yMSAxMzowNzoyNCwxMTYgW1dvcmtlci0xMDc3OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDItMjEgMTM6MDc6MjUsMDU5IFtXb3JrZXItMTA2OTogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb20vZmFzdGVyeG1sL2phY2tzb24vY29yZS9qYWNrc29uLWNvcmUvMi45LjYvamFja3Nvbi1jb3JlLTIuOS42LXNvdXJjZXMuamFyCisyMDIwLTAyLTIxIDEzOjA3OjI1LDUzMyBbV29ya2VyLTEwNjk6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb20vZmFzdGVyeG1sL2phY2tzb24vY29yZS9qYWNrc29uLWNvcmUvMi45LjYvamFja3Nvbi1jb3JlLTIuOS42LXNvdXJjZXMuamFyCisyMDIwLTAyLTIxIDEzOjA3OjI1LDU3NCBbV29ya2VyLTEwNzg6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTAyLTIxIDEzOjA3OjI1LDU4MiBbV29ya2VyLTEwNzg6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczJcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTAyLTIxIDEzOjA3OjI1LDU4NCBbV29ya2VyLTEwNzg6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTAyLTIxIDEzOjA3OjI1LDU4NCBbV29ya2VyLTEwNzg6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczJcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTAyLTIxIDEzOjA3OjI1LDU4NCBbV29ya2VyLTEwNzg6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzMgorMjAyMC0wMi0yMSAxMzowNzoyNSw1ODQgW1dvcmtlci0xMDc4OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTAyLTIxIDEzOjA3OjI1LDY2MiBbV29ya2VyLTEwNzg6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTAyLTIxIDEzOjA3OjI2LDI1NiBbV29ya2VyLTEwNjk6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmouaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iIC0gRG93bmxvYWRlZCBzb3VyY2VzIGZvciBjb20uZmFzdGVyeG1sLmphY2tzb24uY29yZTpqYWNrc29uLWNvcmU6Mi45LjYKKzIwMjAtMDItMjEgMTM6MDc6MjYsMzI2IFtXb3JrZXItMTA2OTogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb20vZmFzdGVyeG1sL2phY2tzb24vY29yZS9qYWNrc29uLWFubm90YXRpb25zLzIuOS42L2phY2tzb24tYW5ub3RhdGlvbnMtMi45LjYtc291cmNlcy5qYXIKKzIwMjAtMDItMjEgMTM6MDc6MjYsNDc5IFtXb3JrZXItMTA2OTogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbS9mYXN0ZXJ4bWwvamFja3Nvbi9jb3JlL2phY2tzb24tYW5ub3RhdGlvbnMvMi45LjYvamFja3Nvbi1hbm5vdGF0aW9ucy0yLjkuNi1zb3VyY2VzLmphcgorMjAyMC0wMi0yMSAxMzowNzoyNiw1NzAgW1dvcmtlci0xMDY5OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5qLmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiAtIERvd25sb2FkZWQgc291cmNlcyBmb3IgY29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmU6amFja3Nvbi1hbm5vdGF0aW9uczoyLjkuNgorMjAyMC0wMi0yMSAxMzowNzoyNiw1ODggW1dvcmtlci0xMDY5OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbS9mYXN0ZXJ4bWwvamFja3Nvbi9jb3JlL2phY2tzb24tZGF0YWJpbmQvMi45LjYvamFja3Nvbi1kYXRhYmluZC0yLjkuNi1zb3VyY2VzLmphcgorMjAyMC0wMi0yMSAxMzowNzoyNiw5ODEgW1dvcmtlci0xMDY5OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tL2Zhc3RlcnhtbC9qYWNrc29uL2NvcmUvamFja3Nvbi1kYXRhYmluZC8yLjkuNi9qYWNrc29uLWRhdGFiaW5kLTIuOS42LXNvdXJjZXMuamFyCisyMDIwLTAyLTIxIDEzOjA3OjI3LDA2MyBbV29ya2VyLTEwNjk6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmouaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iIC0gRG93bmxvYWRlZCBzb3VyY2VzIGZvciBjb20uZmFzdGVyeG1sLmphY2tzb24uY29yZTpqYWNrc29uLWRhdGFiaW5kOjIuOS42CisyMDIwLTAyLTIxIDE0OjE2OjA4LDM2OCBbV29ya2VyLTEwOTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDItMjEgMTQ6MTY6MDgsMzg0IFtXb3JrZXItMTA5NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMi0yMSAxNDoyMToxNSwwODcgW1dvcmtlci0xMDkyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAyLTIxIDE0OjIxOjE1LDA4NyBbV29ya2VyLTEwOTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDMtMDMgMTE6NTc6NDUsMzEzIFtXb3JrZXItNDogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjAtMDMtMDMgMTI6MTA6NTIsNzkzIFtXb3JrZXItMjE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDMtMDMgMTI6MTA6NTIsNzk0IFtXb3JrZXItMjE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDMtMDMgMTI6MjU6MDUsMzM0IFtXb3JrZXItMjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDMtMDMgMTI6MjU6MDUsMzM1IFtXb3JrZXItMjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDMtMjYgMTk6MTQ6MDEsNTkwIFtXb3JrZXItNjogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBub3QgYXZhaWxhYmxlLiBSZW1vdGUgZG93bmxvYWQgcmVxdWlyZWQuCisyMDIwLTAzLTI2IDE5OjE5OjIxLDAwNyBbV29ya2VyLTY6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTAzLTI2IDE5OjI0OjIyLDg4OSBbV29ya2VyLTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1TZXJ2aWNlcworMjAyMC0wMy0yNiAxOToyNDoyMiw5NTEgW1dvcmtlci0yOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMy0zMCAwOTo0Mjo1MCwwOTQgW1dvcmtlci00OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG5vdCBhdmFpbGFibGUuIFJlbW90ZSBkb3dubG9hZCByZXF1aXJlZC4KKzIwMjAtMDMtMzAgMTE6MjE6MzEsOTQwIFtXb3JrZXItMTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1TZXJ2aWNlcworMjAyMC0wMy0zMCAxMToyMTozMSw5NTIgW1dvcmtlci0xMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDMtMzAgMTE6NDE6MTgsODAzIFtXb3JrZXItNDogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjAtMDMtMzAgMTU6NTk6MjAsMDExIFtXb3JrZXItNTogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjAtMDMtMzAgMTY6MDQ6MzYsMDY3IFtXb3JrZXItNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxHbGVtbVNlcnZpY2VzCisyMDIwLTAzLTMwIDE2OjA0OjM2LDA4MSBbV29ya2VyLTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAzLTMwIDE3OjU3OjQ0LDU4NiBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3BsdWdpbnMvbWF2ZW4tY2xlYW4tcGx1Z2luLzIuNS9tYXZlbi1jbGVhbi1wbHVnaW4tMi41LmphcgorMjAyMC0wMy0zMCAxNzo1Nzo0NSwxMjggW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3BsdWdpbnMvbWF2ZW4tY2xlYW4tcGx1Z2luLzIuNS9tYXZlbi1jbGVhbi1wbHVnaW4tMi41LmphcgorMjAyMC0wMy0zMCAxNzo1Nzo0NywxOTUgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9wbHVnaW5zL21hdmVuLWRlcGxveS1wbHVnaW4vMi43L21hdmVuLWRlcGxveS1wbHVnaW4tMi43LmphcgorMjAyMC0wMy0zMCAxNzo1Nzo0NywzMjcgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3BsdWdpbnMvbWF2ZW4tZGVwbG95LXBsdWdpbi8yLjcvbWF2ZW4tZGVwbG95LXBsdWdpbi0yLjcuamFyCisyMDIwLTAzLTMwIDE3OjU3OjQ3LDU0NiBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3BsdWdpbnMvbWF2ZW4tc2l0ZS1wbHVnaW4vMy4zL21hdmVuLXNpdGUtcGx1Z2luLTMuMy5qYXIKKzIwMjAtMDMtMzAgMTc6NTc6NDcsODQ0IFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9wbHVnaW5zL21hdmVuLXNpdGUtcGx1Z2luLzMuMy9tYXZlbi1zaXRlLXBsdWdpbi0zLjMuamFyCisyMDIwLTAzLTMwIDE3OjU3OjUyLDgwOCBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6R2xlbW1TZXJ2aWNlczI6MC4wLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxHbGVtbVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTAzLTMwIDE4OjM4OjM4LDEyNyBbV29ya2VyLTE5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXEdsZW1tU2VydmljZXMKKzIwMjAtMDMtMzAgMTg6Mzg6MzgsMzEyIFtXb3JrZXItMTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAzLTMwIDE4OjQyOjQ4LDQ5MyBbV29ya2VyLTE6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTAzLTMwIDE4OjQ1OjM4LDU2NSBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6R2xlbW1TZXJ2aWNlczI6MC4wLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxHbGVtbVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTAzLTMwIDE4OjQ1OjM5LDYwOSBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1jb21wb25lbnQtYW5ub3RhdGlvbnMvMS43LjEvcGxleHVzLWNvbXBvbmVudC1hbm5vdGF0aW9ucy0xLjcuMS5wb20KKzIwMjAtMDMtMzAgMTg6NDU6MzksNjc2IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtY29tcG9uZW50LWFubm90YXRpb25zLzEuNy4xL3BsZXh1cy1jb21wb25lbnQtYW5ub3RhdGlvbnMtMS43LjEucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjM5LDczMyBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1jb250YWluZXJzLzEuNy4xL3BsZXh1cy1jb250YWluZXJzLTEuNy4xLnBvbQorMjAyMC0wMy0zMCAxODo0NTozOSw4MTIgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1jb250YWluZXJzLzEuNy4xL3BsZXh1cy1jb250YWluZXJzLTEuNy4xLnBvbQorMjAyMC0wMy0zMCAxODo0NTozOSw5NjAgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1hcmNoaXZlci8zLjIuMC9tYXZlbi1hcmNoaXZlci0zLjIuMC5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDAsMDEwIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1hcmNoaXZlci8zLjIuMC9tYXZlbi1hcmNoaXZlci0zLjIuMC5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDAsMDk3IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vc2hhcmVkL21hdmVuLXNoYXJlZC11dGlscy8zLjIuMC9tYXZlbi1zaGFyZWQtdXRpbHMtMy4yLjAucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQwLDE2NSBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vc2hhcmVkL21hdmVuLXNoYXJlZC11dGlscy8zLjIuMC9tYXZlbi1zaGFyZWQtdXRpbHMtMy4yLjAucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQwLDMyMyBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1hcmNoaXZlci8zLjUvcGxleHVzLWFyY2hpdmVyLTMuNS5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDAsMzg5IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtYXJjaGl2ZXIvMy41L3BsZXh1cy1hcmNoaXZlci0zLjUucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQwLDQ0MSBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy81LjAvcGxleHVzLTUuMC5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDAsNTI3IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMvNS4wL3BsZXh1cy01LjAucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQwLDU5MiBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy11dGlscy8zLjAuMjQvcGxleHVzLXV0aWxzLTMuMC4yNC5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDAsNjQzIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtdXRpbHMvMy4wLjI0L3BsZXh1cy11dGlscy0zLjAuMjQucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQwLDY5NCBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1pby8zLjAuMC9wbGV4dXMtaW8tMy4wLjAucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQwLDgwMCBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWlvLzMuMC4wL3BsZXh1cy1pby0zLjAuMC5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDAsODUzIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvY29tbW9ucy9jb21tb25zLWNvbXByZXNzLzEuMTQvY29tbW9ucy1jb21wcmVzcy0xLjE0LnBvbQorMjAyMC0wMy0zMCAxODo0NTo0MCw5MDUgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL2NvbW1vbnMvY29tbW9ucy1jb21wcmVzcy8xLjE0L2NvbW1vbnMtY29tcHJlc3MtMS4xNC5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDAsOTcxIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvY29tbW9ucy9jb21tb25zLXBhcmVudC80Mi9jb21tb25zLXBhcmVudC00Mi5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDEsMTcyIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9jb21tb25zL2NvbW1vbnMtcGFyZW50LzQyL2NvbW1vbnMtcGFyZW50LTQyLnBvbQorMjAyMC0wMy0zMCAxODo0NTo0MSwyNTIgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2lxODAvc25hcHB5L3NuYXBweS8wLjQvc25hcHB5LTAuNC5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDEsMzAwIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2lxODAvc25hcHB5L3NuYXBweS8wLjQvc25hcHB5LTAuNC5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDEsMzg4IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy90dWthYW5pL3h6LzEuNi94ei0xLjYucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQxLDQ2MCBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy90dWthYW5pL3h6LzEuNi94ei0xLjYucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQxLDUxMSBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1pbnRlcnBvbGF0aW9uLzEuMjIvcGxleHVzLWludGVycG9sYXRpb24tMS4yMi5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDEsNjI4IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtaW50ZXJwb2xhdGlvbi8xLjIyL3BsZXh1cy1pbnRlcnBvbGF0aW9uLTEuMjIucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQxLDcwMSBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1jb21wb25lbnRzLzEuMy4xL3BsZXh1cy1jb21wb25lbnRzLTEuMy4xLnBvbQorMjAyMC0wMy0zMCAxODo0NTo0MSw3NTMgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1jb21wb25lbnRzLzEuMy4xL3BsZXh1cy1jb21wb25lbnRzLTEuMy4xLnBvbQorMjAyMC0wMy0zMCAxODo0NTo0MSw4MjAgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtYXJjaGl2ZXIvMy42LjAvcGxleHVzLWFyY2hpdmVyLTMuNi4wLnBvbQorMjAyMC0wMy0zMCAxODo0NTo0MSw5MDcgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1hcmNoaXZlci8zLjYuMC9wbGV4dXMtYXJjaGl2ZXItMy42LjAucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQxLDk1OCBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy11dGlscy8zLjEuMC9wbGV4dXMtdXRpbHMtMy4xLjAucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQyLDAwNyBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLXV0aWxzLzMuMS4wL3BsZXh1cy11dGlscy0zLjEuMC5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDIsMDY1IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWlvLzMuMC4xL3BsZXh1cy1pby0zLjAuMS5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDIsMTE4IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtaW8vMy4wLjEvcGxleHVzLWlvLTMuMC4xLnBvbQorMjAyMC0wMy0zMCAxODo0NTo0MiwxNzMgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tbW9ucy1pby9jb21tb25zLWlvLzIuNi9jb21tb25zLWlvLTIuNi5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDIsMjIzIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tbW9ucy1pby9jb21tb25zLWlvLzIuNi9jb21tb25zLWlvLTIuNi5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDIsMzA5IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvY29tbW9ucy9jb21tb25zLWNvbXByZXNzLzEuMTYuMS9jb21tb25zLWNvbXByZXNzLTEuMTYuMS5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDIsMzY4IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9jb21tb25zL2NvbW1vbnMtY29tcHJlc3MvMS4xNi4xL2NvbW1vbnMtY29tcHJlc3MtMS4xNi4xLnBvbQorMjAyMC0wMy0zMCAxODo0NTo0Miw0NDggW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9jb21tb25zL2NvbW1vbnMtcGFyZW50LzQzL2NvbW1vbnMtcGFyZW50LTQzLnBvbQorMjAyMC0wMy0zMCAxODo0NTo0Miw3MDEgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL2NvbW1vbnMvY29tbW9ucy1wYXJlbnQvNDMvY29tbW9ucy1wYXJlbnQtNDMucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQyLDg1MCBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvb2JqZW5lc2lzL29iamVuZXNpcy8yLjYvb2JqZW5lc2lzLTIuNi5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDIsOTE5IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL29iamVuZXNpcy9vYmplbmVzaXMvMi42L29iamVuZXNpcy0yLjYucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQzLDA0MSBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvb2JqZW5lc2lzL29iamVuZXNpcy1wYXJlbnQvMi42L29iamVuZXNpcy1wYXJlbnQtMi42LnBvbQorMjAyMC0wMy0zMCAxODo0NTo0MywyMzIgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvb2JqZW5lc2lzL29iamVuZXNpcy1wYXJlbnQvMi42L29iamVuZXNpcy1wYXJlbnQtMi42LnBvbQorMjAyMC0wMy0zMCAxODo0NTo0MywyOTcgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL3R1a2FhbmkveHovMS44L3h6LTEuOC5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDMsMzQ4IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL3R1a2FhbmkveHovMS44L3h6LTEuOC5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDMsNDE1IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWludGVycG9sYXRpb24vMS4yNC9wbGV4dXMtaW50ZXJwb2xhdGlvbi0xLjI0LnBvbQorMjAyMC0wMy0zMCAxODo0NTo0Myw1MzAgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1pbnRlcnBvbGF0aW9uLzEuMjQvcGxleHVzLWludGVycG9sYXRpb24tMS4yNC5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDMsNjM4IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbS90aG91Z2h0d29ya3MveHN0cmVhbS94c3RyZWFtLzEuNC4xMC94c3RyZWFtLTEuNC4xMC5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDMsNzM4IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tL3Rob3VnaHR3b3Jrcy94c3RyZWFtL3hzdHJlYW0vMS40LjEwL3hzdHJlYW0tMS40LjEwLnBvbQorMjAyMC0wMy0zMCAxODo0NTo0Myw4NTcgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tL3Rob3VnaHR3b3Jrcy94c3RyZWFtL3hzdHJlYW0tcGFyZW50LzEuNC4xMC94c3RyZWFtLXBhcmVudC0xLjQuMTAucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQzLDk0MiBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbS90aG91Z2h0d29ya3MveHN0cmVhbS94c3RyZWFtLXBhcmVudC8xLjQuMTAveHN0cmVhbS1wYXJlbnQtMS40LjEwLnBvbQorMjAyMC0wMy0zMCAxODo0NTo0NCwwNjYgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIveG1scHVsbC94bWxwdWxsLzEuMS4zLjEveG1scHVsbC0xLjEuMy4xLnBvbQorMjAyMC0wMy0zMCAxODo0NTo0NCwxMTMgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi94bWxwdWxsL3htbHB1bGwvMS4xLjMuMS94bWxwdWxsLTEuMS4zLjEucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQ0LDI1MCBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi94cHAzL3hwcDNfbWluLzEuMS40Yy94cHAzX21pbi0xLjEuNGMucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQ0LDMwNSBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL3hwcDMveHBwM19taW4vMS4xLjRjL3hwcDNfbWluLTEuMS40Yy5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDQsMzgxIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vc2hhcmVkL21hdmVuLWZpbHRlcmluZy8zLjEuMS9tYXZlbi1maWx0ZXJpbmctMy4xLjEucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQ0LDQ0NSBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vc2hhcmVkL21hdmVuLWZpbHRlcmluZy8zLjEuMS9tYXZlbi1maWx0ZXJpbmctMy4xLjEucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQ0LDU3MSBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3NoYXJlZC9tYXZlbi1zaGFyZWQtdXRpbHMvMy4wLjAvbWF2ZW4tc2hhcmVkLXV0aWxzLTMuMC4wLnBvbQorMjAyMC0wMy0zMCAxODo0NTo0NCw2NDQgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3NoYXJlZC9tYXZlbi1zaGFyZWQtdXRpbHMvMy4wLjAvbWF2ZW4tc2hhcmVkLXV0aWxzLTMuMC4wLnBvbQorMjAyMC0wMy0zMCAxODo0NTo0NCw3MTQgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9zaGFyZWQvbWF2ZW4tc2hhcmVkLWNvbXBvbmVudHMvMjEvbWF2ZW4tc2hhcmVkLWNvbXBvbmVudHMtMjEucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQ0LDc2NyBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vc2hhcmVkL21hdmVuLXNoYXJlZC1jb21wb25lbnRzLzIxL21hdmVuLXNoYXJlZC1jb21wb25lbnRzLTIxLnBvbQorMjAyMC0wMy0zMCAxODo0NTo0NCw4MjAgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1wYXJlbnQvMjUvbWF2ZW4tcGFyZW50LTI1LnBvbQorMjAyMC0wMy0zMCAxODo0NTo0NCw4NzggW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLXBhcmVudC8yNS9tYXZlbi1wYXJlbnQtMjUucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQ0LDk1NyBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL2FwYWNoZS8xNS9hcGFjaGUtMTUucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQ1LDA4NyBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvYXBhY2hlLzE1L2FwYWNoZS0xNS5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDUsMTU1IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbW1vbnMtaW8vY29tbW9ucy1pby8yLjQvY29tbW9ucy1pby0yLjQucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQ1LDIwNyBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbW1vbnMtaW8vY29tbW9ucy1pby8yLjQvY29tbW9ucy1pby0yLjQucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQ1LDI1NyBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL2NvbW1vbnMvY29tbW9ucy1wYXJlbnQvMjUvY29tbW9ucy1wYXJlbnQtMjUucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQ1LDM5NiBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvY29tbW9ucy9jb21tb25zLXBhcmVudC8yNS9jb21tb25zLXBhcmVudC0yNS5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDUsNDkyIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvYXBhY2hlLzkvYXBhY2hlLTkucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQ1LDU4NyBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvYXBhY2hlLzkvYXBhY2hlLTkucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQ1LDY0NSBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvc29uYXR5cGUvcGxleHVzL3BsZXh1cy1idWlsZC1hcGkvMC4wLjcvcGxleHVzLWJ1aWxkLWFwaS0wLjAuNy5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDUsNzI2IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL3NvbmF0eXBlL3BsZXh1cy9wbGV4dXMtYnVpbGQtYXBpLzAuMC43L3BsZXh1cy1idWlsZC1hcGktMC4wLjcucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQ1LDgwNiBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvc29uYXR5cGUvc3BpY2Uvc3BpY2UtcGFyZW50LzE1L3NwaWNlLXBhcmVudC0xNS5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDUsODczIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL3NvbmF0eXBlL3NwaWNlL3NwaWNlLXBhcmVudC8xNS9zcGljZS1wYXJlbnQtMTUucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQ1LDk4MSBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvc29uYXR5cGUvZm9yZ2UvZm9yZ2UtcGFyZW50LzUvZm9yZ2UtcGFyZW50LTUucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQ2LDA0OCBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9zb25hdHlwZS9mb3JnZS9mb3JnZS1wYXJlbnQvNS9mb3JnZS1wYXJlbnQtNS5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDYsMTUwIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vc2hhcmVkL21hdmVuLW1hcHBpbmcvMy4wLjAvbWF2ZW4tbWFwcGluZy0zLjAuMC5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDYsMjQ2IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9zaGFyZWQvbWF2ZW4tbWFwcGluZy8zLjAuMC9tYXZlbi1tYXBwaW5nLTMuMC4wLnBvbQorMjAyMC0wMy0zMCAxODo0NTo0NiwzMDkgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9zaGFyZWQvbWF2ZW4tc2hhcmVkLWNvbXBvbmVudHMvMjIvbWF2ZW4tc2hhcmVkLWNvbXBvbmVudHMtMjIucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQ2LDQxMSBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vc2hhcmVkL21hdmVuLXNoYXJlZC1jb21wb25lbnRzLzIyL21hdmVuLXNoYXJlZC1jb21wb25lbnRzLTIyLnBvbQorMjAyMC0wMy0zMCAxODo0NTo0Niw0NzYgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1wYXJlbnQvMjcvbWF2ZW4tcGFyZW50LTI3LnBvbQorMjAyMC0wMy0zMCAxODo0NTo0Niw1NDEgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLXBhcmVudC8yNy9tYXZlbi1wYXJlbnQtMjcucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQ2LDU5NiBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL2FwYWNoZS8xNy9hcGFjaGUtMTcucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQ2LDY2MSBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvYXBhY2hlLzE3L2FwYWNoZS0xNy5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDYsNzIyIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWludGVycG9sYXRpb24vMS4yMS9wbGV4dXMtaW50ZXJwb2xhdGlvbi0xLjIxLnBvbQorMjAyMC0wMy0zMCAxODo0NTo0Niw3ODcgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1pbnRlcnBvbGF0aW9uLzEuMjEvcGxleHVzLWludGVycG9sYXRpb24tMS4yMS5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDYsOTEyIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWNvbXBvbmVudC1hbm5vdGF0aW9ucy8xLjcuMS9wbGV4dXMtY29tcG9uZW50LWFubm90YXRpb25zLTEuNy4xLmphcgorMjAyMC0wMy0zMCAxODo0NTo0Niw5OTYgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1jb21wb25lbnQtYW5ub3RhdGlvbnMvMS43LjEvcGxleHVzLWNvbXBvbmVudC1hbm5vdGF0aW9ucy0xLjcuMS5qYXIKKzIwMjAtMDMtMzAgMTg6NDU6NDcsMDM4IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tYXJjaGl2ZXIvMy4yLjAvbWF2ZW4tYXJjaGl2ZXItMy4yLjAuamFyCisyMDIwLTAzLTMwIDE4OjQ1OjQ3LDQ1OSBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tYXJjaGl2ZXIvMy4yLjAvbWF2ZW4tYXJjaGl2ZXItMy4yLjAuamFyCisyMDIwLTAzLTMwIDE4OjQ1OjQ3LDQ5MSBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3NoYXJlZC9tYXZlbi1zaGFyZWQtdXRpbHMvMy4yLjAvbWF2ZW4tc2hhcmVkLXV0aWxzLTMuMi4wLmphcgorMjAyMC0wMy0zMCAxODo0NTo0Nyw2MDUgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3NoYXJlZC9tYXZlbi1zaGFyZWQtdXRpbHMvMy4yLjAvbWF2ZW4tc2hhcmVkLXV0aWxzLTMuMi4wLmphcgorMjAyMC0wMy0zMCAxODo0NTo0Nyw2NDUgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtYXJjaGl2ZXIvMy42LjAvcGxleHVzLWFyY2hpdmVyLTMuNi4wLmphcgorMjAyMC0wMy0zMCAxODo0NTo0Nyw3NjggW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1hcmNoaXZlci8zLjYuMC9wbGV4dXMtYXJjaGl2ZXItMy42LjAuamFyCisyMDIwLTAzLTMwIDE4OjQ1OjQ3LDgwNyBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1pby8zLjAuMS9wbGV4dXMtaW8tMy4wLjEuamFyCisyMDIwLTAzLTMwIDE4OjQ1OjQ3LDkzMCBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWlvLzMuMC4xL3BsZXh1cy1pby0zLjAuMS5qYXIKKzIwMjAtMDMtMzAgMTg6NDU6NDcsOTcwIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvY29tbW9ucy9jb21tb25zLWNvbXByZXNzLzEuMTYuMS9jb21tb25zLWNvbXByZXNzLTEuMTYuMS5qYXIKKzIwMjAtMDMtMzAgMTg6NDU6NDgsMjEyIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9jb21tb25zL2NvbW1vbnMtY29tcHJlc3MvMS4xNi4xL2NvbW1vbnMtY29tcHJlc3MtMS4xNi4xLmphcgorMjAyMC0wMy0zMCAxODo0NTo0OCwyNDYgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL29iamVuZXNpcy9vYmplbmVzaXMvMi42L29iamVuZXNpcy0yLjYuamFyCisyMDIwLTAzLTMwIDE4OjQ1OjQ4LDMyOCBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9vYmplbmVzaXMvb2JqZW5lc2lzLzIuNi9vYmplbmVzaXMtMi42LmphcgorMjAyMC0wMy0zMCAxODo0NTo0OCwzNjYgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2lxODAvc25hcHB5L3NuYXBweS8wLjQvc25hcHB5LTAuNC5qYXIKKzIwMjAtMDMtMzAgMTg6NDU6NDgsNDQ1IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2lxODAvc25hcHB5L3NuYXBweS8wLjQvc25hcHB5LTAuNC5qYXIKKzIwMjAtMDMtMzAgMTg6NDU6NDgsNDg2IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy90dWthYW5pL3h6LzEuOC94ei0xLjguamFyCisyMDIwLTAzLTMwIDE4OjQ1OjQ4LDU3MSBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy90dWthYW5pL3h6LzEuOC94ei0xLjguamFyCisyMDIwLTAzLTMwIDE4OjQ1OjQ4LDYwOSBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1pbnRlcnBvbGF0aW9uLzEuMjQvcGxleHVzLWludGVycG9sYXRpb24tMS4yNC5qYXIKKzIwMjAtMDMtMzAgMTg6NDU6NDgsNzAxIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtaW50ZXJwb2xhdGlvbi8xLjI0L3BsZXh1cy1pbnRlcnBvbGF0aW9uLTEuMjQuamFyCisyMDIwLTAzLTMwIDE4OjQ1OjQ4LDc0MSBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb20vdGhvdWdodHdvcmtzL3hzdHJlYW0veHN0cmVhbS8xLjQuMTAveHN0cmVhbS0xLjQuMTAuamFyCisyMDIwLTAzLTMwIDE4OjQ1OjQ4LDk5OCBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbS90aG91Z2h0d29ya3MveHN0cmVhbS94c3RyZWFtLzEuNC4xMC94c3RyZWFtLTEuNC4xMC5qYXIKKzIwMjAtMDMtMzAgMTg6NDU6NDksMDMzIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL3htbHB1bGwveG1scHVsbC8xLjEuMy4xL3htbHB1bGwtMS4xLjMuMS5qYXIKKzIwMjAtMDMtMzAgMTg6NDU6NDksMTM1IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIveG1scHVsbC94bWxwdWxsLzEuMS4zLjEveG1scHVsbC0xLjEuMy4xLmphcgorMjAyMC0wMy0zMCAxODo0NTo0OSwxNjkgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIveHBwMy94cHAzX21pbi8xLjEuNGMveHBwM19taW4tMS4xLjRjLmphcgorMjAyMC0wMy0zMCAxODo0NTo0OSwyODQgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi94cHAzL3hwcDNfbWluLzEuMS40Yy94cHAzX21pbi0xLjEuNGMuamFyCisyMDIwLTAzLTMwIDE4OjQ1OjQ5LDMzMiBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy11dGlscy8zLjEuMC9wbGV4dXMtdXRpbHMtMy4xLjAuamFyCisyMDIwLTAzLTMwIDE4OjQ1OjQ5LDQ4MiBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLXV0aWxzLzMuMS4wL3BsZXh1cy11dGlscy0zLjEuMC5qYXIKKzIwMjAtMDMtMzAgMTg6NDU6NDksNTI0IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vc2hhcmVkL21hdmVuLWZpbHRlcmluZy8zLjEuMS9tYXZlbi1maWx0ZXJpbmctMy4xLjEuamFyCisyMDIwLTAzLTMwIDE4OjQ1OjQ5LDU5OCBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vc2hhcmVkL21hdmVuLWZpbHRlcmluZy8zLjEuMS9tYXZlbi1maWx0ZXJpbmctMy4xLjEuamFyCisyMDIwLTAzLTMwIDE4OjQ1OjQ5LDYzNiBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvc29uYXR5cGUvcGxleHVzL3BsZXh1cy1idWlsZC1hcGkvMC4wLjcvcGxleHVzLWJ1aWxkLWFwaS0wLjAuNy5qYXIKKzIwMjAtMDMtMzAgMTg6NDU6NDksNzUwIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL3NvbmF0eXBlL3BsZXh1cy9wbGV4dXMtYnVpbGQtYXBpLzAuMC43L3BsZXh1cy1idWlsZC1hcGktMC4wLjcuamFyCisyMDIwLTAzLTMwIDE4OjQ1OjQ5LDc5MSBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3NoYXJlZC9tYXZlbi1tYXBwaW5nLzMuMC4wL21hdmVuLW1hcHBpbmctMy4wLjAuamFyCisyMDIwLTAzLTMwIDE4OjQ1OjUwLDA1NCBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vc2hhcmVkL21hdmVuLW1hcHBpbmcvMy4wLjAvbWF2ZW4tbWFwcGluZy0zLjAuMC5qYXIKKzIwMjAtMDMtMzAgMTg6NDU6NTcsODgzIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTAzLTMwIDE4OjQ1OjU4LDk5NCBbV29ya2VyLTc6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvanVuaXQvanVuaXQvMy44LjEvanVuaXQtMy44LjEtc291cmNlcy5qYXIKKzIwMjAtMDMtMzAgMTg6NDU6NTksMTY0IFtXb3JrZXItNzogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2p1bml0L2p1bml0LzMuOC4xL2p1bml0LTMuOC4xLXNvdXJjZXMuamFyCisyMDIwLTAzLTMwIDE4OjQ2OjAwLDc4MSBbV29ya2VyLTc6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmouaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iIC0gRG93bmxvYWRlZCBzb3VyY2VzIGZvciBqdW5pdDpqdW5pdDozLjguMQorMjAyMC0wMy0zMCAxODo0NjowMCw4MjEgW1dvcmtlci03OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2phdmF4L3NlcnZsZXQvc2VydmxldC1hcGkvMi41L3NlcnZsZXQtYXBpLTIuNS1zb3VyY2VzLmphcgorMjAyMC0wMy0zMCAxODo0NjowMCw5NDggW1dvcmtlci03OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvamF2YXgvc2VydmxldC9zZXJ2bGV0LWFwaS8yLjUvc2VydmxldC1hcGktMi41LXNvdXJjZXMuamFyCisyMDIwLTAzLTMwIDE4OjQ2OjAyLDE0NyBbV29ya2VyLTc6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmouaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iIC0gRG93bmxvYWRlZCBzb3VyY2VzIGZvciBqYXZheC5zZXJ2bGV0OnNlcnZsZXQtYXBpOjIuNQorMjAyMC0wMy0zMCAxODo0NjowMiwxOTEgW1dvcmtlci03OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2phdmF4L3dzL3JzL2phdmF4LndzLnJzLWFwaS8yLjAvamF2YXgud3MucnMtYXBpLTIuMC1zb3VyY2VzLmphcgorMjAyMC0wMy0zMCAxODo0NjowMiwzMzAgW1dvcmtlci03OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvamF2YXgvd3MvcnMvamF2YXgud3MucnMtYXBpLzIuMC9qYXZheC53cy5ycy1hcGktMi4wLXNvdXJjZXMuamFyCisyMDIwLTAzLTMwIDE4OjQ2OjAyLDczMyBbV29ya2VyLTc6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmouaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iIC0gRG93bmxvYWRlZCBzb3VyY2VzIGZvciBqYXZheC53cy5yczpqYXZheC53cy5ycy1hcGk6Mi4wCisyMDIwLTAzLTMwIDE4OjQ2OjA0LDk5MSBbV29ya2VyLTEyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wMy0zMCAxODo0NjowNSwwMTggW1dvcmtlci0xMjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTAzLTMwIDE4OjQ2OjA1LDAyMSBbV29ya2VyLTEyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wMy0zMCAxODo0NjowNSwwMjMgW1dvcmtlci0xMjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTAzLTMwIDE4OjQ2OjA1LDAyNCBbV29ya2VyLTEyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDMtMzAgMTg6NDY6MDUsMDI0IFtXb3JrZXItMTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDMtMzAgMTg6NDY6MDUsMDMwIFtXb3JrZXItMTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBUaGUgUE9NIGZvciBvcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM6bWF2ZW4tY2xlYW4tcGx1Z2luOmphcjoyLjUgaXMgbWlzc2luZywgbm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKzIwMjAtMDMtMzAgMTg6NDY6MDUsMTA0IFtXb3JrZXItMTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTAzLTMwIDE4OjUwOjUwLDA1MSBbV29ya2VyLTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1TZXJ2aWNlcworMjAyMC0wMy0zMCAxODo1MDo1MCwwNTEgW1dvcmtlci0wOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMy0zMCAxOTowMzo1MSw5OTQgW1dvcmtlci02OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzMjowLjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDMtMzAgMTk6MDQ6MDMsMTA2IFtXb3JrZXItNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTAzLTMwIDE5OjA0OjAzLDQ5MCBbV29ya2VyLTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDMtMzAgMTk6MDQ6MDMsNTAzIFtXb3JrZXItNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTAzLTMwIDE5OjA0OjAzLDU1MSBbV29ya2VyLTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDMtMzAgMTk6MDQ6MDQsMDUyIFtXb3JrZXItNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzMgorMjAyMC0wMy0zMCAxOTowNDowNCwwNTMgW1dvcmtlci02OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wMy0zMCAxOTowNDowNCwwODEgW1dvcmtlci02OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDMtMzAgMTk6MDQ6MDQsMjMzIFtXb3JrZXItMTY6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tL2Zhc3RlcnhtbC9qYWNrc29uL2NvcmUvamFja3Nvbi1jb3JlLzIuOS42L2phY2tzb24tY29yZS0yLjkuNi1zb3VyY2VzLmphcgorMjAyMC0wMy0zMCAxOTowNDowNCw3MTYgW1dvcmtlci0xNjogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbS9mYXN0ZXJ4bWwvamFja3Nvbi9jb3JlL2phY2tzb24tY29yZS8yLjkuNi9qYWNrc29uLWNvcmUtMi45LjYtc291cmNlcy5qYXIKKzIwMjAtMDMtMzAgMTk6MDQ6MDUsNzUzIFtXb3JrZXItMTY6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmouaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iIC0gRG93bmxvYWRlZCBzb3VyY2VzIGZvciBjb20uZmFzdGVyeG1sLmphY2tzb24uY29yZTpqYWNrc29uLWNvcmU6Mi45LjYKKzIwMjAtMDMtMzAgMTk6MDQ6MDUsODA2IFtXb3JrZXItMTY6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tL2Zhc3RlcnhtbC9qYWNrc29uL2NvcmUvamFja3Nvbi1hbm5vdGF0aW9ucy8yLjkuNi9qYWNrc29uLWFubm90YXRpb25zLTIuOS42LXNvdXJjZXMuamFyCisyMDIwLTAzLTMwIDE5OjA0OjA1LDk1MCBbV29ya2VyLTE2OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tL2Zhc3RlcnhtbC9qYWNrc29uL2NvcmUvamFja3Nvbi1hbm5vdGF0aW9ucy8yLjkuNi9qYWNrc29uLWFubm90YXRpb25zLTIuOS42LXNvdXJjZXMuamFyCisyMDIwLTAzLTMwIDE5OjA0OjA2LDQ0MiBbV29ya2VyLTE2OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5qLmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiAtIERvd25sb2FkZWQgc291cmNlcyBmb3IgY29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmU6amFja3Nvbi1hbm5vdGF0aW9uczoyLjkuNgorMjAyMC0wMy0zMCAxOTowNDowNiw1MDAgW1dvcmtlci0xNjogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb20vZmFzdGVyeG1sL2phY2tzb24vY29yZS9qYWNrc29uLWRhdGFiaW5kLzIuOS42L2phY2tzb24tZGF0YWJpbmQtMi45LjYtc291cmNlcy5qYXIKKzIwMjAtMDMtMzAgMTk6MDQ6MDcsMzA2IFtXb3JrZXItMTY6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb20vZmFzdGVyeG1sL2phY2tzb24vY29yZS9qYWNrc29uLWRhdGFiaW5kLzIuOS42L2phY2tzb24tZGF0YWJpbmQtMi45LjYtc291cmNlcy5qYXIKKzIwMjAtMDMtMzAgMTk6MDQ6MDcsOTQ5IFtXb3JrZXItMTY6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmouaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iIC0gRG93bmxvYWRlZCBzb3VyY2VzIGZvciBjb20uZmFzdGVyeG1sLmphY2tzb24uY29yZTpqYWNrc29uLWRhdGFiaW5kOjIuOS42CisyMDIwLTAzLTMwIDE5OjA3OjMzLDk2OSBbV29ya2VyLTE3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXEdsZW1tU2VydmljZXMKKzIwMjAtMDMtMzAgMTk6MDc6MzMsOTY5IFtXb3JrZXItMTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAzLTMxIDA5OjM0OjEwLDQ4MSBbV29ya2VyLTU5OiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjAtMDMtMzEgMDk6NDE6MjMsMzM2IFtXb3JrZXItNTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1TZXJ2aWNlcworMjAyMC0wMy0zMSAwOTo0MToyMywzMzcgW1dvcmtlci01NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDMtMzEgMDk6NDI6NTMsNDY1IFtXb3JrZXItNTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1TZXJ2aWNlcworMjAyMC0wMy0zMSAwOTo0Mjo1Myw0NjYgW1dvcmtlci01NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDMtMzEgMDk6NDQ6MDMsNjgzIFtXb3JrZXItNjE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1TZXJ2aWNlcworMjAyMC0wMy0zMSAwOTo0NDowMyw2ODMgW1dvcmtlci02MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDMtMzEgMTA6MDU6MDksMjQ2IFtXb3JrZXItNjU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1TZXJ2aWNlcworMjAyMC0wMy0zMSAxMDowNTowOSwyNDcgW1dvcmtlci02NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDMtMzEgMTA6NTc6NDMsMjkwIFtXb3JrZXItNjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1TZXJ2aWNlcworMjAyMC0wMy0zMSAxMDo1Nzo0MywyOTEgW1dvcmtlci02ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDMtMzEgMTE6MjA6NTAsNTkzIFtXb3JrZXItNjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1TZXJ2aWNlcworMjAyMC0wMy0zMSAxMToyMDo1MCw2MDYgW1dvcmtlci02NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDMtMzEgMTE6MjI6NDYsMzAzIFtXb3JrZXItNjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1TZXJ2aWNlcworMjAyMC0wMy0zMSAxMToyMjo0NiwzMDMgW1dvcmtlci02NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDMtMzEgMTE6MjM6MDYsMDgzIFtXb3JrZXItNzI6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6R2xlbW1TZXJ2aWNlczI6MC4wLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxHbGVtbVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTAzLTMxIDExOjIzOjEzLDE4NSBbV29ya2VyLTcyOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDMtMzEgMTE6MjM6MTUsNjM5IFtXb3JrZXItNzA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTAzLTMxIDExOjIzOjE1LDY4OSBbV29ya2VyLTcwOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDMtMzEgMTE6MjM6MTUsNzA5IFtXb3JrZXItNzA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTAzLTMxIDExOjIzOjE1LDcxMSBbV29ya2VyLTcwOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDMtMzEgMTE6MjM6MTUsNzEyIFtXb3JrZXItNzA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzMgorMjAyMC0wMy0zMSAxMToyMzoxNSw3MTIgW1dvcmtlci03MDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wMy0zMSAxMToyMzoxNSw3MjcgW1dvcmtlci03MDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDMtMzEgMTE6MjM6MzMsMjA0IFtXb3JrZXItNzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1TZXJ2aWNlcworMjAyMC0wMy0zMSAxMToyMzozMywyMDQgW1dvcmtlci03NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDMtMzEgMTE6MjY6MDQsMTIxIFtXb3JrZXItNzM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1TZXJ2aWNlcworMjAyMC0wMy0zMSAxMToyNjowNCwxMjEgW1dvcmtlci03MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDMtMzEgMTE6Mjc6MTUsMDg2IFtXb3JrZXItNzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1TZXJ2aWNlcworMjAyMC0wMy0zMSAxMToyNzoxNSwwODcgW1dvcmtlci03NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDMtMzEgMTE6Mjg6MTQsOTAxIFtXb3JrZXItNzA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1TZXJ2aWNlcworMjAyMC0wMy0zMSAxMToyODoxNCw5MDEgW1dvcmtlci03MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDMtMzEgMTE6MzA6MjAsOTU5IFtXb3JrZXItNzQ6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wMy0zMSAxMTozMDoyMSwyNzIgW1dvcmtlci03MDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDMtMzEgMTE6MzA6MjEsMzU1IFtXb3JrZXItNzA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wMy0zMSAxMTozMDoyMSwzNTcgW1dvcmtlci03MDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDMtMzEgMTE6MzA6MjEsMzYxIFtXb3JrZXItNzA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wMy0zMSAxMTozMDoyMSwzNjIgW1dvcmtlci03MDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMyCisyMDIwLTAzLTMxIDExOjMwOjIxLDM2MiBbV29ya2VyLTcwOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTAzLTMxIDExOjMwOjIxLDM2NyBbV29ya2VyLTcwOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wMy0zMSAxMTozMTowNywxMDEgW1dvcmtlci03NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxHbGVtbVNlcnZpY2VzCisyMDIwLTAzLTMxIDExOjMxOjA3LDEwMSBbV29ya2VyLTc1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMy0zMSAxNjo1MzozMiwwNzcgW1dvcmtlci02OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMC0wMy0zMSAxNzoxNTo1OCwwODggW1dvcmtlci02OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXEdsZW1tU2VydmljZXMKKzIwMjAtMDMtMzEgMTc6MTU6NTgsMTExIFtXb3JrZXItNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDMtMzEgMTc6MjA6NDEsNjc3IFtXb3JrZXItMTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1TZXJ2aWNlcworMjAyMC0wMy0zMSAxNzoyMDo0MSw2NzcgW1dvcmtlci0xMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDMtMzEgMTc6MjI6NDAsNzU0IFtXb3JrZXItMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxHbGVtbVNlcnZpY2VzCisyMDIwLTAzLTMxIDE3OjIyOjQwLDc1NSBbV29ya2VyLTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAzLTMxIDE5OjE5OjM5LDAxNyBbV29ya2VyLTU6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTAzLTMxIDE5OjIwOjIwLDU4NCBbV29ya2VyLTQ6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMC0wNC0wMSAwOTo1MjozMiw5NDkgW1dvcmtlci0zODogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTA0LTAxIDA5OjUyOjQxLDU4NiBbV29ya2VyLTM3OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wMSAwOTo1Mjo0MSw2NDYgW1dvcmtlci0zNzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTAxIDA5OjUyOjQxLDY0OSBbV29ya2VyLTM3OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wMSAwOTo1Mjo0MSw2NTIgW1dvcmtlci0zNzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTAxIDA5OjUyOjQxLDY1NCBbV29ya2VyLTM3OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDQtMDEgMDk6NTI6NDEsNjU1IFtXb3JrZXItMzc6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDQtMDEgMDk6NTI6NDEsNzI2IFtXb3JrZXItMzc6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBUaGUgUE9NIGZvciBvcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM6bWF2ZW4tY2xlYW4tcGx1Z2luOmphcjoyLjUgaXMgbWlzc2luZywgbm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKzIwMjAtMDQtMDEgMDk6NTI6NDEsODkyIFtXb3JrZXItMzc6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTAxIDA5OjUzOjQ3LDIzNiBbV29ya2VyLTM4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXEdsZW1tU2VydmljZXMKKzIwMjAtMDQtMDEgMDk6NTM6NDcsMjM3IFtXb3JrZXItMzg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTAyIDEwOjU0OjQzLDY3NyBbV29ya2VyLTE6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgb3V0LW9mLWRhdGUuIFRyeWluZyB0byB1cGRhdGUuCisyMDIwLTA0LTAyIDExOjAyOjM5LDgwMyBbV29ya2VyLTU6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMC0wNC0wMiAxMTo1MToxNSw3NzMgW1dvcmtlci0xNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxHbGVtbVNlcnZpY2VzCisyMDIwLTA0LTAyIDExOjUxOjE1LDc3NCBbV29ya2VyLTE2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wMiAxNToxODowOSwwMjcgW1dvcmtlci0zMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxHbGVtbVNlcnZpY2VzCisyMDIwLTA0LTAyIDE1OjE4OjA5LDAyNyBbV29ya2VyLTMyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wMyAxODowOTo0NywyODYgW1dvcmtlci0xOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMC0wNC0wMyAxOTowMDowOCwxMDUgW1dvcmtlci0yMTogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIwLTA0LTAzIDIwOjM0OjU2LDAwNSBbV29ya2VyLTI1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wMyAyMDozNDo1NiwwMTMgW1dvcmtlci0yNTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTAzIDIwOjM0OjU2LDAxNSBbV29ya2VyLTI1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wMyAyMDozNDo1NiwwMTcgW1dvcmtlci0yNTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA0IDExOjM4OjM0LDgwMSBbV29ya2VyLTE2ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vcGx1Z2lucy9tYXZlbi1qYXItcGx1Z2luLzIuNC9tYXZlbi1qYXItcGx1Z2luLTIuNC5qYXIKKzIwMjAtMDQtMDQgMTE6Mzg6MzUsMjQ0IFtXb3JrZXItMTY4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3BsdWdpbnMvbWF2ZW4tamFyLXBsdWdpbi8yLjQvbWF2ZW4tamFyLXBsdWdpbi0yLjQuamFyCisyMDIwLTA0LTA0IDExOjM4OjQxLDU2NiBbV29ya2VyLTE2ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiB0ZXN0OlRlc3RzOjAuMSBAIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNccG9tLnhtbC4KKzIwMjAtMDQtMDQgMTE6Mzg6NDIsNTE0IFtXb3JrZXItMTY4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9wbHVnaW5zL21hdmVuLWphci1wbHVnaW4vMi40L21hdmVuLWphci1wbHVnaW4tMi40LnBvbQorMjAyMC0wNC0wNCAxMTozODo0Miw1NjggW1dvcmtlci0xNjg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vcGx1Z2lucy9tYXZlbi1qYXItcGx1Z2luLzIuNC9tYXZlbi1qYXItcGx1Z2luLTIuNC5wb20KKzIwMjAtMDQtMDQgMTE6Mzg6NDIsNjIyIFtXb3JrZXItMTY4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9wbHVnaW5zL21hdmVuLXBsdWdpbnMvMjIvbWF2ZW4tcGx1Z2lucy0yMi5wb20KKzIwMjAtMDQtMDQgMTE6Mzg6NDIsNzIwIFtXb3JrZXItMTY4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3BsdWdpbnMvbWF2ZW4tcGx1Z2lucy8yMi9tYXZlbi1wbHVnaW5zLTIyLnBvbQorMjAyMC0wNC0wNCAxMTozODo0Myw0NzAgW1dvcmtlci0xNjg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLWFyY2hpdmVyLzIuNS9tYXZlbi1hcmNoaXZlci0yLjUucG9tCisyMDIwLTA0LTA0IDExOjM4OjQzLDU3OCBbV29ya2VyLTE2ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1hcmNoaXZlci8yLjUvbWF2ZW4tYXJjaGl2ZXItMi41LnBvbQorMjAyMC0wNC0wNCAxMTozODo0NCwxMjMgW1dvcmtlci0xNjg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1hcmNoaXZlci8yLjEvcGxleHVzLWFyY2hpdmVyLTIuMS5wb20KKzIwMjAtMDQtMDQgMTE6Mzg6NDQsMjUwIFtXb3JrZXItMTY4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1hcmNoaXZlci8yLjEvcGxleHVzLWFyY2hpdmVyLTIuMS5wb20KKzIwMjAtMDQtMDQgMTE6Mzg6NDQsMzE4IFtXb3JrZXItMTY4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtdXRpbHMvMy4wL3BsZXh1cy11dGlscy0zLjAucG9tCisyMDIwLTA0LTA0IDExOjM4OjQ0LDQ5OSBbV29ya2VyLTE2ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtdXRpbHMvMy4wL3BsZXh1cy11dGlscy0zLjAucG9tCisyMDIwLTA0LTA0IDExOjM4OjQ0LDU1NSBbV29ya2VyLTE2ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9zb25hdHlwZS9zcGljZS9zcGljZS1wYXJlbnQvMTYvc3BpY2UtcGFyZW50LTE2LnBvbQorMjAyMC0wNC0wNCAxMTozODo0NCw2MTYgW1dvcmtlci0xNjg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9zb25hdHlwZS9zcGljZS9zcGljZS1wYXJlbnQvMTYvc3BpY2UtcGFyZW50LTE2LnBvbQorMjAyMC0wNC0wNCAxMTozODo0NCw4MzcgW1dvcmtlci0xNjg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1pby8yLjAuMi9wbGV4dXMtaW8tMi4wLjIucG9tCisyMDIwLTA0LTA0IDExOjM4OjQ0LDk0OSBbV29ya2VyLTE2ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtaW8vMi4wLjIvcGxleHVzLWlvLTIuMC4yLnBvbQorMjAyMC0wNC0wNCAxMTozODo0NSwwMTQgW1dvcmtlci0xNjg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1jb21wb25lbnRzLzEuMS4xOS9wbGV4dXMtY29tcG9uZW50cy0xLjEuMTkucG9tCisyMDIwLTA0LTA0IDExOjM4OjQ1LDMyMyBbV29ya2VyLTE2ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtY29tcG9uZW50cy8xLjEuMTkvcGxleHVzLWNvbXBvbmVudHMtMS4xLjE5LnBvbQorMjAyMC0wNC0wNCAxMTozODo0NSwzNzcgW1dvcmtlci0xNjg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy8zLjAuMS9wbGV4dXMtMy4wLjEucG9tCisyMDIwLTA0LTA0IDExOjM4OjQ1LDQ1NyBbV29ya2VyLTE2ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMvMy4wLjEvcGxleHVzLTMuMC4xLnBvbQorMjAyMC0wNC0wNCAxMTozODo0NSw1MTIgW1dvcmtlci0xNjg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1pbnRlcnBvbGF0aW9uLzEuMTUvcGxleHVzLWludGVycG9sYXRpb24tMS4xNS5wb20KKzIwMjAtMDQtMDQgMTE6Mzg6NDgsMzYxIFtXb3JrZXItMTY4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1pbnRlcnBvbGF0aW9uLzEuMTUvcGxleHVzLWludGVycG9sYXRpb24tMS4xNS5wb20KKzIwMjAtMDQtMDQgMTE6Mzg6NDgsNDQ5IFtXb3JrZXItMTY4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tbW9ucy1sYW5nL2NvbW1vbnMtbGFuZy8yLjEvY29tbW9ucy1sYW5nLTIuMS5wb20KKzIwMjAtMDQtMDQgMTE6Mzg6NDgsNTc2IFtXb3JrZXItMTY4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb21tb25zLWxhbmcvY29tbW9ucy1sYW5nLzIuMS9jb21tb25zLWxhbmctMi4xLnBvbQorMjAyMC0wNC0wNCAxMTozODo0OCw4ODUgW1dvcmtlci0xNjg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLWFyY2hpdmVyLzIuNS9tYXZlbi1hcmNoaXZlci0yLjUuamFyCisyMDIwLTA0LTA0IDExOjM4OjQ5LDI0OCBbV29ya2VyLTE2ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1hcmNoaXZlci8yLjUvbWF2ZW4tYXJjaGl2ZXItMi41LmphcgorMjAyMC0wNC0wNCAxMTozODo0OSwyODQgW1dvcmtlci0xNjg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1pbnRlcnBvbGF0aW9uLzEuMTUvcGxleHVzLWludGVycG9sYXRpb24tMS4xNS5qYXIKKzIwMjAtMDQtMDQgMTE6Mzg6NDksMzc3IFtXb3JrZXItMTY4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1pbnRlcnBvbGF0aW9uLzEuMTUvcGxleHVzLWludGVycG9sYXRpb24tMS4xNS5qYXIKKzIwMjAtMDQtMDQgMTE6Mzg6NDksNDE4IFtXb3JrZXItMTY4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtYXJjaGl2ZXIvMi4xL3BsZXh1cy1hcmNoaXZlci0yLjEuamFyCisyMDIwLTA0LTA0IDExOjM4OjQ5LDUzNiBbV29ya2VyLTE2ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtYXJjaGl2ZXIvMi4xL3BsZXh1cy1hcmNoaXZlci0yLjEuamFyCisyMDIwLTA0LTA0IDExOjM4OjQ5LDU3NyBbV29ya2VyLTE2ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWlvLzIuMC4yL3BsZXh1cy1pby0yLjAuMi5qYXIKKzIwMjAtMDQtMDQgMTE6Mzg6NDksNjUyIFtXb3JrZXItMTY4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1pby8yLjAuMi9wbGV4dXMtaW8tMi4wLjIuamFyCisyMDIwLTA0LTA0IDExOjM4OjQ5LDY5NiBbV29ya2VyLTE2ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbW1vbnMtbGFuZy9jb21tb25zLWxhbmcvMi4xL2NvbW1vbnMtbGFuZy0yLjEuamFyCisyMDIwLTA0LTA0IDExOjM4OjQ5LDg1MiBbV29ya2VyLTE2ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tbW9ucy1sYW5nL2NvbW1vbnMtbGFuZy8yLjEvY29tbW9ucy1sYW5nLTIuMS5qYXIKKzIwMjAtMDQtMDQgMTE6Mzg6NDksODkzIFtXb3JrZXItMTY4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtdXRpbHMvMy4wL3BsZXh1cy11dGlscy0zLjAuamFyCisyMDIwLTA0LTA0IDExOjM4OjUwLDAxNCBbV29ya2VyLTE2ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtdXRpbHMvMy4wL3BsZXh1cy11dGlscy0zLjAuamFyCisyMDIwLTA0LTA0IDExOjM4OjUyLDM5MiBbV29ya2VyLTE2ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIEFkZGluZyBzb3VyY2UgZm9sZGVyIC9UZXN0cy9zcmMKKzIwMjAtMDQtMDQgMTE6Mzg6NTIsMzkzIFtXb3JrZXItMTY4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gTm90IGFkZGluZyBzb3VyY2UgZm9sZGVyIC9UZXN0cy9zcmMvdGVzdC9qYXZhIGJlY2F1c2UgaXQgb3ZlcmxhcHMgd2l0aCAvVGVzdHMvc3JjCisyMDIwLTA0LTA0IDExOjM4OjUzLDY3OCBbV29ya2VyLTE2ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkucC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIgLSBVcGRhdGUgc3RhcnRlZAorMjAyMC0wNC0wNCAxMTozODo1NCw4MzQgW1dvcmtlci0xNjg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogdGVzdDpUZXN0czowLjEgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHBvbS54bWwuCisyMDIwLTA0LTA0IDExOjM4OjU1LDE2MyBbV29ya2VyLTE2ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIEFkZGluZyBzb3VyY2UgZm9sZGVyIC9UZXN0cy9zcmMKKzIwMjAtMDQtMDQgMTE6Mzg6NTUsMTY0IFtXb3JrZXItMTY4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gTm90IGFkZGluZyBzb3VyY2UgZm9sZGVyIC9UZXN0cy9zcmMvdGVzdC9qYXZhIGJlY2F1c2UgaXQgb3ZlcmxhcHMgd2l0aCAvVGVzdHMvc3JjCisyMDIwLTA0LTA0IDExOjM4OjU1LDMwMSBbV29ya2VyLTE2ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkucC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIgLSBVcGRhdGUgY29tcGxldGVkOiAxIHNlYworMjAyMC0wNC0wNCAxMTo0MDoxNSw0NTIgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTA0IDExOjQwOjQxLDM4NCBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMDQgMTE6NDE6MDcsMzY3IFtXb3JrZXItMTcxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDQgMTE6NDE6MDcsMzY3IFtXb3JrZXItMTcxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNCAxMTo0NTo1Myw0NjQgW1dvcmtlci0xNjQ6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNCAxMTo0NTo1Myw0OTIgW1dvcmtlci0xNjQ6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDQgMTE6NDU6NTMsNDk2IFtXb3JrZXItMTY0OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDQgMTE6NDU6NTMsNDk5IFtXb3JrZXItMTY0OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA0IDExOjQ5OjA4LDA4NyBbV29ya2VyLTE2OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA0IDExOjQ5OjA4LDA4NyBbV29ya2VyLTE2OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDQgMTE6NDk6MjUsNTAxIFtXb3JrZXItMTY5OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDQgMTE6NDk6MjUsNTE2IFtXb3JrZXItMTY5OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA0IDExOjQ5OjI1LDUxOCBbV29ya2VyLTE2OTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA0IDExOjQ5OjI1LDUyMCBbV29ya2VyLTE2OTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wNCAxMTo1NjozOCwwMTAgW1dvcmtlci0xNjY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNCAxMTo1NjozOCwwMTEgW1dvcmtlci0xNjY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA0IDExOjU2OjUxLDM5MiBbV29ya2VyLTE2NzogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA0IDExOjU2OjUxLDM5MyBbV29ya2VyLTE2NzogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wNCAxMTo1Njo1MSwzOTQgW1dvcmtlci0xNjc6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNCAxMTo1Njo1MSw0MjEgW1dvcmtlci0xNjc6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDQgMTI6MDM6MTEsNjIxIFtXb3JrZXItMTcyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDQgMTI6MDM6MTEsNjIxIFtXb3JrZXItMTcyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNCAxMjowNDoyNCwxNDcgW1dvcmtlci0xNzI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA0IDEyOjA0OjI0LDE0OSBbV29ya2VyLTE3MjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA0IDEyOjA0OjI0LDE1MSBbV29ya2VyLTE3MjogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDQgMTI6MDQ6MjQsMTUzIFtXb3JrZXItMTcyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDQgMTI6MDQ6MjQsMjMwIFtXb3JrZXItMTcyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNCAxMjowNDoyNCwyMzIgW1dvcmtlci0xNzI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wNCAxMjowNDoyNCwyMzMgW1dvcmtlci0xNzI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA0IDEyOjA0OjI0LDIzNSBbV29ya2VyLTE3MjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA0IDEyOjA0OjM0LDM2NiBbV29ya2VyLTE2NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA0IDEyOjA0OjM0LDM2NiBbV29ya2VyLTE2NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDQgMTI6MDU6NDUsNTkxIFtXb3JrZXItMTY0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDQgMTI6MDU6NDUsNTkxIFtXb3JrZXItMTY0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNCAxMjowOToxOSw2NDkgW1dvcmtlci0xNzQ6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNCAxMjowOToxOSw2NTEgW1dvcmtlci0xNzQ6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDQgMTI6MDk6MTksNjUyIFtXb3JrZXItMTc0OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDQgMTI6MDk6MTksNjU0IFtXb3JrZXItMTc0OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA0IDEyOjExOjE3LDI4NyBbV29ya2VyLTE3MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA0IDEyOjExOjE3LDI4OSBbV29ya2VyLTE3MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wNCAxMjoxMToxNywyOTMgW1dvcmtlci0xNzM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNCAxMjoxMToxNywyOTcgW1dvcmtlci0xNzM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDQgMTI6MTI6MTMsNzMzIFtXb3JrZXItMTY0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDQgMTI6MTI6MTMsNzMzIFtXb3JrZXItMTY0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNCAxMjoxMjo1OSw5NzcgW1dvcmtlci0xNjQ6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNCAxMjoxMjo1OSw5ODMgW1dvcmtlci0xNjQ6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDQgMTI6MTI6NTksOTg2IFtXb3JrZXItMTY0OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDQgMTI6MTI6NTksOTg5IFtXb3JrZXItMTY0OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA0IDEyOjE2OjEzLDA2MyBbV29ya2VyLTE6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTA0LTA0IDEyOjE2OjM5LDY5NCBbV29ya2VyLTc6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMC0wNC0wNCAxMjoxODowMSw3MjMgW1dvcmtlci0xMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA0IDEyOjE4OjAxLDcyNCBbV29ya2VyLTExOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNCAxMjoxODozMyw2NjQgW1dvcmtlci02OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDQgMTI6MTg6MzMsNjY3IFtXb3JrZXItNjogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wNCAxMjoxODozMyw2NzEgW1dvcmtlci02OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDQgMTI6MTg6MzMsNjczIFtXb3JrZXItNjogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wNCAxMjoyNzowMiw5MjAgW1dvcmtlci0xMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA0IDEyOjI3OjAyLDkyMSBbV29ya2VyLTExOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNCAxMjoyNzoxNyw3MjUgW1dvcmtlci0xOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDQgMTI6Mjc6MTcsNzQwIFtXb3JrZXItMTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wNCAxMjoyNzoxNyw3NDIgW1dvcmtlci0xOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDQgMTI6Mjc6MTcsNzUwIFtXb3JrZXItMTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wNCAxMjozNTozNiwzMTggW1dvcmtlci0xNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA0IDEyOjM1OjM2LDMxOCBbV29ya2VyLTE2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNCAxMjozNTo1NCw5ODYgW1dvcmtlci0xNjogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA0IDEyOjM1OjU0LDk4OCBbV29ya2VyLTE2OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA0IDEyOjM1OjU0LDk4OSBbV29ya2VyLTE2OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDQgMTI6MzU6NTQsOTkxIFtXb3JrZXItMTY6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDQgMTI6NTg6MDgsOTc3IFtXb3JrZXItMTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNCAxMjo1ODowOCw5NzggW1dvcmtlci0xNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDQgMTI6NTg6NTMsOTE1IFtXb3JrZXItMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA0IDEyOjU4OjUzLDkxNiBbV29ya2VyLTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA0IDEzOjAwOjM5LDU4NCBbV29ya2VyLTE1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDQgMTM6MDA6MzksNTg0IFtXb3JrZXItMTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA0IDEzOjAwOjU0LDAzMSBbV29ya2VyLTE3OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDQgMTM6MDA6NTQsMDMzIFtXb3JrZXItMTc6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDQgMTM6MDA6NTQsMDM1IFtXb3JrZXItMTc6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNCAxMzowMDo1NCwwMzcgW1dvcmtlci0xNzogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wNCAxMzowMjoxNyw5NjYgW1dvcmtlci0xNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA0IDEzOjAyOjE3LDk2NiBbV29ya2VyLTE2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNCAxMzowMjoyOSw1MjkgW1dvcmtlci0xMjogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA0IDEzOjAyOjI5LDUzMSBbV29ya2VyLTEyOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA0IDEzOjAyOjI5LDUzMiBbV29ya2VyLTEyOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDQgMTM6MDI6MjksNTU1IFtXb3JrZXItMTI6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDQgMTM6Mjg6MDYsNDUxIFtXb3JrZXItMjU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNCAxMzoyODowNiw0NTIgW1dvcmtlci0yNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDQgMTM6Mjg6MjUsMTYyIFtXb3JrZXItMjM6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNCAxMzoyODoyNSwxODQgW1dvcmtlci0yMzogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wNCAxMzoyODoyNSwxODUgW1dvcmtlci0yMzogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA0IDEzOjI4OjI1LDE4NyBbV29ya2VyLTIzOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA0IDEzOjMwOjM4LDczMCBbV29ya2VyLTEyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDQgMTM6MzA6MzgsNzMwIFtXb3JrZXItMTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA0IDEzOjMwOjUxLDk3NyBbV29ya2VyLTE2OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDQgMTM6MzA6NTEsOTc5IFtXb3JrZXItMTY6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDQgMTM6MzA6NTEsOTgwIFtXb3JrZXItMTY6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNCAxMzozMDo1MSw5ODIgW1dvcmtlci0xNjogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wNCAxODozMjo1NCw3ODggW1dvcmtlci00OTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA0IDE4OjMyOjU0LDgzNCBbV29ya2VyLTQ5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA0IDE4OjMyOjU0LDgzNSBbV29ya2VyLTQ5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDQgMTg6MzI6NTQsODM3IFtXb3JrZXItNDk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDQgMTg6MzY6MzAsNjY1IFtXb3JrZXItNTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNCAxODozNjozMCw2NjYgW1dvcmtlci01NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDQgMTg6Mzk6MzUsMDc5IFtXb3JrZXItNTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNCAxODozOTozNSwwNzkgW1dvcmtlci01ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDQgMTg6NDM6MDIsNjgxIFtXb3JrZXItNTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNCAxODo0MzowMiw2ODEgW1dvcmtlci01NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDYgMDg6MTM6MjAsMDg5IFtXb3JrZXItMjogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjAtMDQtMDYgMTE6NTE6MDMsMjQ0IFtXb3JrZXItNDM6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMC0wNC0wNiAxMTo1Mjo1MywyOTUgW1dvcmtlci00NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA2IDExOjUyOjUzLDI5NiBbV29ya2VyLTQ0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNiAxMTo1NDozMiw3MTkgW1dvcmtlci00NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA2IDExOjU0OjMyLDcyMCBbV29ya2VyLTQ0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNiAxMTo1NDo1NCw1MjAgW1dvcmtlci00MzogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA2IDExOjU0OjU0LDUzMCBbV29ya2VyLTQzOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA2IDExOjU0OjU0LDUzNCBbV29ya2VyLTQzOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDYgMTE6NTQ6NTQsNTM3IFtXb3JrZXItNDM6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDYgMTI6MDA6MTksNzczIFtXb3JrZXItNDM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNiAxMjowMDoxOSw3NzMgW1dvcmtlci00MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDYgMTI6MDA6NDYsODY1IFtXb3JrZXItNDc6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNiAxMjowMDo0Niw4NjcgW1dvcmtlci00NzogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wNiAxMjowMDo0Niw4NzAgW1dvcmtlci00NzogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA2IDEyOjAwOjQ2LDg3MSBbV29ya2VyLTQ3OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA2IDEyOjM5OjM2LDYyNiBbV29ya2VyLTY1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDYgMTI6Mzk6MzYsNzQxIFtXb3JrZXItNjU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA2IDE1OjE4OjEzLDA0MiBbV29ya2VyLTgxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDYgMTU6MTg6MTMsMDQ1IFtXb3JrZXItODE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA2IDE1OjE4OjI0LDYwMSBbV29ya2VyLTgwOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDYgMTU6MTg6MjQsNjA3IFtXb3JrZXItODA6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDYgMTU6MTg6MjQsNjEwIFtXb3JrZXItODA6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNiAxNToxODoyNCw2MTIgW1dvcmtlci04MDogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wNiAxNToyMToxOCw4NTggW1dvcmtlci03MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA2IDE1OjIxOjE4LDg1OCBbV29ya2VyLTczOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNiAxNToyMTozMSwzOTMgW1dvcmtlci04MTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA2IDE1OjIxOjMxLDM5NSBbV29ya2VyLTgxOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA2IDE1OjIxOjMxLDM5NyBbV29ya2VyLTgxOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDYgMTU6MjE6MzEsNDAwIFtXb3JrZXItODE6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDYgMTU6MjM6NTEsODUxIFtXb3JrZXItODI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNiAxNToyMzo1MSw4NTEgW1dvcmtlci04MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDYgMTU6MjQ6MTcsNzQ5IFtXb3JrZXItODA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNiAxNToyNDoxNyw3NDkgW1dvcmtlci04MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDYgMTU6MjQ6MzQsMDI3IFtXb3JrZXItODE6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNiAxNToyNDozNCwwMzAgW1dvcmtlci04MTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wNiAxNToyNDozNCwwMzMgW1dvcmtlci04MTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA2IDE1OjI0OjM0LDA0OSBbV29ya2VyLTgxOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA2IDE1OjMwOjIyLDI1OSBbV29ya2VyLTczOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDYgMTU6MzA6MjIsMjYwIFtXb3JrZXItNzM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA2IDE1OjMxOjMzLDU0NiBbV29ya2VyLTg1OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDYgMTU6MzE6MzMsNTQ4IFtXb3JrZXItODU6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDYgMTU6MzE6MzMsNTUwIFtXb3JrZXItODU6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNiAxNTozMTozMyw1NTIgW1dvcmtlci04NTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wNiAxNTo0ODoyMCw3MDkgW1dvcmtlci0xMDU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNiAxNTo0ODoyMCw3MTAgW1dvcmtlci0xMDU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA2IDE1OjQ4OjM0LDY1MSBbV29ya2VyLTEwNTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA2IDE1OjQ4OjM0LDY1MyBbV29ya2VyLTEwNTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wNiAxNTo0ODozNCw2NTUgW1dvcmtlci0xMDU6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNiAxNTo0ODozNCw2NTcgW1dvcmtlci0xMDU6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDYgMTU6NTE6NTIsNDMzIFtXb3JrZXItMTA3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDYgMTU6NTE6NTIsNDMzIFtXb3JrZXItMTA3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNiAxNTo1MjowNCwyODYgW1dvcmtlci0xMDg6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNiAxNTo1MjowNCwyODggW1dvcmtlci0xMDg6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDYgMTU6NTI6MDQsMjkwIFtXb3JrZXItMTA4OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDYgMTU6NTI6MDQsMjkyIFtXb3JrZXItMTA4OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA2IDE2OjAyOjA3LDc2NyBbV29ya2VyLTExMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA2IDE2OjAyOjA3LDc2OCBbV29ya2VyLTExMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDYgMTY6MDI6MjAsMTMyIFtXb3JrZXItMTE1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDYgMTY6MDI6MjAsMTMzIFtXb3JrZXItMTE1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNiAxNjowMjoyMCwxMzQgW1dvcmtlci0xMTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBXQVJOICBvLmUubS5pLmwuTWF2ZW5MYXVuY2hFeHRlbnNpb25zU3VwcG9ydCAtIFVua25vd24gb3IgdW5zdXBwb3J0ZWQgc291cmNlIGxvY2F0b3Igb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmxhdW5jaGluZy5zb3VyY2Vsb29rdXAuYWR2YW5jZWQuQWR2YW5jZWRTb3VyY2VMb29rdXBEaXJlY3RvcgorMjAyMC0wNC0wNiAxNjowMjozOCw5MTQgW1dvcmtlci0xMTQ6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNiAxNjowMjozOCw5MTkgW1dvcmtlci0xMTQ6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDYgMTY6MDI6MzgsOTIyIFtXb3JrZXItMTE0OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDYgMTY6MDI6MzgsOTI1IFtXb3JrZXItMTE0OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA2IDE2OjQ1OjMzLDI0MCBbV29ya2VyLTEyNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA2IDE2OjQ1OjMzLDI0MCBbV29ya2VyLTEyNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDYgMTY6NDU6NDQsMTgxIFtXb3JrZXItMTI2OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDYgMTY6NDU6NDQsMTgzIFtXb3JrZXItMTI2OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA2IDE2OjQ1OjQ0LDE4NiBbV29ya2VyLTEyNjogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA2IDE2OjQ1OjQ0LDE4OCBbV29ya2VyLTEyNjogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wNiAxNjo0NjoyMCw5NTggW1dvcmtlci0xMjQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNiAxNjo0NjoyMCw5NTggW1dvcmtlci0xMjQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA2IDE2OjQ2OjMzLDE0NSBbV29ya2VyLTExOTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA2IDE2OjQ2OjMzLDE0OSBbV29ya2VyLTExOTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wNiAxNjo0NjozMywxNTMgW1dvcmtlci0xMTk6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNiAxNjo0NjozMywxNTYgW1dvcmtlci0xMTk6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDcgMDg6MzQ6MzksMDU0IFtXb3JrZXItMjogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjAtMDQtMDcgMDg6Mzc6NDQsNDU5IFtXb3JrZXItMjogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA3IDA4OjM3OjQ0LDQ2MSBbV29ya2VyLTI6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDcgMDg6Mzc6NDQsNDY0IFtXb3JrZXItMjogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA3IDA4OjM3OjQ0LDQ2NSBbV29ya2VyLTI6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDcgMDg6Mzk6MTcsMzg2IFtXb3JrZXItMTg6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMC0wNC0wNyAwODozOTo0MywxOTIgW1dvcmtlci05OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDcgMDg6Mzk6NDMsMTkzIFtXb3JrZXItOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDcgMDg6NDA6MDAsOTM4IFtXb3JrZXItOTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA3IDA4OjQwOjAwLDk0MCBbV29ya2VyLTk6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDcgMDg6NDA6MDAsOTQzIFtXb3JrZXItOTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA3IDA4OjQwOjAwLDk0NSBbV29ya2VyLTk6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDcgMDg6NDI6NTEsNjQ4IFtXb3JrZXItMjA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNyAwODo0Mjo1MSw2NDggW1dvcmtlci0yMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDcgMDg6NDM6MDUsODE3IFtXb3JrZXItMTU6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNyAwODo0MzowNSw4MjAgW1dvcmtlci0xNTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wNyAwODo0MzowNSw4MjMgW1dvcmtlci0xNTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA3IDA4OjQzOjA1LDgyNiBbV29ya2VyLTE1OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA3IDA4OjQ0OjE4LDgxMyBbV29ya2VyLTE2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDcgMDg6NDQ6MTgsODEzIFtXb3JrZXItMTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA3IDA4OjQ0OjI4LDY1NCBbV29ya2VyLTE1OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDcgMDg6NDQ6MjgsNjU2IFtXb3JrZXItMTU6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDcgMDg6NDQ6MjgsNjU4IFtXb3JrZXItMTU6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNyAwODo0NDoyOCw2NTkgW1dvcmtlci0xNTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wNyAwOTowNTozNCw5MDMgW1dvcmtlci0xODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA3IDA5OjA1OjM0LDkwMyBbV29ya2VyLTE4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNyAwOToxODo0MSw0NzEgW1dvcmtlci0yOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA3IDA5OjE4OjQxLDQ3MSBbV29ya2VyLTI5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNyAwOToxOTowMSw1MTIgW1dvcmtlci0zNDogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA3IDA5OjE5OjAxLDUxNCBbV29ya2VyLTM0OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA3IDA5OjE5OjAxLDUxNyBbV29ya2VyLTM0OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDcgMDk6MTk6MDEsNTIxIFtXb3JrZXItMzQ6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDcgMDk6NTY6NTUsMjE0IFtXb3JrZXItNDM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNyAwOTo1Njo1NSwyMTUgW1dvcmtlci00MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDcgMDk6NTc6MTIsNjk5IFtXb3JrZXItNDQ6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNyAwOTo1NzoxMiw3MDEgW1dvcmtlci00NDogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wNyAwOTo1NzoxMiw3MDQgW1dvcmtlci00NDogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA3IDA5OjU3OjEyLDcwNiBbV29ya2VyLTQ0OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA3IDEwOjAyOjQxLDE0MiBbV29ya2VyLTM5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDcgMTA6MDI6NDEsMTQyIFtXb3JrZXItMzk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA3IDEwOjAyOjUyLDA2NiBbV29ya2VyLTQ1OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDcgMTA6MDI6NTIsMDY4IFtXb3JrZXItNDU6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDcgMTA6MDI6NTIsMDcwIFtXb3JrZXItNDU6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNyAxMDowMjo1MiwwNzIgW1dvcmtlci00NTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wNyAxMDo1NTo1NiwzNzYgW1dvcmtlci01NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA3IDEwOjU1OjU2LDM3NyBbV29ya2VyLTU1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNyAxMDo1Njo0MSw4NzcgW1dvcmtlci01NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA3IDEwOjU2OjQxLDg3OCBbV29ya2VyLTU3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNyAxMDo1Njo1Myw4ODMgW1dvcmtlci01OTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA3IDEwOjU2OjUzLDg4NSBbV29ya2VyLTU5OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA3IDEwOjU2OjUzLDg4OCBbV29ya2VyLTU5OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDcgMTA6NTY6NTMsODg5IFtXb3JrZXItNTk6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDcgMTA6NTc6MjEsNTU1IFtXb3JrZXItNTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNyAxMDo1NzoyMSw1NTUgW1dvcmtlci01OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDcgMTA6NTc6MzMsNDM4IFtXb3JrZXItNTU6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNyAxMDo1NzozMyw0NDAgW1dvcmtlci01NTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wNyAxMDo1NzozMyw0NDIgW1dvcmtlci01NTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA3IDEwOjU3OjMzLDQ0NCBbV29ya2VyLTU1OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA3IDEwOjU4OjAyLDcyMyBbV29ya2VyLTU4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDcgMTA6NTg6MDIsNzIzIFtXb3JrZXItNTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA3IDEwOjU4OjE0LDYxNCBbV29ya2VyLTU3OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDcgMTA6NTg6MTQsNjE2IFtXb3JrZXItNTc6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDcgMTA6NTg6MTQsNjE4IFtXb3JrZXItNTc6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNyAxMDo1ODoxNCw2MjAgW1dvcmtlci01NzogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wNyAxMTowNDozOCw0NTIgW1dvcmtlci02MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA3IDExOjA0OjM4LDQ1MiBbV29ya2VyLTYxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNyAxMTowNDo0OSw2OTUgW1dvcmtlci01ODogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA3IDExOjA0OjQ5LDY5NiBbV29ya2VyLTU4OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA3IDExOjA0OjQ5LDY5OCBbV29ya2VyLTU4OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDcgMTE6MDQ6NDksNjk5IFtXb3JrZXItNTg6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDcgMTE6MDk6NDUsOTIzIFtXb3JrZXItNjI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNyAxMTowOTo0NSw5MjMgW1dvcmtlci02MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDcgMTE6MDk6NTYsMTE4IFtXb3JrZXItNjA6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNyAxMTowOTo1NiwxMjAgW1dvcmtlci02MDogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wNyAxMTowOTo1NiwxMjIgW1dvcmtlci02MDogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA3IDExOjA5OjU2LDEyNCBbV29ya2VyLTYwOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA3IDExOjE0OjM0LDQ1MCBbV29ya2VyLTY0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDcgMTE6MTQ6MzQsNDUwIFtXb3JrZXItNjQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA3IDExOjE0OjQ4LDg4NyBbV29ya2VyLTY0OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDcgMTE6MTQ6NDgsODg5IFtXb3JrZXItNjQ6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDcgMTE6MTQ6NDgsODkwIFtXb3JrZXItNjQ6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNyAxMToxNDo0OCw4OTIgW1dvcmtlci02NDogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wNyAxNDowNzoxNCw1NzUgW1dvcmtlci04MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA3IDE0OjA3OjE0LDU3NiBbV29ya2VyLTgzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNyAxNDoxNDoxMCw1OTkgW1dvcmtlci04NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA3IDE0OjE0OjEwLDU5OSBbV29ya2VyLTg3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNyAxNDoxNDoyNSw3MjUgW1dvcmtlci04NDogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA3IDE0OjE0OjI1LDcyNyBbV29ya2VyLTg0OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA3IDE0OjE0OjI1LDcyOSBbV29ya2VyLTg0OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDcgMTQ6MTQ6MjUsNzMxIFtXb3JrZXItODQ6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDcgMTQ6MTY6MjMsNDY3IFtXb3JrZXItODQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNyAxNDoxNjoyMyw0NjcgW1dvcmtlci04NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDcgMTQ6MTY6MzcsMzUyIFtXb3JrZXItODQ6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNyAxNDoxNjozNywzNTQgW1dvcmtlci04NDogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wNyAxNDoxNjozNywzNTUgW1dvcmtlci04NDogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA3IDE0OjE2OjM3LDM1NiBbV29ya2VyLTg0OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA3IDE0OjMxOjU2LDQzMSBbV29ya2VyLTg1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDcgMTQ6MzE6NTYsNDMyIFtXb3JrZXItODU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA3IDE0OjMyOjE3LDMzNiBbV29ya2VyLTg1OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDcgMTQ6MzI6MTcsNDc1IFtXb3JrZXItODU6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDcgMTQ6MzI6MTcsNDc3IFtXb3JrZXItODU6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNyAxNDozMjoxNyw0NzkgW1dvcmtlci04NTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wNyAxNTo1MTo1MiwxMDUgW1dvcmtlci0xMTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNyAxNTo1MTo1MiwxMDYgW1dvcmtlci0xMTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA3IDE1OjUyOjIyLDQ3NiBbV29ya2VyLTExODogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA3IDE1OjUyOjIyLDQ3OCBbV29ya2VyLTExODogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wNyAxNTo1MjoyMiw0ODAgW1dvcmtlci0xMTg6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNyAxNTo1MjoyMiw0ODEgW1dvcmtlci0xMTg6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDcgMTc6NDE6MjMsODI5IFtXb3JrZXItMTQwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDcgMTc6NDE6MjMsODI5IFtXb3JrZXItMTQwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNyAxNzo0MTozNSw3NjEgW1dvcmtlci0xNDM6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNyAxNzo0MTozNSw3NjMgW1dvcmtlci0xNDM6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDcgMTc6NDE6MzUsNzY1IFtXb3JrZXItMTQzOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDcgMTc6NDE6MzUsNzY3IFtXb3JrZXItMTQzOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA4IDA4OjEwOjM1LDQxMSBbV29ya2VyLTEyOiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjAtMDQtMDggMDg6MTE6MTUsODI1IFtXb3JrZXItMTg6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTA0LTA4IDA4OjExOjI0LDQ0OSBbV29ya2VyLTE5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDggMDg6MTE6MjQsNDUwIFtXb3JrZXItMTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA4IDA4OjExOjQ1LDU3NiBbV29ya2VyLTE2OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDggMDg6MTE6NDUsNTc4IFtXb3JrZXItMTY6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDggMDg6MTE6NDUsNTgxIFtXb3JrZXItMTY6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wOCAwODoxMTo0NSw1ODMgW1dvcmtlci0xNjogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wOCAxMjozNToxMCwzMDkgW1dvcmtlci0zOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA4IDEyOjM1OjEwLDMxMSBbV29ya2VyLTM5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wOCAxMjozNTozNywwMjggW1dvcmtlci00MTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA4IDEyOjM1OjM3LDAzOSBbV29ya2VyLTQxOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA4IDEyOjM1OjM3LDA0MiBbV29ya2VyLTQxOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDggMTI6MzU6MzcsMDQ0IFtXb3JrZXItNDE6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDggMTI6MzY6MzksODU2IFtXb3JrZXItMzk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wOCAxMjozNjozOSw4NTYgW1dvcmtlci0zOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDggMTI6MzY6NTcsNjIzIFtXb3JrZXItNDE6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wOCAxMjozNjo1Nyw2MjUgW1dvcmtlci00MTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wOCAxMjozNjo1Nyw2MjYgW1dvcmtlci00MTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA4IDEyOjM2OjU3LDYyNyBbV29ya2VyLTQxOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA4IDE0OjIzOjM3LDM4OSBbV29ya2VyLTU2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDggMTQ6MjM6MzcsMzg5IFtXb3JrZXItNTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA4IDE0OjIzOjUyLDE0NSBbV29ya2VyLTUyOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDggMTQ6MjM6NTIsMTQ5IFtXb3JrZXItNTI6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDggMTQ6MjM6NTIsMTUxIFtXb3JrZXItNTI6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wOCAxNDoyMzo1MiwxNTcgW1dvcmtlci01MjogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wOCAxNDo1MDowNiwwOTMgW1dvcmtlci02OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA4IDE0OjUwOjA2LDI4MCBbV29ya2VyLTY5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wOCAxNDo1MDo1MSw1ODEgW1dvcmtlci02NzogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA4IDE0OjUwOjUxLDU4NSBbV29ya2VyLTY3OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA4IDE0OjUwOjUxLDU4NyBbV29ya2VyLTY3OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDggMTQ6NTA6NTEsNjIyIFtXb3JrZXItNjc6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDggMTU6MTE6NDksMTYxIFtXb3JrZXItNzM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wOCAxNToxMTo0OSwxNjIgW1dvcmtlci03MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDggMTU6MTI6MDAsNzU3IFtXb3JrZXItNjg6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wOCAxNToxMjowMCw3NTkgW1dvcmtlci02ODogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wOCAxNToxMjowMCw3NjEgW1dvcmtlci02ODogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA4IDE1OjEyOjAwLDc2MyBbV29ya2VyLTY4OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA4IDE1OjEzOjU1LDUyMSBbV29ya2VyLTczOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDggMTU6MTM6NTUsNTIxIFtXb3JrZXItNzM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA4IDE1OjE0OjA3LDAyOCBbV29ya2VyLTczOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDggMTU6MTQ6MDcsMDMwIFtXb3JrZXItNzM6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDggMTU6MTQ6MDcsMDMyIFtXb3JrZXItNzM6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wOCAxNToxNDowNywwMzMgW1dvcmtlci03MzogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wOSAwOTowMjowNSw3MDQgW1dvcmtlci0zOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMC0wNC0wOSAwOTo1OTo1MSwzMDggW1dvcmtlci0yMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA5IDA5OjU5OjUxLDMwOSBbV29ya2VyLTIxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wOSAxMDoyNTowMCwwNjAgW1dvcmtlci0yNTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA5IDEwOjI1OjAwLDA2MiBbV29ya2VyLTI1OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA5IDEwOjI1OjAwLDA2NSBbV29ya2VyLTI1OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDkgMTA6MjU6MDAsMDY3IFtXb3JrZXItMjU6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDkgMTA6Mjc6MzAsNDcyIFtXb3JrZXItMjQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wOSAxMDoyNzozMCw0NzIgW1dvcmtlci0yNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDkgMTA6Mjc6NDMsMDI1IFtXb3JrZXItMjQ6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wOSAxMDoyNzo0MywwMjkgW1dvcmtlci0yNDogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wOSAxMDoyNzo0MywwMzIgW1dvcmtlci0yNDogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA5IDEwOjI3OjQzLDAzNSBbV29ya2VyLTI0OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA5IDEwOjM5OjAyLDU0NSBbV29ya2VyLTI5OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDkgMTA6Mzk6MDIsNTQ4IFtXb3JrZXItMjk6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDkgMTA6Mzk6MDIsNTUwIFtXb3JrZXItMjk6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wOSAxMDozOTowMiw1NTMgW1dvcmtlci0yOTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wOSAxMDo1MTowNiw0NTEgW1dvcmtlci0yNjogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIwLTA0LTA5IDEwOjUxOjUxLDQyMCBbV29ya2VyLTM2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDkgMTA6NTE6NTEsNDIwIFtXb3JrZXItMzY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA5IDEwOjUyOjAzLDYyNiBbV29ya2VyLTMzOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDkgMTA6NTI6MDMsNjI4IFtXb3JrZXItMzM6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDkgMTA6NTI6MDMsNjMwIFtXb3JrZXItMzM6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wOSAxMDo1MjowMyw2MzIgW1dvcmtlci0zMzogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wOSAxMDo1ODowOCw3MzcgW1dvcmtlci0zNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA5IDEwOjU4OjA4LDczNyBbV29ya2VyLTM1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wOSAxMDo1ODoyNiwxOTggW1dvcmtlci0zODogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA5IDEwOjU4OjI2LDIwMCBbV29ya2VyLTM4OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA5IDEwOjU4OjI2LDIwMSBbV29ya2VyLTM4OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDkgMTA6NTg6MjYsMjA0IFtXb3JrZXItMzg6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDkgMTE6MTg6NDEsOTIxIFtXb3JrZXItMzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wOSAxMToxODo0MSw5MjEgW1dvcmtlci0zMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDkgMTE6MTk6MDYsODMwIFtXb3JrZXItMzI6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wOSAxMToxOTowNiw4MzMgW1dvcmtlci0zMjogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wOSAxMToxOTowNiw4MzQgW1dvcmtlci0zMjogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA5IDExOjE5OjA2LDgzNiBbV29ya2VyLTMyOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA5IDE2OjQ3OjExLDIzOCBbV29ya2VyLTQ2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDkgMTY6NDc6MTEsMjM5IFtXb3JrZXItNDY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA5IDE2OjQ4OjAyLDE4NCBbV29ya2VyLTMxOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDkgMTY6NDg6MDIsMTg2IFtXb3JrZXItMzE6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDkgMTY6NDg6MDIsMTg4IFtXb3JrZXItMzE6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wOSAxNjo0ODowMiwxOTEgW1dvcmtlci0zMTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wOSAxNjo0OToyNSwyNzAgW1dvcmtlci0zODogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA5IDE2OjQ5OjI1LDI3MyBbV29ya2VyLTM4OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA5IDE2OjQ5OjI1LDI3NSBbV29ya2VyLTM4OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDkgMTY6NDk6MjUsMjc2IFtXb3JrZXItMzg6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDkgMTY6NTA6NDQsODk0IFtXb3JrZXItNDE6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wOSAxNjo1MDo0NCw4OTYgW1dvcmtlci00MTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wOSAxNjo1MDo0NCw4OTggW1dvcmtlci00MTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA5IDE2OjUwOjQ0LDg5OSBbV29ya2VyLTQxOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA5IDE2OjUyOjIxLDAwMyBbV29ya2VyLTUwOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDkgMTY6NTI6MjEsMDA1IFtXb3JrZXItNTA6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDkgMTY6NTI6MjEsMDA3IFtXb3JrZXItNTA6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wOSAxNjo1MjoyMSwwMDkgW1dvcmtlci01MDogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wOSAxNjo1NzoyMiwxMTQgW1dvcmtlci01NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA5IDE2OjU3OjIyLDExNCBbV29ya2VyLTU0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wOSAxNjo1NzozNSwwMTkgW1dvcmtlci00NjogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA5IDE2OjU3OjM1LDAyMSBbV29ya2VyLTQ2OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA5IDE2OjU3OjM1LDAyMiBbV29ya2VyLTQ2OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDkgMTY6NTc6MzUsMDI0IFtXb3JrZXItNDY6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDkgMTc6MDM6MzUsMjA5IFtXb3JrZXItNTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wOSAxNzowMzozNSwyMDkgW1dvcmtlci01NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDkgMTc6MDM6NDgsNzY4IFtXb3JrZXItNTE6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wOSAxNzowMzo0OCw3NzAgW1dvcmtlci01MTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wOSAxNzowMzo0OCw3NzEgW1dvcmtlci01MTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA5IDE3OjAzOjQ4LDc3MyBbV29ya2VyLTUxOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTE0IDE1OjAzOjI0LDcwMSBbV29ya2VyLTI6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgb3V0LW9mLWRhdGUuIFRyeWluZyB0byB1cGRhdGUuCisyMDIwLTA0LTE0IDE1OjEwOjM2LDQ4NiBbV29ya2VyLTE1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMTQgMTU6MTA6MzYsNDg4IFtXb3JrZXItMTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTE0IDE1OjEwOjU3LDEzMCBbV29ya2VyLTU6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0xNCAxNToxMDo1NywxMzMgW1dvcmtlci01OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTE0IDE1OjEwOjU3LDEzNiBbV29ya2VyLTU6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0xNCAxNToxMDo1NywxMzggW1dvcmtlci01OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTE0IDE1OjEyOjQ2LDY0MSBbV29ya2VyLTE0OiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjAtMDQtMTQgMTU6MTQ6MzMsMTIyIFtXb3JrZXItMTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0xNCAxNToxNDozMywxMjIgW1dvcmtlci0xNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMTQgMTU6MTQ6NDYsMjE5IFtXb3JrZXItMTE6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0xNCAxNToxNDo0NiwyMjIgW1dvcmtlci0xMTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0xNCAxNToxNDo0NiwyMjQgW1dvcmtlci0xMTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTE0IDE1OjE0OjQ2LDIyNiBbV29ya2VyLTExOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTE0IDE2OjIxOjQwLDIxNSBbV29ya2VyLTQxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMTQgMTY6MjE6NDAsMjE2IFtXb3JrZXItNDE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTE0IDE2OjU5OjM3LDc0NiBbV29ya2VyLTQ3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMTQgMTY6NTk6MzcsNzQ3IFtXb3JrZXItNDc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTE0IDE3OjM5OjUwLDc4MSBbV29ya2VyLTU0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMTQgMTc6Mzk6NTAsNzk5IFtXb3JrZXItNTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTE0IDE3OjQwOjQ2LDYwNiBbV29ya2VyLTU5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMTQgMTc6NDA6NDYsNjA2IFtXb3JrZXItNTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTE0IDE3OjQxOjQwLDg5MiBbV29ya2VyLTU0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXEdsZW1tU2VydmljZXMKKzIwMjAtMDQtMTQgMTc6NDE6NDAsODkyIFtXb3JrZXItNTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTE0IDE3OjQxOjU5LDE1OSBbV29ya2VyLTU1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMTQgMTc6NDE6NTksMTU5IFtXb3JrZXItNTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTE0IDE3OjQ2OjA1LDQ3NyBbV29ya2VyLTYwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMTQgMTc6NDY6MDUsNDc4IFtXb3JrZXItNjA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTE0IDE4OjIwOjAyLDcwNSBbV29ya2VyLTY0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMTQgMTg6MjA6MDIsNzA2IFtXb3JrZXItNjQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTE1IDA4OjMwOjE4LDIxNiBbV29ya2VyLTE6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTA0LTE1IDA4OjQwOjA3LDcwNSBbV29ya2VyLTA6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMC0wNC0xNSAwODo0MTo1OSwyMjYgW1dvcmtlci0wOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMTUgMDg6NDE6NTksMjI3IFtXb3JrZXItMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMTUgMDg6NDM6NTAsNTE4IFtXb3JrZXItMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTE1IDA4OjQzOjUwLDUxOCBbV29ya2VyLTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTE1IDA4OjQ0OjM2LDEzNyBbV29ya2VyLTEzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMTUgMDg6NDQ6MzYsMTM3IFtXb3JrZXItMTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTE1IDA4OjUwOjA4LDYyOCBbV29ya2VyLTE4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMTUgMDg6NTA6MDgsNjI4IFtXb3JrZXItMTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTE1IDA4OjUzOjAyLDE4MCBbV29ya2VyLTIwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMTUgMDg6NTM6MDIsMTgwIFtXb3JrZXItMjA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTE1IDA4OjU0OjA3LDcyNSBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMTUgMDg6NTQ6MDcsNzI3IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMTUgMDg6NTQ6MDcsNzMwIFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0xNSAwODo1NDowNyw3MzQgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0xNSAwODo1NDoxMCw5NDggW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTE1IDA4OjU0OjEwLDk1MiBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTE1IDA4OjU0OjEwLDk1NCBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMTUgMDg6NTQ6MTAsOTU2IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMTUgMDk6MDc6NTgsNzU3IFtXb3JrZXItMjE6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNC0xNSAwOTowODoxNSw2MTAgW1dvcmtlci0xNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTE1IDA5OjA4OjE1LDYxMCBbV29ya2VyLTE1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0xNSAwOToxMTowMiw3OTAgW1dvcmtlci03OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMC0wNC0xNSAwOToxMzozOSw5ODMgW1dvcmtlci02OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMTUgMDk6MTM6MzksOTg1IFtXb3JrZXItNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMTUgMDk6MTc6MDMsMjA0IFtXb3JrZXItNjogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyIC0gVXBkYXRlIHN0YXJ0ZWQKKzIwMjAtMDQtMTUgMDk6MTc6MDQsNjUyIFtXb3JrZXItNjogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogdGVzdDpUZXN0czowLjEgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHBvbS54bWwuCisyMDIwLTA0LTE1IDA5OjE3OjA1LDkxNiBbV29ya2VyLTY6IFVwZGF0aW5nIE1hdmVuIFByb2plY3RdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gQWRkaW5nIHNvdXJjZSBmb2xkZXIgL1Rlc3RzL3NyYworMjAyMC0wNC0xNSAwOToxNzowNSw5MTcgW1dvcmtlci02OiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIE5vdCBhZGRpbmcgc291cmNlIGZvbGRlciAvVGVzdHMvc3JjL3Rlc3QvamF2YSBiZWNhdXNlIGl0IG92ZXJsYXBzIHdpdGggL1Rlc3RzL3NyYworMjAyMC0wNC0xNSAwOToxNzowNiwxMTAgW1dvcmtlci02OiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIgLSBVcGRhdGUgY29tcGxldGVkOiAyIHNlYworMjAyMC0wNC0xNSAwOToyMDo1Myw5OTggW21haW5dIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IHRlc3Q6VGVzdHM6MC4xIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xwb20ueG1sLgorMjAyMC0wNC0xNSAwOToyNzowMiw0OTEgW1dvcmtlci0xMjogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyIC0gVXBkYXRlIHN0YXJ0ZWQKKzIwMjAtMDQtMTUgMDk6Mjc6MDMsMDg4IFtXb3JrZXItMTI6IFVwZGF0aW5nIE1hdmVuIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IHRlc3Q6VGVzdHM6MC4xIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xwb20ueG1sLgorMjAyMC0wNC0xNSAwOToyNzowMyw2NTEgW1dvcmtlci0xMjogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2RlL2tvcmFwL3NlcnZpY2VzLzAuMS9zZXJ2aWNlcy0wLjEucG9tCisyMDIwLTA0LTE1IDA5OjI3OjAzLDY1OSBbV29ya2VyLTEyOiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFRoZSBQT00gZm9yIGRlLmtvcmFwOnNlcnZpY2VzOmphcjowLjEgaXMgbWlzc2luZywgbm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKzIwMjAtMDQtMTUgMDk6Mjc6MDMsODE0IFtXb3JrZXItMTI6IFVwZGF0aW5nIE1hdmVuIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9kZS9rb3JhcC9zZXJ2aWNlcy8wLjEvc2VydmljZXMtMC4xLmphcgorMjAyMC0wNC0xNSAwOToyNzowNCwzODAgW1dvcmtlci0xMjogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBBZGRpbmcgc291cmNlIGZvbGRlciAvVGVzdHMvc3JjCisyMDIwLTA0LTE1IDA5OjI3OjA0LDM4MSBbV29ya2VyLTEyOiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIE5vdCBhZGRpbmcgc291cmNlIGZvbGRlciAvVGVzdHMvc3JjL3Rlc3QvamF2YSBiZWNhdXNlIGl0IG92ZXJsYXBzIHdpdGggL1Rlc3RzL3NyYworMjAyMC0wNC0xNSAwOToyNzowNCw1NTYgW1dvcmtlci0xMjogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyIC0gVXBkYXRlIGNvbXBsZXRlZDogMiBzZWMKKzIwMjAtMDQtMTUgMDk6Mjc6MDUsMjE5IFtXb3JrZXItMTI6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3IgZGUua29yYXA6c2VydmljZXM6amFyOjAuMSBpcyBtaXNzaW5nLCBubyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorMjAyMC0wNC0xNSAwOToyNzowNSw1MjQgW1dvcmtlci0xMjogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2RlL2tvcmFwL3NlcnZpY2VzLzAuMS9zZXJ2aWNlcy0wLjEtc291cmNlcy5qYXIKKzIwMjAtMDQtMTUgMDk6Mjc6MDUsNTc5IFtXb3JrZXItMTI6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIEVSUk9SIG8uZS5tLmouaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iIC0gQ291bGQgbm90IGRvd25sb2FkIHNvdXJjZXMgZm9yIGRlLmtvcmFwOnNlcnZpY2VzOjAuMQorb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb246IENvdWxkIG5vdCByZXNvbHZlIGFydGlmYWN0IGRlLmtvcmFwOnNlcnZpY2VzOmphcjpzb3VyY2VzOjAuMQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6Nzc2KSB+W29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6MSkgfltvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTEyKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3NDMpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3MjApIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNzkpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkQXR0YWNobWVudHMoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjU0KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZE1hdmVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjIyMSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjE2MSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNykgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNTEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5leGVjdXRlKE1hdmVuSW1wbC5qYXZhOjEzNTUpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM1KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorMjAyMC0wNC0xNSAwOToyNzowNSw3NDIgW1dvcmtlci0xMjogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2RlL2tvcmFwL3NlcnZpY2VzLzAuMS9zZXJ2aWNlcy0wLjEtamF2YWRvYy5qYXIKKzIwMjAtMDQtMTUgMDk6Mjc6MDUsNzUzIFtXb3JrZXItMTI6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIEVSUk9SIG8uZS5tLmouaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iIC0gQ291bGQgbm90IGRvd25sb2FkIGphdmFkb2MgZm9yIGRlLmtvcmFwOnNlcnZpY2VzOjAuMQorb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb246IENvdWxkIG5vdCByZXNvbHZlIGFydGlmYWN0IGRlLmtvcmFwOnNlcnZpY2VzOmphcjpqYXZhZG9jOjAuMQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6Nzc2KSB+W29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6MSkgfltvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTEyKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3NDMpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3MjApIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNzkpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkQXR0YWNobWVudHMoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjY1KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZE1hdmVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjIyMSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjE2MSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNykgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNTEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5leGVjdXRlKE1hdmVuSW1wbC5qYXZhOjEzNTUpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM1KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorMjAyMC0wNC0xNSAxNzo1OTo1OCwwNjEgW1dvcmtlci02MTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBHbGVtbUNsaWVudDpHbGVtbUNsaWVudDowLjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXEdsZW1tQ2xpZW50XHBvbS54bWwuCisyMDIwLTA0LTE1IDE3OjU5OjU4LDY4OCBbV29ya2VyLTYxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gQWRkaW5nIHNvdXJjZSBmb2xkZXIgL0dsZW1tQ2xpZW50L3NyYworMjAyMC0wNC0xNSAxNzo1OTo1OCw2ODkgW1dvcmtlci02MTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIE5vdCBhZGRpbmcgc291cmNlIGZvbGRlciAvR2xlbW1DbGllbnQvc3JjL3Rlc3QvamF2YSBiZWNhdXNlIGl0IG92ZXJsYXBzIHdpdGggL0dsZW1tQ2xpZW50L3NyYworMjAyMC0wNC0xNSAxNzo1OTo1OCw5ODUgW1dvcmtlci02MTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkucC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIgLSBVcGRhdGUgc3RhcnRlZAorMjAyMC0wNC0xNSAxNzo1OTo1OSwwNzYgW1dvcmtlci02MTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBHbGVtbUNsaWVudDpHbGVtbUNsaWVudDowLjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXEdsZW1tQ2xpZW50XHBvbS54bWwuCisyMDIwLTA0LTE1IDE3OjU5OjU5LDE3OCBbV29ya2VyLTYxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gQWRkaW5nIHNvdXJjZSBmb2xkZXIgL0dsZW1tQ2xpZW50L3NyYworMjAyMC0wNC0xNSAxNzo1OTo1OSwxODAgW1dvcmtlci02MTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIE5vdCBhZGRpbmcgc291cmNlIGZvbGRlciAvR2xlbW1DbGllbnQvc3JjL3Rlc3QvamF2YSBiZWNhdXNlIGl0IG92ZXJsYXBzIHdpdGggL0dsZW1tQ2xpZW50L3NyYworMjAyMC0wNC0xNSAxNzo1OTo1OSwyOTIgW1dvcmtlci02MTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkucC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIgLSBVcGRhdGUgY29tcGxldGVkOiAwIHNlYworMjAyMC0wNC0xNSAxODowMDozNiw4NjIgW1dvcmtlci02NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1DbGllbnQKKzIwMjAtMDQtMTUgMTg6MDA6MzYsODYzIFtXb3JrZXItNjQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0xNSAxODowOTowMiw3ODYgW1dvcmtlci02NjogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IHRlc3Q6VGVzdHM6MC4xIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xwb20ueG1sLgorMjAyMC0wNC0xNSAxODoxMDowNyw2ODEgW1dvcmtlci02NDogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIwLTA0LTIwIDE5OjAwOjI5LDQ2NSBbV29ya2VyLTI6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgb3V0LW9mLWRhdGUuIFRyeWluZyB0byB1cGRhdGUuCisyMDIwLTA0LTIwIDE5OjAyOjM4LDkyMyBbV29ya2VyLTY6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMC0wNC0yMSAxMDowOTozNSwxNzMgW1dvcmtlci0yOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMC0wNC0yMSAxMjoxMTo1NiwyOTUgW1dvcmtlci02OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMC0wNC0yMSAxMjoxMzowNywxNDQgW1dvcmtlci01OiBVcGRhdGluZyBNYXZlbiBEZXBlbmRlbmNpZXNdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IEdsZW1tQ2xpZW50OkdsZW1tQ2xpZW50OjAuMC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRccG9tLnhtbC4KKzIwMjAtMDQtMjEgMTI6MTM6NDksMjI1IFtXb3JrZXItNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnQKKzIwMjAtMDQtMjEgMTI6MTM6NDksMjI2IFtXb3JrZXItNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTIxIDEyOjE0OjI2LDQxMSBbV29ya2VyLTY6IFVwZGF0aW5nIE1hdmVuIERlcGVuZGVuY2llc10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6R2xlbW1TZXJ2aWNlczI6MC4wLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA0LTIxIDEyOjE0OjQzLDYzMSBbV29ya2VyLTk6IFVwZGF0aW5nIE1hdmVuIERlcGVuZGVuY2llc10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogdGVzdDpUZXN0czowLjEgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHBvbS54bWwuCisyMDIwLTA0LTIxIDEyOjE2OjE4LDA1OSBbV29ya2VyLTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yMSAxMjoxNjoxOCwwNTkgW1dvcmtlci0zOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yMSAxMjozNjozMCw1MzQgW1dvcmtlci0xMTogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIwLTA0LTIxIDE2OjU3OjQ3LDA2MSBbV29ya2VyLTMxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjEgMTY6NTc6NDcsMDYzIFtXb3JrZXItMzE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTIxIDE2OjU5OjQ5LDM1OSBbV29ya2VyLTM3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudAorMjAyMC0wNC0yMSAxNjo1OTo0OSwzNjAgW1dvcmtlci0zNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTIxIDE3OjAwOjIzLDIyMCBbV29ya2VyLTQ0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjEgMTc6MDA6MjMsMjIxIFtXb3JrZXItNDQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTIxIDE3OjIyOjI4LDEyMyBbV29ya2VyLTUxOiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNC0yMSAxODoxMDoxMCw5OTQgW1dvcmtlci01MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTIxIDE4OjEwOjEwLDk5NiBbV29ya2VyLTUwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yMSAxODoyNzowOCw1MDQgW1dvcmtlci0wOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMC0wNC0yMSAxODozNDo0MCwxMTggW1dvcmtlci0yOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjEgMTg6MzQ6NDAsMTE5IFtXb3JrZXItMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjEgMTg6Mzk6MDcsMTMyIFtXb3JrZXItMTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yMSAxODozOTowNywxMzMgW1dvcmtlci0xMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjIgMDc6NTA6NDksNzA4IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yMiAwNzo1MDo1NywwMDIgW1dvcmtlci0yMjogTGF1bmNoaW5nIFByb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTIyIDA3OjUwOjU3LDAwMiBbV29ya2VyLTIyOiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgCisyMDIwLTA0LTIyIDA3OjUxOjEzLDUzOCBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjIgMDc6NTE6MjQsNzg5IFtXb3JrZXItMjE6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgxKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjIgMDc6NTE6MjQsNzg5IFtXb3JrZXItMjE6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgxKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY29tcGlsZQorMjAyMC0wNC0yMiAwOTo1Mzo1OCwyMjkgW1dvcmtlci01MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTIyIDA5OjUzOjU4LDIyOSBbV29ya2VyLTUzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yMiAwOTo1Nzo1Miw3MDcgW1dvcmtlci02OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMC0wNC0yMiAwOTo1ODoyNSwyMzkgW1dvcmtlci0yOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjIgMDk6NTg6MjUsMjQwIFtXb3JrZXItMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjIgMDk6NTk6MjksNDYwIFtXb3JrZXItNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTIyIDA5OjU5OjI5LDQ2MCBbV29ya2VyLTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTIyIDEwOjAxOjAyLDkwNSBbV29ya2VyLTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yMiAxMDowMTowMiw5MDUgW1dvcmtlci0wOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yMiAxMDowMTo0Miw4MzkgW1dvcmtlci0wOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudAorMjAyMC0wNC0yMiAxMDowMTo0Miw4MzkgW1dvcmtlci0wOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjIgMTA6MDE6NTgsOTQ5IFtXb3JrZXItMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTIyIDEwOjAxOjU4LDk0OSBbV29ya2VyLTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTIyIDEwOjU5OjQ5LDY0MiBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjIgMTA6NTk6NTYsMjY4IFtXb3JrZXItMTA6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgyKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjIgMTA6NTk6NTYsMjY5IFtXb3JrZXItMTA6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgyKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY29tcGlsZQorMjAyMC0wNC0yMiAxMTo0NDoxMyw3OTUgW1dvcmtlci0xNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTIyIDExOjQ0OjEzLDc5NSBbV29ya2VyLTE1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yMiAxMTo0NDozMyw2NzkgW1dvcmtlci0xNzogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIwLTA0LTIyIDExOjQ1OjA5LDU2MyBbV29ya2VyLTI6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTA0LTIyIDEyOjM4OjUyLDY5MCBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjIgMTI6Mzk6MDksMTAyIFtXb3JrZXItMTc6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgzKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjIgMTI6Mzk6MDksMTAyIFtXb3JrZXItMTc6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgzKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY29tcGlsZQorMjAyMC0wNC0yMiAxMzowMjoyOCw3MDcgW1dvcmtlci0yMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTIyIDEzOjAyOjI4LDcwNyBbV29ya2VyLTIwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yMiAxNzowMDo0Miw4MDYgW1dvcmtlci0zNzogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyIC0gVXBkYXRlIHN0YXJ0ZWQKKzIwMjAtMDQtMjIgMTc6MDA6NDIsODE5IFtXb3JrZXItMzc6IFVwZGF0aW5nIE1hdmVuIFByb2plY3RdIEVSUk9SIG8uZS5tLmMuaS5VUkxDb25uZWN0aW9uQ2FjaGVzIC0gVW5leHBlY3RlZCBVUkxDb25uZWN0aW9uIGRlZmF1bHRVc2VDYWNoZXMgZW5hYmxlZAorMjAyMC0wNC0yMiAxNzowMDo0OCwyOTkgW1dvcmtlci0zNzogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogdGVzdDpUZXN0czowLjEgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHBvbS54bWwuCisyMDIwLTA0LTIyIDE3OjAwOjQ5LDkzNSBbV29ya2VyLTM3OiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBFUlJPUiBvLmUubS5jLmkuVVJMQ29ubmVjdGlvbkNhY2hlcyAtIFVuZXhwZWN0ZWQgVVJMQ29ubmVjdGlvbiBkZWZhdWx0VXNlQ2FjaGVzIGVuYWJsZWQKKzIwMjAtMDQtMjIgMTc6MDA6NTAsMzY1IFtXb3JrZXItMzc6IFVwZGF0aW5nIE1hdmVuIFByb2plY3RdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gQWRkaW5nIHNvdXJjZSBmb2xkZXIgL1Rlc3RzL3NyYworMjAyMC0wNC0yMiAxNzowMDo1MCwzNjUgW1dvcmtlci0zNzogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBOb3QgYWRkaW5nIHNvdXJjZSBmb2xkZXIgL1Rlc3RzL3NyYy90ZXN0L2phdmEgYmVjYXVzZSBpdCBvdmVybGFwcyB3aXRoIC9UZXN0cy9zcmMKKzIwMjAtMDQtMjIgMTc6MDA6NTAsNTUyIFtXb3JrZXItMzc6IFVwZGF0aW5nIE1hdmVuIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciAtIFVwZGF0ZSBjb21wbGV0ZWQ6IDcgc2VjCisyMDIwLTA0LTIyIDE3OjAxOjQ1LDg0NCBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjIgMTc6MDI6MDAsODIzIFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2lvL3Rha2FyaS9tMmUvd29ya3NwYWNlL29yZy5lY2xpcHNlLm0yZS53b3Jrc3BhY2UuY2xpLzAuMy4xL29yZy5lY2xpcHNlLm0yZS53b3Jrc3BhY2UuY2xpLTAuMy4xLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjAxLDA3MiBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2lvL3Rha2FyaS9tMmUvd29ya3NwYWNlL29yZy5lY2xpcHNlLm0yZS53b3Jrc3BhY2UuY2xpLzAuMy4xL29yZy5lY2xpcHNlLm0yZS53b3Jrc3BhY2UuY2xpLTAuMy4xLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjAxLDczNiBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1jbGFzc3dvcmxkcy8yLjUuMi9wbGV4dXMtY2xhc3N3b3JsZHMtMi41LjItc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MDIsMTIyIFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtY2xhc3N3b3JsZHMvMi41LjIvcGxleHVzLWNsYXNzd29ybGRzLTIuNS4yLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjAyLDcxNCBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3Jlc29sdmVyL21hdmVuLXJlc29sdmVyLXV0aWwvMS4xLjEvbWF2ZW4tcmVzb2x2ZXItdXRpbC0xLjEuMS1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjowMiw4ODAgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3Jlc29sdmVyL21hdmVuLXJlc29sdmVyLXV0aWwvMS4xLjEvbWF2ZW4tcmVzb2x2ZXItdXRpbC0xLjEuMS1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjowMywzNDIgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1tb2RlbC8zLjUuMy9tYXZlbi1tb2RlbC0zLjUuMy1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjowMyw1MDUgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLW1vZGVsLzMuNS4zL21hdmVuLW1vZGVsLTMuNS4zLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjAzLDkzNiBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb21tb25zLWlvL2NvbW1vbnMtaW8vMi41L2NvbW1vbnMtaW8tMi41LXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjA0LDE0NCBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbW1vbnMtaW8vY29tbW9ucy1pby8yLjUvY29tbW9ucy1pby0yLjUtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MDQsNzE5IFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbW1vbnMtY2xpL2NvbW1vbnMtY2xpLzEuNC9jb21tb25zLWNsaS0xLjQtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MDQsOTE4IFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tbW9ucy1jbGkvY29tbW9ucy1jbGkvMS40L2NvbW1vbnMtY2xpLTEuNC1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjowNSw0NjkgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9yZXNvbHZlci9tYXZlbi1yZXNvbHZlci1jb25uZWN0b3ItYmFzaWMvMS4xLjEvbWF2ZW4tcmVzb2x2ZXItY29ubmVjdG9yLWJhc2ljLTEuMS4xLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjA1LDYyNyBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vcmVzb2x2ZXIvbWF2ZW4tcmVzb2x2ZXItY29ubmVjdG9yLWJhc2ljLzEuMS4xL21hdmVuLXJlc29sdmVyLWNvbm5lY3Rvci1iYXNpYy0xLjEuMS1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjowNSw5OTkgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1jb3JlLzMuNS4zL21hdmVuLWNvcmUtMy41LjMtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MDYsMjc1IFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1jb3JlLzMuNS4zL21hdmVuLWNvcmUtMy41LjMtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MDYsNjg5IFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWludGVycG9sYXRpb24vMS4yNC9wbGV4dXMtaW50ZXJwb2xhdGlvbi0xLjI0LXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjA2LDgzOCBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWludGVycG9sYXRpb24vMS4yNC9wbGV4dXMtaW50ZXJwb2xhdGlvbi0xLjI0LXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjA3LDI1NyBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvc29uYXR5cGUvcGxleHVzL3BsZXh1cy1zZWMtZGlzcGF0Y2hlci8xLjQvcGxleHVzLXNlYy1kaXNwYXRjaGVyLTEuNC1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjowNyw0NzggW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvc29uYXR5cGUvcGxleHVzL3BsZXh1cy1zZWMtZGlzcGF0Y2hlci8xLjQvcGxleHVzLXNlYy1kaXNwYXRjaGVyLTEuNC1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjowOCwyMjAgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL3NvbmF0eXBlL3BsZXh1cy9wbGV4dXMtY2lwaGVyLzEuNy9wbGV4dXMtY2lwaGVyLTEuNy1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjowOCwzMjQgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvc29uYXR5cGUvcGxleHVzL3BsZXh1cy1jaXBoZXIvMS43L3BsZXh1cy1jaXBoZXItMS43LXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjA4LDc1NSBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLXNldHRpbmdzLWJ1aWxkZXIvMy41LjMvbWF2ZW4tc2V0dGluZ3MtYnVpbGRlci0zLjUuMy1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjowOSwxMjIgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLXNldHRpbmdzLWJ1aWxkZXIvMy41LjMvbWF2ZW4tc2V0dGluZ3MtYnVpbGRlci0zLjUuMy1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjowOSw0NDEgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1jb21wYXQvMy41LjMvbWF2ZW4tY29tcGF0LTMuNS4zLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjA5LDYzNSBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tY29tcGF0LzMuNS4zL21hdmVuLWNvbXBhdC0zLjUuMy1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjoxMCwwNTcgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1lbWJlZGRlci8zLjUuMy9tYXZlbi1lbWJlZGRlci0zLjUuMy1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjoxMCwyMDggW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLWVtYmVkZGVyLzMuNS4zL21hdmVuLWVtYmVkZGVyLTMuNS4zLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjEwLDY5NSBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9pby90YWthcmkvYWV0aGVyL2FldGhlci1jb25uZWN0b3Itb2todHRwLzAuMTcuMy9hZXRoZXItY29ubmVjdG9yLW9raHR0cC0wLjE3LjMtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MTAsODkwIFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvaW8vdGFrYXJpL2FldGhlci9hZXRoZXItY29ubmVjdG9yLW9raHR0cC8wLjE3LjMvYWV0aGVyLWNvbm5lY3Rvci1va2h0dHAtMC4xNy4zLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjExLDQ3MCBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9qYXZheC9lbnRlcnByaXNlL2NkaS1hcGkvMS4wL2NkaS1hcGktMS4wLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjExLDYzNCBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2phdmF4L2VudGVycHJpc2UvY2RpLWFwaS8xLjAvY2RpLWFwaS0xLjAtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MTIsMTgxIFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbS9zcXVhcmV1cC9va2lvL29raW8vMS4xMi4wL29raW8tMS4xMi4wLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjEyLDMyMSBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbS9zcXVhcmV1cC9va2lvL29raW8vMS4xMi4wL29raW8tMS4xMi4wLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjEyLDg1MCBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLXNldHRpbmdzLzMuNS4zL21hdmVuLXNldHRpbmdzLTMuNS4zLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjEzLDExNSBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tc2V0dGluZ3MvMy41LjMvbWF2ZW4tc2V0dGluZ3MtMy41LjMtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MTMsNTc4IFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbS9zcXVhcmV1cC9va2h0dHAzL29raHR0cC8zLjcuMC9va2h0dHAtMy43LjAtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MTMsODAxIFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tL3NxdWFyZXVwL29raHR0cDMvb2todHRwLzMuNy4wL29raHR0cC0zLjcuMC1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjoxNCwxNzggW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9yZXNvbHZlci9tYXZlbi1yZXNvbHZlci1hcGkvMS4xLjEvbWF2ZW4tcmVzb2x2ZXItYXBpLTEuMS4xLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjE0LDM3OSBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vcmVzb2x2ZXIvbWF2ZW4tcmVzb2x2ZXItYXBpLzEuMS4xL21hdmVuLXJlc29sdmVyLWFwaS0xLjEuMS1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjoxNCw4MTIgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtY29tcG9uZW50LWFubm90YXRpb25zLzEuNy4xL3BsZXh1cy1jb21wb25lbnQtYW5ub3RhdGlvbnMtMS43LjEtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MTQsOTMwIFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtY29tcG9uZW50LWFubm90YXRpb25zLzEuNy4xL3BsZXh1cy1jb21wb25lbnQtYW5ub3RhdGlvbnMtMS43LjEtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MTUsMzExIFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vcmVzb2x2ZXIvbWF2ZW4tcmVzb2x2ZXItaW1wbC8xLjEuMS9tYXZlbi1yZXNvbHZlci1pbXBsLTEuMS4xLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjE1LDQ3NyBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vcmVzb2x2ZXIvbWF2ZW4tcmVzb2x2ZXItaW1wbC8xLjEuMS9tYXZlbi1yZXNvbHZlci1pbXBsLTEuMS4xLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjE1LDkwMSBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3dhZ29uL3dhZ29uLWZpbGUvMy4wLjAvd2Fnb24tZmlsZS0zLjAuMC1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjoxNSw5NzggW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3dhZ29uL3dhZ29uLWZpbGUvMy4wLjAvd2Fnb24tZmlsZS0zLjAuMC1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjoxNiwzOTMgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1yZXNvbHZlci1wcm92aWRlci8zLjUuMy9tYXZlbi1yZXNvbHZlci1wcm92aWRlci0zLjUuMy1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjoxNiw3MjQgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLXJlc29sdmVyLXByb3ZpZGVyLzMuNS4zL21hdmVuLXJlc29sdmVyLXByb3ZpZGVyLTMuNS4zLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjE3LDA0MSBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3Jlc29sdmVyL21hdmVuLXJlc29sdmVyLXRyYW5zcG9ydC13YWdvbi8xLjEuMS9tYXZlbi1yZXNvbHZlci10cmFuc3BvcnQtd2Fnb24tMS4xLjEtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MTcsMjE3IFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9yZXNvbHZlci9tYXZlbi1yZXNvbHZlci10cmFuc3BvcnQtd2Fnb24vMS4xLjEvbWF2ZW4tcmVzb2x2ZXItdHJhbnNwb3J0LXdhZ29uLTEuMS4xLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjE3LDY1OSBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL2NvbW1vbnMvY29tbW9ucy1sYW5nMy8zLjUvY29tbW9ucy1sYW5nMy0zLjUtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MTcsOTc1IFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9jb21tb25zL2NvbW1vbnMtbGFuZzMvMy41L2NvbW1vbnMtbGFuZzMtMy41LXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjE4LDQ2NyBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb20vZ29vZ2xlL2d1YXZhL2d1YXZhLzIwLjAvZ3VhdmEtMjAuMC1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjoxOSwwMDIgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb20vZ29vZ2xlL2d1YXZhL2d1YXZhLzIwLjAvZ3VhdmEtMjAuMC1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjoxOSw0MzcgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9yZXNvbHZlci9tYXZlbi1yZXNvbHZlci1zcGkvMS4xLjEvbWF2ZW4tcmVzb2x2ZXItc3BpLTEuMS4xLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjE5LDU2MyBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vcmVzb2x2ZXIvbWF2ZW4tcmVzb2x2ZXItc3BpLzEuMS4xL21hdmVuLXJlc29sdmVyLXNwaS0xLjEuMS1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjoxOSw4OTggW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1hcnRpZmFjdC8zLjUuMy9tYXZlbi1hcnRpZmFjdC0zLjUuMy1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjoyMCwwMjAgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLWFydGlmYWN0LzMuNS4zL21hdmVuLWFydGlmYWN0LTMuNS4zLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjIwLDM1NCBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy11dGlscy8zLjEuMC9wbGV4dXMtdXRpbHMtMy4xLjAtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MjAsNTY0IFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtdXRpbHMvMy4xLjAvcGxleHVzLXV0aWxzLTMuMS4wLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjIwLDkzOSBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLXJlcG9zaXRvcnktbWV0YWRhdGEvMy41LjMvbWF2ZW4tcmVwb3NpdG9yeS1tZXRhZGF0YS0zLjUuMy1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjoyMSwxMDggW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLXJlcG9zaXRvcnktbWV0YWRhdGEvMy41LjMvbWF2ZW4tcmVwb3NpdG9yeS1tZXRhZGF0YS0zLjUuMy1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjoyMSw1MTkgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi93YWdvbi93YWdvbi1wcm92aWRlci1hcGkvMy4wLjAvd2Fnb24tcHJvdmlkZXItYXBpLTMuMC4wLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjIxLDczNCBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vd2Fnb24vd2Fnb24tcHJvdmlkZXItYXBpLzMuMC4wL3dhZ29uLXByb3ZpZGVyLWFwaS0zLjAuMC1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjoyMiwxMzkgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1idWlsZGVyLXN1cHBvcnQvMy41LjMvbWF2ZW4tYnVpbGRlci1zdXBwb3J0LTMuNS4zLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjIyLDMwNSBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tYnVpbGRlci1zdXBwb3J0LzMuNS4zL21hdmVuLWJ1aWxkZXItc3VwcG9ydC0zLjUuMy1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjoyMiw2NDAgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9zaGFyZWQvbWF2ZW4tc2hhcmVkLXV0aWxzLzMuMi4xL21hdmVuLXNoYXJlZC11dGlscy0zLjIuMS1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjoyMiw4OTMgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3NoYXJlZC9tYXZlbi1zaGFyZWQtdXRpbHMvMy4yLjEvbWF2ZW4tc2hhcmVkLXV0aWxzLTMuMi4xLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjIzLDMyMyBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLW1vZGVsLWJ1aWxkZXIvMy41LjMvbWF2ZW4tbW9kZWwtYnVpbGRlci0zLjUuMy1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjoyMyw1MTMgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLW1vZGVsLWJ1aWxkZXIvMy41LjMvbWF2ZW4tbW9kZWwtYnVpbGRlci0zLjUuMy1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjoyMyw5MTQgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1wbHVnaW4tYXBpLzMuNS4zL21hdmVuLXBsdWdpbi1hcGktMy41LjMtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MjQsMTk4IFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1wbHVnaW4tYXBpLzMuNS4zL21hdmVuLXBsdWdpbi1hcGktMy41LjMtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MjQsNjIzIFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9zbGY0ai9zbGY0ai1zaW1wbGUvMS43LjUvc2xmNGotc2ltcGxlLTEuNy41LXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjI0LDczMiBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9zbGY0ai9zbGY0ai1zaW1wbGUvMS43LjUvc2xmNGotc2ltcGxlLTEuNy41LXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjA0OjQ1LDc4MiBbV29ya2VyLTM2OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoNCldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTIyIDE3OjA0OjQ1LDc4MiBbV29ya2VyLTM2OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoNCldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNvbXBpbGUKKzIwMjAtMDQtMjIgMTc6MTI6MDAsNDA4IFtXb3JrZXItMzg6IEJ1aWxkIFByb2plY3RdIEVSUk9SIG8uZS5tLmMuaS5VUkxDb25uZWN0aW9uQ2FjaGVzIC0gVW5leHBlY3RlZCBVUkxDb25uZWN0aW9uIGRlZmF1bHRVc2VDYWNoZXMgZW5hYmxlZAorMjAyMC0wNC0yMiAxNzoxMjowMCw0NDAgW1dvcmtlci0zODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTIyIDE3OjEyOjAwLDQ0MiBbV29ya2VyLTM4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yMiAxNzoxMjowMCw0NDUgW1dvcmtlci0zODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTIyIDE3OjEyOjAwLDQ0OCBbV29ya2VyLTM4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yMiAxNzoxNTozNiwxNjggW1dvcmtlci00MjogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIEVSUk9SIG8uZS5tLmMuaS5VUkxDb25uZWN0aW9uQ2FjaGVzIC0gVW5leHBlY3RlZCBVUkxDb25uZWN0aW9uIGRlZmF1bHRVc2VDYWNoZXMgZW5hYmxlZAorMjAyMC0wNC0yMiAxNzoxNTozNiw3NzcgW1dvcmtlci00MjogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IHRlc3Q6VGVzdHM6MC4xIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xwb20ueG1sLgorMjAyMC0wNC0yMiAxNzoxNTozOCwwNDQgW1dvcmtlci0zODogQnVpbGQgUHJvamVjdF0gRVJST1Igby5lLm0uYy5pLlVSTENvbm5lY3Rpb25DYWNoZXMgLSBVbmV4cGVjdGVkIFVSTENvbm5lY3Rpb24gZGVmYXVsdFVzZUNhY2hlcyBlbmFibGVkCisyMDIwLTA0LTIyIDE3OjE1OjM4LDA0OSBbV29ya2VyLTM4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjIgMTc6MTU6MzgsMDUyIFtXb3JrZXItMzg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjIgMTc6MTU6MzgsMDU0IFtXb3JrZXItMzg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yMiAxNzoxNTozOCwwNTYgW1dvcmtlci0zODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yMiAxNzoxNTozOCwwOTIgW1dvcmtlci0zODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNC0yMiAxNzoxNTozOCwwOTMgW1dvcmtlci0zODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDQtMjIgMTc6MTU6MzgsMTAzIFtXb3JrZXItMzg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3Igb3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zOm1hdmVuLWNsZWFuLXBsdWdpbjpqYXI6Mi41IGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA0LTIyIDE3OjE1OjM4LDEyOCBbV29ya2VyLTM4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjIgMTc6MTU6NDAsNzk5IFtXb3JrZXItMzg6IEJ1aWxkIFByb2plY3RdIEVSUk9SIG8uZS5tLmMuaS5VUkxDb25uZWN0aW9uQ2FjaGVzIC0gVW5leHBlY3RlZCBVUkxDb25uZWN0aW9uIGRlZmF1bHRVc2VDYWNoZXMgZW5hYmxlZAorMjAyMC0wNC0yMiAxNzoxNTo0MCw4MDMgW1dvcmtlci0zODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTIyIDE3OjE1OjQwLDgwOCBbV29ya2VyLTM4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTIyIDE3OjE1OjQwLDgxMCBbV29ya2VyLTM4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjIgMTc6MTU6NDAsODEyIFtXb3JrZXItMzg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjIgMTc6MTc6MzYsNTExIFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yMiAxNzoxODo1MywwMzQgW1dvcmtlci0zNzogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDUpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yMiAxNzoxODo1MywwMzQgW1dvcmtlci0zNzogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDUpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjb21waWxlCisyMDIwLTA0LTIyIDE3OjIxOjU3LDE3MiBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjIgMTc6MjI6MDYsODI3IFtXb3JrZXItNDY6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICg2KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjIgMTc6MjI6MDYsODI3IFtXb3JrZXItNDY6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICg2KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgamFyCisyMDIwLTA0LTIyIDE3OjIzOjAxLDUzOSBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjIgMTc6MjM6MDUsMDUwIFtXb3JrZXItMzc6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICg3KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjIgMTc6MjM6MDUsMDUwIFtXb3JrZXItMzc6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICg3KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yMiAxNzozMjoyOCw2NDcgW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gRVJST1Igby5lLm0uYy5pLlVSTENvbm5lY3Rpb25DYWNoZXMgLSBVbmV4cGVjdGVkIFVSTENvbm5lY3Rpb24gZGVmYXVsdFVzZUNhY2hlcyBlbmFibGVkCisyMDIwLTA0LTIyIDE3OjMyOjI4LDY1MCBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjIgMTc6MzI6MjgsNjUyIFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTIyIDE3OjMyOjI4LDY1MyBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjIgMTc6MzI6MjgsNjU1IFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTIyIDE3OjMyOjI4LDc5MCBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBFUlJPUiBvLmUubS5jLmkuVVJMQ29ubmVjdGlvbkNhY2hlcyAtIFVuZXhwZWN0ZWQgVVJMQ29ubmVjdGlvbiBkZWZhdWx0VXNlQ2FjaGVzIGVuYWJsZWQKKzIwMjAtMDQtMjIgMTc6MzI6MjgsNzk1IFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yMiAxNzozMjoyOCw3OTggW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yMiAxNzozMjoyOCw4MDAgW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTIyIDE3OjMyOjI4LDgwMiBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTIyIDE3OjMzOjE5LDAwMSBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjIgMTc6MzM6MjgsODQxIFtXb3JrZXItMzc6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICg4KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjIgMTc6MzM6MjgsODQxIFtXb3JrZXItMzc6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICg4KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY29tcGlsZQorMjAyMC0wNC0yMiAxNzozNToyMSw2ODggW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTIyIDE3OjM1OjI1LDQxNiBbV29ya2VyLTQ2OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoOSldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTIyIDE3OjM1OjI1LDQxNiBbV29ya2VyLTQ2OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoOSldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNvbXBpbGUKKzIwMjAtMDQtMjIgMTc6Mzc6NDQsNTk5IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yMiAxNzozNzo0OCwzMjAgW1dvcmtlci0zNzogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDEwKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjIgMTc6Mzc6NDgsMzIwIFtXb3JrZXItMzc6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgxMCldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNvbXBpbGUKKzIwMjAtMDQtMjIgMTc6Mzg6MTEsMDM5IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yMiAxNzozODoxNiwwNTUgW1dvcmtlci01MDogTGF1bmNoaW5nIEdsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnQKKzIwMjAtMDQtMjIgMTc6Mzg6MTYsMDU2IFtXb3JrZXItNTA6IExhdW5jaGluZyBHbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY29tcGlsZQorMjAyMC0wNC0yMiAxNzozODozMywyOTAgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTIyIDE3OjM4OjM3LDM3MiBbV29ya2VyLTUyOiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMTEpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yMiAxNzozODozNywzNzMgW1dvcmtlci01MjogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDExKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY29tcGlsZQorMjAyMC0wNC0yMiAxNzo0MToyMSw3ODAgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTIyIDE3OjQxOjI2LDE5MSBbV29ya2VyLTUzOiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMTIpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yMiAxNzo0MToyNiwxOTEgW1dvcmtlci01MzogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDEyKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY29tcGlsZQorMjAyMC0wNC0yMiAxNzo0MjoxMSwwMzQgW1dvcmtlci01NDogQnVpbGQgUHJvamVjdF0gRVJST1Igby5lLm0uYy5pLlVSTENvbm5lY3Rpb25DYWNoZXMgLSBVbmV4cGVjdGVkIFVSTENvbm5lY3Rpb24gZGVmYXVsdFVzZUNhY2hlcyBlbmFibGVkCisyMDIwLTA0LTIyIDE3OjQyOjExLDAzOSBbV29ya2VyLTU0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjIgMTc6NDI6MTEsMDQ2IFtXb3JrZXItNTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjIgMTc6NDI6MTEsMDQ4IFtXb3JrZXItNTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yMiAxNzo0MjoxMSwwNTAgW1dvcmtlci01NDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yMiAxNzo0ODoyNSw3ODIgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTIyIDE3OjQ4OjI5LDg3NSBbV29ya2VyLTU1OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMTMpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yMiAxNzo0ODoyOSw4NzUgW1dvcmtlci01NTogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDEzKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY29tcGlsZQorMjAyMC0wNC0yMiAxNzo0ODo1OCwyMDIgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTIyIDE3OjQ5OjAxLDY2NyBbV29ya2VyLTU2OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMTQpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yMiAxNzo0OTowMSw2NjcgW1dvcmtlci01NjogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDE0KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yMiAxNzo1MToyMSwwNzYgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTIyIDE3OjUxOjI0LDU2OCBbV29ya2VyLTU1OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMTUpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yMiAxNzo1MToyNCw1NjkgW1dvcmtlci01NTogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDE1KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY29tcGlsZQorMjAyMC0wNC0yMiAxNzo1MjoyMyw0MDggW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTIyIDE3OjUyOjI4LDU3NSBbV29ya2VyLTU4OiBMYXVuY2hpbmcgR2xlbW1DbGllbnQgKDEpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnQKKzIwMjAtMDQtMjIgMTc6NTI6MjgsNTc2IFtXb3JrZXItNTg6IExhdW5jaGluZyBHbGVtbUNsaWVudCAoMSldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIHBhY2thZ2UKKzIwMjAtMDQtMjIgMTc6NTM6MDcsNDgxIFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yMiAxNzo1MzoxMSwwNTMgW1dvcmtlci02MDogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDE2KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjIgMTc6NTM6MTEsMDU0IFtXb3JrZXItNjA6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgxNildIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNvbXBpbGUKKzIwMjAtMDQtMjIgMTc6NTQ6MDIsMjI4IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yMiAxNzo1NDowNSw5NTMgW1dvcmtlci02MTogTGF1bmNoaW5nIEdsZW1tQ2xpZW50ICgyKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50CisyMDIwLTA0LTIyIDE3OjU0OjA1LDk1NCBbV29ya2VyLTYxOiBMYXVuY2hpbmcgR2xlbW1DbGllbnQgKDIpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTIyIDE3OjU0OjI2LDEyMiBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjIgMTc6NTQ6NDQsOTM1IFtXb3JrZXItNjA6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgxNyldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTIyIDE3OjU0OjQ0LDkzNSBbV29ya2VyLTYwOiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMTcpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjb21waWxlCisyMDIwLTA0LTIyIDE3OjU5OjE4LDQ2MSBbV29ya2VyLTU1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjIgMTc6NTk6MTgsNDYxIFtXb3JrZXItNTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTIyIDE4OjAwOjI1LDM3NSBbV29ya2VyLTU1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudAorMjAyMC0wNC0yMiAxODowMDoyNSwzNzUgW1dvcmtlci01NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTIyIDE4OjAxOjE5LDMwNCBbV29ya2VyLTU5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjIgMTg6MDE6MTksMzA1IFtXb3JrZXItNTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTIyIDE4OjA5OjQ4LDM4NyBbV29ya2VyLTY0OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDQtMjIgMTg6MTA6MjgsNTY0IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yMiAxODoxMDozMiw4MDkgW1dvcmtlci02NDogTGF1bmNoaW5nIEdsZW1tQ2xpZW50ICgzKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50CisyMDIwLTA0LTIyIDE4OjEwOjMyLDgwOSBbV29ya2VyLTY0OiBMYXVuY2hpbmcgR2xlbW1DbGllbnQgKDMpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjb21waWxlCisyMDIwLTA0LTIyIDE4OjExOjAyLDY5MSBbV29ya2VyLTU3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTIyIDE4OjExOjAyLDY5MSBbV29ya2VyLTU3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA0LTIyIDE4OjExOjI0LDIyMCBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjIgMTg6MTE6MjcsNjg4IFtXb3JrZXItNjQ6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgxOCldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTIyIDE4OjExOjI3LDY4OSBbV29ya2VyLTY0OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMTgpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjb21waWxlCisyMDIwLTA0LTIyIDE4OjEyOjAyLDA5OSBbV29ya2VyLTY0OiBCdWlsZCBQcm9qZWN0XSBFUlJPUiBvLmUubS5jLmkuVVJMQ29ubmVjdGlvbkNhY2hlcyAtIFVuZXhwZWN0ZWQgVVJMQ29ubmVjdGlvbiBkZWZhdWx0VXNlQ2FjaGVzIGVuYWJsZWQKKzIwMjAtMDQtMjIgMTg6MTI6MDIsMTAzIFtXb3JrZXItNjQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yMiAxODoxMjowMiwxMDUgW1dvcmtlci02NDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjIgMTg6MTI6MDIsMTA3IFtXb3JrZXItNjQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yMiAxODoxMjowMiwxMDkgW1dvcmtlci02NDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjIgMTg6MTI6MDIsMjIxIFtXb3JrZXItNjQ6IEJ1aWxkIFByb2plY3RdIEVSUk9SIG8uZS5tLmMuaS5VUkxDb25uZWN0aW9uQ2FjaGVzIC0gVW5leHBlY3RlZCBVUkxDb25uZWN0aW9uIGRlZmF1bHRVc2VDYWNoZXMgZW5hYmxlZAorMjAyMC0wNC0yMiAxODoxMjowMiwyNDUgW1dvcmtlci02NDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTIyIDE4OjEyOjAyLDI2MiBbV29ya2VyLTY0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTIyIDE4OjEyOjAyLDI2NCBbV29ya2VyLTY0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjIgMTg6MTI6MDIsMjY2IFtXb3JrZXItNjQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjIgMTg6MTI6MjksNjQxIFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yMiAxODoxMjozNCw0NTQgW1dvcmtlci02NTogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDE5KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjIgMTg6MTI6MzQsNDU0IFtXb3JrZXItNjU6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgxOSldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNvbXBpbGUKKzIwMjAtMDQtMjIgMTg6MTM6MjYsOTM3IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yMiAxODoxMzozMCw4NjUgW1dvcmtlci02NTogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDIwKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjIgMTg6MTM6MzAsODY2IFtXb3JrZXItNjU6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgyMCldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIHBhY2thZ2UKKzIwMjAtMDQtMjIgMTg6Mjg6MzUsMTMzIFtXb3JrZXItNTc6IEJ1aWxkIFByb2plY3RdIEVSUk9SIG8uZS5tLmMuaS5VUkxDb25uZWN0aW9uQ2FjaGVzIC0gVW5leHBlY3RlZCBVUkxDb25uZWN0aW9uIGRlZmF1bHRVc2VDYWNoZXMgZW5hYmxlZAorMjAyMC0wNC0yMiAxODoyODozNSwxNDAgW1dvcmtlci01NzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTIyIDE4OjI4OjM1LDE0MSBbV29ya2VyLTU3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yMiAxODoyODozNSwxNDMgW1dvcmtlci01NzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTIyIDE4OjI4OjM1LDE0NCBbV29ya2VyLTU3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yMiAxODoyODozNSwyMjYgW1dvcmtlci01NzogQnVpbGQgUHJvamVjdF0gRVJST1Igby5lLm0uYy5pLlVSTENvbm5lY3Rpb25DYWNoZXMgLSBVbmV4cGVjdGVkIFVSTENvbm5lY3Rpb24gZGVmYXVsdFVzZUNhY2hlcyBlbmFibGVkCisyMDIwLTA0LTIyIDE4OjI4OjM1LDIyOSBbV29ya2VyLTU3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjIgMTg6Mjg6MzUsMjMwIFtXb3JrZXItNTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjIgMTg6Mjg6MzUsMjMyIFtXb3JrZXItNTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yMiAxODoyODozNSwyMzMgW1dvcmtlci01NzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yMiAxODoyOToyNywzMzMgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTIyIDE4OjI5OjMyLDM1MSBbV29ya2VyLTY2OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMjEpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yMiAxODoyOTozMiwzNTIgW1dvcmtlci02NjogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDIxKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yMiAxOTowMDo0OSwyMjIgW1dvcmtlci02NzogQnVpbGQgUHJvamVjdF0gRVJST1Igby5lLm0uYy5pLlVSTENvbm5lY3Rpb25DYWNoZXMgLSBVbmV4cGVjdGVkIFVSTENvbm5lY3Rpb24gZGVmYXVsdFVzZUNhY2hlcyBlbmFibGVkCisyMDIwLTA0LTIyIDE5OjAwOjQ5LDIyNyBbV29ya2VyLTY3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjIgMTk6MDA6NDksMjMwIFtXb3JrZXItNjc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTIyIDE5OjAwOjQ5LDIzMSBbV29ya2VyLTY3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjIgMTk6MDA6NDksMjMzIFtXb3JrZXItNjc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTIyIDE5OjAxOjUyLDczNSBbV29ya2VyLTY4OiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIgLSBVcGRhdGUgc3RhcnRlZAorMjAyMC0wNC0yMiAxOTowMTo1Miw3NTEgW1dvcmtlci02ODogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gRVJST1Igby5lLm0uYy5pLlVSTENvbm5lY3Rpb25DYWNoZXMgLSBVbmV4cGVjdGVkIFVSTENvbm5lY3Rpb24gZGVmYXVsdFVzZUNhY2hlcyBlbmFibGVkCisyMDIwLTA0LTIyIDE5OjAxOjUyLDk3OSBbV29ya2VyLTY4OiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzMjowLjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDQtMjIgMTk6MDE6NTQsMzUzIFtXb3JrZXItNjg6IFVwZGF0aW5nIE1hdmVuIFByb2plY3RdIEVSUk9SIG8uZS5tLmMuaS5VUkxDb25uZWN0aW9uQ2FjaGVzIC0gVW5leHBlY3RlZCBVUkxDb25uZWN0aW9uIGRlZmF1bHRVc2VDYWNoZXMgZW5hYmxlZAorMjAyMC0wNC0yMiAxOTowMTo1NCwzNTggW1dvcmtlci02ODogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBBZGRpbmcgc291cmNlIGZvbGRlciAvR2xlbW1TZXJ2aWNlczIvc3JjCisyMDIwLTA0LTIyIDE5OjAxOjU0LDM1OSBbV29ya2VyLTY4OiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIE5vdCBhZGRpbmcgc291cmNlIGZvbGRlciAvR2xlbW1TZXJ2aWNlczIvc3JjL3Rlc3QvamF2YSBiZWNhdXNlIGl0IG92ZXJsYXBzIHdpdGggL0dsZW1tU2VydmljZXMyL3NyYworMjAyMC0wNC0yMiAxOTowMTo1NCw4MzggW1dvcmtlci02ODogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gRVJST1Igby5lLm0yZS53dHAuV1RQUHJvamVjdENvbmZpZ3VyYXRvciAtIFVuYWJsZSB0byBjb25maWd1cmUgR2xlbW1TZXJ2aWNlczIKK29yZy5lY2xpcHNlLm0yZS53dHAuTWFya2VkRXhjZXB0aW9uOiBVbmFibGUgdG8gY29uZmlndXJlIEdsZW1tU2VydmljZXMyCisJYXQgb3JnLmVjbGlwc2UubTJlLnd0cC5BYnN0cmFjdFByb2plY3RDb25maWd1cmF0b3JEZWxlZ2F0ZS5jb25maWd1cmVQcm9qZWN0KEFic3RyYWN0UHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmphdmE6OTkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLnd0cC5XVFBQcm9qZWN0Q29uZmlndXJhdG9yLmNvbmZpZ3VyZShXVFBQcm9qZWN0Q29uZmlndXJhdG9yLmphdmE6NjgpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUucHJvamVjdC5jb25maWd1cmF0b3IuQWJzdHJhY3RMaWZlY3ljbGVNYXBwaW5nLmNvbmZpZ3VyZShBYnN0cmFjdExpZmVjeWNsZU1hcHBpbmcuamF2YToxMjApIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciQzLmNhbGwoUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6NTA4KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIkMy5jYWxsKFByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5qYXZhOjEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTUxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIudXBkYXRlUHJvamVjdENvbmZpZ3VyYXRpb24oUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6NTAxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIudXBkYXRlUHJvamVjdENvbmZpZ3VyYXRpb24wKFByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5qYXZhOjQzOSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLnByb2plY3QuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyJDIuY2FsbChQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YTozNTIpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciQyLmNhbGwoUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6MSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNTEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5leGVjdXRlKE1hdmVuSW1wbC5qYXZhOjEzNTEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci51cGRhdGVQcm9qZWN0Q29uZmlndXJhdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YTozNDkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS51aS5pbnRlcm5hbC5VcGRhdGVNYXZlblByb2plY3RKb2IucnVuSW5Xb3Jrc3BhY2UoVXBkYXRlTWF2ZW5Qcm9qZWN0Sm9iLmphdmE6NzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZS51aV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5JbnRlcm5hbFdvcmtzcGFjZUpvYi5ydW4oSW50ZXJuYWxXb3Jrc3BhY2VKb2IuamF2YTozOSkgW29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzXzMuMTMuMC52MjAxODA1MTItMTEzOC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb246IE9uZSBvciBtb3JlIGNvbnN0cmFpbnRzIGhhdmUgbm90IGJlZW4gc2F0aXNmaWVkLgorCWF0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmludGVybmFsLkZhY2V0ZWRQcm9qZWN0Lm1vZGlmeUludGVybmFsKEZhY2V0ZWRQcm9qZWN0LmphdmE6MzYzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmludGVybmFsLkZhY2V0ZWRQcm9qZWN0Lm1lcmdlQ2hhbmdlc0ludGVybmFsKEZhY2V0ZWRQcm9qZWN0LmphdmE6MTE4MSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5pbnRlcm5hbC5GYWNldGVkUHJvamVjdC5hY2Nlc3MkMihGYWNldGVkUHJvamVjdC5qYXZhOjExMTcpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuaW50ZXJuYWwuRmFjZXRlZFByb2plY3QkMS5ydW4oRmFjZXRlZFByb2plY3QuamF2YTozMjQpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMjg5KSB+W29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzXzMuMTMuMC52MjAxODA1MTItMTEzOC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMzE2KSB+W29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzXzMuMTMuMC52MjAxODA1MTItMTEzOC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuaW50ZXJuYWwuRmFjZXRlZFByb2plY3QubW9kaWZ5KEZhY2V0ZWRQcm9qZWN0LmphdmE6MzM5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS53dHAuV2ViUHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmNvbmZpZ3VyZShXZWJQcm9qZWN0Q29uZmlndXJhdG9yRGVsZWdhdGUuamF2YToxMzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLnd0cC5BYnN0cmFjdFByb2plY3RDb25maWd1cmF0b3JEZWxlZ2F0ZS5jb25maWd1cmVQcm9qZWN0KEFic3RyYWN0UHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmphdmE6OTUpIH5bbmE6bmFdCisJLi4uIDE4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMC0wNC0yMiAxOTowMTo1NSwwNTEgW1dvcmtlci02ODogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNC0yMiAxOTowMTo1NSwwNTYgW1dvcmtlci02ODogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyIC0gVXBkYXRlIGNvbXBsZXRlZDogMiBzZWMKKzIwMjAtMDQtMjIgMTk6MTg6MzIsMzg3IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yMiAxOToxODozOCwxOTcgW1dvcmtlci02NDogTGF1bmNoaW5nIEdsZW1tQ2xpZW50ICg0KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50CisyMDIwLTA0LTIyIDE5OjE4OjM4LDE5NyBbV29ya2VyLTY0OiBMYXVuY2hpbmcgR2xlbW1DbGllbnQgKDQpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTIyIDE5OjI1OjE5LDk3NSBbV29ya2VyLTU6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTA0LTIyIDE5OjI1OjM0LDQ0NiBbV29ya2VyLTI6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogdGVzdDpUZXN0czowLjEgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHBvbS54bWwuCisyMDIwLTA0LTIyIDE5OjI2OjExLDEzOSBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjIgMTk6MjY6MTEsMTQxIFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTIyIDE5OjI2OjExLDE0NCBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjIgMTk6MjY6MTEsMTQ2IFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTIyIDE5OjI2OjExLDQxOCBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjIgMTk6MjY6MTEsNDIzIFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjIgMTk6MjY6MTEsNDI2IFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yMiAxOToyNjoxMSw0MjggW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yMiAxOToyNjo0Nyw5MzggW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTIyIDE5OjI2OjUzLDM3MCBbV29ya2VyLTY6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgyMildIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTIyIDE5OjI2OjUzLDM3MSBbV29ya2VyLTY6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgyMildIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIHBhY2thZ2UKKzIwMjAtMDQtMjIgMTk6NDg6NTMsMDExIFtXb3JrZXItMTM6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gRVJST1Igby5lLm0uYy5pLlVSTENvbm5lY3Rpb25DYWNoZXMgLSBVbmV4cGVjdGVkIFVSTENvbm5lY3Rpb24gZGVmYXVsdFVzZUNhY2hlcyBlbmFibGVkCisyMDIwLTA0LTIyIDE5OjQ4OjUzLDE0MiBbV29ya2VyLTEzOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IEpzb25UcmF2ZXJzZTpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHBvbS54bWwuCisyMDIwLTA0LTIyIDE5OjQ4OjUzLDg1NSBbV29ya2VyLTEzOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIEVSUk9SIG8uZS5tLmMuaS5VUkxDb25uZWN0aW9uQ2FjaGVzIC0gVW5leHBlY3RlZCBVUkxDb25uZWN0aW9uIGRlZmF1bHRVc2VDYWNoZXMgZW5hYmxlZAorMjAyMC0wNC0yMiAxOTo0ODo1Myw4NzcgW1dvcmtlci0xMzogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIEFkZGluZyBzb3VyY2UgZm9sZGVyIC9Kc29uVHJhdmVyc2Uvc3JjCisyMDIwLTA0LTIyIDE5OjQ4OjUzLDg3OCBbV29ya2VyLTEzOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gTm90IGFkZGluZyBzb3VyY2UgZm9sZGVyIC9Kc29uVHJhdmVyc2Uvc3JjL3Rlc3QvamF2YSBiZWNhdXNlIGl0IG92ZXJsYXBzIHdpdGggL0pzb25UcmF2ZXJzZS9zcmMKKzIwMjAtMDQtMjIgMTk6NDg6NTQsMDcyIFtXb3JrZXItMTM6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLnAuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyIC0gVXBkYXRlIHN0YXJ0ZWQKKzIwMjAtMDQtMjIgMTk6NDg6NTQsMDczIFtXb3JrZXItMTM6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gRVJST1Igby5lLm0uYy5pLlVSTENvbm5lY3Rpb25DYWNoZXMgLSBVbmV4cGVjdGVkIFVSTENvbm5lY3Rpb24gZGVmYXVsdFVzZUNhY2hlcyBlbmFibGVkCisyMDIwLTA0LTIyIDE5OjQ4OjU0LDIwMCBbV29ya2VyLTEzOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IEpzb25UcmF2ZXJzZTpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHBvbS54bWwuCisyMDIwLTA0LTIyIDE5OjQ4OjU0LDM0MCBbV29ya2VyLTEzOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIEVSUk9SIG8uZS5tLmMuaS5VUkxDb25uZWN0aW9uQ2FjaGVzIC0gVW5leHBlY3RlZCBVUkxDb25uZWN0aW9uIGRlZmF1bHRVc2VDYWNoZXMgZW5hYmxlZAorMjAyMC0wNC0yMiAxOTo0ODo1NCwzNTcgW1dvcmtlci0xMzogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIEFkZGluZyBzb3VyY2UgZm9sZGVyIC9Kc29uVHJhdmVyc2Uvc3JjCisyMDIwLTA0LTIyIDE5OjQ4OjU0LDM1NyBbV29ya2VyLTEzOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gTm90IGFkZGluZyBzb3VyY2UgZm9sZGVyIC9Kc29uVHJhdmVyc2Uvc3JjL3Rlc3QvamF2YSBiZWNhdXNlIGl0IG92ZXJsYXBzIHdpdGggL0pzb25UcmF2ZXJzZS9zcmMKKzIwMjAtMDQtMjIgMTk6NDg6NTQsNTA2IFtXb3JrZXItMTM6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLnAuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyIC0gVXBkYXRlIGNvbXBsZXRlZDogMCBzZWMKKzIwMjAtMDQtMjIgMTk6NDk6MTksNDM1IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yMiAxOTo0OTozMiw5NzkgW1dvcmtlci0xNjogTGF1bmNoaW5nIEpzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZQorMjAyMC0wNC0yMiAxOTo0OTozMiw5NzkgW1dvcmtlci0xNjogTGF1bmNoaW5nIEpzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY29tcGlsZQorMjAyMC0wNC0yMiAxOTo1MToxNSwzNTggW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTIyIDE5OjUxOjQ4LDM0MiBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjIgMTk6NTE6NTksMTMwIFtXb3JrZXItMTM6IExhdW5jaGluZyBKc29uVHJhdmVyc2UgKDIpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlCisyMDIwLTA0LTIyIDE5OjUxOjU5LDEzMSBbV29ya2VyLTEzOiBMYXVuY2hpbmcgSnNvblRyYXZlcnNlICgyKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY29tcGlsZQorMjAyMC0wNC0yMiAxOTo1NDoxNSwxNDMgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTIyIDE5OjU0OjIwLDcxNSBbV29ya2VyLTE1OiBMYXVuY2hpbmcgSnNvblRyYXZlcnNlICgzKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZQorMjAyMC0wNC0yMiAxOTo1NDoyMCw3MTYgW1dvcmtlci0xNTogTGF1bmNoaW5nIEpzb25UcmF2ZXJzZSAoMyldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIHBhY2thZ2UKKzIwMjAtMDQtMjIgMTk6NTQ6NDUsNDcyIFtXb3JrZXItMTU6IEJ1aWxkIFByb2plY3RdIEVSUk9SIG8uZS5tLmMuaS5VUkxDb25uZWN0aW9uQ2FjaGVzIC0gVW5leHBlY3RlZCBVUkxDb25uZWN0aW9uIGRlZmF1bHRVc2VDYWNoZXMgZW5hYmxlZAorMjAyMC0wNC0yMiAxOTo1NDo0NSw0NzcgW1dvcmtlci0xNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTIyIDE5OjU0OjQ1LDQ3OCBbV29ya2VyLTE1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTIyIDE5OjU0OjQ1LDQ4MCBbV29ya2VyLTE1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjIgMTk6NTQ6NDUsNDgyIFtXb3JrZXItMTU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjMgMDc6NTk6NTMsMDUyIFtXb3JrZXItMjogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjAtMDQtMjMgMDg6MDg6MzcsMDkwIFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yMyAwODowODo0MiwyMDQgW1dvcmtlci0yOiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMjMpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yMyAwODowODo0MiwyMDYgW1dvcmtlci0yOiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMjMpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjb21waWxlCisyMDIwLTA0LTIzIDA4OjE2OjM1LDY1MiBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBKc29uVHJhdmVyc2U6SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxwb20ueG1sLgorMjAyMC0wNC0yMyAwODoxNjozNywxNjAgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTIzIDA4OjE2OjM3LDE2MiBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjMgMDg6MTY6MzcsMTY1IFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yMyAwODoxNjozNywxNjcgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTIzIDA4OjE2OjM3LDQ1OSBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjMgMDg6MTY6MzcsNDYxIFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjMgMDg6MTY6MzcsNDYzIFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yMyAwODoxNjozNyw0NjUgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yMyAwODozNjo1MSwwMTcgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTIzIDA4OjM2OjUxLDAyMCBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjMgMDg6MzY6NTEsMDI0IFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yMyAwODozNjo1MSwwNDIgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTIzIDA4OjM3OjAzLDgxNCBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjMgMDg6Mzc6MTksNTEzIFtXb3JrZXItMTY6IExhdW5jaGluZyBKc29uVHJhdmVyc2UgKDQpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlCisyMDIwLTA0LTIzIDA4OjM3OjE5LDUxMyBbV29ya2VyLTE2OiBMYXVuY2hpbmcgSnNvblRyYXZlcnNlICg0KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yMyAwODozNzozNywzMTIgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTIzIDA4OjM3OjM3LDMxNCBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjMgMDg6Mzc6MzcsMzE2IFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yMyAwODozNzozNywzMTggW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTIzIDA4OjM3OjM3LDM3OSBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjMgMDg6Mzc6MzcsMzgxIFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjMgMDg6Mzc6MzcsMzgzIFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yMyAwODozNzozNywzODUgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yMyAwODozODoyNCw3NDMgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTIzIDA4OjM4OjI5LDAwMyBbV29ya2VyLTIxOiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMjQpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yMyAwODozODoyOSwwMDMgW1dvcmtlci0yMTogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDI0KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yMyAwODo0Mzo1Miw4MDkgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTIzIDA4OjQzOjUyLDgxMCBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjMgMDg6NDM6NTIsODEyIFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yMyAwODo0Mzo1Miw4MTQgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTIzIDA5OjMxOjUyLDY2NyBbV29ya2VyLTI6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTA0LTIzIDE4OjM5OjQ3LDUxOCBbV29ya2VyLTQxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9wbHVnaW5zL21hdmVuLXdhci1wbHVnaW4vMi4yL21hdmVuLXdhci1wbHVnaW4tMi4yLmphcgorMjAyMC0wNC0yMyAxODozOTo0Nyw4MDAgW1dvcmtlci00MTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9wbHVnaW5zL21hdmVuLXdhci1wbHVnaW4vMi4yL21hdmVuLXdhci1wbHVnaW4tMi4yLmphcgorMjAyMC0wNC0yMyAxODozOTo1MSw0NDAgW1dvcmtlci00MTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiB3Zm9ybVNlcnZpY2VzOndmb3JtU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcd3NwLUtvckFQLVNlcnZpY2VzXHdmb3JtU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDQtMjMgMTg6Mzk6NTEsODc4IFtXb3JrZXItNDE6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3BsdWdpbnMvbWF2ZW4td2FyLXBsdWdpbi8yLjIvbWF2ZW4td2FyLXBsdWdpbi0yLjIucG9tCisyMDIwLTA0LTIzIDE4OjM5OjUxLDk1NiBbV29ya2VyLTQxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3BsdWdpbnMvbWF2ZW4td2FyLXBsdWdpbi8yLjIvbWF2ZW4td2FyLXBsdWdpbi0yLjIucG9tCisyMDIwLTA0LTIzIDE4OjM5OjUyLDg0NiBbV29ya2VyLTQxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tL3Rob3VnaHR3b3Jrcy94c3RyZWFtL3hzdHJlYW0vMS4zLjEveHN0cmVhbS0xLjMuMS5wb20KKzIwMjAtMDQtMjMgMTg6Mzk6NTIsOTA5IFtXb3JrZXItNDE6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbS90aG91Z2h0d29ya3MveHN0cmVhbS94c3RyZWFtLzEuMy4xL3hzdHJlYW0tMS4zLjEucG9tCisyMDIwLTA0LTIzIDE4OjM5OjUyLDk1NiBbV29ya2VyLTQxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tL3Rob3VnaHR3b3Jrcy94c3RyZWFtL3hzdHJlYW0tcGFyZW50LzEuMy4xL3hzdHJlYW0tcGFyZW50LTEuMy4xLnBvbQorMjAyMC0wNC0yMyAxODozOTo1MywwMTggW1dvcmtlci00MTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tL3Rob3VnaHR3b3Jrcy94c3RyZWFtL3hzdHJlYW0tcGFyZW50LzEuMy4xL3hzdHJlYW0tcGFyZW50LTEuMy4xLnBvbQorMjAyMC0wNC0yMyAxODozOTo1MywxNTkgW1dvcmtlci00MTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vc2hhcmVkL21hdmVuLWZpbHRlcmluZy8xLjAtYmV0YS0yL21hdmVuLWZpbHRlcmluZy0xLjAtYmV0YS0yLnBvbQorMjAyMC0wNC0yMyAxODozOTo1MywyMjEgW1dvcmtlci00MTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9zaGFyZWQvbWF2ZW4tZmlsdGVyaW5nLzEuMC1iZXRhLTIvbWF2ZW4tZmlsdGVyaW5nLTEuMC1iZXRhLTIucG9tCisyMDIwLTA0LTIzIDE4OjM5OjUzLDI4NCBbV29ya2VyLTQxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9zaGFyZWQvbWF2ZW4tc2hhcmVkLWNvbXBvbmVudHMvMTAvbWF2ZW4tc2hhcmVkLWNvbXBvbmVudHMtMTAucG9tCisyMDIwLTA0LTIzIDE4OjM5OjUzLDM2MiBbV29ya2VyLTQxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3NoYXJlZC9tYXZlbi1zaGFyZWQtY29tcG9uZW50cy8xMC9tYXZlbi1zaGFyZWQtY29tcG9uZW50cy0xMC5wb20KKzIwMjAtMDQtMjMgMTg6Mzk6NTMsNDQwIFtXb3JrZXItNDE6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLXBhcmVudC85L21hdmVuLXBhcmVudC05LnBvbQorMjAyMC0wNC0yMyAxODozOTo1Myw1MzQgW1dvcmtlci00MTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1wYXJlbnQvOS9tYXZlbi1wYXJlbnQtOS5wb20KKzIwMjAtMDQtMjMgMTg6Mzk6NTMsNjEyIFtXb3JrZXItNDE6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy11dGlscy8xLjUuNi9wbGV4dXMtdXRpbHMtMS41LjYucG9tCisyMDIwLTA0LTIzIDE4OjM5OjUzLDY5MCBbV29ya2VyLTQxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy11dGlscy8xLjUuNi9wbGV4dXMtdXRpbHMtMS41LjYucG9tCisyMDIwLTA0LTIzIDE4OjM5OjUzLDc1MyBbV29ya2VyLTQxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMvMS4wLjEyL3BsZXh1cy0xLjAuMTIucG9tCisyMDIwLTA0LTIzIDE4OjM5OjUzLDg2MiBbV29ya2VyLTQxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy8xLjAuMTIvcGxleHVzLTEuMC4xMi5wb20KKzIwMjAtMDQtMjMgMTg6Mzk6NTMsOTQwIFtXb3JrZXItNDE6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1pbnRlcnBvbGF0aW9uLzEuNi9wbGV4dXMtaW50ZXJwb2xhdGlvbi0xLjYucG9tCisyMDIwLTA0LTIzIDE4OjM5OjU0LDAxOCBbV29ya2VyLTQxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1pbnRlcnBvbGF0aW9uLzEuNi9wbGV4dXMtaW50ZXJwb2xhdGlvbi0xLjYucG9tCisyMDIwLTA0LTIzIDE4OjM5OjU0LDE5MCBbV29ya2VyLTQxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tL3Rob3VnaHR3b3Jrcy94c3RyZWFtL3hzdHJlYW0vMS4zLjEveHN0cmVhbS0xLjMuMS5qYXIKKzIwMjAtMDQtMjMgMTg6Mzk6NTQsMzkzIFtXb3JrZXItNDE6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbS90aG91Z2h0d29ya3MveHN0cmVhbS94c3RyZWFtLzEuMy4xL3hzdHJlYW0tMS4zLjEuamFyCisyMDIwLTA0LTIzIDE4OjM5OjU0LDQyNCBbV29ya2VyLTQxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9zaGFyZWQvbWF2ZW4tZmlsdGVyaW5nLzEuMC1iZXRhLTIvbWF2ZW4tZmlsdGVyaW5nLTEuMC1iZXRhLTIuamFyCisyMDIwLTA0LTIzIDE4OjM5OjU0LDU5NiBbV29ya2VyLTQxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3NoYXJlZC9tYXZlbi1maWx0ZXJpbmcvMS4wLWJldGEtMi9tYXZlbi1maWx0ZXJpbmctMS4wLWJldGEtMi5qYXIKKzIwMjAtMDQtMjMgMTg6Mzk6NTYsNjUyIFtXb3JrZXItNDE6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBBZGRpbmcgc291cmNlIGZvbGRlciAvd2Zvcm1TZXJ2aWNlcy9zcmMKKzIwMjAtMDQtMjMgMTg6Mzk6NTYsNjUyIFtXb3JrZXItNDE6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBOb3QgYWRkaW5nIHNvdXJjZSBmb2xkZXIgL3dmb3JtU2VydmljZXMvc3JjL3Rlc3QvamF2YSBiZWNhdXNlIGl0IG92ZXJsYXBzIHdpdGggL3dmb3JtU2VydmljZXMvc3JjCisyMDIwLTA0LTIzIDE4OjM5OjU3LDY4NiBbV29ya2VyLTQxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5wLlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciAtIFVwZGF0ZSBzdGFydGVkCisyMDIwLTA0LTIzIDE4OjM5OjU4LDMyNyBbV29ya2VyLTQxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IHdmb3JtU2VydmljZXM6d2Zvcm1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1x3c3AtS29yQVAtU2VydmljZXNcd2Zvcm1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNC0yMyAxODozOTo1OSw0MzYgW1dvcmtlci00MTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIEFkZGluZyBzb3VyY2UgZm9sZGVyIC93Zm9ybVNlcnZpY2VzL3NyYworMjAyMC0wNC0yMyAxODozOTo1OSw0MzYgW1dvcmtlci00MTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIE5vdCBhZGRpbmcgc291cmNlIGZvbGRlciAvd2Zvcm1TZXJ2aWNlcy9zcmMvdGVzdC9qYXZhIGJlY2F1c2UgaXQgb3ZlcmxhcHMgd2l0aCAvd2Zvcm1TZXJ2aWNlcy9zcmMKKzIwMjAtMDQtMjMgMTg6Mzk6NTksNzE3IFtXb3JrZXItNDE6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA0LTIzIDE4OjM5OjU5LDcxNyBbV29ya2VyLTQxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5wLlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciAtIFVwZGF0ZSBjb21wbGV0ZWQ6IDIgc2VjCisyMDIwLTA0LTI0IDA4OjMwOjE4LDIxMSBbV29ya2VyLTI6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgb3V0LW9mLWRhdGUuIFRyeWluZyB0byB1cGRhdGUuCisyMDIwLTA0LTI0IDEwOjEzOjE2LDEzNCBbV29ya2VyLTE5OiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjAtMDQtMjQgMTA6MjA6MTksNjMyIFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IHdmb3JtU2VydmljZXM6d2Zvcm1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1x3c3AtS29yQVAtU2VydmljZXNcd2Zvcm1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNC0yNCAxMDoyMDoyMiwzMDQgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDEwOjIwOjIyLDMwNCBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXHdzcC1Lb3JBUC1TZXJ2aWNlc1x3Zm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNCAxMDoyMDoyMiwzMDQgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDEwOjIwOjIyLDMwNCBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXHdzcC1Lb3JBUC1TZXJ2aWNlc1x3Zm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yNCAxMTo0MTo0NSw2MjggW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDExOjQxOjQ1LDYyOCBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTE6NDE6NDUsNjQzIFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxMTo0MTo0NSw2NDMgW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI0IDExOjQxOjQ2LDMxNSBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTE6NDE6NDYsMzE1IFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcd3NwLUtvckFQLVNlcnZpY2VzXHdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI0IDExOjQxOjQ2LDMxNSBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTE6NDE6NDYsMzE1IFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcd3NwLUtvckFQLVNlcnZpY2VzXHdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI0IDExOjQxOjU1LDk0NiBbV29ya2VyLTE5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfd3NwLUtvckFQLVNlcnZpY2VzX3dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1x3c3AtS29yQVAtU2VydmljZXNcd2Zvcm1TZXJ2aWNlcworMjAyMC0wNC0yNCAxMTo0MTo1NSw5NDYgW1dvcmtlci0xOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX3dzcC1Lb3JBUC1TZXJ2aWNlc193Zm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTI0IDE1OjE0OjQyLDQyNyBbV29ya2VyLTI5OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IFV0aWxzOlV0aWxzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHBvbS54bWwuCisyMDIwLTA0LTI0IDE1OjE0OjQzLDAwNSBbV29ya2VyLTI5OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gQWRkaW5nIHNvdXJjZSBmb2xkZXIgL1V0aWxzL3NyYworMjAyMC0wNC0yNCAxNToxNDo0MywwMDUgW1dvcmtlci0yOTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIE5vdCBhZGRpbmcgc291cmNlIGZvbGRlciAvVXRpbHMvc3JjL3Rlc3QvamF2YSBiZWNhdXNlIGl0IG92ZXJsYXBzIHdpdGggL1V0aWxzL3NyYworMjAyMC0wNC0yNCAxNToxNDo0MywyMzkgW1dvcmtlci0yOTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkucC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIgLSBVcGRhdGUgc3RhcnRlZAorMjAyMC0wNC0yNCAxNToxNDo0MywzMzMgW1dvcmtlci0yOTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBVdGlsczpVdGlsczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xwb20ueG1sLgorMjAyMC0wNC0yNCAxNToxNDo0Myw1ODMgW1dvcmtlci0yOTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIEFkZGluZyBzb3VyY2UgZm9sZGVyIC9VdGlscy9zcmMKKzIwMjAtMDQtMjQgMTU6MTQ6NDMsNTgzIFtXb3JrZXItMjk6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBOb3QgYWRkaW5nIHNvdXJjZSBmb2xkZXIgL1V0aWxzL3NyYy90ZXN0L2phdmEgYmVjYXVzZSBpdCBvdmVybGFwcyB3aXRoIC9VdGlscy9zcmMKKzIwMjAtMDQtMjQgMTU6MTQ6NDMsNjU5IFtXb3JrZXItMjk6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLnAuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyIC0gVXBkYXRlIGNvbXBsZXRlZDogMCBzZWMKKzIwMjAtMDQtMjQgMTU6MTY6MjcsMTUxIFtXb3JrZXItMzA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxNToxNjoyNywxNjYgW1dvcmtlci0zMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTU6MTY6MjcsMTY2IFtXb3JrZXItMzA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxNToxNjoyNywxNjYgW1dvcmtlci0zMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTU6MTY6NTQsOTg3IFtXb3JrZXItMzE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzCisyMDIwLTA0LTI0IDE1OjE2OjU0LDk4NyBbV29ya2VyLTMxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjQgMTU6NDM6MjAsMjIwIFtXb3JrZXItMjk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IFV0aWxzOmRlLmtvcmFwLnNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHBvbS54bWwuCisyMDIwLTA0LTI0IDE1OjQzOjIwLDY4OSBbV29ya2VyLTI5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTU6NDM6MjAsNjg5IFtXb3JrZXItMjk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE1OjQzOjIwLDY4OSBbV29ya2VyLTI5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTU6NDM6MjAsNzIwIFtXb3JrZXItMjk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE1OjQ5OjAyLDE5NCBbV29ya2VyLTMwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlscworMjAyMC0wNC0yNCAxNTo0OTowMiwxOTQgW1dvcmtlci0zMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTI0IDE1OjQ5OjU2LDQzOSBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6R2xlbW1TZXJ2aWNlczI6MC4wLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA0LTI0IDE2OjAyOjQ0LDcxMCBbV29ya2VyLTM2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTY6MDI6NDQsNzEwIFtXb3JrZXItMzY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE2OjAyOjQ0LDcxMCBbV29ya2VyLTM2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTY6MDI6NDQsNzEwIFtXb3JrZXItMzY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE2OjA2OjU1LDQ5NiBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xwb20ueG1sLgorMjAyMC0wNC0yNCAxNjowNjo1NSw5MTcgW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE2OjA2OjU1LDkxNyBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNCAxNjowNjo1NSw5MTcgW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE2OjA2OjU1LDkxNyBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yNCAxNjowNzoxNCwzNDEgW1dvcmtlci0zNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHMKKzIwMjAtMDQtMjQgMTY6MDc6MTQsMzQxIFtXb3JrZXItMzY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yNCAxNjowOToyNyw5MzYgW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE2OjA5OjI3LDkzNiBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNCAxNjowOToyNyw5NTEgW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE2OjA5OjI3LDk1MSBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yNCAxNjowOToyOCw2MzkgW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6dGVzdHM6MC4xIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xwb20ueG1sLgorMjAyMC0wNC0yNCAxNjowOToyOCw5MDUgW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE2OjA5OjI4LDkwNSBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE2OjA5OjI4LDkwNSBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTY6MDk6MjgsOTA1IFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTY6MDk6MzMsOTI0IFtXb3JrZXItMzc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yNCAxNjowOTozMyw5MjQgW1dvcmtlci0zNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjQgMTY6MTE6MjksMjI3IFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tOkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHBvbS54bWwuCisyMDIwLTA0LTI0IDE2OjExOjI5LDYwMiBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTY6MTE6MjksNjAyIFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE2OjExOjI5LDYwMiBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTY6MTE6MjksNjAyIFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE2OjExOjMzLDkyNSBbV29ya2VyLTQxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudAorMjAyMC0wNC0yNCAxNjoxMTozMyw5MjUgW1dvcmtlci00MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTI0IDE2OjE4OjU5LDczNyBbV29ya2VyLTM4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlCisyMDIwLTA0LTI0IDE2OjE4OjU5LDczNyBbV29ya2VyLTM4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTI0IDE2OjIxOjQ4LDQ0NyBbV29ya2VyLTM4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTY6MjE6NDgsNDQ3IFtXb3JrZXItMzg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE2OjIxOjQ4LDQ0NyBbV29ya2VyLTM4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTY6MjE6NDgsNDYzIFtXb3JrZXItMzg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE2OjIxOjUzLDMwMiBbV29ya2VyLTQwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlscworMjAyMC0wNC0yNCAxNjoyMTo1MywzMDIgW1dvcmtlci00MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTI0IDE2OjI1OjQxLDIwNSBbV29ya2VyLTQyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC46SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxwb20ueG1sLgorMjAyMC0wNC0yNCAxNjoyNTo0MSw1NDggW1dvcmtlci00MjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE2OjI1OjQxLDU0OCBbV29ya2VyLTQyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTY6MjU6NDEsNTQ4IFtXb3JrZXItNDI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxNjoyNTo0MSw1NDggW1dvcmtlci00MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE2OjI1OjQxLDg2MSBbV29ya2VyLTQyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTY6MjU6NDEsODYxIFtXb3JrZXItNDI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcd3NwLUtvckFQLVNlcnZpY2VzXHdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE2OjI1OjQxLDg2MSBbV29ya2VyLTQyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTY6MjU6NDEsODYxIFtXb3JrZXItNDI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcd3NwLUtvckFQLVNlcnZpY2VzXHdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE2OjI2OjMyLDIzMSBbV29ya2VyLTQyOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNC0yNCAxNjoyNjozMiwzODggW1dvcmtlci00MTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE2OjI2OjMyLDM4OCBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTY6MjY6MzIsMzg4IFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxNjoyNjozMiwzODggW1dvcmtlci00MTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE2OjI2OjMyLDQ2NiBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTY6MjY6MzIsNDY2IFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcd3NwLUtvckFQLVNlcnZpY2VzXHdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE2OjI2OjMyLDQ2NiBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTY6MjY6MzIsNDY2IFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcd3NwLUtvckFQLVNlcnZpY2VzXHdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE2OjI2OjMyLDQ2NiBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIHdmb3JtU2VydmljZXMKKzIwMjAtMDQtMjQgMTY6MjY6MzIsNDY2IFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDQtMjQgMTY6MjY6MzIsNDk3IFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxNjozMjowOSw1NzEgW1dvcmtlci00MTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE2OjMyOjA5LDU3MSBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNCAxNjozMjowOSw1NzEgW1dvcmtlci00MTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE2OjMyOjA5LDU3MSBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yNCAxNjozMjowOSw2NjQgW1dvcmtlci00MTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE2OjMyOjA5LDY2NCBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXHdzcC1Lb3JBUC1TZXJ2aWNlc1x3Zm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNCAxNjozMjowOSw2NjQgW1dvcmtlci00MTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE2OjMyOjA5LDY2NCBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXHdzcC1Lb3JBUC1TZXJ2aWNlc1x3Zm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yNCAxNjozODoxMiw0MzAgW1dvcmtlci00NzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1x3c3AtS29yQVAtU2VydmljZXNcd2Zvcm1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNC0yNCAxNjozODoxMywzNTIgW1dvcmtlci00NzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE2OjM4OjEzLDM1MiBbV29ya2VyLTQ3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXHdzcC1Lb3JBUC1TZXJ2aWNlc1x3Zm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNCAxNjozODoxMywzNTIgW1dvcmtlci00NzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE2OjM4OjEzLDM1MiBbV29ya2VyLTQ3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXHdzcC1Lb3JBUC1TZXJ2aWNlc1x3Zm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yNCAxNjozODoxMywzNTIgW1dvcmtlci00NzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiB3Zm9ybVNlcnZpY2VzCisyMDIwLTA0LTI0IDE2OjM4OjEzLDM1MiBbV29ya2VyLTQ3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA0LTI0IDE2OjM4OjEzLDM2OCBbV29ya2VyLTQ3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTY6NTA6NDEsNDE4IFtXb3JrZXItNDc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxNjo1MDo0MSw0MTggW1dvcmtlci00NzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1x3c3AtS29yQVAtU2VydmljZXNcd2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTY6NTA6NDEsNDE4IFtXb3JrZXItNDc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxNjo1MDo0MSw0MTggW1dvcmtlci00NzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1x3c3AtS29yQVAtU2VydmljZXNcd2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTY6NTA6NTAsODc5IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yNCAxNjo1MDo1NSwxMTAgW1dvcmtlci00OTogTGF1bmNoaW5nIHdmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1x3c3AtS29yQVAtU2VydmljZXNcd2Zvcm1TZXJ2aWNlcworMjAyMC0wNC0yNCAxNjo1MDo1NSwxMTAgW1dvcmtlci00OTogTGF1bmNoaW5nIHdmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNvbXBpbGUKKzIwMjAtMDQtMjQgMTY6NTQ6MjAsNDk4IFtXb3JrZXItNTE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxNjo1NDoyMCw0OTggW1dvcmtlci01MTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1x3c3AtS29yQVAtU2VydmljZXNcd2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTY6NTQ6MjAsNDk4IFtXb3JrZXItNTE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxNjo1NDoyMCw0OTggW1dvcmtlci01MTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1x3c3AtS29yQVAtU2VydmljZXNcd2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTc6MTM6MDcsMDYwIFtXb3JrZXItNTE6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1x3Zm9ybVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA0LTI0IDE3OjEzOjA5LDUyOSBbV29ya2VyLTUxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gQWRkaW5nIHNvdXJjZSBmb2xkZXIgL3dmb3JtU2VydmljZXMvc3JjCisyMDIwLTA0LTI0IDE3OjEzOjA5LDUyOSBbV29ya2VyLTUxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gTm90IGFkZGluZyBzb3VyY2UgZm9sZGVyIC93Zm9ybVNlcnZpY2VzL3NyYy90ZXN0L2phdmEgYmVjYXVzZSBpdCBvdmVybGFwcyB3aXRoIC93Zm9ybVNlcnZpY2VzL3NyYworMjAyMC0wNC0yNCAxNzoxMzoxMCwxODUgW1dvcmtlci01MTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkucC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIgLSBVcGRhdGUgc3RhcnRlZAorMjAyMC0wNC0yNCAxNzoxMzoxMCw3MTIgW1dvcmtlci01MTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXHdmb3JtU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDQtMjQgMTc6MTM6MTEsODg0IFtXb3JrZXItNTE6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBBZGRpbmcgc291cmNlIGZvbGRlciAvd2Zvcm1TZXJ2aWNlcy9zcmMKKzIwMjAtMDQtMjQgMTc6MTM6MTEsODg0IFtXb3JrZXItNTE6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBOb3QgYWRkaW5nIHNvdXJjZSBmb2xkZXIgL3dmb3JtU2VydmljZXMvc3JjL3Rlc3QvamF2YSBiZWNhdXNlIGl0IG92ZXJsYXBzIHdpdGggL3dmb3JtU2VydmljZXMvc3JjCisyMDIwLTA0LTI0IDE3OjEzOjEyLDE4MSBbV29ya2VyLTUxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNC0yNCAxNzoxMzoxMiwxOTcgW1dvcmtlci01MTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkucC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIgLSBVcGRhdGUgY29tcGxldGVkOiAyIHNlYworMjAyMC0wNC0yNCAxNzoxNDoxNiw3NDkgW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE3OjE0OjE2LDc2NCBbV29ya2VyLTU4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXHdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE3OjE0OjE2LDc2NCBbV29ya2VyLTU4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTc6MTQ6MTYsNzY0IFtXb3JrZXItNTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcd2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTc6MTQ6MTYsNzY0IFtXb3JrZXItNTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMC0wNC0yNCAxNzoxNDoxNiw3NjQgW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNC0yNCAxNzoxNDoxNiw3ODAgW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE3OjE2OjQ0LDc4MSBbV29ya2VyLTU0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXHdmb3JtU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDQtMjQgMTc6MTY6NDUsNTc4IFtXb3JrZXItNTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxNzoxNjo0NSw1OTQgW1dvcmtlci01NDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1x3Zm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNCAxNzoxNjo0NSw1OTQgW1dvcmtlci01NDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE3OjE2OjQ1LDU5NCBbV29ya2VyLTU0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXHdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE3OjE2OjQ1LDU5NCBbV29ya2VyLTU0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIHdmb3JtU2VydmljZXMKKzIwMjAtMDQtMjQgMTc6MTY6NDUsNTk0IFtXb3JrZXItNTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDQtMjQgMTc6MTY6NDUsNTk0IFtXb3JrZXItNTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxNzoxOToyMCw2ODMgW1dvcmtlci01NDogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDQtMjQgMTc6MTk6MjAsODU1IFtXb3JrZXItNTQ6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1x3c3AtS29yQVAtU2VydmljZXNcd2Zvcm1TZXJ2aWNlcy13cm9uZ1xwb20ueG1sLgorMjAyMC0wNC0yNCAxNzoxOToyMSw0MDIgW1dvcmtlci01NDogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIHdmb3JtU2VydmljZXMtd3JvbmcKKzIwMjAtMDQtMjQgMTc6MTk6MjEsNDk2IFtXb3JrZXItNTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxNzoxOToyMSw1MTIgW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE3OjE5OjIxLDUxMiBbV29ya2VyLTU4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTc6MTk6MjEsNTEyIFtXb3JrZXItNTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yNCAxNzoxOToyMSw5MDIgW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE3OjE5OjIxLDkxOCBbV29ya2VyLTU4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXHdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE3OjE5OjIxLDkxOCBbV29ya2VyLTU4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTc6MTk6MjEsOTE4IFtXb3JrZXItNTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcd2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTc6MTk6MjEsOTE4IFtXb3JrZXItNTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMC0wNC0yNCAxNzoxOToyMSw5MTggW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNC0yNCAxNzoxOToyMSw5MzMgW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE3OjIyOjE2LDI3MyBbV29ya2VyLTU4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTc6MjI6MTYsMjg5IFtXb3JrZXItNTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE3OjIyOjE2LDI4OSBbV29ya2VyLTU4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTc6MjI6MTYsMjg5IFtXb3JrZXItNTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE3OjIyOjE2LDQxNCBbV29ya2VyLTU4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTc6MjI6MTYsNDE0IFtXb3JrZXItNTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcd2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTc6MjI6MTYsNDE0IFtXb3JrZXItNTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxNzoyMjoxNiw0MTQgW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1x3Zm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yNCAxNzoyMjozMCwyODUgW1dvcmtlci01OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX3dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1x3Zm9ybVNlcnZpY2VzCisyMDIwLTA0LTI0IDE3OjIyOjMwLDI4NSBbV29ya2VyLTU5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfd2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yNCAxNzoyNzoxOSwwMzQgW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE3OjI3OjE5LDA1MCBbV29ya2VyLTU4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXHdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE3OjI3OjE5LDA1MCBbV29ya2VyLTU4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTc6Mjc6MTksMDUwIFtXb3JrZXItNTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcd2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTc6Mjc6MjYsMjcxIFtXb3JrZXItNTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc193Zm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcd2Zvcm1TZXJ2aWNlcworMjAyMC0wNC0yNCAxNzoyNzoyNiwyNzEgW1dvcmtlci01ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX3dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjQgMTc6Mzg6MDcsMjM0IFtXb3JrZXItNjA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc193Zm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcd2Zvcm1TZXJ2aWNlcworMjAyMC0wNC0yNCAxNzozODowNywyNDkgW1dvcmtlci02MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX3dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjQgMTg6MDA6NTAsNTU2IFtXb3JrZXItNjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxwb20ueG1sLgorMjAyMC0wNC0yNCAxODowMDo1MCw5MDAgW1dvcmtlci02MDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE4OjAwOjUwLDkwMCBbV29ya2VyLTYwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTg6MDA6NTAsOTE2IFtXb3JrZXItNjA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxODowMDo1MCw5MTYgW1dvcmtlci02MDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE4OjAxOjA0LDUxNCBbV29ya2VyLTYyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlCisyMDIwLTA0LTI0IDE4OjAxOjA0LDUxNCBbV29ya2VyLTYyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTI0IDE4OjA1OjI1LDEzMiBbV29ya2VyLTU5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfd2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXHdmb3JtU2VydmljZXMKKzIwMjAtMDQtMjQgMTg6MDU6MjUsMTMyIFtXb3JrZXItNTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc193Zm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTI0IDE4OjA3OjI5LDQ5NCBbV29ya2VyLTYyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjQgMTg6MDc6MjksNDk0IFtXb3JrZXItNjI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTI0IDE4OjA4OjUwLDY5MCBbV29ya2VyLTYyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTg6MDg6NTAsNjkwIFtXb3JrZXItNjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE4OjA4OjUwLDY5MCBbV29ya2VyLTYyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTg6MDg6NTAsNjkwIFtXb3JrZXItNjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE4OjA4OjUwLDc2OSBbV29ya2VyLTYyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTg6MDg6NTAsNzY5IFtXb3JrZXItNjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNCAxODowODo1MCw3NjkgW1dvcmtlci02MjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE4OjA4OjUwLDc2OSBbV29ya2VyLTYyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTg6MDg6NTAsODMxIFtXb3JrZXItNjI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxODowODo1MCw4MzEgW1dvcmtlci02MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNCAxODowODo1MCw4MzEgW1dvcmtlci02MjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE4OjA4OjUwLDgzMSBbV29ya2VyLTYyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE4OjA4OjU5LDM3NSBbV29ya2VyLTY3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjQgMTg6MDg6NTksMzc1IFtXb3JrZXItNjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTI0IDE4OjU1OjE4LDY5OCBbV29ya2VyLTI6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTA0LTI0IDE4OjU3OjAxLDA2MSBbV29ya2VyLTU6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMC0wNC0yNCAxODo1NzoyMSw0NzcgW1dvcmtlci05OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTg6NTc6MjEsNDc3IFtXb3JrZXItOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTg6NTc6MjEsNDc3IFtXb3JrZXItOTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE4OjU3OjIxLDQ3NyBbV29ya2VyLTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE4OjU3OjIyLDMwNSBbV29ya2VyLTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxODo1NzoyMiwzMDUgW1dvcmtlci05OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE4OjU3OjIyLDMwNSBbV29ya2VyLTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxODo1NzoyMiwzMjEgW1dvcmtlci05OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE4OjU3OjI0LDM4MyBbV29ya2VyLTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxODo1NzoyNCwzODMgW1dvcmtlci05OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE4OjU3OjI0LDM4MyBbV29ya2VyLTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxODo1NzoyNCwzODMgW1dvcmtlci05OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE5OjM0OjI2LDQ3NyBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjQgMTk6MzQ6MzEsMTk5IFtXb3JrZXItMjM6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgyNSldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTI0IDE5OjM0OjMxLDIxNSBbV29ya2VyLTIzOiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMjUpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjb21waWxlCisyMDIwLTA0LTI0IDE5OjM3OjA0LDAzOCBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTk6Mzc6MDQsMDUzIFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTk6Mzc6MDQsMDUzIFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxOTozNzowNCwwNTMgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yNCAxOTozNzowNCwxNzggW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE5OjM3OjA0LDE3OCBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE5OjM3OjA0LDE3OCBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTk6Mzc6MDQsMTc4IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTk6Mzc6MTEsMDM3IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yNCAxOTozNzoxNSwxMDEgW1dvcmtlci0yMDogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDI2KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjQgMTk6Mzc6MTUsMTAxIFtXb3JrZXItMjA6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgyNildIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNvbXBpbGUKKzIwMjAtMDQtMjQgMTk6NDM6MTMsOTM2IFtXb3JrZXItMjU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yNCAxOTo0MzoxMyw5MzYgW1dvcmtlci0yNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjQgMTk6NDQ6MDUsOTE3IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yNCAxOTo0NDowOSwzNzAgW1dvcmtlci0yODogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDI3KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjQgMTk6NDQ6MDksMzcwIFtXb3JrZXItMjg6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgyNyldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNvbXBpbGUKKzIwMjAtMDQtMjQgMTk6NDQ6MzAsNjQyIFtXb3JrZXItMjY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxOTo0NDozMCw2NDIgW1dvcmtlci0yNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNCAxOTo0NDozMCw2NTcgW1dvcmtlci0yNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE5OjQ0OjMwLDY1NyBbV29ya2VyLTI2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE5OjQ0OjM2LDM5MiBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjQgMTk6NDQ6NDEsOTYxIFtXb3JrZXItMjA6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgyOCldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTI0IDE5OjQ0OjQxLDk2MSBbV29ya2VyLTIwOiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMjgpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjb21waWxlCisyMDIwLTA0LTI0IDE5OjQ1OjE3LDUxNiBbV29ya2VyLTI2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjQgMTk6NDU6MTcsNTE2IFtXb3JrZXItMjY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTI0IDE5OjQ1OjM0LDE0NSBbV29ya2VyLTI4OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxOTo0NTozNCwxNDUgW1dvcmtlci0yODogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE5OjQ1OjM0LDE0NSBbV29ya2VyLTI4OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxOTo0NTozNCwxNDUgW1dvcmtlci0yODogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE5OjQ4OjQyLDgxNiBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjQgMTk6NDg6NDcsNDAxIFtXb3JrZXItMjg6IExhdW5jaGluZyBXZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNC0yNCAxOTo0ODo0Nyw0MDEgW1dvcmtlci0yODogTGF1bmNoaW5nIFdmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNvbXBpbGUKKzIwMjAtMDQtMjQgMTk6NTA6MDEsNzgwIFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxOTo1MDowMSw3ODAgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNCAxOTo1MDowMSw3ODAgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE5OjUwOjAxLDc4MCBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE5OjUwOjEwLDUxNCBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjQgMTk6NTA6MTMsNjUxIFtXb3JrZXItMjg6IExhdW5jaGluZyBXZm9ybVNlcnZpY2VzICgxKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDQtMjQgMTk6NTA6MTMsNjUxIFtXb3JrZXItMjg6IExhdW5jaGluZyBXZm9ybVNlcnZpY2VzICgxKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY29tcGlsZQorMjAyMC0wNC0yNCAxOTo1Mjo0MCw4NjggW1dvcmtlci0yNjogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNC0yNCAxOTo1Mjo0MSwwMjQgW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE5OjUyOjQxLDA0MCBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTk6NTI6NDEsMDQwIFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxOTo1Mjo0MSwwNTYgW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE5OjUyOjQxLDE4MSBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTk6NTI6NDEsMTk2IFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTk6NTI6NDEsMjEyIFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxOTo1Mjo0MSwyMjggW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yNCAxOTo1Mjo0MSwyMjggW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiB3Zm9ybVNlcnZpY2VzCisyMDIwLTA0LTI0IDE5OjUyOjQxLDIyOCBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA0LTI0IDE5OjUyOjQxLDMzNyBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTk6NTI6NDEsNTQwIFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxOTo1Mjo0MSw1NTYgW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNCAxOTo1Mjo0MSw1NTYgW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE5OjUyOjQxLDU1NiBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE5OjUyOjUwLDg4MyBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjQgMTk6NTI6NTMsNzQyIFtXb3JrZXItMzI6IExhdW5jaGluZyBXZm9ybVNlcnZpY2VzICgyKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDQtMjQgMTk6NTI6NTMsNzQyIFtXb3JrZXItMzI6IExhdW5jaGluZyBXZm9ybVNlcnZpY2VzICgyKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY29tcGlsZQorMjAyMC0wNC0yNCAxOTo1MzoyMSwyNjEgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI0IDE5OjUzOjI0LDE2NyBbV29ya2VyLTIyOiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMjkpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yNCAxOTo1MzoyNCwxNjcgW1dvcmtlci0yMjogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDI5KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY29tcGlsZQorMjAyMC0wNC0yNCAxOTo1Mzo0MCw1MTcgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI0IDE5OjUzOjQzLDQ1NCBbV29ya2VyLTMyOiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMzApXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yNCAxOTo1Mzo0Myw0NzAgW1dvcmtlci0zMjogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDMwKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yNCAxOTo1ODo1MywzNDkgW1dvcmtlci0zMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE5OjU4OjUzLDM0OSBbV29ya2VyLTMyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE5OjU4OjUzLDM0OSBbV29ya2VyLTMyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTk6NTg6NTMsMzQ5IFtXb3JrZXItMzI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTk6NTk6MTksMzM2IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yNCAxOTo1OToyMiw3NzMgW1dvcmtlci0zNTogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDMxKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjQgMTk6NTk6MjIsNzczIFtXb3JrZXItMzU6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgzMSldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIHBhY2thZ2UKKzIwMjAtMDQtMjQgMjE6MTQ6NTUsNzMyIFtXb3JrZXItNjE6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDIxOjE0OjU1LDczMiBbV29ya2VyLTYxOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMjE6MTQ6NTUsNzMyIFtXb3JrZXItNjE6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDIxOjE0OjU1LDc0OCBbV29ya2VyLTYxOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjcgMTE6NTg6MjAsODE0IFtXb3JrZXItMjM6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgb3V0LW9mLWRhdGUuIFRyeWluZyB0byB1cGRhdGUuCisyMDIwLTA0LTI3IDEyOjIzOjE0LDMzNyBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjcgMTI6MjM6MTgsNTAwIFtXb3JrZXItMjY6IExhdW5jaGluZyBVdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzCisyMDIwLTA0LTI3IDEyOjIzOjE4LDUwMyBbV29ya2VyLTI2OiBMYXVuY2hpbmcgVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIHBhY2thZ2UKKzIwMjAtMDQtMjcgMTY6MDg6MTgsMjAyIFtXb3JrZXItNTU6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMC0wNC0yNyAxNjoxNDo0Niw2MzMgW1dvcmtlci01NTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNccG9tLnhtbC4KKzIwMjAtMDQtMjcgMTY6MTQ6NDcsMTE1IFtXb3JrZXItNTU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL2NvbW1vbnMvaW8vY29tbW9ucy1pby8yLjYvY29tbW9ucy1pby0yLjYucG9tCisyMDIwLTA0LTI3IDE2OjE0OjQ3LDEyNCBbV29ya2VyLTU1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFRoZSBQT00gZm9yIG9yZy5hcGFjaGUuY29tbW9ucy5pbzpjb21tb25zLWlvOmphcjoyLjYgaXMgbWlzc2luZywgbm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKzIwMjAtMDQtMjcgMTY6MTQ6NDcsMTYzIFtXb3JrZXItNTU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL2NvbW1vbnMvaW8vY29tbW9ucy1pby8yLjYvY29tbW9ucy1pby0yLjYuamFyCisyMDIwLTA0LTI3IDE2OjE0OjQ5LDQ2MyBbV29ya2VyLTU1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjcgMTY6MTQ6NDksNDY1IFtXb3JrZXItNTU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI3IDE2OjE0OjQ5LDQ2NyBbV29ya2VyLTU1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjcgMTY6MTQ6NDksNDY4IFtXb3JrZXItNTU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI3IDE2OjE0OjUwLDAxMSBbV29ya2VyLTYyOiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFRoZSBQT00gZm9yIG9yZy5hcGFjaGUuY29tbW9ucy5pbzpjb21tb25zLWlvOmphcjoyLjYgaXMgbWlzc2luZywgbm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKzIwMjAtMDQtMjcgMTY6MTQ6NTAsMzQxIFtXb3JrZXItNjI6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL2NvbW1vbnMvaW8vY29tbW9ucy1pby8yLjYvY29tbW9ucy1pby0yLjYtc291cmNlcy5qYXIKKzIwMjAtMDQtMjcgMTY6MTQ6NTAsMzc1IFtXb3JrZXItNjI6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIEVSUk9SIG8uZS5tLmouaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iIC0gQ291bGQgbm90IGRvd25sb2FkIHNvdXJjZXMgZm9yIG9yZy5hcGFjaGUuY29tbW9ucy5pbzpjb21tb25zLWlvOjIuNgorb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb246IENvdWxkIG5vdCByZXNvbHZlIGFydGlmYWN0IG9yZy5hcGFjaGUuY29tbW9ucy5pbzpjb21tb25zLWlvOmphcjpzb3VyY2VzOjIuNgorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6Nzc2KSB+W29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6MSkgfltvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTEyKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3NDMpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3MjApIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNzkpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkQXR0YWNobWVudHMoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjU0KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZE1hdmVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjIyMSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjE2MSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNykgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNTEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5leGVjdXRlKE1hdmVuSW1wbC5qYXZhOjEzNTUpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM1KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorMjAyMC0wNC0yNyAxNjoyOToyMywxMDUgW1dvcmtlci02NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI3IDE2OjI5OjIzLDEwNiBbV29ya2VyLTY2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNyAxNjoyOToyMywxMDggW1dvcmtlci02NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI3IDE2OjI5OjIzLDEyMyBbV29ya2VyLTY2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yNyAxNjozMjoxNyw5NzggW1dvcmtlci02NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNccG9tLnhtbC4KKzIwMjAtMDQtMjcgMTY6MzI6MTgsMzMzIFtXb3JrZXItNjY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tbW9ucy1pby9jb21tb25zLWlvLzIuNi9jb21tb25zLWlvLTIuNi5qYXIKKzIwMjAtMDQtMjcgMTY6MzI6MTgsNTQ1IFtXb3JrZXItNjY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb21tb25zLWlvL2NvbW1vbnMtaW8vMi42L2NvbW1vbnMtaW8tMi42LmphcgorMjAyMC0wNC0yNyAxNjozMjoxOSwzMDkgW1dvcmtlci02NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI3IDE2OjMyOjE5LDMxMSBbV29ya2VyLTY2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNyAxNjozMjoxOSwzMTUgW1dvcmtlci02NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI3IDE2OjMyOjE5LDMxNyBbV29ya2VyLTY2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yNyAxNjozMjoyMCwyNjkgW1dvcmtlci02ODogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb21tb25zLWlvL2NvbW1vbnMtaW8vMi42L2NvbW1vbnMtaW8tMi42LXNvdXJjZXMuamFyCisyMDIwLTA0LTI3IDE2OjMyOjIwLDQ3MSBbV29ya2VyLTY4OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tbW9ucy1pby9jb21tb25zLWlvLzIuNi9jb21tb25zLWlvLTIuNi1zb3VyY2VzLmphcgorMjAyMC0wNC0yNyAxNjozMjoyMCw2NTcgW1dvcmtlci02ODogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uai5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IgLSBEb3dubG9hZGVkIHNvdXJjZXMgZm9yIGNvbW1vbnMtaW86Y29tbW9ucy1pbzoyLjYKKzIwMjAtMDQtMjcgMTY6MzM6MjAsODY5IFtXb3JrZXItNjg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNyAxNjozMzoyMCw4NzAgW1dvcmtlci02ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjcgMTY6MzM6MjAsODcyIFtXb3JrZXItNjg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNyAxNjozMzoyMCw4NzQgW1dvcmtlci02ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjcgMTc6MTk6MDgsOTA1IFtXb3JrZXItODI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNyAxNzoxOTowOCw5MDYgW1dvcmtlci04MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjcgMTc6MTk6MDgsOTA4IFtXb3JrZXItODI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNyAxNzoxOTowOCw5MTAgW1dvcmtlci04MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjcgMTc6Mzg6NDYsOTc1IFtXb3JrZXItOTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNyAxNzozODo0Niw5NzcgW1dvcmtlci05MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjcgMTc6Mzg6NDYsOTc5IFtXb3JrZXItOTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNyAxNzozODo0Niw5ODAgW1dvcmtlci05MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjcgMTc6NDI6MTYsMDM1IFtXb3JrZXItOTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNyAxNzo0MjoxNiwwMzcgW1dvcmtlci05MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI3IDE3OjQyOjE2LDAzOSBbV29ya2VyLTkyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjcgMTc6NDI6MTYsMDQwIFtXb3JrZXItOTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yNyAxNzo0MjoxNywyMTggW1dvcmtlci05MjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI3IDE3OjQyOjE3LDIyMCBbV29ya2VyLTkyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI3IDE3OjQyOjE3LDIyMyBbV29ya2VyLTkyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjcgMTc6NDI6MTcsMjI1IFtXb3JrZXItOTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjcgMTc6NDI6MjEsMDQ4IFtXb3JrZXItOTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNyAxNzo0MjoyMSwwNTAgW1dvcmtlci05MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNyAxNzo0MjoyMSwwNTMgW1dvcmtlci05MjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI3IDE3OjQyOjIxLDA1NiBbV29ya2VyLTkyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI3IDE3OjQyOjMwLDI1NyBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjcgMTc6NDI6MzIsOTI3IFtXb3JrZXItOTI6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgzMildIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTI3IDE3OjQyOjMyLDkyOCBbV29ya2VyLTkyOiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMzIpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTI3IDE4OjEzOjE0LDgwNyBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjcgMTg6MTM6MTgsMTgxIFtXb3JrZXItMTExOiBMYXVuY2hpbmcgV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDQtMjcgMTg6MTM6MTgsMTgxIFtXb3JrZXItMTExOiBMYXVuY2hpbmcgV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yNyAxODoxODowMiwzOTUgW1dvcmtlci0xMTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNyAxODoxODowMiw0MTIgW1dvcmtlci0xMTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjcgMTg6MTg6MDIsNDE5IFtXb3JrZXItMTEzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjcgMTg6MTg6MDIsNDIxIFtXb3JrZXItMTEzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI3IDE4OjI1OjEwLDk0MSBbV29ya2VyLTExODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI3IDE4OjI1OjEwLDk0MiBbV29ya2VyLTExODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNyAxODoyNToxMCw5NDQgW1dvcmtlci0xMTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNyAxODoyNToxMCw5NDYgW1dvcmtlci0xMTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjcgMTg6MjU6MTcsMzc1IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yNyAxODoyNToxOSw3MTMgW1dvcmtlci0xMTY6IExhdW5jaGluZyBXZm9ybVNlcnZpY2VzICgzKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDQtMjcgMTg6MjU6MTksNzEzIFtXb3JrZXItMTE2OiBMYXVuY2hpbmcgV2Zvcm1TZXJ2aWNlcyAoMyldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIHBhY2thZ2UKKzIwMjAtMDQtMjcgMTg6MjY6NTQsMzIxIFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yNyAxODoyNjo1OCwwMDIgW1dvcmtlci0xMTE6IExhdW5jaGluZyBKc29uVHJhdmVyc2UgKDUpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlCisyMDIwLTA0LTI3IDE4OjI2OjU4LDAwMiBbV29ya2VyLTExMTogTGF1bmNoaW5nIEpzb25UcmF2ZXJzZSAoNSldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIHBhY2thZ2UKKzIwMjAtMDQtMjcgMTg6Mjc6MTEsMzQyIFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yNyAxODoyNzoxMyw4MTYgW1dvcmtlci0xMTk6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgzMyldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTI3IDE4OjI3OjEzLDgxNiBbV29ya2VyLTExOTogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDMzKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY29tcGlsZQorMjAyMC0wNC0yNyAxODoyNzoyOCw5MTkgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI3IDE4OjI3OjMxLDU4MyBbV29ya2VyLTEyMDogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDM0KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjcgMTg6Mjc6MzEsNTgzIFtXb3JrZXItMTIwOiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMzQpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTI3IDE4OjI4OjIyLDI5NCBbV29ya2VyLTExOTogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjcgMTg6Mjg6MjIsMjk2IFtXb3JrZXItMTE5OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjcgMTg6Mjg6MjIsMjk4IFtXb3JrZXItMTE5OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNyAxODoyODoyMiwzMDEgW1dvcmtlci0xMTk6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yNyAxODo1NTo0OSwyNjcgW1dvcmtlci0xMjA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNyAxODo1NTo0OSwyNjkgW1dvcmtlci0xMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI3IDE4OjU1OjQ5LDI3MSBbV29ya2VyLTEyMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI3IDE4OjU1OjQ5LDI3MiBbV29ya2VyLTEyMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjcgMTg6NTU6NDksMzQ1IFtXb3JrZXItMTIwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjcgMTg6NTU6NDksMzQ4IFtXb3JrZXItMTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI3IDE4OjU1OjQ5LDM1MiBbV29ya2VyLTEyMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI3IDE4OjU1OjQ5LDM1OSBbV29ya2VyLTEyMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yNyAxODo1Njo1MSwxNjAgW1dvcmtlci0xMjk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNyAxODo1Njo1MSwxNjIgW1dvcmtlci0xMjk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjcgMTg6NTY6NTEsMTY0IFtXb3JrZXItMTI5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjcgMTg6NTY6NTEsMTY4IFtXb3JrZXItMTI5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI3IDE4OjU3OjEyLDgzNyBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjcgMTg6NTc6MTYsMDI5IFtXb3JrZXItMTMyOiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMzUpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yNyAxODo1NzoxNiwwMjkgW1dvcmtlci0xMzI6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgzNSldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIHBhY2thZ2UKKzIwMjAtMDQtMjcgMTg6NTg6MTUsOTY1IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yNyAxODo1ODoxOSwwMTYgW1dvcmtlci0xMzE6IExhdW5jaGluZyBVdGlscyAoMSldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlscworMjAyMC0wNC0yNyAxODo1ODoxOSwwMTYgW1dvcmtlci0xMzE6IExhdW5jaGluZyBVdGlscyAoMSldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIHBhY2thZ2UKKzIwMjAtMDQtMjcgMTk6MDA6NDIsMDkyIFtXb3JrZXItMTIwOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNyAxOTowMDo0MiwwOTMgW1dvcmtlci0xMjA6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNyAxOTowMDo0MiwwOTUgW1dvcmtlci0xMjA6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI3IDE5OjAwOjQyLDA5NiBbV29ya2VyLTEyMDogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI3IDE5OjAwOjQyLDE2NCBbV29ya2VyLTEyMDogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjcgMTk6MDA6NDIsMTY1IFtXb3JrZXItMTIwOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjcgMTk6MDA6NDIsMTY3IFtXb3JrZXItMTIwOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNyAxOTowMDo0MiwxNjggW1dvcmtlci0xMjA6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOCAwOTo1MjozOCwyODMgW1dvcmtlci02OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMC0wNC0yOCAwOTo1ODowNywwMjQgW1dvcmtlci0xNDogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIwLTA0LTI4IDEyOjQ0OjExLDE1MSBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjggMTI6NDQ6MTQsNTEzIFtXb3JrZXItNTM6IExhdW5jaGluZyBHbGVtbUNsaWVudCAoNSldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudAorMjAyMC0wNC0yOCAxMjo0NDoxNCw1MTUgW1dvcmtlci01MzogTGF1bmNoaW5nIEdsZW1tQ2xpZW50ICg1KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yOCAxMjo0NTo0Miw1MTkgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI4IDEyOjQ1OjQ0LDk2OSBbV29ya2VyLTUwOiBMYXVuY2hpbmcgV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDQtMjggMTI6NDU6NDQsOTY5IFtXb3JrZXItNTA6IExhdW5jaGluZyBXZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTI4IDEyOjQ2OjU2LDkwNSBbV29ya2VyLTU1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTI6NDY6NTYsOTA5IFtXb3JrZXItNTU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI4IDEyOjQ2OjU2LDkxMiBbV29ya2VyLTU1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTI6NDY6NTYsOTE0IFtXb3JrZXItNTU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI4IDEyOjQ2OjU3LDQ1MCBbV29ya2VyLTU1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTI6NDY6NTcsNDUxIFtXb3JrZXItNTU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI4IDEyOjQ2OjU3LDQ1NCBbV29ya2VyLTU1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTI6NDY6NTcsNDU2IFtXb3JrZXItNTU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI4IDEyOjQ2OjU3LDkzMyBbV29ya2VyLTU1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTI6NDY6NTcsOTUzIFtXb3JrZXItNTU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTI6NDY6NTcsOTU1IFtXb3JrZXItNTU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxMjo0Njo1Nyw5NTcgW1dvcmtlci01NTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOCAxMjo0NzoxNCw4ODcgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI4IDEyOjQ3OjE3LDU0NiBbV29ya2VyLTU0OiBMYXVuY2hpbmcgV2Zvcm1TZXJ2aWNlcyAoNCldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA0LTI4IDEyOjQ3OjE3LDU0NyBbV29ya2VyLTU0OiBMYXVuY2hpbmcgV2Zvcm1TZXJ2aWNlcyAoNCldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIHBhY2thZ2UKKzIwMjAtMDQtMjggMTI6NDc6NDAsNTAwIFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yOCAxMjo0Nzo0MywwNDYgW1dvcmtlci01NjogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDM2KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjggMTI6NDc6NDMsMDQ2IFtXb3JrZXItNTY6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgzNildIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIHBhY2thZ2UKKzIwMjAtMDQtMjggMTI6NDg6MDEsNDY0IFtXb3JrZXItNTQ6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDEyOjQ4OjAxLDQ3MyBbV29ya2VyLTU0OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTI6NDg6MDEsNDc1IFtXb3JrZXItNTQ6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDEyOjQ4OjAxLDQ4NCBbV29ya2VyLTU0OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTM6MjU6MjIsMDAyIFtXb3JrZXItNjc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxMzoyNToyMiwwMDUgW1dvcmtlci02NzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTM6MjU6MjIsMDA3IFtXb3JrZXItNjc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxMzoyNToyMiwwMTAgW1dvcmtlci02NzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTM6MjU6MjIsMDg1IFtXb3JrZXItNjc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxMzoyNToyMiwwODkgW1dvcmtlci02NzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOCAxMzoyNToyMiwwOTEgW1dvcmtlci02NzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDEzOjI1OjIyLDA5NCBbV29ya2VyLTY3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI4IDEzOjI1OjMxLDk0OSBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjggMTM6MjU6MzQsNzkzIFtXb3JrZXItNjk6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgzNyldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTI4IDEzOjI1OjM0LDc5MyBbV29ya2VyLTY5OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMzcpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTI4IDE2OjIyOjQwLDY0NCBbV29ya2VyLTg2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTY6MjI6NDAsNjUwIFtXb3JrZXItODY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI4IDE2OjIyOjQwLDY1MiBbV29ya2VyLTg2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTY6MjI6NDAsNjU0IFtXb3JrZXItODY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI4IDE2OjIyOjQwLDc0NCBbV29ya2VyLTg2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTY6MjI6NDAsNzUyIFtXb3JrZXItODY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTY6MjI6NDAsNzU2IFtXb3JrZXItODY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxNjoyMjo0MCw3NTggW1dvcmtlci04NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOCAxNjoyMjo0OCwwODcgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI4IDE2OjIyOjUwLDg5OSBbV29ya2VyLTg0OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMzgpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yOCAxNjoyMjo1MCw4OTkgW1dvcmtlci04NDogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDM4KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yOCAxNjo1MDoxNSw1MjQgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI4IDE2OjUwOjE4LDExNSBbV29ya2VyLTg4OiBMYXVuY2hpbmcgR2xlbW1DbGllbnQgKDYpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnQKKzIwMjAtMDQtMjggMTY6NTA6MTgsMTE2IFtXb3JrZXItODg6IExhdW5jaGluZyBHbGVtbUNsaWVudCAoNildIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIHBhY2thZworMjAyMC0wNC0yOCAxNjo1MDoyOSw1NzkgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI4IDE2OjUwOjMzLDMzNCBbV29ya2VyLTEwMjogTGF1bmNoaW5nIEdsZW1tQ2xpZW50ICg3KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50CisyMDIwLTA0LTI4IDE2OjUwOjMzLDMzNSBbV29ya2VyLTEwMjogTGF1bmNoaW5nIEdsZW1tQ2xpZW50ICg3KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yOCAxNjo1MTowNSwxNzMgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI4IDE2OjUxOjA4LDk1MSBbV29ya2VyLTEwMDogTGF1bmNoaW5nIFdmb3JtU2VydmljZXMgKDUpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNC0yOCAxNjo1MTowOCw5NTEgW1dvcmtlci0xMDA6IExhdW5jaGluZyBXZm9ybVNlcnZpY2VzICg1KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yOCAxNjo1MTozMCw1ODAgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI4IDE2OjUxOjMzLDUyNyBbV29ya2VyLTEwMzogTGF1bmNoaW5nIFV0aWxzICgyKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzCisyMDIwLTA0LTI4IDE2OjUxOjMzLDUyNyBbV29ya2VyLTEwMzogTGF1bmNoaW5nIFV0aWxzICgyKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yOCAxNjo1MTo1MSw0OTMgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI4IDE2OjUxOjU0LDY2MiBbV29ya2VyLTEwMzogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDM5KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjggMTY6NTE6NTQsNjYyIFtXb3JrZXItMTAzOiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMzkpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTI4IDE2OjUyOjE0LDk1MCBbV29ya2VyLTEwMDogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTY6NTI6MTQsOTU1IFtXb3JrZXItMTAwOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI4IDE2OjUyOjE0LDk1NyBbV29ya2VyLTEwMDogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTY6NTI6MTQsOTYwIFtXb3JrZXItMTAwOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI4IDE2OjUyOjE1LDEyMSBbV29ya2VyLTEwMDogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTY6NTI6MTUsMTQ3IFtXb3JrZXItMTAwOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTY6NTI6MTUsMTQ5IFtXb3JrZXItMTAwOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxNjo1MjoxNSwxNTggW1dvcmtlci0xMDA6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOCAxODoxOTo0Niw3MjQgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI4IDE4OjE5OjQ5LDEwOSBbV29ya2VyLTExMzogTGF1bmNoaW5nIEdsZW1tQ2xpZW50ICg4KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50CisyMDIwLTA0LTI4IDE4OjE5OjQ5LDEwOSBbV29ya2VyLTExMzogTGF1bmNoaW5nIEdsZW1tQ2xpZW50ICg4KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yOCAxODoyMDowNSw5OTEgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI4IDE4OjIwOjA4LDA1NyBbV29ya2VyLTExMDogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDQwKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjggMTg6MjA6MDgsMDU3IFtXb3JrZXItMTEwOiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoNDApXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTI4IDE4OjIwOjI1LDE5NyBbV29ya2VyLTExNTogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTg6MjA6MjUsMjAyIFtXb3JrZXItMTE1OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI4IDE4OjIwOjI1LDIwNCBbV29ya2VyLTExNTogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTg6MjA6MjUsMjA3IFtXb3JrZXItMTE1OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI4IDE4OjIwOjI1LDI3MCBbV29ya2VyLTExNTogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTg6MjA6MjUsMjcyIFtXb3JrZXItMTE1OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTg6MjA6MjUsMjczIFtXb3JrZXItMTE1OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxODoyMDoyNSwyNzUgW1dvcmtlci0xMTU6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOCAxODoyODo1OCw1NzggW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI4IDE4OjI5OjAwLDY3OSBbV29ya2VyLTExMTogTGF1bmNoaW5nIEdsZW1tQ2xpZW50ICg5KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50CisyMDIwLTA0LTI4IDE4OjI5OjAwLDY3OSBbV29ya2VyLTExMTogTGF1bmNoaW5nIEdsZW1tQ2xpZW50ICg5KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yOCAxODoyOTowOCw5MTMgW1dvcmtlci0xMTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxODoyOTowOCw5MTUgW1dvcmtlci0xMTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI4IDE4OjI5OjA4LDkxNyBbV29ya2VyLTExNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDE4OjI5OjA4LDkyMCBbV29ya2VyLTExNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTg6Mjk6MDgsOTY2IFtXb3JrZXItMTE0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTg6Mjk6MDgsOTY4IFtXb3JrZXItMTE0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI4IDE4OjI5OjA4LDk3MCBbV29ya2VyLTExNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDE4OjI5OjA4LDk3MiBbV29ya2VyLTExNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOCAxODoyOToxNiwxNDYgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI4IDE4OjI5OjE5LDUyMyBbV29ya2VyLTExODogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDQxKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjggMTg6Mjk6MTksNTIzIFtXb3JrZXItMTE4OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoNDEpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTI4IDE4OjMwOjU5LDYzOSBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjggMTg6MzE6MDIsNzc5IFtXb3JrZXItMTE0OiBMYXVuY2hpbmcgR2xlbW1DbGllbnQgKDEwKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50CisyMDIwLTA0LTI4IDE4OjMxOjAyLDc3OSBbV29ya2VyLTExNDogTGF1bmNoaW5nIEdsZW1tQ2xpZW50ICgxMCldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIHBhY2thZ2UKKzIwMjAtMDQtMjggMTg6MzE6MTIsOTE4IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yOCAxODozMToxNSwxNTQgW1dvcmtlci0xMTE6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICg0MildIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTI4IDE4OjMxOjE1LDE1NSBbV29ya2VyLTExMTogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDQyKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yOCAxODozMToyNCw4MjQgW1dvcmtlci0xMTg6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDE4OjMxOjI0LDgyNiBbV29ya2VyLTExODogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOCAxODozMToyNCw4MjggW1dvcmtlci0xMTg6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDE4OjMxOjI0LDgzMSBbV29ya2VyLTExODogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOCAxODozMToyNCw4NzYgW1dvcmtlci0xMTg6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDE4OjMxOjI0LDg3NyBbV29ya2VyLTExODogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI4IDE4OjMxOjI0LDg3OCBbV29ya2VyLTExODogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTg6MzE6MjQsODgwIFtXb3JrZXItMTE4OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTg6Mzc6NTIsODg2IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yOCAxODozNzo1NSwzMzEgW1dvcmtlci0xMjM6IExhdW5jaGluZyBHbGVtbUNsaWVudCAoMTEpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnQKKzIwMjAtMDQtMjggMTg6Mzc6NTUsMzMxIFtXb3JrZXItMTIzOiBMYXVuY2hpbmcgR2xlbW1DbGllbnQgKDExKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yOCAxODozODowNyw0ODQgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI4IDE4OjM4OjEwLDAyMSBbV29ya2VyLTEyNTogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDQzKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjggMTg6Mzg6MTAsMDIyIFtXb3JrZXItMTI1OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoNDMpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTI4IDE4OjM4OjIxLDc3MSBbV29ya2VyLTEyMzogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTg6Mzg6MjEsNzczIFtXb3JrZXItMTIzOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI4IDE4OjM4OjIxLDc3NCBbV29ya2VyLTEyMzogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTg6Mzg6MjEsNzc2IFtXb3JrZXItMTIzOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI4IDE4OjM4OjIxLDgxMSBbV29ya2VyLTEyMzogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTg6Mzg6MjEsODEzIFtXb3JrZXItMTIzOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTg6Mzg6MjEsODE2IFtXb3JrZXItMTIzOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxODozODoyMSw4MTcgW1dvcmtlci0xMjM6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOCAxOToyNjoxNCw5MjcgW1dvcmtlci0xMzU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxOToyNjoxNCw5MjkgW1dvcmtlci0xMzU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTk6MjY6MTQsOTMxIFtXb3JrZXItMTM1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTk6MjY6MTQsOTM0IFtXb3JrZXItMTM1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI4IDE5OjI2OjE0LDkzNCBbV29ya2VyLTEzNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNC0yOCAxOToyNjoxNCw5MzYgW1dvcmtlci0xMzU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTA0LTI4IDE5OjI2OjE1LDQyOCBbV29ya2VyLTEzNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDE5OjI2OjU3LDkzMiBbV29ya2VyLTEzODogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDQtMjggMTk6MjY6NTgsMTIwIFtXb3JrZXItMTM5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTk6MjY6NTgsMTQzIFtXb3JrZXItMTM5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI4IDE5OjI2OjU4LDE0NCBbV29ya2VyLTEzOTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDE5OjI2OjU4LDE0OSBbV29ya2VyLTEzOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOCAxOToyNjo1OCwxNDkgW1dvcmtlci0xMzk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDQtMjggMTk6MjY6NTgsMTUwIFtXb3JrZXItMTM5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNC0yOCAxOToyNjo1OCwyMDAgW1dvcmtlci0xMzk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxOToyNzoyOSw0NjggW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI4IDE5OjI3OjMzLDM3MCBbV29ya2VyLTEzNTogTGF1bmNoaW5nIEdsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA0LTI4IDE5OjI3OjMzLDM3MCBbV29ya2VyLTEzNTogTGF1bmNoaW5nIEdsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNvbXBpbGUKKzIwMjAtMDQtMjggMTk6Mjg6NDksNzM4IFtXb3JrZXItMTM3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTk6Mjg6NDksNzM5IFtXb3JrZXItMTM3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI4IDE5OjI4OjQ5LDc0MSBbV29ya2VyLTEzNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDE5OjI4OjQ5LDc0MiBbV29ya2VyLTEzNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOCAxOToyOToxOCwyNDQgW1dvcmtlci0xMzU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxOToyOToxOCwyNDYgW1dvcmtlci0xMzU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTk6Mjk6MTgsMjQ4IFtXb3JrZXItMTM1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTk6Mjk6MTgsMjUwIFtXb3JrZXItMTM1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI4IDE5OjI5OjM5LDg0NSBbV29ya2VyLTE0MTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDE5OjI5OjM5LDg0NiBbV29ya2VyLTE0MTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOCAxOToyOTozOSw4NDcgW1dvcmtlci0xNDE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxOToyOTozOSw4NDkgW1dvcmtlci0xNDE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTk6MzE6MDcsOTg5IFtXb3JrZXItMTM3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTk6MzE6MDcsOTkxIFtXb3JrZXItMTM3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI4IDE5OjMxOjA3LDk5MiBbV29ya2VyLTEzNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDE5OjMxOjA3LDk5NCBbV29ya2VyLTEzNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOCAxOTozMjoyMywwNzkgW21haW5dIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOnRlc3RzOjAuMSBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNccG9tLnhtbC4KKzIwMjAtMDQtMjggMTk6MzM6MDYsNzM3IFttYWluXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzMjowLjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDQtMjggMTk6MzM6MjcsMzMxIFtXb3JrZXItMTQyOiBVcGRhdGluZyBtYXZlbiBwcm9qZWN0cyBdIElORk8gIG8uZS5tLmMuaS5wLlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciAtIFVwZGF0ZSBzdGFydGVkCisyMDIwLTA0LTI4IDE5OjMzOjI3LDU1MiBbV29ya2VyLTE0MjogVXBkYXRpbmcgbWF2ZW4gcHJvamVjdHMgXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzMjowLjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDQtMjggMTk6MzM6MjgsNDc0IFtXb3JrZXItMTQyOiBVcGRhdGluZyBtYXZlbiBwcm9qZWN0cyBdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gQWRkaW5nIHNvdXJjZSBmb2xkZXIgL0dsZW1tU2VydmljZXMyL3NyYworMjAyMC0wNC0yOCAxOTozMzoyOCw0NzUgW1dvcmtlci0xNDI6IFVwZGF0aW5nIG1hdmVuIHByb2plY3RzIF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBOb3QgYWRkaW5nIHNvdXJjZSBmb2xkZXIgL0dsZW1tU2VydmljZXMyL3NyYy90ZXN0L2phdmEgYmVjYXVzZSBpdCBvdmVybGFwcyB3aXRoIC9HbGVtbVNlcnZpY2VzMi9zcmMKKzIwMjAtMDQtMjggMTk6MzM6MjgsOTYyIFtXb3JrZXItMTQyOiBVcGRhdGluZyBtYXZlbiBwcm9qZWN0cyBdIEVSUk9SIG8uZS5tMmUud3RwLldUUFByb2plY3RDb25maWd1cmF0b3IgLSBVbmFibGUgdG8gY29uZmlndXJlIEdsZW1tU2VydmljZXMyCitvcmcuZWNsaXBzZS5tMmUud3RwLk1hcmtlZEV4Y2VwdGlvbjogVW5hYmxlIHRvIGNvbmZpZ3VyZSBHbGVtbVNlcnZpY2VzMgorCWF0IG9yZy5lY2xpcHNlLm0yZS53dHAuQWJzdHJhY3RQcm9qZWN0Q29uZmlndXJhdG9yRGVsZWdhdGUuY29uZmlndXJlUHJvamVjdChBYnN0cmFjdFByb2plY3RDb25maWd1cmF0b3JEZWxlZ2F0ZS5qYXZhOjk5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS53dHAuV1RQUHJvamVjdENvbmZpZ3VyYXRvci5jb25maWd1cmUoV1RQUHJvamVjdENvbmZpZ3VyYXRvci5qYXZhOjY4KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLnByb2plY3QuY29uZmlndXJhdG9yLkFic3RyYWN0TGlmZWN5Y2xlTWFwcGluZy5jb25maWd1cmUoQWJzdHJhY3RMaWZlY3ljbGVNYXBwaW5nLmphdmE6MTIwKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIkMy5jYWxsKFByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5qYXZhOjUwOCkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLnByb2plY3QuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyJDMuY2FsbChQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YToxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE1MSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLnByb2plY3QuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLnVwZGF0ZVByb2plY3RDb25maWd1cmF0aW9uKFByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5qYXZhOjUwMSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLnByb2plY3QuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLnVwZGF0ZVByb2plY3RDb25maWd1cmF0aW9uMChQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YTo0MzkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciQyLmNhbGwoUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6MzUyKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIkMi5jYWxsKFByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5qYXZhOjEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTUxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwuZXhlY3V0ZShNYXZlbkltcGwuamF2YToxMzUxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIudXBkYXRlUHJvamVjdENvbmZpZ3VyYXRpb24oUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6MzQ5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIudXBkYXRlUHJvamVjdENvbmZpZ3VyYXRpb24oUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6MzM1KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIudXBkYXRlUHJvamVjdENvbmZpZ3VyYXRpb24oUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6MzE3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIudXBkYXRlUHJvamVjdENvbmZpZ3VyYXRpb24oUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6MzA2KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLnd0cC5pbnRlcm5hbC5wcmVmZXJlbmNlcy5NYXZlbld0cFByZWZlcmVuY2VQYWdlJDQucnVuSW5Xb3Jrc3BhY2UoTWF2ZW5XdHBQcmVmZXJlbmNlUGFnZS5qYXZhOjM5MSkgW29yZy5lY2xpcHNlLm0yZS53dHBfMS40LjAuMjAxODA2MDYtMjAwNS5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuSW50ZXJuYWxXb3Jrc3BhY2VKb2IucnVuKEludGVybmFsV29ya3NwYWNlSm9iLmphdmE6MzkpIFtvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlc18zLjEzLjAudjIwMTgwNTEyLTExMzguamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOiBPbmUgb3IgbW9yZSBjb25zdHJhaW50cyBoYXZlIG5vdCBiZWVuIHNhdGlzZmllZC4KKwlhdCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5pbnRlcm5hbC5GYWNldGVkUHJvamVjdC5tb2RpZnlJbnRlcm5hbChGYWNldGVkUHJvamVjdC5qYXZhOjM2MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5pbnRlcm5hbC5GYWNldGVkUHJvamVjdC5tZXJnZUNoYW5nZXNJbnRlcm5hbChGYWNldGVkUHJvamVjdC5qYXZhOjExODEpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuaW50ZXJuYWwuRmFjZXRlZFByb2plY3QuYWNjZXNzJDIoRmFjZXRlZFByb2plY3QuamF2YToxMTE3KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmludGVybmFsLkZhY2V0ZWRQcm9qZWN0JDEucnVuKEZhY2V0ZWRQcm9qZWN0LmphdmE6MzI0KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjI4OSkgfltvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlc18zLjEzLjAudjIwMTgwNTEyLTExMzguamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjMxNikgfltvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlc18zLjEzLjAudjIwMTgwNTEyLTExMzguamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmludGVybmFsLkZhY2V0ZWRQcm9qZWN0Lm1vZGlmeShGYWNldGVkUHJvamVjdC5qYXZhOjMzOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUud3RwLldlYlByb2plY3RDb25maWd1cmF0b3JEZWxlZ2F0ZS5jb25maWd1cmUoV2ViUHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmphdmE6MTM2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS53dHAuQWJzdHJhY3RQcm9qZWN0Q29uZmlndXJhdG9yRGVsZWdhdGUuY29uZmlndXJlUHJvamVjdChBYnN0cmFjdFByb2plY3RDb25maWd1cmF0b3JEZWxlZ2F0ZS5qYXZhOjk1KSB+W25hOm5hXQorCS4uLiAyMSBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjAtMDQtMjggMTk6MzM6MjksMDgwIFtXb3JrZXItMTQyOiBVcGRhdGluZyBtYXZlbiBwcm9qZWN0cyBdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDQtMjggMTk6MzM6MjksMDg3IFtXb3JrZXItMTQyOiBVcGRhdGluZyBtYXZlbiBwcm9qZWN0cyBdIElORk8gIG8uZS5tLmMuaS5wLlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciAtIFVwZGF0ZSBjb21wbGV0ZWQ6IDEgc2VjCisyMDIwLTA0LTI4IDE5OjMzOjUwLDExMCBbV29ya2VyLTE0MjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDE5OjMzOjUwLDExNCBbV29ya2VyLTE0MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOCAxOTozMzo1MCwxMTcgW1dvcmtlci0xNDI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxOTozMzo1MCwxMjAgW1dvcmtlci0xNDI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTk6MzM6NTAsMTIwIFtXb3JrZXItMTQyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMyCisyMDIwLTA0LTI4IDE5OjMzOjUwLDEyMSBbV29ya2VyLTE0MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDQtMjggMTk6MzM6NTAsMTI3IFtXb3JrZXItMTQyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTk6MzU6MjksMTI2IFtXb3JrZXItMTQzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTk6MzU6MjksMTI4IFtXb3JrZXItMTQzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOCAxOTozNToyOSwxMzAgW1dvcmtlci0xNDM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxOTozNToyOSwxMzIgW1dvcmtlci0xNDM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI4IDE5OjM1OjI5LDIyNSBbV29ya2VyLTE0MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDE5OjM1OjI5LDIyOCBbV29ya2VyLTE0MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOCAxOTozNToyOSwyMzAgW1dvcmtlci0xNDM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxOTozNToyOSwyMzUgW1dvcmtlci0xNDM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTk6Mzc6MTYsMDc4IFtXb3JrZXItMTQxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTk6Mzc6MTYsMDc5IFtXb3JrZXItMTQxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI4IDE5OjM3OjE2LDA4MSBbV29ya2VyLTE0MTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDE5OjM3OjE2LDA4NSBbV29ya2VyLTE0MTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOCAxOTozNzoyOSwwNjEgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI4IDE5OjM3OjMzLDM1NyBbV29ya2VyLTE0NDogTGF1bmNoaW5nIEdsZW1tU2VydmljZXMgKDEpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNC0yOCAxOTozNzozMywzNTcgW1dvcmtlci0xNDQ6IExhdW5jaGluZyBHbGVtbVNlcnZpY2VzICgxKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yOCAxOTozODozMiw3NjQgW1dvcmtlci0xNDU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxOTozODozMiw3NjcgW1dvcmtlci0xNDU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTk6Mzg6MzIsNzY4IFtXb3JrZXItMTQ1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTk6Mzg6MzIsNzcwIFtXb3JrZXItMTQ1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI4IDE5OjM5OjAyLDI2MiBbV29ya2VyLTE0NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA0LTI4IDE5OjM5OjAyLDI2MiBbV29ya2VyLTE0NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjggMTk6NTk6NDIsNzAyIFtXb3JrZXItMTQ5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDQtMjggMTk6NTk6NDIsNzAzIFtXb3JrZXItMTQ5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yOCAyMDowMToyMiw1ODcgW1dvcmtlci0xNTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNC0yOCAyMDowMToyMiw1ODggW1dvcmtlci0xNTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTI4IDIwOjAzOjMyLDMxMSBbV29ya2VyLTE1MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6R2xlbW1TZXJ2aWNlczI6MC4wLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA0LTI4IDIwOjAzOjMyLDU5OCBbV29ya2VyLTE1MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDIwOjAzOjMyLDYwMCBbV29ya2VyLTE1MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOCAyMDowMzozMiw2MDEgW1dvcmtlci0xNTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAyMDowMzozMiw2MDMgW1dvcmtlci0xNTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMjA6MDM6MzIsNjA0IFtXb3JrZXItMTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMyCisyMDIwLTA0LTI4IDIwOjAzOjMyLDYwNCBbV29ya2VyLTE1MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDQtMjggMjA6MDM6MzIsNjExIFtXb3JrZXItMTUzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMjA6MDM6MzMsNjk1IFtXb3JrZXItMTU1OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBFUlJPUiBvLmUubS5qLmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiAtIENvdWxkIG5vdCBkb3dubG9hZCBzb3VyY2VzIGZvciBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1QKK29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOiBDb3VsZCBub3QgcmVzb2x2ZSBhcnRpZmFjdCBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczpqYXI6c291cmNlczowLjEtU05BUFNIT1QKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjc3NikgfltvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjEpIH5bb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjExMikgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzQzKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzIwKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWQoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6Mjc5KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZEF0dGFjaG1lbnRzKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI1NCkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRNYXZlbihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyMjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxNjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzcpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTUxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwuZXhlY3V0ZShNYXZlbkltcGwuamF2YToxMzU1KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KKzIwMjAtMDQtMjggMjA6MDM6NDEsNjc4IFtXb3JrZXItMTUxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDQtMjggMjA6MDM6NDEsNjc4IFtXb3JrZXItMTUxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yOCAyMDoxODo0NSw0MzQgW1dvcmtlci0xNjI6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzMjowLjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDQtMjggMjA6MTg6NDUsOTcxIFtXb3JrZXItMTYyOiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNC0yOCAyMDoxODo0NiwyOTcgW1dvcmtlci0xNjA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAyMDoxODo0NiwzMTAgW1dvcmtlci0xNjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMjA6MTg6NDYsMzEyIFtXb3JrZXItMTYwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMjA6MTg6NDYsMzI5IFtXb3JrZXItMTYwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI4IDIwOjE4OjQ2LDMyOSBbV29ya2VyLTE2MDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNC0yOCAyMDoxODo0NiwzMjkgW1dvcmtlci0xNjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTA0LTI4IDIwOjE4OjQ2LDMzNiBbV29ya2VyLTE2MDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDIwOjE4OjQ2LDk2NiBbV29ya2VyLTE2MjogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gRVJST1Igby5lLm0uai5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IgLSBDb3VsZCBub3QgZG93bmxvYWQgamF2YWRvYyBmb3IgZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UCitvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjogQ291bGQgbm90IHJlc29sdmUgYXJ0aWZhY3QgZGUua29yYXAuc2VydmljZXM6dXRpbHM6amFyOmphdmFkb2M6MC4xLVNOQVBTSE9UCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YTo3NzYpIH5bb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YToxKSB+W29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxMTIpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjc0MykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjcyMCkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI3OSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRBdHRhY2htZW50cyhEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNjUpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkTWF2ZW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjIxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTYxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM3KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE1MSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLmV4ZWN1dGUoTWF2ZW5JbXBsLmphdmE6MTM1NSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzUpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCisyMDIwLTA0LTI4IDIwOjE4OjU0LDY5NyBbV29ya2VyLTE2MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA0LTI4IDIwOjE4OjU0LDY5OCBbV29ya2VyLTE2MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjggMjA6MzA6MTUsOTUyIFtXb3JrZXItMTY2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMjA6MzA6MTUsOTU0IFtXb3JrZXItMTY2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI4IDIwOjMwOjE1LDk1NiBbV29ya2VyLTE2NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDIwOjMwOjE1LDk1OCBbV29ya2VyLTE2NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOCAyMDozMDoyMywwOTIgW1dvcmtlci0xNjY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNC0yOCAyMDozMDoyMywwOTMgW1dvcmtlci0xNjY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTI4IDIwOjM3OjU1LDMzNiBbV29ya2VyLTE2NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA0LTI4IDIwOjM3OjU1LDMzNiBbV29ya2VyLTE2NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjggMjA6Mzg6MTAsNTMyIFtXb3JrZXItMTY5OiBMYXVuY2hpbmcgVGVzdFJ1bm5lcl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDIwOjM4OjEwLDUzNCBbV29ya2VyLTE2OTogTGF1bmNoaW5nIFRlc3RSdW5uZXJdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMjA6Mzg6MTAsNTM1IFtXb3JrZXItMTY5OiBMYXVuY2hpbmcgVGVzdFJ1bm5lcl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDIwOjM4OjEwLDUzNyBbV29ya2VyLTE2OTogTGF1bmNoaW5nIFRlc3RSdW5uZXJdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMjA6Mzg6NTAsMTIxIFtXb3JrZXItMTcyOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAyMDozODo1MCwxMjMgW1dvcmtlci0xNzI6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOCAyMDozODo1MCwxMjQgW1dvcmtlci0xNzI6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDIwOjM4OjUwLDEyNiBbV29ya2VyLTE3MjogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI4IDIwOjUxOjMzLDI0OCBbV29ya2VyLTE2NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA0LTI4IDIwOjUxOjMzLDI0OCBbV29ya2VyLTE2NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjggMjA6NTI6NDAsMzM4IFtXb3JrZXItMTc4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMjA6NTI6NDAsMzQwIFtXb3JrZXItMTc4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI4IDIwOjUyOjQwLDM0MSBbV29ya2VyLTE3ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDIwOjUyOjQwLDM0MiBbV29ya2VyLTE3ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOCAyMDo1Mjo1MSw0OTQgW1dvcmtlci0xODA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNC0yOCAyMDo1Mjo1MSw0OTUgW1dvcmtlci0xODA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTI4IDIwOjU4OjM3LDg1MiBbV29ya2VyLTE4NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA0LTI4IDIwOjU4OjM3LDg1MiBbV29ya2VyLTE4NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjggMjA6NTg6NTAsMzYwIFtXb3JrZXItMTg2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMjA6NTg6NTAsMzYyIFtXb3JrZXItMTg2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI4IDIwOjU4OjUwLDM2NSBbV29ya2VyLTE4NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDIwOjU4OjUwLDM2NyBbV29ya2VyLTE4NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOCAyMDo1ODo1Niw4MDUgW1dvcmtlci0xODc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNC0yOCAyMDo1ODo1Niw4MDUgW1dvcmtlci0xODc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTI4IDIxOjAzOjQzLDUxNCBbV29ya2VyLTE4OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA0LTI4IDIxOjAzOjQzLDUxNSBbV29ya2VyLTE4OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjggMjE6MDM6NTEsOTk2IFtXb3JrZXItMTkyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMjE6MDM6NTEsOTk5IFtXb3JrZXItMTkyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI4IDIxOjAzOjUyLDAwMCBbV29ya2VyLTE5MjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDIxOjAzOjUyLDAwMyBbV29ya2VyLTE5MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOCAyMTowMzo1OSwyNjggW1dvcmtlci0xOTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNC0yOCAyMTowMzo1OSwyNjggW1dvcmtlci0xOTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTI4IDIxOjA1OjQ2LDcwNCBbV29ya2VyLTE5MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA0LTI4IDIxOjA1OjQ2LDcwNCBbV29ya2VyLTE5MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjggMjE6MDU6NTcsMTI2IFtXb3JrZXItMTkzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMjE6MDU6NTcsMTI5IFtXb3JrZXItMTkzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI4IDIxOjA1OjU3LDEzMCBbV29ya2VyLTE5MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDIxOjA1OjU3LDEzMiBbV29ya2VyLTE5MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOCAyMTowNjowMyw3MTAgW1dvcmtlci0xOTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNC0yOCAyMTowNjowMyw3MTAgW1dvcmtlci0xOTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTI4IDIxOjA5OjU1LDYxMyBbV29ya2VyLTE5MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDIxOjA5OjU1LDYxNiBbV29ya2VyLTE5MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOCAyMTowOTo1NSw2MTcgW1dvcmtlci0xOTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAyMTowOTo1NSw2MTkgW1dvcmtlci0xOTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMjE6MDk6NTksNzI4IFtXb3JrZXItMTkxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDQtMjggMjE6MDk6NTksNzI5IFtXb3JrZXItMTkxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yOCAyMToxNTowNiwzMjcgW1dvcmtlci0xOTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAyMToxNTowNiwzMjkgW1dvcmtlci0xOTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMjE6MTU6MDYsMzMwIFtXb3JrZXItMTkzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMjE6MTU6MDYsMzMyIFtXb3JrZXItMTkzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI4IDIxOjE1OjEwLDEyMSBbV29ya2VyLTIwMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA0LTI4IDIxOjE1OjEwLDEyMSBbV29ya2VyLTIwMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjggMjE6MzA6MjUsMDcwIFtXb3JrZXItMjA1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMjE6MzA6MjUsMDcyIFtXb3JrZXItMjA1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI4IDIxOjMwOjI1LDA3NSBbV29ya2VyLTIwNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDIxOjMwOjI1LDA3NyBbV29ya2VyLTIwNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOCAyMTozMDoyOCw2OTAgW1dvcmtlci0yMDY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNC0yOCAyMTozMDoyOCw2OTAgW1dvcmtlci0yMDY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTI5IDA5OjM5OjUzLDk0MiBbV29ya2VyLTI6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgb3V0LW9mLWRhdGUuIFRyeWluZyB0byB1cGRhdGUuCisyMDIwLTA0LTI5IDE3OjA1OjU0LDAyNyBbV29ya2VyLTQ0OiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjAtMDQtMjkgMTc6MDk6NTksOTM5IFtXb3JrZXItNDc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAxNzowOTo1OSw5NDAgW1dvcmtlci00NzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMTc6MDk6NTksOTQzIFtXb3JrZXItNDc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAxNzowOTo1OSw5NDQgW1dvcmtlci00NzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMTc6MTA6MDIsMjg0IFtXb3JrZXItNDc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAxNzoxMDowMiwyODYgW1dvcmtlci00NzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOSAxNzoxMDowMiwyODkgW1dvcmtlci00NzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDE3OjEwOjAyLDI5MSBbV29ya2VyLTQ3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI5IDE3OjEwOjAzLDk1MiBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjkgMTc6MTA6MDYsOTY1IFtXb3JrZXItNDc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAxNzoxMDowNiw5ODMgW1dvcmtlci00NzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOSAxNzoxMDowNiw5ODUgW1dvcmtlci00NzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDE3OjEwOjA2LDk4OCBbV29ya2VyLTQ3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI5IDE3OjEwOjA3LDY1MSBbV29ya2VyLTQ2OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoNDQpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yOSAxNzoxMDowNyw2NTIgW1dvcmtlci00NjogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDQ0KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yOSAxNzoxMTo0NSwxMjggW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI5IDE3OjExOjQ3LDkyMCBbV29ya2VyLTQ3OiBMYXVuY2hpbmcgR2xlbW1DbGllbnQgKDEyKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50CisyMDIwLTA0LTI5IDE3OjExOjQ3LDkyMCBbV29ya2VyLTQ3OiBMYXVuY2hpbmcgR2xlbW1DbGllbnQgKDEyKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yOSAxNzoxMTo1OSwzNTcgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI5IDE3OjEyOjAyLDExMSBbV29ya2VyLTQ4OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoNDUpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yOSAxNzoxMjowMiwxMTIgW1dvcmtlci00ODogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDQ1KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yOSAxNzoxNDo1OSw1NTUgW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDE3OjE0OjU5LDU2NSBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOSAxNzoxNDo1OSw1NjcgW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDE3OjE0OjU5LDU3MCBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOSAxNzoxNDo1OSw2NDkgW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDE3OjE0OjU5LDY1NCBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI5IDE3OjE0OjU5LDY1NSBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjkgMTc6MTQ6NTksNjYwIFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMTc6MzQ6MjAsNDMzIFtXb3JrZXItNTA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAxNzozNDoyMCw0MzUgW1dvcmtlci01MDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMTc6MzQ6MjAsNDM4IFtXb3JrZXItNTA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAxNzozNDoyMCw0NDUgW1dvcmtlci01MDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMTc6MzQ6MjAsNTQ5IFtXb3JrZXItNTA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAxNzozNDoyMCw1NTUgW1dvcmtlci01MDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOSAxNzozNDoyMCw1NTcgW1dvcmtlci01MDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDE3OjM0OjIwLDU2MCBbV29ya2VyLTUwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI5IDE3OjM0OjI2LDk0OCBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjkgMTc6MzQ6MzAsMTYzIFtXb3JrZXItNTE6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICg0NildIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTI5IDE3OjM0OjMwLDE2MyBbV29ya2VyLTUxOiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoNDYpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTI5IDE3OjM3OjEyLDI5NSBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjkgMTc6Mzc6MTQsNzI5IFtXb3JrZXItNTQ6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICg0NyldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTI5IDE3OjM3OjE0LDczMCBbV29ya2VyLTU0OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoNDcpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTI5IDE3OjM4OjA3LDM2MSBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjkgMTc6Mzg6MDksNjc0IFtXb3JrZXItNTA6IExhdW5jaGluZyBHbGVtbUNsaWVudCAoMTMpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnQKKzIwMjAtMDQtMjkgMTc6Mzg6MDksNjc0IFtXb3JrZXItNTA6IExhdW5jaGluZyBHbGVtbUNsaWVudCAoMTMpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTI5IDE3OjM4OjMxLDI1MSBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjkgMTc6Mzg6MzMsODM0IFtXb3JrZXItNTQ6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICg0OCldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTI5IDE3OjM4OjMzLDgzNCBbV29ya2VyLTU0OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoNDgpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTI5IDE3OjQ1OjI0LDc3NSBbV29ya2VyLTU1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjkgMTc6NDU6MjQsNzgwIFtXb3JrZXItNTU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMTc6NDU6MjQsNzk0IFtXb3JrZXItNTU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAxNzo0NToyNCw3OTYgW1dvcmtlci01NTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOSAxNzo0NTozMywxODEgW1dvcmtlci01NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA0LTI5IDE3OjQ1OjMzLDE4MSBbV29ya2VyLTU3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yOSAxODoyOToyOCw5MTMgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI5IDE4OjI5OjMyLDczOCBbV29ya2VyLTYzOiBMYXVuY2hpbmcgR2xlbW1DbGllbnQgKDE0KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50CisyMDIwLTA0LTI5IDE4OjI5OjMyLDczOSBbV29ya2VyLTYzOiBMYXVuY2hpbmcgR2xlbW1DbGllbnQgKDE0KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yOSAxODoyOTo1MywxMjUgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI5IDE4OjI5OjU4LDY5MSBbV29ya2VyLTY4OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoNDkpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yOSAxODoyOTo1OCw2OTEgW1dvcmtlci02ODogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDQ5KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yOSAxODo1NToyMiw1MzUgW1dvcmtlci03MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnQKKzIwMjAtMDQtMjkgMTg6NTU6MjIsNTM2IFtXb3JrZXItNzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yOSAxODo1NTo0MSw2OTkgW1dvcmtlci03NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTI5IDE4OjU1OjQxLDY5OSBbV29ya2VyLTc1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yOSAxODo1NTo1NCw2MDggW1dvcmtlci03NDogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjkgMTg6NTU6NTQsNjEyIFtXb3JrZXItNzQ6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMTg6NTU6NTQsNjE1IFtXb3JrZXItNzQ6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDE4OjU1OjU0LDYxNyBbV29ya2VyLTc0OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI5IDE4OjU1OjU0LDc3NiBbV29ya2VyLTc0OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAxODo1NTo1NCw3NzggW1dvcmtlci03NDogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI5IDE4OjU1OjU0LDc3OSBbV29ya2VyLTc0OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAxODo1NTo1NCw3ODAgW1dvcmtlci03NDogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI5IDE5OjAyOjMwLDUwMiBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjkgMTk6MDI6MzMsMjk0IFtXb3JrZXItNzY6IExhdW5jaGluZyBHbGVtbUNsaWVudCAoMTUpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnQKKzIwMjAtMDQtMjkgMTk6MDI6MzMsMjk0IFtXb3JrZXItNzY6IExhdW5jaGluZyBHbGVtbUNsaWVudCAoMTUpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTI5IDE5OjAyOjUzLDk1MiBbV29ya2VyLTc1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjkgMTk6MDI6NTMsOTUyIFtXb3JrZXItNzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTI5IDE5OjAzOjA1LDgzMyBbV29ya2VyLTc1OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAxOTowMzowNSw4MzUgW1dvcmtlci03NTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOSAxOTowMzowNSw4MzcgW1dvcmtlci03NTogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjkgMTk6MDM6MDUsODQxIFtXb3JrZXItNzU6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMTk6MDM6MDUsODk3IFtXb3JrZXItNzU6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDE5OjAzOjA1LDkwNyBbV29ya2VyLTc1OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMTk6MDM6MDUsOTA5IFtXb3JrZXItNzU6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDE5OjAzOjA1LDkxMSBbV29ya2VyLTc1OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMTk6MDU6MTMsMTM5IFtXb3JrZXItNzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNC0yOSAxOTowNToxMywxNDAgW1dvcmtlci03NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjkgMTk6MDU6MjYsMzU4IFtXb3JrZXItNzU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAxOTowNToyNiwzNjAgW1dvcmtlci03NTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOSAxOTowNToyNiwzNjMgW1dvcmtlci03NTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDE5OjA1OjI2LDM2NCBbV29ya2VyLTc1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI5IDE5OjA1OjMyLDU3NCBbV29ya2VyLTc2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDQtMjkgMTk6MDU6MzIsNTc0IFtXb3JrZXItNzY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTI5IDE5OjEwOjU1LDg0OSBbV29ya2VyLTcyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDQtMjkgMTk6MTA6NTUsODQ5IFtXb3JrZXItNzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTI5IDE5OjExOjA5LDA3NCBbV29ya2VyLTg1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjkgMTk6MTE6MDksMDc3IFtXb3JrZXItODU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMTk6MTE6MDksMDc5IFtXb3JrZXItODU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAxOToxMTowOSwwODEgW1dvcmtlci04NTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOSAxOToxMToxNCw0ODcgW1dvcmtlci03MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA0LTI5IDE5OjExOjE0LDQ4OCBbV29ya2VyLTcyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yOSAxOTozNjoxNSw0NjYgW1dvcmtlci05NTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDE5OjM2OjE1LDQ2OSBbV29ya2VyLTk1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOSAxOTozNjoxNSw0NzMgW1dvcmtlci05NTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDE5OjM2OjE1LDQ3OCBbV29ya2VyLTk1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOSAxOTozNjo0NCwxMDggW1dvcmtlci05MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDE5OjM2OjQ0LDExMCBbV29ya2VyLTkzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI5IDE5OjM2OjQ0LDExMiBbV29ya2VyLTkzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjkgMTk6MzY6NDQsMTE0IFtXb3JrZXItOTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMTk6MzY6NDQsMTY4IFtXb3JrZXItOTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAxOTozNjo0NCwxNzAgW1dvcmtlci05MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMTk6MzY6NDQsMTcyIFtXb3JrZXItOTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAxOTozNjo0NCwxNzYgW1dvcmtlci05MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMTk6NDE6NDEsNzk0IFtXb3JrZXItOTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAxOTo0MTo0MSw3OTYgW1dvcmtlci05NDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMTk6NDE6NDEsNzk3IFtXb3JrZXItOTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAxOTo0MTo0MSw3OTkgW1dvcmtlci05NDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMTk6NDU6MzksOTc3IFtXb3JrZXItOTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tOkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHBvbS54bWwuCisyMDIwLTA0LTI5IDE5OjQ1OjQwLDY1MiBbV29ya2VyLTk3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjkgMTk6NDU6NDAsNjU0IFtXb3JrZXItOTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI5IDE5OjQ1OjQwLDY1NSBbV29ya2VyLTk3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjkgMTk6NDU6NDAsNjU3IFtXb3JrZXItOTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI5IDE5OjQ2OjEwLDE5NCBbV29ya2VyLTEwMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDE5OjQ2OjEwLDE5NyBbV29ya2VyLTEwMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMTk6NDY6MTAsMTk4IFtXb3JrZXItMTAzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjkgMTk6NDY6MTAsMjA0IFtXb3JrZXItMTAzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOSAyMDoxMToyOCw1MjkgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI5IDIwOjExOjMwLDcyOSBbV29ya2VyLTExMjogTGF1bmNoaW5nIEdsZW1tQ2xpZW50ICgxNildIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudAorMjAyMC0wNC0yOSAyMDoxMTozMCw3MzAgW1dvcmtlci0xMTI6IExhdW5jaGluZyBHbGVtbUNsaWVudCAoMTYpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTI5IDIwOjExOjQ0LDg5NSBbV29ya2VyLTExMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDIwOjExOjQ0LDg5NiBbV29ya2VyLTExMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMjA6MTE6NDQsODk4IFtXb3JrZXItMTEyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjkgMjA6MTE6NDQsOTAwIFtXb3JrZXItMTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOSAyMDoxMTo0OSwwNzYgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI5IDIwOjExOjUxLDQxMSBbV29ya2VyLTEwNzogTGF1bmNoaW5nIEdsZW1tQ2xpZW50ICgxNyldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudAorMjAyMC0wNC0yOSAyMDoxMTo1MSw0MTEgW1dvcmtlci0xMDc6IExhdW5jaGluZyBHbGVtbUNsaWVudCAoMTcpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTI5IDIwOjEyOjA2LDg1OSBbV29ya2VyLTExMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTI5IDIwOjEyOjA2LDg1OSBbV29ya2VyLTExMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjkgMjA6MTI6MjIsMDUyIFtXb3JrZXItMTA3OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAyMDoxMjoyMiwwNTQgW1dvcmtlci0xMDc6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOSAyMDoxMjoyMiwwNTggW1dvcmtlci0xMDc6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDIwOjEyOjIyLDA2MCBbV29ya2VyLTEwNzogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI5IDIwOjEyOjIyLDE2OSBbV29ya2VyLTEwNzogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjkgMjA6MTI6MjIsMTcxIFtXb3JrZXItMTA3OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMjA6MTI6MjIsMTcyIFtXb3JrZXItMTA3OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAyMDoxMjoyMiwxNzUgW1dvcmtlci0xMDc6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOSAyMDoxMzowOSwyNzEgW1dvcmtlci0xMTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yOSAyMDoxMzowOSwyNzEgW1dvcmtlci0xMTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTI5IDIwOjE1OjIwLDk2NSBbV29ya2VyLTExMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTI5IDIwOjE1OjIwLDk2NSBbV29ya2VyLTExMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjkgMjA6MTU6MzMsNzk1IFtXb3JrZXItMTEwOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAyMDoxNTozMyw3OTcgW1dvcmtlci0xMTA6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMjA6MTU6MzMsNzk4IFtXb3JrZXItMTEwOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAyMDoxNTozMyw3OTkgW1dvcmtlci0xMTA6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMjA6MTU6MzMsODUyIFtXb3JrZXItMTEwOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAyMDoxNTozMyw4NTQgW1dvcmtlci0xMTA6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOSAyMDoxNTozMyw4NTUgW1dvcmtlci0xMTA6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDIwOjE1OjMzLDg1NyBbV29ya2VyLTExMDogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI5IDIwOjIyOjI4LDE2NiBbV29ya2VyLTExNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnQKKzIwMjAtMDQtMjkgMjA6MjI6MjgsMTY2IFtXb3JrZXItMTE1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjkgMjA6MjI6MzksNTQ1IFtXb3JrZXItMTE0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjkgMjA6MjI6MzksNTQ1IFtXb3JrZXItMTE0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yOSAyMDoyMjo1MSwyOTIgW1dvcmtlci0xMTU6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDIwOjIyOjUxLDMwMSBbV29ya2VyLTExNTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI5IDIwOjIyOjUxLDMwMyBbV29ya2VyLTExNTogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjkgMjA6MjI6NTEsMzA1IFtXb3JrZXItMTE1OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMjA6MjI6NTEsMzY1IFtXb3JrZXItMTE1OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAyMDoyMjo1MSwzNjcgW1dvcmtlci0xMTU6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMjA6MjI6NTEsMzY5IFtXb3JrZXItMTE1OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAyMDoyMjo1MSwzNzEgW1dvcmtlci0xMTU6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMjA6MjI6NTEsNDA4IFtXb3JrZXItMTE1OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAyMDoyMjo1MSw0MTAgW1dvcmtlci0xMTU6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOSAyMDoyMjo1MSw0MTEgW1dvcmtlci0xMTU6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDIwOjIyOjUxLDQxMyBbV29ya2VyLTExNTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTMwIDA3OjM0OjU3LDg0MCBbV29ya2VyLTQ6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTA0LTMwIDA3OjQ3OjEzLDEzMSBbV29ya2VyLTE6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMC0wNC0zMCAwODo0ODo0MywwNjQgW1dvcmtlci0xOTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTMwIDA4OjQ4OjQzLDA2NyBbV29ya2VyLTE5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMzAgMDg6NDg6NDMsMDY5IFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0zMCAwODo0ODo0MywwNzEgW1dvcmtlci0xOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTMwIDA4OjQ4OjQ0LDEzMiBbV29ya2VyLTE5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMzAgMDg6NDg6NDQsMTM0IFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTMwIDA4OjQ4OjQ0LDEzNyBbV29ya2VyLTE5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMzAgMDg6NDg6NDQsMTQwIFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTMwIDA4OjQ4OjQ0LDkyNyBbV29ya2VyLTE5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMzAgMDg6NDg6NDQsOTQwIFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMzAgMDg6NDg6NDQsOTQyIFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0zMCAwODo0ODo0NCw5NDggW1dvcmtlci0xOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0zMCAwODo1MToyNiwyOTIgW1dvcmtlci0xOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMzAgMDg6NTE6MjYsMzAwIFtXb3JrZXItMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0zMCAwODo1MToyNiwzMDMgW1dvcmtlci0xOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMzAgMDg6NTE6MjYsMzA0IFtXb3JrZXItMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0zMCAwODo1NTowNiw3NTMgW1dvcmtlci0xNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTMwIDA4OjU1OjA2LDc1NiBbV29ya2VyLTE1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMzAgMDg6NTU6MDYsNzU4IFtXb3JrZXItMTU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0zMCAwODo1NTowNiw3NjEgW1dvcmtlci0xNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTMwIDA4OjU1OjE5LDc1MiBbV29ya2VyLTI1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlCisyMDIwLTA0LTMwIDA4OjU1OjE5LDc1MyBbV29ya2VyLTI1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTMwIDA5OjAyOjExLDEzOSBbV29ya2VyLTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2UKKzIwMjAtMDQtMzAgMDk6MDI6MTEsMTM5IFtXb3JrZXItMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0zMCAwOTowMjoyNSw0MTYgW1dvcmtlci0xOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMzAgMDk6MDI6MjUsNDE5IFtXb3JrZXItMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTMwIDA5OjAyOjI1LDQyMSBbV29ya2VyLTE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0zMCAwOTowMjoyNSw0MjIgW1dvcmtlci0xOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMzAgMDk6MDI6MzAsNTIxIFtXb3JrZXItMjM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2UKKzIwMjAtMDQtMzAgMDk6MDI6MzAsNTIxIFtXb3JrZXItMjM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMzAgMTg6MjU6NDQsNjM1IFtXb3JrZXItNzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2UKKzIwMjAtMDQtMzAgMTg6MjU6NDQsNjM3IFtXb3JrZXItNzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMzAgMTg6MjY6MDQsNjU3IFtXb3JrZXItODE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0zMCAxODoyNjowNCw2NTkgW1dvcmtlci04MTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTMwIDE4OjI2OjA0LDY2MSBbV29ya2VyLTgxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMzAgMTg6MjY6MDQsNjYyIFtXb3JrZXItODE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0zMCAxODoyNjoxMSwwNTkgW1dvcmtlci03ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZQorMjAyMC0wNC0zMCAxODoyNjoxMSwwNTkgW1dvcmtlci03ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0zMCAxODo1NToxNCw1MjMgW1dvcmtlci04NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA0LTMwIDE4OjU1OjE0LDUyNCBbV29ya2VyLTg1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0zMCAxODo1NToyNiwxODQgW1dvcmtlci04OTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTMwIDE4OjU1OjI2LDE4NiBbV29ya2VyLTg5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMzAgMTg6NTU6MjYsMTkwIFtXb3JrZXItODk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0zMCAxODo1NToyNiwxOTIgW1dvcmtlci04OTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTMwIDE4OjU1OjI2LDM0MCBbV29ya2VyLTg5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMzAgMTg6NTU6MjYsMzQyIFtXb3JrZXItODk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMzAgMTg6NTU6MjYsMzQ0IFtXb3JrZXItODk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0zMCAxODo1NToyNiwzNDYgW1dvcmtlci04OTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0zMCAxODo1NTozMSw3MjggW1dvcmtlci04ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA0LTMwIDE4OjU1OjMxLDcyOCBbV29ya2VyLTg4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0zMCAxODo1NTo1Myw4NzEgW1dvcmtlci03OTogTGF1bmNoaW5nIEV4ZWN1dGluZyB0ZXN0IGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTMwIDE4OjU1OjUzLDg3MSBbV29ya2VyLTc5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIHRlc3QgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgdGVzdAorMjAyMC0wNC0zMCAxODo1NjowNCwxNzggW1dvcmtlci04NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTMwIDE4OjU2OjA0LDE3OCBbV29ya2VyLTg3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0zMCAxODo1NjoxNSwzMjkgW1dvcmtlci04ODogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMzAgMTg6NTY6MTUsMzMxIFtXb3JrZXItODg6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0zMCAxODo1NjoxNSwzMzMgW1dvcmtlci04ODogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMzAgMTg6NTY6MTUsMzM1IFtXb3JrZXItODg6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0zMCAxODo1NjoxNSw1NzYgW1dvcmtlci04ODogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMzAgMTg6NTY6MTUsNTgwIFtXb3JrZXItODg6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0zMCAxODo1NjoxNSw1ODIgW1dvcmtlci04ODogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMzAgMTg6NTY6MTUsNTg0IFtXb3JrZXItODg6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0zMCAxOToxMjoxMiw4MzMgW1dvcmtlci05ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTMwIDE5OjEyOjEyLDgzNCBbV29ya2VyLTk4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0zMCAxOToxMjoyNCwxMjEgW1dvcmtlci0xMDA6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTMwIDE5OjEyOjI0LDEyNCBbV29ya2VyLTEwMDogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMzAgMTk6MTI6MjQsMTI1IFtXb3JrZXItMTAwOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0zMCAxOToxMjoyNCwxMjcgW1dvcmtlci0xMDA6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTMwIDE5OjEyOjI0LDE3NyBbV29ya2VyLTEwMDogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMzAgMTk6MTI6MjQsMTc4IFtXb3JrZXItMTAwOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMzAgMTk6MTI6MjQsMTgxIFtXb3JrZXItMTAwOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0zMCAxOToxMjoyNCwxODMgW1dvcmtlci0xMDA6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNCAxODoyMzo0MiwzOTUgW1dvcmtlci0xMDogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjAtMDUtMDQgMTg6MjQ6MDIsMTQ1IFtXb3JrZXItMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjI0OjAyLDE0OCBbV29ya2VyLTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA0IDE4OjI0OjAyLDE1MiBbV29ya2VyLTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNCAxODoyNDowMiwxNTQgW1dvcmtlci0zOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNCAxODoyNDoxMiwwMjggW1dvcmtlci0zOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzMjowLjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDUtMDQgMTg6MjQ6MTcsMzE1IFtXb3JrZXItMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjI0OjE3LDMxNyBbV29ya2VyLTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDQgMTg6MjQ6MTcsMzE5IFtXb3JrZXItMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjI0OjE3LDMyMSBbV29ya2VyLTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDQgMTg6MjQ6MTcsMzM5IFtXb3JrZXItMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0wNCAxODoyNDoxNywzNDAgW1dvcmtlci0zOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0wNCAxODoyNDoxNywzODIgW1dvcmtlci0zOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDQgMTg6MjQ6MTcsNjExIFtXb3JrZXItMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjI0OjE3LDYxMyBbV29ya2VyLTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA0IDE4OjI0OjE3LDYxNSBbV29ya2VyLTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNCAxODoyNDoxNyw2MTggW1dvcmtlci0zOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNCAxODoyNDo0MSw5MzEgW1dvcmtlci05OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xwb20ueG1sLgorMjAyMC0wNS0wNCAxODoyNDo0MiwzMDIgW1dvcmtlci05OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDQgMTg6MjQ6NDIsMzA0IFtXb3JrZXItOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDQgMTg6MjQ6NDIsMzA2IFtXb3JrZXItOTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjI0OjQyLDMwOSBbV29ya2VyLTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA0IDE4OjI0OjQyLDU1NiBbV29ya2VyLTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tOkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHBvbS54bWwuCisyMDIwLTA1LTA0IDE4OjI0OjQyLDk3OCBbV29ya2VyLTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNCAxODoyNDo0Miw5ODAgW1dvcmtlci05OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNCAxODoyNDo0Miw5ODIgW1dvcmtlci05OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDQgMTg6MjQ6NDIsOTg0IFtXb3JrZXItOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDQgMTg6MjQ6NTEsNzMzIFtXb3JrZXItMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnQKKzIwMjAtMDUtMDQgMTg6MjQ6NTEsNzM0IFtXb3JrZXItMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA0IDE4OjI1OjE1LDYwOSBbV29ya2VyLTEzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDQgMTg6MjU6MTUsNjE1IFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNCAxODoyNToxNSw2MTcgW1dvcmtlci0xMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjI1OjE1LDYyMSBbV29ya2VyLTEzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDQgMTg6MjU6MTUsNzIyIFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNCAxODoyNToxNSw3MjUgW1dvcmtlci0xMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDQgMTg6MjU6MTUsNzI4IFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNCAxODoyNToxNSw3MzEgW1dvcmtlci0xMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDQgMTg6MjU6MTYsMjE4IFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNS0wNCAxODoyNToxNiw3ODYgW1dvcmtlci0xMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjI1OjE2LDc4OCBbV29ya2VyLTEzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA0IDE4OjI1OjE2LDc5MCBbV29ya2VyLTEzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDQgMTg6MjU6MTYsNzkzIFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDQgMTg6MjU6MTYsNzk0IFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0wNCAxODoyNToxNiw3OTQgW1dvcmtlci0xMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0wNCAxODoyNToxNiw4MDYgW1dvcmtlci0xMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjI1OjE3LDEyMCBbV29ya2VyLTEzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp0ZXN0czowLjEgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHBvbS54bWwuCisyMDIwLTA1LTA0IDE4OjI1OjE3LDU0NiBbV29ya2VyLTEzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDQgMTg6MjU6MTcsNTQ4IFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDQgMTg6MjU6MTcsNTQ5IFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNCAxODoyNToxNyw1NTAgW1dvcmtlci0xMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNCAxODoyNToyMyw3ODkgW1dvcmtlci03OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDQgMTg6MjU6MjMsNzkwIFtXb3JrZXItNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDQgMTg6MjY6MTAsNjI5IFtXb3JrZXItMTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxwb20ueG1sLgorMjAyMC0wNS0wNCAxODoyNjoxMCw5MjUgW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjI2OjEwLDkyNyBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDQgMTg6MjY6MTAsOTI5IFtXb3JrZXItMTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNCAxODoyNjoxMCw5MzEgW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA0IDE4OjI2OjExLDA1NSBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp0ZXN0czowLjEgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHBvbS54bWwuCisyMDIwLTA1LTA0IDE4OjI2OjExLDE4OCBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDQgMTg6MjY6MTEsMTkwIFtXb3JrZXItMTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDQgMTg6MjY6MTEsMTkxIFtXb3JrZXItMTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNCAxODoyNjoxMSwxOTMgW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNCAxODoyNjoyMiw5NjEgW1dvcmtlci0yOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDQgMTg6MjY6MjIsOTYyIFtXb3JrZXItMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDQgMTg6MzA6MDksNTEyIFtXb3JrZXItMTE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNCAxODozMDowOSw1MTUgW1dvcmtlci0xMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNCAxODozMDowOSw1MTcgW1dvcmtlci0xMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjMwOjA5LDUxOSBbV29ya2VyLTExOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA0IDE4OjMwOjE1LDk3OSBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDUtMDQgMTg6MzA6MTgsNTYxIFtXb3JrZXItMTE6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICg1MCldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA0IDE4OjMwOjE4LDU2MSBbV29ya2VyLTExOiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoNTApXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA1LTA0IDE4OjM1OjI3LDQ5MCBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDQgMTg6MzU6MjcsNDkzIFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNCAxODozNToyNyw0OTUgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjM1OjI3LDQ5OCBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDQgMTg6MzU6MzMsMDQ3IFtXb3JrZXItMTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2UKKzIwMjAtMDUtMDQgMTg6MzU6MzMsMDQ3IFtXb3JrZXItMTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDQgMTg6MzY6MDEsNjE2IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNCAxODozNjowMSw2MTkgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA0IDE4OjM2OjAxLDYyMSBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDQgMTg6MzY6MDEsNjIzIFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNCAxODozNjowNiw4MTkgW1dvcmtlci0xOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA0IDE4OjM2OjA2LDgxOSBbV29ya2VyLTE5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNCAxODozODowMyw2MzggW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjM4OjAzLDY0MSBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA0IDE4OjM4OjAzLDY0NCBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDQgMTg6Mzg6MDMsNjQ4IFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDQgMTg6Mzg6MTgsNTE1IFtXb3JrZXItMjI6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0wNCAxODozODoxOCw2NTMgW1dvcmtlci0yMjogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMDQgMTg6Mzg6MTgsNzcxIFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNCAxODozODoxOCw3NzYgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDQgMTg6Mzg6MTgsNzgwIFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNCAxODozODoxOCw3ODIgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDQgMTg6Mzg6MTksMDQwIFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNCAxODozODoxOSwwNDUgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNCAxODozODoxOSwwNDcgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjM4OjE5LDA3MCBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA0IDE4OjM4OjE5LDA3MSBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTA0IDE4OjM4OjE5LDA3MSBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0wNCAxODozODoxOSwwNzggW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjM4OjE5LDIzNyBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDQgMTg6Mzg6MTksMjQwIFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNCAxODozODoxOSwyNDIgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjM4OjE5LDI1NSBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDQgMTg6Mzg6MTksMzc3IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNCAxODozODoxOSwzNzkgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDQgMTg6Mzg6MTksMzgwIFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNCAxODozODoxOSwzODIgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDQgMTg6Mzg6MTksNDg2IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNCAxODozODoxOSw0ODcgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNCAxODozODoxOSw0ODkgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjM4OjE5LDQ5MiBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA0IDE4OjM4OjE5LDUwMCBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMDQgMTg6Mzg6MTksNTAyIFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMDQgMTg6Mzg6MTksNTA4IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNCAxODozODoxOSw2MjcgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjM4OjE5LDY1MCBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA0IDE4OjM4OjE5LDY1MiBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDQgMTg6Mzg6MTksNjU1IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDQgMTg6Mzg6NDMsODE1IFtXb3JrZXItMjU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNCAxODozODo0Myw4MTUgW1dvcmtlci0yNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDQgMTg6Mzk6MDAsMTUxIFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNCAxODozOTowMCwxNTMgW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNCAxODozOTowMCwxNTUgW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjM5OjAwLDE1NiBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA0IDE4OjM5OjA4LDI5NSBbV29ya2VyLTI2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDQgMTg6Mzk6MDgsMjk1IFtXb3JrZXItMjY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA1IDA4OjM4OjQ0LDIzMCBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDg6Mzg6NDQsMjM1IFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDg6Mzg6NDQsMjM3IFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwODozODo0NCwyNDAgW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAwODozOTozNyw5OTcgW1dvcmtlci01MDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA4OjM5OjM3LDk5OSBbV29ya2VyLTUwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA4OjM5OjM4LDAwMCBbV29ya2VyLTUwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDg6Mzk6MzgsMDAyIFtXb3JrZXItNTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDg6Mzk6NDYsOTEwIFtXb3JrZXItNDk6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDUgMDg6Mzk6NDYsOTExIFtXb3JrZXItNDk6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDUtMDUgMDg6NDA6MDAsNzkxIFtXb3JrZXItNTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNSAwODo0MDowMCw3OTEgW1dvcmtlci01MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDUgMDg6NDY6NTUsMzk4IFtXb3JrZXItNDg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNSAwODo0Njo1NSwzOTggW1dvcmtlci00ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDUgMDg6NTA6MTYsMTc4IFtXb3JrZXItNTY6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0wNSAwODo1MDoxNiwzOTMgW1dvcmtlci01NjogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMDUgMDg6NTA6MTYsNTAzIFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwODo1MDoxNiw1MDUgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDg6NTA6MTYsNTA3IFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwODo1MDoxNiw1MDkgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDg6NTA6MTYsODMwIFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwODo1MDoxNiw4MzIgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAwODo1MDoxNiw4MzMgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA4OjUwOjE2LDgzNiBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA4OjUwOjE2LDgzNiBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTA1IDA4OjUwOjE2LDgzNyBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0wNSAwODo1MDoxNiw4NDMgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA4OjUwOjE3LDAwMSBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDg6NTA6MTcsMDAzIFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAwODo1MDoxNywwMDQgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA4OjUwOjE3LDAwOSBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDg6NTA6MTcsMjQ4IFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwODo1MDoxNywyNTAgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDg6NTA6MTcsMjUxIFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwODo1MDoxNywyNTMgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDg6NTA6MTcsMzQwIFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwODo1MDoxNywzNDEgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAwODo1MDoxNywzNDIgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA4OjUwOjE3LDM0MyBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA4OjUwOjE3LDM0NCBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMDUgMDg6NTA6MTcsMzQ0IFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMDUgMDg6NTA6MTcsMzUxIFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwODo1MDoxNyw0MzQgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA4OjUwOjE3LDQ1OCBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA4OjUwOjE3LDQ2MCBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDg6NTA6MTcsNDYzIFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDg6NTA6MjcsMzcyIFtXb3JrZXItNTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNSAwODo1MDoyNywzNzIgW1dvcmtlci01NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDUgMDg6NTI6MTgsMTgwIFtXb3JrZXItNTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwODo1MjoxOCwxODQgW1dvcmtlci01NzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAwODo1MjoxOCwxODUgW1dvcmtlci01NzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA4OjUyOjE4LDE4NyBbV29ya2VyLTU3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA4OjU0OjA3LDAwNyBbV29ya2VyLTI6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTA1LTA1IDA4OjU0OjQyLDcxNCBbV29ya2VyLTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwODo1NDo0Miw3MTggW1dvcmtlci00OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA4OjU0OjQyLDcyMSBbV29ya2VyLTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwODo1NDo0Miw3MjMgW1dvcmtlci00OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA4OjU0OjUzLDc4MCBbV29ya2VyLTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNSAwODo1NDo1Myw3ODEgW1dvcmtlci01OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNSAwODo1Nzo1Nyw1NzQgW1dvcmtlci0yOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDg6NTc6NTcsNTc4IFtXb3JrZXItMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAwODo1Nzo1Nyw1ODEgW1dvcmtlci0yOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDg6NTc6NTcsNTgzIFtXb3JrZXItMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAwODo1ODowMiwyMDEgW1dvcmtlci0xMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA1IDA4OjU4OjAyLDIwMSBbV29ya2VyLTExOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNSAwOToxMTo1OSwzODEgW1dvcmtlci0xMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA1IDA5OjExOjU5LDM4MSBbV29ya2VyLTEzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNSAwOToxNDowNCw0NDEgW1dvcmtlci01OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDUtMDUgMDk6MTQ6MDQsNjY4IFtXb3JrZXItNTogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMDUgMDk6MTQ6MjYsNjY5IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjE0OjI2LDY3MiBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjE0OjI2LDY3NCBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOToxNDoyNiw2NzYgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAwOToxNDoyNywzNjcgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6MTQ6MjcsNDM1IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAwOToxNDoyNyw0MzcgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6MTQ6MjcsNDUwIFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAwOToxNDoyNyw0NTQgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTA1IDA5OjE0OjI3LDQ1NCBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTA1IDA5OjE0OjI3LDQ3OCBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOToxNDoyOSw2NzEgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6MTQ6MjksNjc1IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjE0OjI5LDY3NiBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOToxNDoyOSw2NzkgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6MTQ6MjksODE4IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjE0OjI5LDgyMSBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjE0OjI5LDgyMyBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOToxNDoyOSw4MzEgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAwOToxNDozMCwwNjcgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6MTQ6MzAsMDc3IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAwOToxNDozMCwwNzkgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6MTQ6MzAsMTIxIFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAwOToxNDozMCwxMzQgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMDUgMDk6MTQ6MzAsMTM0IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0wNSAwOToxNDozMCwxNzEgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6MTQ6MzAsMzAwIFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjE0OjMwLDMzNCBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6MTQ6MzAsMzQwIFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjE0OjMwLDM1OCBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6Mjc6MzQsODk2IFtXb3JrZXItMTc6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0wNSAwOToyNzozNSwwNjkgW1dvcmtlci0xNzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMDUgMDk6Mjc6NDQsMTU1IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOToyNzo0NCwxNTggW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6Mjc6NDQsMTYyIFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOToyNzo0NCwxNjUgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6Mjc6NDQsNDgxIFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOToyNzo0NCw0OTMgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAwOToyNzo0NCw0OTUgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjI3OjQ0LDUxOCBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjI3OjQ0LDUxOCBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTA1IDA5OjI3OjQ0LDUxOCBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0wNSAwOToyNzo0NCw1MzAgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjI3OjQ0LDYxMiBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6Mjc6NDQsNjQzIFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAwOToyNzo0NCw2NDQgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjI3OjQ0LDY1MSBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6Mjc6NDQsOTA5IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOToyNzo0NCw5MTIgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6Mjc6NDQsOTIyIFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOToyNzo0NCw5MjYgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6Mjc6NDUsMDE3IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOToyNzo0NSwwNDAgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAwOToyNzo0NSwwNDMgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjI3OjQ1LDA0NSBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjI3OjQ1LDA0NiBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMDUgMDk6Mjc6NDUsMDQ2IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMDUgMDk6Mjc6NDUsMDU0IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOToyNzo0NSwyMDAgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjI3OjQ1LDIwMyBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjI3OjQ1LDIwNSBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6Mjc6NDUsMjA3IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6MzE6MDUsMzU1IFtXb3JrZXItMTc6IEJ1aWxkIFByb2plY3RdIEVSUk9SIG8uZS5tLmMuaS5VUkxDb25uZWN0aW9uQ2FjaGVzIC0gVW5leHBlY3RlZCBVUkxDb25uZWN0aW9uIGRlZmF1bHRVc2VDYWNoZXMgZW5hYmxlZAorMjAyMC0wNS0wNSAwOTozMTowNSwzNjIgW1dvcmtlci0xNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjMxOjA1LDM2MyBbV29ya2VyLTE3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjMxOjA1LDM2NSBbV29ya2VyLTE3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6MzE6MDUsMzY3IFtXb3JrZXItMTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6MzE6MzUsMjYxIFtXb3JrZXItMzogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjAtMDUtMDUgMDk6Mzc6NDMsNjQyIFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOTozNzo0Myw2NDUgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAwOTozNzo0Myw2NDcgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjM3OjQzLDY0OCBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjM4OjU0LDM1NyBbV29ya2VyLTQ6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0wNSAwOTozODo1NCw1ODYgW1dvcmtlci00OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0wNSAwOTozODo1NCw4MzQgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjM4OjU0LDg0MiBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAwOTozODo1NCw4NDUgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjM4OjU0LDg1MCBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAwOTozODo1NSwzMzQgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjM4OjU1LDQ1MyBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjM4OjU1LDQ1NSBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6Mzg6NTUsNDczIFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6Mzg6NTUsNDc4IFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDUtMDUgMDk6Mzg6NTUsNDc5IFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTA1IDA5OjM4OjU1LDU0NCBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6Mzg6NTYsODQ3IFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOTozODo1Niw4NDkgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjM4OjU2LDg1MSBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6Mzg6NTYsODUzIFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAwOTozODo1NywwMDYgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjM4OjU3LDAxNyBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAwOTozODo1NywwMTkgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjM4OjU3LDAyMiBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAwOTozODo1NywxMjcgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjM4OjU3LDE3NiBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjM4OjU3LDE3OCBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6Mzg6NTcsMjQ0IFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6Mzg6NTcsMjUwIFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0wNSAwOTozODo1NywyNTAgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0wNSAwOTozODo1NywyNTYgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjM4OjU3LDU3OCBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6Mzg6NTcsNTgzIFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6Mzg6NTcsNTg2IFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOTozODo1Nyw1ODkgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAwOTozOTo1Nyw1MzEgW1dvcmtlci00OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMC0wNS0wNSAwOTo0MDoyOSw5NDAgW1dvcmtlci0xMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjQwOjI5LDk0MyBbV29ya2VyLTExOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAwOTo0MDoyOSw5NDcgW1dvcmtlci0xMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjQwOjI5LDk0OSBbV29ya2VyLTExOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAwOTo0MDozMSwwODkgW1dvcmtlci0xMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjQwOjMxLDA5MCBbV29ya2VyLTExOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjQwOjMxLDA5MyBbV29ya2VyLTExOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6NDA6MzEsMDk1IFtXb3JrZXItMTE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6NDA6MzIsMjU4IFtXb3JrZXItMTE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOTo0MDozMiwyNjEgW1dvcmtlci0xMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjQwOjMyLDI2NCBbV29ya2VyLTExOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6NDA6MzIsMjY4IFtXb3JrZXItMTE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAwOTo0MDozMiw0ODEgW1dvcmtlci0xMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjQwOjMyLDQ5MSBbV29ya2VyLTExOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAwOTo0MDozMiw0OTUgW1dvcmtlci0xMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjQwOjMyLDQ5NyBbV29ya2VyLTExOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAwOTo0MDozMiw3OTUgW1dvcmtlci0xMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjQwOjMyLDc5NyBbV29ya2VyLTExOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjQwOjMyLDc5OSBbV29ya2VyLTExOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6NDA6MzIsODAxIFtXb3JrZXItMTE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6NDA6MzIsOTA1IFtXb3JrZXItMTE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOTo0MDozMiw5MDcgW1dvcmtlci0xMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAwOTo0MDozMiw5MDkgW1dvcmtlci0xMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjQwOjMyLDkxMyBbV29ya2VyLTExOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjQxOjI2LDA4NSBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOTo0MToyNiwwODggW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjQxOjI2LDA4OSBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOTo0MToyNiwwOTIgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjQxOjU5LDEyNCBbV29ya2VyLTA6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTA1LTA1IDA5OjQyOjMxLDY5NSBbV29ya2VyLTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOTo0MjozMSw2OTcgW1dvcmtlci05OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjQyOjMxLDY5OSBbV29ya2VyLTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOTo0MjozMSw3MDEgW1dvcmtlci05OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjUwOjUwLDY3OCBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6NTA6NTAsNjgzIFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAwOTo1MDo1MCw2ODUgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjUwOjUwLDY4NyBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6NTA6NTEsMjMzIFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOTo1MDo1MSwyMzUgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAwOTo1MDo1MSwyMzggW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjUwOjUxLDI0MCBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjUwOjUyLDEzNiBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6NTA6NTIsMTM5IFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6NTA6NTIsMTQxIFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOTo1MDo1MiwxNDMgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAwOTo1MToxMSwzNDAgW1dvcmtlci0xNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA1IDA5OjUxOjExLDM0MSBbV29ya2VyLTE1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNSAwOTo1MjozNiw0MTAgW1dvcmtlci0wOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMC0wNS0wNSAwOTo1MzozOSwyNDUgW1dvcmtlci0wOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6NTM6MzksMjQ4IFtXb3JrZXItMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjUzOjM5LDI1MSBbV29ya2VyLTA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOTo1MzozOSwyNTQgW1dvcmtlci0wOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6NTM6NDAsMjIzIFtXb3JrZXItMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjUzOjQwLDIyNiBbV29ya2VyLTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6NTM6NDAsMjI4IFtXb3JrZXItMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjUzOjQwLDIzMSBbV29ya2VyLTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6NTM6NDEsNTUxIFtXb3JrZXItMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjUzOjQxLDU1NCBbV29ya2VyLTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6NTM6NDEsNTU3IFtXb3JrZXItMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjUzOjQxLDU2MCBbV29ya2VyLTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6NTQ6MTYsMTAxIFtXb3JrZXItMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA1IDA5OjU0OjE2LDEwMyBbV29ya2VyLTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA1IDEwOjAzOjA5LDA0NyBbV29ya2VyLTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMDowMzowOSwwNTIgW1dvcmtlci00OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDEwOjAzOjA5LDA1NCBbV29ya2VyLTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMDowMzowOSwwNTcgW1dvcmtlci00OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDEwOjA3OjQ2LDc4MSBbV29ya2VyLTE0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDUgMTA6MDc6NDYsODc4IFtXb3JrZXItMTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA1IDEwOjExOjA5LDEyNiBbV29ya2VyLTE0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlCisyMDIwLTA1LTA1IDEwOjExOjA5LDEyNyBbV29ya2VyLTE0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA1IDEwOjExOjIyLDgwNiBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTA6MTE6MjIsODA5IFtXb3JrZXItMTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAxMDoxMToyMiw4MTEgW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDEwOjExOjIyLDgxNCBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTA6MTE6MjIsODYyIFtXb3JrZXItMTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMDoxMToyMiw4ODAgW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAxMDoxMToyMiw4ODMgW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDEwOjExOjIyLDkzMSBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDEwOjExOjI5LDk5MyBbV29ya2VyLTE3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDUgMTA6MTE6MjksOTkzIFtXb3JrZXItMTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA1IDExOjIyOjI4LDA5MSBbV29ya2VyLTI3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlCisyMDIwLTA1LTA1IDExOjIyOjI4LDA5MiBbV29ya2VyLTI3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA1IDExOjIyOjQ0LDE3NCBbV29ya2VyLTI5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTE6MjI6NDQsMTgxIFtXb3JrZXItMjk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAxMToyMjo0NCwxODMgW1dvcmtlci0yOTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDExOjIyOjQ0LDE4NiBbV29ya2VyLTI5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTE6MjI6NTMsMzQ2IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNS0wNSAxMToyMjo1Nyw1MTAgW1dvcmtlci0yNjogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDUxKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDUgMTE6MjI6NTcsNTExIFtXb3JrZXItMjY6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICg1MSldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIHBhY2thZ2UKKzIwMjAtMDUtMDUgMTE6NDU6MzYsMjA3IFtXb3JrZXItMzE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNSAxMTo0NTozNiwyMDggW1dvcmtlci0zMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDUgMTE6NDU6NTEsNzcwIFtXb3JrZXItMzg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMTo0NTo1MSw3NzQgW1dvcmtlci0zODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAxMTo0NTo1MSw3ODEgW1dvcmtlci0zODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDExOjQ1OjUxLDc4NCBbV29ya2VyLTM4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDExOjQ1OjU2LDU2MSBbV29ya2VyLTM2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDUgMTE6NDU6NTYsNTYxIFtXb3JrZXItMzY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA1IDExOjU0OjAyLDYwOCBbV29ya2VyLTM3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDUgMTE6NTQ6MDIsNjA4IFtXb3JrZXItMzc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA1IDExOjU0OjIwLDMxMiBbV29ya2VyLTM3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA1IDExOjU0OjIwLDMxMyBbV29ya2VyLTM3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA1LTA1IDExOjU0OjI4LDU4OSBbV29ya2VyLTM3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDUgMTE6NTQ6MjgsNTg5IFtXb3JrZXItMzc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA1IDExOjU0OjQ3LDQzOCBbV29ya2VyLTM3OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDUtMDUgMTE6NTQ6NDcsNzQ1IFtXb3JrZXItMzc6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA1LTA1IDExOjU0OjU4LDM0MyBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTE6NTQ6NTgsMzQ0IFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDExOjU0OjU4LDM0NiBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTE6NTQ6NTgsMzQ4IFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDExOjU0OjU4LDY3NyBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTE6NTQ6NTgsNjgwIFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTE6NTQ6NTgsNjgyIFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMTo1NDo1OCw2ODUgW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAxMTo1NDo1OCw2ODUgW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0wNSAxMTo1NDo1OCw2ODggW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDUtMDUgMTE6NTQ6NTgsNzQ5IFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMTo1NTowMCw5NzEgW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDExOjU1OjAwLDk3NyBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTE6NTU6MDAsOTc5IFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMTo1NTowMCw5ODIgW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDExOjU1OjAxLDE0OCBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTE6NTU6MDEsMTUwIFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDExOjU1OjAxLDE1MiBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTE6NTU6MDEsMTU0IFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDExOjU1OjAxLDI2MCBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTE6NTU6MDEsMjY0IFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTE6NTU6MDEsMjY5IFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMTo1NTowMSwyNzMgW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAxMTo1NTowMSwyNzQgW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiB3Zm9ybVNlcnZpY2VzCisyMDIwLTA1LTA1IDExOjU1OjAxLDI3NSBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA1LTA1IDExOjU1OjAxLDI4MCBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTE6NTU6MDEsNDAxIFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMTo1NTowMSw0MTYgW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAxMTo1NTowMSw0MTggW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDExOjU1OjAxLDQyMSBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDExOjU1OjA5LDU5NCBbV29ya2VyLTQyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDUgMTE6NTU6MDksNTk0IFtXb3JrZXItNDI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA1IDEyOjA1OjM4LDc1OSBbV29ya2VyLTQ2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTI6MDU6MzgsNzYxIFtXb3JrZXItNDY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTI6MDU6MzgsNzYyIFtXb3JrZXItNDY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMjowNTozOCw3NjQgW1dvcmtlci00NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAxMjowNTo0NCw0NzkgW1dvcmtlci00NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA1IDEyOjA1OjQ0LDQ3OSBbV29ya2VyLTQ3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNSAxMjowNjowOCw4MjcgW1dvcmtlci00ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDEyOjA2OjA4LDgyOSBbV29ya2VyLTQ4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDEyOjA2OjA4LDgzMiBbV29ya2VyLTQ4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTI6MDY6MDgsODMzIFtXb3JrZXItNDg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTI6MDY6MTUsNDg1IFtXb3JrZXItNDk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNSAxMjowNjoxNSw0ODYgW1dvcmtlci00OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDUgMTI6MDY6NDMsNTk2IFtXb3JrZXItNDk6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0wNSAxMjowNjo0Myw3MDMgW1dvcmtlci00OTogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMDUgMTI6NDY6MjIsOTgzIFtXb3JrZXItNDY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMjo0NjoyMiw5ODUgW1dvcmtlci00NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTI6NDY6MjIsOTg3IFtXb3JrZXItNDY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMjo0NjoyMiw5ODkgW1dvcmtlci00NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTI6NDY6MjMsMjQ5IFtXb3JrZXItNDY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMjo0NjoyMywyNTggW1dvcmtlci00NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAxMjo0NjoyMywyNjAgW1dvcmtlci00NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDEyOjQ2OjIzLDI2NiBbV29ya2VyLTQ2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDEyOjQ2OjIzLDI2NiBbV29ya2VyLTQ2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTA1IDEyOjQ2OjIzLDI2NiBbV29ya2VyLTQ2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0wNSAxMjo0NjoyMywyODMgW1dvcmtlci00NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDEyOjQ2OjIzLDM1MCBbV29ya2VyLTQ2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTI6NDY6MjMsMzUyIFtXb3JrZXItNDY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAxMjo0NjoyMywzNTQgW1dvcmtlci00NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDEyOjQ2OjIzLDM1OSBbV29ya2VyLTQ2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTI6NDY6MjMsNTQyIFtXb3JrZXItNDY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMjo0NjoyMyw1NTAgW1dvcmtlci00NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTI6NDY6MjMsNTUxIFtXb3JrZXItNDY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMjo0NjoyMyw1NTYgW1dvcmtlci00NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTI6NDY6MjMsNzA2IFtXb3JrZXItNDY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMjo0NjoyMyw3MjQgW1dvcmtlci00NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAxMjo0NjoyMyw3MjYgW1dvcmtlci00NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDEyOjQ2OjIzLDcyOCBbV29ya2VyLTQ2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDEyOjQ2OjIzLDczMCBbV29ya2VyLTQ2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMDUgMTI6NDY6MjMsNzMzIFtXb3JrZXItNDY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMDUgMTI6NDY6MjMsNzQxIFtXb3JrZXItNDY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMjo0NjoyNCw5OTkgW1dvcmtlci00NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6dGVzdHM6MC4xIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xwb20ueG1sLgorMjAyMC0wNS0wNSAxMjo0NzoxOCwzMzQgW1dvcmtlci00NjogcmVsb2FkIG1hdmVuIHByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3IgZGUua29yYXA6anNvbjpqYXI6MC4xLVNOQVBTSE9UIGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA1LTA1IDEyOjQ3OjM2LDk2MyBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTI6NDc6MzYsOTY1IFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAxMjo0NzozNiw5NjcgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDEyOjQ3OjM2LDk2OCBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTI6NDc6MzcsMDY4IFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMjo0NzozNywwNjkgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAxMjo0NzozNywwNzEgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDEyOjQ3OjM3LDA3MyBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDEyOjQ3OjM3LDYwNSBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp0ZXN0czowLjEgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHBvbS54bWwuCisyMDIwLTA1LTA1IDEyOjQ3OjM3LDYzNCBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFRoZSBQT00gZm9yIGRlLmtvcmFwOmpzb246amFyOjAuMS1TTkFQU0hPVCBpcyBtaXNzaW5nLCBubyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorMjAyMC0wNS0wNSAxMjo0NzozNyw3NzQgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDEyOjQ3OjM3LDc3NiBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDEyOjQ3OjM3LDc3NyBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTI6NDc6MzcsNzgyIFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTI6NDc6MzgsODE5IFtXb3JrZXItNDc6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3IgZGUua29yYXA6anNvbjpqYXI6MC4xLVNOQVBTSE9UIGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA1LTA1IDEyOjQ3OjM4LDg1MCBbV29ya2VyLTQ3OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBFUlJPUiBvLmUubS5qLmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiAtIENvdWxkIG5vdCBkb3dubG9hZCBzb3VyY2VzIGZvciBkZS5rb3JhcDpqc29uOjAuMS1TTkFQU0hPVAorb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb246IENvdWxkIG5vdCByZXNvbHZlIGFydGlmYWN0IGRlLmtvcmFwOmpzb246amFyOnNvdXJjZXM6MC4xLVNOQVBTSE9UCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YTo3NzYpIH5bb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YToxKSB+W29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxMTIpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjc0MykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjcyMCkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI3OSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRBdHRhY2htZW50cyhEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNTQpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkTWF2ZW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjIxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTYxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM3KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE1MSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLmV4ZWN1dGUoTWF2ZW5JbXBsLmphdmE6MTM1NSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzUpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCisyMDIwLTA1LTA1IDEyOjQ5OjQ3LDc3NCBbV29ya2VyLTU0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp0ZXN0czowLjEgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHBvbS54bWwuCisyMDIwLTA1LTA1IDEyOjQ5OjQ3LDgyMiBbV29ya2VyLTU0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA1IDEyOjQ5OjQ3LDkyNyBbV29ya2VyLTU0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTI6NDk6NDcsOTMwIFtXb3JrZXItNTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTI6NDk6NDcsOTMyIFtXb3JrZXItNTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMjo0OTo0Nyw5MzQgW1dvcmtlci01NDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAxMjo0OTo1NCw4OTEgW1dvcmtlci01NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA1IDEyOjQ5OjU0LDg5MSBbV29ya2VyLTU0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNSAxMjo1MjoxMCw0MjQgW1dvcmtlci01NjogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9kZS9rb3JhcC9zZXJ2aWNlcy9nbGVtbS9jbGllbnQvR2xlbW1DbGllbnQvMC4xLVNOQVBTSE9SVC9HbGVtbUNsaWVudC0wLjEtU05BUFNIT1JULnBvbQorMjAyMC0wNS0wNSAxMjo1MjoxMCw0MzMgW1dvcmtlci01NjogcmVsb2FkIG1hdmVuIHByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3IgZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OmphcjowLjEtU05BUFNIT1JUIGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA1LTA1IDEyOjUyOjEwLDQzNyBbV29ya2VyLTU2OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNSAxMjo1MjoxMCw2MDcgW1dvcmtlci01NjogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9kZS9rb3JhcC9zZXJ2aWNlcy9nbGVtbS9jbGllbnQvR2xlbW1DbGllbnQvMC4xLVNOQVBTSE9SVC9HbGVtbUNsaWVudC0wLjEtU05BUFNIT1JULmphcgorMjAyMC0wNS0wNSAxMjo1MjoyMCwxNjkgW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6dGVzdHM6MC4xIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xwb20ueG1sLgorMjAyMC0wNS0wNSAxMjo1MjoyMCwyMDAgW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBUaGUgUE9NIGZvciBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6amFyOjAuMS1TTkFQU0hPUlQgaXMgbWlzc2luZywgbm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKzIwMjAtMDUtMDUgMTI6NTI6MjAsMjA0IFtXb3JrZXItNTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDUgMTI6NTI6MjAsMjg3IFtXb3JrZXItNTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMjo1MjoyMCwyODkgW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAxMjo1MjoyMCwyOTEgW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDEyOjUyOjIwLDI5MyBbV29ya2VyLTU4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDEyOjUyOjIxLDI5MiBbV29ya2VyLTU2OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFRoZSBQT00gZm9yIGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDpqYXI6MC4xLVNOQVBTSE9SVCBpcyBtaXNzaW5nLCBubyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorMjAyMC0wNS0wNSAxMjo1MjoyMSwyOTUgW1dvcmtlci01NjogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNSAxMjo1MjoyMSw2MDUgW1dvcmtlci01NjogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2RlL2tvcmFwL3NlcnZpY2VzL2dsZW1tL2NsaWVudC9HbGVtbUNsaWVudC8wLjEtU05BUFNIT1JUL0dsZW1tQ2xpZW50LTAuMS1TTkFQU0hPUlQtc291cmNlcy5qYXIKKzIwMjAtMDUtMDUgMTI6NTI6MjEsNjQ0IFtXb3JrZXItNTY6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIEVSUk9SIG8uZS5tLmouaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iIC0gQ291bGQgbm90IGRvd25sb2FkIHNvdXJjZXMgZm9yIGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1JUCitvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjogQ291bGQgbm90IHJlc29sdmUgYXJ0aWZhY3QgZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50Omphcjpzb3VyY2VzOjAuMS1TTkFQU0hPUlQKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjc3NikgfltvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjEpIH5bb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjExMikgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzQzKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzIwKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWQoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6Mjc5KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZEF0dGFjaG1lbnRzKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI1NCkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRNYXZlbihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyMjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxNjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzcpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTUxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwuZXhlY3V0ZShNYXZlbkltcGwuamF2YToxMzU1KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KKzIwMjAtMDUtMDUgMTI6NTM6MzAsMzA4IFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMjo1MzozMCwzMTAgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAxMjo1MzozMCwzMTIgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDEyOjUzOjMwLDMxNCBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDEyOjUzOjM2LDE2OSBbV29ya2VyLTU3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDUgMTI6NTM6MzYsMTcwIFtXb3JrZXItNTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA1IDEyOjU0OjIwLDEwNyBbV29ya2VyLTU4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudAorMjAyMC0wNS0wNSAxMjo1NDoyMCwxMDcgW1dvcmtlci01ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA1IDEyOjU0OjMyLDE4OSBbV29ya2VyLTYwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDUgMTI6NTQ6MzIsMTkwIFtXb3JrZXItNjA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA1IDEyOjU1OjEwLDkzOSBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTI6NTU6MTAsOTQxIFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDEyOjU1OjEwLDk0MiBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTI6NTU6MTAsOTQ1IFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDEyOjU1OjExLDQwNCBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp0ZXN0czowLjEgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHBvbS54bWwuCisyMDIwLTA1LTA1IDEyOjU1OjExLDQzMiBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFRoZSBQT00gZm9yIGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDpqYXI6MC4xLVNOQVBTSE9UIGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA1LTA1IDEyOjU1OjExLDQzNiBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA1IDEyOjU1OjExLDUxMyBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTI6NTU6MTEsNTE1IFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTI6NTU6MTEsNTE2IFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMjo1NToxMSw1MTggW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAxMjo1NToxMiw1ODIgW1dvcmtlci01NzogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBUaGUgUE9NIGZvciBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6amFyOjAuMS1TTkFQU0hPVCBpcyBtaXNzaW5nLCBubyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorMjAyMC0wNS0wNSAxMjo1NToxMiw1ODYgW1dvcmtlci01NzogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNSAxMjo1NToxMiw2MzEgW1dvcmtlci01NzogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gRVJST1Igby5lLm0uai5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IgLSBDb3VsZCBub3QgZG93bmxvYWQgc291cmNlcyBmb3IgZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVAorb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb246IENvdWxkIG5vdCByZXNvbHZlIGFydGlmYWN0IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDpqYXI6c291cmNlczowLjEtU05BUFNIT1QKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjc3NikgfltvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjEpIH5bb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjExMikgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzQzKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzIwKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWQoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6Mjc5KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZEF0dGFjaG1lbnRzKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI1NCkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRNYXZlbihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyMjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxNjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzcpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTUxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwuZXhlY3V0ZShNYXZlbkltcGwuamF2YToxMzU1KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KKzIwMjAtMDUtMDUgMTI6NTU6MzcsMjQxIFtXb3JrZXItNjA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNSAxMjo1NTozNywyNDEgW1dvcmtlci02MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDUgMTI6NTk6MzksMTgzIFtXb3JrZXItNTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50CisyMDIwLTA1LTA1IDEyOjU5OjM5LDE4NCBbV29ya2VyLTU4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDUgMTI6NTk6NTYsMzQ3IFtXb3JrZXItNTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMjo1OTo1NiwzNDkgW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTI6NTk6NTYsMzUwIFtXb3JrZXItNTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMjo1OTo1NiwzNTIgW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTM6MDA6MDgsOTQyIFtXb3JrZXItNjM6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDUgMTM6MDA6MDgsOTQyIFtXb3JrZXItNjM6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDUtMDUgMTM6MDA6MTYsMDY0IFtXb3JrZXItNjE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMzowMDoxNiwwNjYgW1dvcmtlci02MTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAxMzowMDoxNiwwNjcgW1dvcmtlci02MTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDEzOjAwOjE2LDA2OCBbV29ya2VyLTYxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDEzOjAwOjIzLDcyMyBbV29ya2VyLTYxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDUgMTM6MDA6MjMsNzI0IFtXb3JrZXItNjE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA1IDIwOjQ2OjExLDM0MCBbV29ya2VyLTk4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudAorMjAyMC0wNS0wNSAyMDo0NjoxMSwzNDMgW1dvcmtlci05ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA1IDIwOjQ4OjM2LDQ4OSBbV29ya2VyLTEwMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDIwOjQ4OjM2LDQ5MiBbV29ya2VyLTEwMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMjA6NDg6MzYsNDk0IFtXb3JrZXItMTAzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMjA6NDg6MzYsNDk1IFtXb3JrZXItMTAzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAyMDo1MTozMCw1NDQgW1dvcmtlci0xMDI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxwb20ueG1sLgorMjAyMC0wNS0wNSAyMDo1MTozMCw2NzggW1dvcmtlci0xMDI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOnRlc3RzOjAuMSBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNccG9tLnhtbC4KKzIwMjAtMDUtMDUgMjA6NTE6MzAsNjg2IFtXb3JrZXItMTAyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA1IDIwOjUxOjMwLDY4NyBbV29ya2VyLTEwMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA1IDIwOjUxOjMxLDIwOCBbV29ya2VyLTEwMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDIwOjUxOjMxLDIxMCBbV29ya2VyLTEwMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMjA6NTE6MzEsMjExIFtXb3JrZXItMTAyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMjA6NTE6MzEsMjEzIFtXb3JrZXItMTAyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAyMDo1MjoxMiw5MzggW1dvcmtlci0xMDM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50CisyMDIwLTA1LTA1IDIwOjUyOjEyLDkzOCBbV29ya2VyLTEwMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA1IDIwOjUzOjA3LDY3MiBbV29ya2VyLTEwNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA1IDIwOjUzOjA3LDY3MyBbV29ya2VyLTEwNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDUgMjE6MDk6MjAsNzQ5IFtXb3JrZXItMTA1OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNSAyMTowOToyMCw3NTAgW1dvcmtlci0xMDU6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDUgMjE6MDk6NDAsODE5IFtXb3JrZXItMTA1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDUgMjE6MDk6NDAsODE5IFtXb3JrZXItMTA1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNSAyMToxNTo0Myw4MjggW1dvcmtlci0xMDg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAyMToxNTo0Myw4MzAgW1dvcmtlci0xMDg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDIxOjE1OjQzLDgzMSBbV29ya2VyLTEwODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDIxOjE1OjQzLDgzMiBbV29ya2VyLTEwODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMjE6MTU6NDMsOTQwIFtXb3JrZXItMTA4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp0ZXN0czowLjEgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHBvbS54bWwuCisyMDIwLTA1LTA1IDIxOjE1OjQzLDk3NCBbV29ya2VyLTEwODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNSAyMToxNTo0Myw5NzQgW1dvcmtlci0xMDg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNSAyMToxNTo0Myw5NzQgW1dvcmtlci0xMDg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC93Zm9ybVNlcnZpY2VzOiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC93Zm9ybVNlcnZpY2VzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA1IDIxOjE1OjQ0LDEwOCBbV29ya2VyLTEwODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDIxOjE1OjQ0LDEwOSBbV29ya2VyLTEwODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAyMToxNTo0NCwxMTAgW1dvcmtlci0xMDg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAyMToxNTo0NCwxMTEgW1dvcmtlci0xMDg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMjE6MTY6MjksMjA4IFtXb3JrZXItMTEyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDUgMjE6MTY6MjksMjA4IFtXb3JrZXItMTEyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNSAyMToyMjowMiwxOTYgW1dvcmtlci0xMTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0wNSAyMToyMjowMiwxOTYgW1dvcmtlci0xMTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA1IDIxOjIzOjI1LDg2OCBbV29ya2VyLTExNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA1IDIxOjIzOjI1LDg2OSBbV29ya2VyLTExNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDUgMjE6MjY6MzksMDIyIFttYWluXSBFUlJPUiBvLmUubS5qLnUuaS5Eb3dubG9hZFNvdXJjZXNBY3Rpb25EZWxlZ2F0ZSAtIENvdWxkIG5vdCBzY2hlZHVsZSBzb3VyY2UgZG93bmxvYWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFNb2RlbEV4Y2VwdGlvbjogdGFyZ2V0L3dmb3JtU2VydmljZXMtMC4xLVNOQVBTSE9UL1dFQi1JTkYvY2xhc3Nlcy9kZS9rb3JhcC9zZXJ2aWNlcyBbaW4gd2Zvcm1TZXJ2aWNlc10gaXMgbm90IG9uIGl0cyBwcm9qZWN0J3MgYnVpbGQgcGF0aAorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFFbGVtZW50Lm5ld0phdmFNb2RlbEV4Y2VwdGlvbihKYXZhRWxlbWVudC5qYXZhOjU4MCkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5PcGVuYWJsZS5nZW5lcmF0ZUluZm9zKE9wZW5hYmxlLmphdmE6MjUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFFbGVtZW50Lm9wZW5XaGVuQ2xvc2VkKEphdmFFbGVtZW50LmphdmE6NTkzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFFbGVtZW50LmdldEVsZW1lbnRJbmZvKEphdmFFbGVtZW50LmphdmE6MzIzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFFbGVtZW50LmdldEVsZW1lbnRJbmZvKEphdmFFbGVtZW50LmphdmE6MzA5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLlBhY2thZ2VGcmFnbWVudFJvb3QuZ2V0S2luZChQYWNrYWdlRnJhZ21lbnRSb290LmphdmE6NTExKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLlBhY2thZ2VGcmFnbWVudFJvb3QuZ2V0U291cmNlQXR0YWNobWVudFBhdGgoUGFja2FnZUZyYWdtZW50Um9vdC5qYXZhOjYzNikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LnVpLmludGVybmFsLkRvd25sb2FkU291cmNlc0FjdGlvbkRlbGVnYXRlLnNldEFjdGl2ZUVkaXRvcihEb3dubG9hZFNvdXJjZXNBY3Rpb25EZWxlZ2F0ZS5qYXZhOjUxKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLkVkaXRvclBsdWdpbkFjdGlvbi5lZGl0b3JDaGFuZ2VkKEVkaXRvclBsdWdpbkFjdGlvbi5qYXZhOjY5KSBbb3JnLmVjbGlwc2UudWkud29ya2JlbmNoXzMuMTExLjAudjIwMTgwNTI0LTExNTYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLkVkaXRvckFjdGlvbkJ1aWxkZXIkRWRpdG9yQ29udHJpYnV0aW9uLmVkaXRvckNoYW5nZWQoRWRpdG9yQWN0aW9uQnVpbGRlci5qYXZhOjgwKSBbb3JnLmVjbGlwc2UudWkud29ya2JlbmNoXzMuMTExLjAudjIwMTgwNTI0LTExNTYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLkVkaXRvckFjdGlvbkJ1aWxkZXIkRXh0ZXJuYWxDb250cmlidXRvci5zZXRBY3RpdmVFZGl0b3IoRWRpdG9yQWN0aW9uQnVpbGRlci5qYXZhOjEyOSkgW29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaF8zLjExMS4wLnYyMDE4MDUyNC0xMTU2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5FZGl0b3JBY3Rpb25CYXJzLnBhcnRDaGFuZ2VkKEVkaXRvckFjdGlvbkJhcnMuamF2YTozNDMpIFtvcmcuZWNsaXBzZS51aS53b3JrYmVuY2hfMy4xMTEuMC52MjAxODA1MjQtMTE1Ni5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoUGFnZS51cGRhdGVBY3RpdmF0aW9ucyhXb3JrYmVuY2hQYWdlLmphdmE6MzI1KSBbb3JnLmVjbGlwc2UudWkud29ya2JlbmNoXzMuMTExLjAudjIwMTgwNTI0LTExNTYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFBhZ2UuYWNjZXNzJDE4KFdvcmtiZW5jaFBhZ2UuamF2YTozMDYpIFtvcmcuZWNsaXBzZS51aS53b3JrYmVuY2hfMy4xMTEuMC52MjAxODA1MjQtMTE1Ni5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoUGFnZSRFNFBhcnRMaXN0ZW5lci5wYXJ0QWN0aXZhdGVkKFdvcmtiZW5jaFBhZ2UuamF2YToyMTMpIFtvcmcuZWNsaXBzZS51aS53b3JrYmVuY2hfMy4xMTEuMC52MjAxODA1MjQtMTE1Ni5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLlBhcnRTZXJ2aWNlSW1wbCQzLnJ1bihQYXJ0U2VydmljZUltcGwuamF2YToyNTApIFtvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2hfMS42LjAudjIwMTgwNTE2LTIwMTkuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpIFtvcmcuZWNsaXBzZS5lcXVpbm94LmNvbW1vbl8zLjEwLjAudjIwMTgwNDEyLTExMzAuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5QYXJ0U2VydmljZUltcGwuZmlyZVBhcnRBY3RpdmF0ZWQoUGFydFNlcnZpY2VJbXBsLmphdmE6MjQ3KSBbb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoXzEuNi4wLnYyMDE4MDUxNi0yMDE5LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guUGFydFNlcnZpY2VJbXBsLmFjdGl2YXRlKFBhcnRTZXJ2aWNlSW1wbC5qYXZhOjc3MikgW29yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaF8xLjYuMC52MjAxODA1MTYtMjAxOS5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLlBhcnRTZXJ2aWNlSW1wbC5hY3RpdmF0ZShQYXJ0U2VydmljZUltcGwuamF2YTo2ODEpIFtvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2hfMS42LjAudjIwMTgwNTE2LTIwMTkuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5QYXJ0U2VydmljZUltcGwuYWN0aXZhdGUoUGFydFNlcnZpY2VJbXBsLmphdmE6Njc2KSBbb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoXzEuNi4wLnYyMDE4MDUxNi0yMDE5LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hQYWdlLmJ1c3lPcGVuRWRpdG9yKFdvcmtiZW5jaFBhZ2UuamF2YTozMjg1KSBbb3JnLmVjbGlwc2UudWkud29ya2JlbmNoXzMuMTExLjAudjIwMTgwNTI0LTExNTYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFBhZ2UuYWNjZXNzJDI2KFdvcmtiZW5jaFBhZ2UuamF2YTozMTkyKSBbb3JnLmVjbGlwc2UudWkud29ya2JlbmNoXzMuMTExLjAudjIwMTgwNTI0LTExNTYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFBhZ2UkMTAucnVuKFdvcmtiZW5jaFBhZ2UuamF2YTozMTc0KSBbb3JnLmVjbGlwc2UudWkud29ya2JlbmNoXzMuMTExLjAudjIwMTgwNTI0LTExNTYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQnVzeUluZGljYXRvci5zaG93V2hpbGUoQnVzeUluZGljYXRvci5qYXZhOjcxKSBbb3JnLmVjbGlwc2Uuc3d0LndpbjMyLndpbjMyLng4Nl82NF8zLjEwNy4wLnYyMDE4MDYxMS0wNDIyLmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hQYWdlLm9wZW5FZGl0b3IoV29ya2JlbmNoUGFnZS5qYXZhOjMxNjkpIFtvcmcuZWNsaXBzZS51aS53b3JrYmVuY2hfMy4xMTEuMC52MjAxODA1MjQtMTE1Ni5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoUGFnZS5vcGVuRWRpdG9yKFdvcmtiZW5jaFBhZ2UuamF2YTozMTMzKSBbb3JnLmVjbGlwc2UudWkud29ya2JlbmNoXzMuMTExLjAudjIwMTgwNTI0LTExNTYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFBhZ2Uub3BlbkVkaXRvcihXb3JrYmVuY2hQYWdlLmphdmE6MzEyMykgW29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaF8zLjExMS4wLnYyMDE4MDUyNC0xMTU2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuamF2YWVkaXRvci5FZGl0b3JVdGlsaXR5Lm9wZW5JbkVkaXRvcihFZGl0b3JVdGlsaXR5LmphdmE6MzczKSBbb3JnLmVjbGlwc2UuamR0LnVpXzMuMTQuMC52MjAxODA1MjktMTAyMy5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLmphdmFlZGl0b3IuRWRpdG9yVXRpbGl0eS5vcGVuSW5FZGl0b3IoRWRpdG9yVXRpbGl0eS5qYXZhOjE3OSkgW29yZy5lY2xpcHNlLmpkdC51aV8zLjE0LjAudjIwMTgwNTI5LTEwMjMuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmpkdC51aS5hY3Rpb25zLk9wZW5BY3Rpb24ucnVuKE9wZW5BY3Rpb24uamF2YToyODQpIFtvcmcuZWNsaXBzZS5qZHQudWlfMy4xNC4wLnYyMDE4MDUyOS0xMDIzLmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5qZHQudWkuYWN0aW9ucy5PcGVuQWN0aW9uLnJ1bihPcGVuQWN0aW9uLmphdmE6MjQ5KSBbb3JnLmVjbGlwc2UuamR0LnVpXzMuMTQuMC52MjAxODA1MjktMTAyMy5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuamR0LnVpLmFjdGlvbnMuU2VsZWN0aW9uRGlzcGF0Y2hBY3Rpb24uZGlzcGF0Y2hSdW4oU2VsZWN0aW9uRGlzcGF0Y2hBY3Rpb24uamF2YToyNzEpIFtvcmcuZWNsaXBzZS5qZHQudWlfMy4xNC4wLnYyMDE4MDUyOS0xMDIzLmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5qZHQudWkuYWN0aW9ucy5TZWxlY3Rpb25EaXNwYXRjaEFjdGlvbi5ydW4oU2VsZWN0aW9uRGlzcGF0Y2hBY3Rpb24uamF2YToyNDkpIFtvcmcuZWNsaXBzZS5qZHQudWlfMy4xNC4wLnYyMDE4MDUyOS0xMDIzLmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkubmF2aWdhdG9yLk9wZW5BbmRFeHBhbmQucnVuKE9wZW5BbmRFeHBhbmQuamF2YTo1MCkgW29yZy5lY2xpcHNlLmpkdC51aV8zLjE0LjAudjIwMTgwNTI5LTEwMjMuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuUmV0YXJnZXRBY3Rpb24ucnVuKFJldGFyZ2V0QWN0aW9uLmphdmE6MjE2KSBbb3JnLmVjbGlwc2UudWkud29ya2JlbmNoXzMuMTExLjAudjIwMTgwNTI0LTExNTYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Db21tb25OYXZpZ2F0b3JNYW5hZ2VyJDEub3BlbihDb21tb25OYXZpZ2F0b3JNYW5hZ2VyLmphdmE6MTgwKSBbb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yXzMuNy4xMDAudjIwMTgwNTI0LTEyNDAuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnVpLk9wZW5BbmRMaW5rV2l0aEVkaXRvckhlbHBlciRJbnRlcm5hbExpc3RlbmVyLm9wZW4oT3BlbkFuZExpbmtXaXRoRWRpdG9ySGVscGVyLmphdmE6NDYpIFtvcmcuZWNsaXBzZS51aS53b3JrYmVuY2hfMy4xMTEuMC52MjAxODA1MjQtMTE1Ni5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkVmlld2VyJDIucnVuKFN0cnVjdHVyZWRWaWV3ZXIuamF2YTo4NTApIFtvcmcuZWNsaXBzZS5qZmFjZV8zLjE0LjAudjIwMTgwNDIzLTA3MTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpIFtvcmcuZWNsaXBzZS5lcXVpbm94LmNvbW1vbl8zLjEwLjAudjIwMTgwNDEyLTExMzAuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLkpGYWNlVXRpbC5sYW1iZGEkMChKRmFjZVV0aWwuamF2YTo0NCkgW29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaF8zLjExMS4wLnYyMDE4MDUyNC0xMTU2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS51dGlsLlNhZmVSdW5uYWJsZS5ydW4oU2FmZVJ1bm5hYmxlLmphdmE6MTczKSB+W29yZy5lY2xpcHNlLmpmYWNlXzMuMTQuMC52MjAxODA0MjMtMDcxNC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkVmlld2VyLmZpcmVPcGVuKFN0cnVjdHVyZWRWaWV3ZXIuamF2YTo4NDcpIH5bb3JnLmVjbGlwc2UuamZhY2VfMy4xNC4wLnYyMDE4MDQyMy0wNzE0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXIuaGFuZGxlT3BlbihTdHJ1Y3R1cmVkVmlld2VyLmphdmE6MTE2MikgfltvcmcuZWNsaXBzZS5qZmFjZV8zLjE0LjAudjIwMTgwNDIzLTA3MTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Db21tb25WaWV3ZXIuaGFuZGxlT3BlbihDb21tb25WaWV3ZXIuamF2YTo0NTEpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuamZhY2UudXRpbC5PcGVuU3RyYXRlZ3kuZmlyZU9wZW5FdmVudChPcGVuU3RyYXRlZ3kuamF2YToyNzMpIH5bb3JnLmVjbGlwc2UuamZhY2VfMy4xNC4wLnYyMDE4MDQyMy0wNzE0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS51dGlsLk9wZW5TdHJhdGVneS5hY2Nlc3MkMihPcGVuU3RyYXRlZ3kuamF2YToyNjgpIH5bb3JnLmVjbGlwc2UuamZhY2VfMy4xNC4wLnYyMDE4MDQyMy0wNzE0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS51dGlsLk9wZW5TdHJhdGVneSQxLmhhbmRsZUV2ZW50KE9wZW5TdHJhdGVneS5qYXZhOjMwOCkgfltvcmcuZWNsaXBzZS5qZmFjZV8zLjE0LjAudjIwMTgwNDIzLTA3MTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50VGFibGUuc2VuZEV2ZW50KEV2ZW50VGFibGUuamF2YTo4NikgfltvcmcuZWNsaXBzZS5zd3Qud2luMzIud2luMzIueDg2XzY0XzMuMTA3LjAudjIwMTgwNjExLTA0MjIuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc2VuZEV2ZW50KERpc3BsYXkuamF2YTo0MTE4KSB+W29yZy5lY2xpcHNlLnN3dC53aW4zMi53aW4zMi54ODZfNjRfMy4xMDcuMC52MjAxODA2MTEtMDQyMi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDUyKSB+W29yZy5lY2xpcHNlLnN3dC53aW4zMi53aW4zMi54ODZfNjRfMy4xMDcuMC52MjAxODA2MTEtMDQyMi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5ydW5EZWZlcnJlZEV2ZW50cyhEaXNwbGF5LmphdmE6MzkzMSkgfltvcmcuZWNsaXBzZS5zd3Qud2luMzIud2luMzIueDg2XzY0XzMuMTA3LjAudjIwMTgwNjExLTA0MjIuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkucmVhZEFuZERpc3BhdGNoKERpc3BsYXkuamF2YTozNTM0KSB+W29yZy5lY2xpcHNlLnN3dC53aW4zMi53aW4zMi54ODZfNjRfMy4xMDcuMC52MjAxODA2MTEtMDQyMi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDUucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YToxMTcwKSB+W29yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5zd3RfMC4xNC4yMDAudjIwMTgwNTE2LTIwMTkuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikgfltvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGVfMS42LjIwMC52MjAxODA0MjQtMTkyMi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6MTA1OSkgfltvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2guc3d0XzAuMTQuMjAwLnYyMDE4MDUxNi0yMDE5LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guRTRXb3JrYmVuY2guY3JlYXRlQW5kUnVuVUkoRTRXb3JrYmVuY2guamF2YToxNTMpIH5bb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoXzEuNi4wLnYyMDE4MDUxNi0yMDE5LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjY3KSB+W29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaF8zLjExMS4wLnYyMDE4MDUyNC0xMTU2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpIH5bb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlXzEuNi4yMDAudjIwMTgwNDI0LTE5MjIuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goV29ya2JlbmNoLmphdmE6NTk3KSB+W29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaF8zLjExMS4wLnYyMDE4MDUyNC0xMTU2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KSB+W29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaF8zLjExMS4wLnYyMDE4MDUyNC0xMTU2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFQXBwbGljYXRpb24uc3RhcnQoSURFQXBwbGljYXRpb24uamF2YToxNTIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5hcHAuRWNsaXBzZUFwcEhhbmRsZS5ydW4oRWNsaXBzZUFwcEhhbmRsZS5qYXZhOjE5NikgfltvcmcuZWNsaXBzZS5lcXVpbm94LmFwcF8xLjMuNTAwLnYyMDE3MTIyMS0yMjA0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIucnVuQXBwbGljYXRpb24oRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTM0KSB+W29yZy5lY2xpcHNlLm9zZ2lfMy4xMy4wLnYyMDE4MDQwOS0xNTAwLmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIuc3RhcnQoRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTA0KSB+W29yZy5lY2xpcHNlLm9zZ2lfMy4xMy4wLnYyMDE4MDQwOS0xNTAwLmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpIH5bb3JnLmVjbGlwc2Uub3NnaV8zLjEzLjAudjIwMTgwNDA5LTE1MDAuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjI0MykgfltvcmcuZWNsaXBzZS5vc2dpXzMuMTMuMC52MjAxODA0MDktMTUwMC5qYXI6bmFdCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZTAoTmF0aXZlIE1ldGhvZCkgfltuYToxLjguMF8yMzFdCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikgfltuYToxLjguMF8yMzFdCisJYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjQzKSB+W25hOjEuOC4wXzIzMV0KKwlhdCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuaW52b2tlKE1ldGhvZC5qYXZhOjQ5OCkgfltuYToxLjguMF8yMzFdCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KSB+W29yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXJfMS41LjAudjIwMTgwNTEyLTExMzAuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKSB+W29yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXJfMS41LjAudjIwMTgwNTEyLTExMzAuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpIH5bb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlcl8xLjUuMC52MjAxODA1MTItMTEzMC5qYXI6bmFdCisyMDIwLTA1LTA1IDIxOjMyOjI4LDM0NiBbV29ya2VyLTEyMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDIxOjMyOjI4LDM0OCBbV29ya2VyLTEyMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAyMTozMjoyOCwzNDkgW1dvcmtlci0xMjE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAyMTozMjoyOCwzNTEgW1dvcmtlci0xMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMjE6MzI6MzQsNTY1IFtXb3JrZXItMTIzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDUgMjE6MzI6MzQsNTY1IFtXb3JrZXItMTIzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNSAyMTozNjozMiw4OTQgW1dvcmtlci0xMjQ6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA1IDIxOjM2OjMyLDg5NSBbV29ya2VyLTEyNDogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNSAyMTozNjozMiw4OTYgW1dvcmtlci0xMjQ6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvd2Zvcm1TZXJ2aWNlczogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvd2Zvcm1TZXJ2aWNlcy90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNSAyMTozNjozMiw5MzEgW1dvcmtlci0xMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAyMTozNjozMiw5MzMgW1dvcmtlci0xMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMjE6MzY6MzIsOTM1IFtXb3JrZXItMTI1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMjE6MzY6MzIsOTM4IFtXb3JrZXItMTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDIxOjM2OjQ4LDQ1MCBbV29ya2VyLTEyNjogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0wNSAyMTozNjo0OCw1NzAgW1dvcmtlci0xMjM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAyMTozNjo0OCw1ODAgW1dvcmtlci0xMjM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMjE6MzY6NDgsNTgxIFtXb3JrZXItMTIzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMjE6MzY6NDgsNTg2IFtXb3JrZXItMTIzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDIxOjM2OjQ4LDU4NyBbV29ya2VyLTEyMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiB3Zm9ybVNlcnZpY2VzCisyMDIwLTA1LTA1IDIxOjM2OjQ4LDU4NyBbV29ya2VyLTEyMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0wNSAyMTozNjo0OCw2MDggW1dvcmtlci0xMjM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAyMTozNjo1NCw4OTEgW1dvcmtlci0xMjE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0wNSAyMTozNjo1NCw4OTIgW1dvcmtlci0xMjE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA1IDIxOjM3OjE4LDg3OCBbV29ya2VyLTEyNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDIxOjM3OjE4LDg4MCBbV29ya2VyLTEyNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAyMTozNzoxOCw4ODEgW1dvcmtlci0xMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAyMTozNzoxOCw4ODMgW1dvcmtlci0xMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMjE6Mzc6MjQsNjUzIFtXb3JrZXItMTI2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDUgMjE6Mzc6MjQsNjUzIFtXb3JrZXItMTI2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNSAyMjo1NTo0MSw1NzUgW1dvcmtlci0xMzY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOnRlc3RzOjAuMSBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNccG9tLnhtbC4KKzIwMjAtMDUtMDUgMjI6NTU6NDEsNjIwIFtXb3JrZXItMTM2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA1IDIyOjU1OjQxLDYyMSBbV29ya2VyLTEzNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA1IDIyOjU1OjQxLDYyMiBbV29ya2VyLTEzNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3dmb3JtU2VydmljZXM6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZXM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3dmb3JtU2VydmljZXMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDUgMjI6NTU6NDEsNzM3IFtXb3JrZXItMTM2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMjI6NTU6NDEsNzM5IFtXb3JrZXItMTM2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDIyOjU1OjQxLDc0MSBbV29ya2VyLTEzNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDIyOjU1OjQxLDc0MyBbV29ya2VyLTEzNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAyMjo1NTo0OSwxMzEgW1dvcmtlci0xMzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNSAyMjo1NTo0OSwxMzEgW1dvcmtlci0xMzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA1IDIyOjU2OjMwLDUzNSBbV29ya2VyLTEzOTogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDUgMjI6NTY6MzAsNTM1IFtXb3JrZXItMTM5OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA1IDIyOjU2OjMwLDUzNiBbV29ya2VyLTEzOTogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC93Zm9ybVNlcnZpY2VzOiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC93Zm9ybVNlcnZpY2VzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA1IDIyOjU2OjM5LDE2MCBbV29ya2VyLTEzNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6dGVzdHM6MC4xIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xwb20ueG1sLgorMjAyMC0wNS0wNSAyMjo1NjozOSwxOTYgW1dvcmtlci0xMzc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDUgMjI6NTY6MzksMTk2IFtXb3JrZXItMTM3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDUgMjI6NTY6MzksMTk3IFtXb3JrZXItMTM3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvd2Zvcm1TZXJ2aWNlczogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvd2Zvcm1TZXJ2aWNlcy90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNSAyMjo1NjozOSwyNzkgW1dvcmtlci0xMzc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAyMjo1NjozOSwyODAgW1dvcmtlci0xMzc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMjI6NTY6MzksMjgxIFtXb3JrZXItMTM3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMjI6NTY6MzksMjgzIFtXb3JrZXItMTM3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDIyOjU2OjQ0LDU5MCBbV29ya2VyLTEzOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA1IDIyOjU2OjQ0LDU5MSBbV29ya2VyLTEzOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDYgMDk6Mjk6MDAsNjk1IFtXb3JrZXItMTU5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA2IDA5OjI5OjAwLDY5NiBbV29ya2VyLTE1OTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA2IDA5OjI5OjAwLDY5NiBbV29ya2VyLTE1OTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3dmb3JtU2VydmljZXM6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZXM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3dmb3JtU2VydmljZXMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDYgMDk6Mjk6MDAsNzc5IFtXb3JrZXItMTU5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDYgMDk6Mjk6MDAsNzgyIFtXb3JrZXItMTU5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA2IDA5OjI5OjAwLDc4NCBbV29ya2VyLTE1OTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDA5OjI5OjAwLDc4NiBbV29ya2VyLTE1OTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNiAwOToyOTowNywyNjQgW1dvcmtlci0xNjA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNiAwOToyOTowNywyNjQgW1dvcmtlci0xNjA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA2IDA5OjM1OjMxLDYzNCBbV29ya2VyLTE2NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA2IDA5OjM1OjMxLDYzNSBbV29ya2VyLTE2NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDYgMDk6Mzg6MTQsODI3IFtXb3JrZXItMTY3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDYgMDk6Mzg6MTQsODI3IFtXb3JrZXItMTY3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNiAwOTozODo1Miw3NjggW1dvcmtlci0xNjY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNiAwOTozODo1Miw3NjggW1dvcmtlci0xNjY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA2IDA5OjM5OjAxLDQ0MSBbV29ya2VyLTE2ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDA5OjM5OjAxLDQ0MyBbV29ya2VyLTE2ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNiAwOTozOTowMSw0NDUgW1dvcmtlci0xNjg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNiAwOTozOTowMSw0NDYgW1dvcmtlci0xNjg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDYgMDk6Mzk6MDgsNTg3IFtXb3JrZXItMTY4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDYgMDk6Mzk6MDgsNTg3IFtXb3JrZXItMTY4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNiAwOTo0MToyMyw5OTkgW1dvcmtlci0xNjY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOnRlc3RzOjAuMSBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNccG9tLnhtbC4KKzIwMjAtMDUtMDYgMDk6NDE6MjQsMTA5IFtXb3JrZXItMTY2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA2IDA5OjQxOjI0LDEwOSBbV29ya2VyLTE2NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA2IDA5OjQxOjI0LDUyOSBbV29ya2VyLTE2NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDA5OjQxOjI0LDUzMCBbV29ya2VyLTE2NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNiAwOTo0MToyNCw1MzIgW1dvcmtlci0xNjY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNiAwOTo0MToyNCw1MzMgW1dvcmtlci0xNjY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDYgMDk6NDI6MDAsNzY3IFtXb3JrZXItMTcyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDYgMDk6NDI6MDAsNzY3IFtXb3JrZXItMTcyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNiAwOTo0ODozMCwzOTkgW1dvcmtlci0xNzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNiAwOTo0ODozMCwzOTkgW1dvcmtlci0xNzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA2IDE0OjU4OjE0LDY5NyBbV29ya2VyLTIwNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA2IDE0OjU4OjE0LDY5OCBbV29ya2VyLTIwNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDYgMTQ6NTg6NDQsNTI1IFtXb3JrZXItMjAyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA2IDE0OjU4OjQ0LDUyNSBbV29ya2VyLTIwMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA2IDE0OjU4OjQ0LDUzNyBbV29ya2VyLTIwMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE0OjU4OjQ0LDU0MCBbV29ya2VyLTIwMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNiAxNDo1ODo0NCw1NDIgW1dvcmtlci0yMDI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNiAxNDo1ODo0NCw1NDQgW1dvcmtlci0yMDI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDYgMTQ6NTg6NTIsNTQ5IFtXb3JrZXItMjA2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDYgMTQ6NTg6NTIsNTUwIFtXb3JrZXItMjA2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNiAxNTowMDoxNywzMDAgW1dvcmtlci0yMDM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNiAxNTowMDoxNywzMDEgW1dvcmtlci0yMDM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDYgMTU6MDA6MTcsMzAyIFtXb3JrZXItMjAzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDYgMTU6MDA6MTcsMzA0IFtXb3JrZXItMjAzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA2IDE1OjAwOjI4LDQyMiBbV29ya2VyLTIwMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA2IDE1OjAwOjI4LDQyMiBbV29ya2VyLTIwMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDYgMTU6MzI6MzYsMDQxIFtXb3JrZXItNzogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjAtMDUtMDYgMTU6MzU6MTIsNzc4IFtXb3JrZXItNTogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjAtMDUtMDYgMTU6MzU6MzYsNzgxIFtXb3JrZXItMTI6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDYgMTU6MzU6MzYsNzgyIFtXb3JrZXItMTI6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDUtMDYgMTU6MzU6NDgsMzkwIFtXb3JrZXItMTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNiAxNTozNTo0OCwzOTAgW1dvcmtlci0xMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDYgMTU6MzY6MTYsODc5IFtXb3JrZXItMTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNiAxNTozNjoxNiw4ODIgW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDYgMTU6MzY6MTYsODg1IFtXb3JrZXItMTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNiAxNTozNjoxNiw4ODcgW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDYgMTU6MzY6MTgsOTU2IFtXb3JrZXItMTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNiAxNTozNjoxOCw5NTggW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNiAxNTozNjoxOCw5NjEgW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE1OjM2OjE4LDk2NCBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA2IDE1OjM2OjIyLDM0MiBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDYgMTU6MzY6MjIsMzQ0IFtXb3JrZXItMTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNiAxNTozNjoyMiwzNDYgW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE1OjM2OjIyLDM0OSBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDYgMTU6MzY6MjIsNjAxIFtXb3JrZXItMTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNiAxNTozNjoyMiw2MDMgW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDYgMTU6MzY6MjIsNjA1IFtXb3JrZXItMTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNiAxNTozNjoyMiw2MDcgW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDYgMTU6MzY6MjIsODM1IFtXb3JrZXItMTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNiAxNTozNjoyMiw4MzggW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNiAxNTozNjoyMiw4NDIgW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE1OjM2OjIyLDg2NSBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA2IDE1OjM2OjIzLDA2OCBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA2IDE1OjM2OjIzLDA2OSBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDYgMTU6MzY6MjMsMDg4IFtXb3JrZXItMTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNiAxNTozNjoyMywxMDEgW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNiAxNTozNjoyMywxMDMgW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE1OjM2OjIzLDExNyBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA2IDE1OjM2OjMwLDExNSBbV29ya2VyLTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNiAxNTozNjozMCwxMTUgW1dvcmtlci0xOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNiAxNTozOToyNywyMDcgW1dvcmtlci0yOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMC0wNS0wNiAxNTo0Njo0NCw4MDIgW1dvcmtlci0xOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMC0wNS0wNiAxNTo0NzoyMiw2NDIgW1dvcmtlci0xMTogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDYgMTU6NDc6MjIsNjQzIFtXb3JrZXItMTE6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDYgMTU6NDc6MjMsMTY4IFtXb3JrZXItMTE6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMDYgMTU6NDc6MjMsNzgyIFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNiAxNTo0NzoyMyw3OTAgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDYgMTU6NDc6MjMsNzk0IFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNiAxNTo0NzoyMyw4MjEgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDYgMTU6NDc6MjQsODg2IFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNiAxNTo0NzoyNCw4ODkgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNiAxNTo0NzoyNCw4OTMgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE1OjQ3OjI0LDg5NSBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA2IDE1OjQ3OjI2LDMzMSBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDYgMTU6NDc6MjYsMzMzIFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNiAxNTo0NzoyNiwzMzUgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE1OjQ3OjI2LDMzOCBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDYgMTU6NDc6MjYsNTU2IFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNiAxNTo0NzoyNiw1NjAgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDYgMTU6NDc6MjYsNTYyIFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNiAxNTo0NzoyNiw1NjQgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDYgMTU6NDc6MjYsNzEwIFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNiAxNTo0NzoyNiw3MzQgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNiAxNTo0NzoyNiw3NDEgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE1OjQ3OjI2LDc2MSBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA2IDE1OjQ3OjI2LDc2MyBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMDYgMTU6NDc6MjYsNzY0IFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMDYgMTU6NDc6MjYsNzk0IFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNiAxNTo0NzoyNiw5NDcgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNiAxNTo0NzoyNiw5NDggW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA2IDE1OjQ3OjI2LDk1NCBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDYgMTU6NDc6MjYsOTgwIFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDYgMTU6NDc6MjYsOTgyIFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNiAxNTo0NzoyNywwMzQgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNiAxNTo0Nzo0Miw5MzUgW1dvcmtlci04OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDYgMTU6NDc6NDIsOTM2IFtXb3JrZXItODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDYgMTY6MDE6MTIsMzE2IFtXb3JrZXItMTU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNiAxNjowMToxMiwzMjMgW1dvcmtlci0xNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNiAxNjowMToxMiwzMjQgW1dvcmtlci0xNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE2OjAxOjEyLDMyNyBbV29ya2VyLTE1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA2IDE2OjAxOjE4LDE4OSBbV29ya2VyLTE2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDYgMTY6MDE6MTgsMTg5IFtXb3JrZXItMTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA2IDE2OjAyOjI4LDMyMiBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDYgMTY6MDI6MjgsMzI1IFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDYgMTY6MDI6MjgsMzI3IFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNiAxNjowMjoyOCwzMjkgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNiAxNjowMjozNCwzNTUgW1dvcmtlci02OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDYgMTY6MDI6MzQsMzU1IFtXb3JrZXItNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDYgMTY6MDI6NTksMTQwIFtXb3JrZXItNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE2OjAyOjU5LDE1NCBbV29ya2VyLTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDYgMTY6MDI6NTksMTU2IFtXb3JrZXItNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE2OjAyOjU5LDE1OCBbV29ya2VyLTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDYgMTY6MDM6NDAsNjkyIFtXb3JrZXItMTU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNiAxNjowMzo0MCw2OTUgW1dvcmtlci0xNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNiAxNjowMzo0MCw3MzkgW1dvcmtlci0xNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE2OjAzOjQwLDc0OCBbV29ya2VyLTE1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA2IDE2OjAzOjQ3LDUwNCBbV29ya2VyLTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNiAxNjowMzo0Nyw1MDQgW1dvcmtlci02OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNiAxNjowODoxOCwzMDYgW1dvcmtlci0xODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE2OjA4OjE4LDMxMCBbV29ya2VyLTE4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA2IDE2OjA4OjE4LDMxMiBbV29ya2VyLTE4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDYgMTY6MDg6MTgsMzE0IFtXb3JrZXItMTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDYgMTY6MDg6MjcsNzQ1IFtXb3JrZXItMTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNiAxNjowODoyNyw3NDggW1dvcmtlci0xNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNiAxNjowODoyNyw3NTAgW1dvcmtlci0xNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE2OjA4OjI3LDc1MiBbV29ya2VyLTE3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA2IDE2OjA4OjQwLDM4MSBbV29ya2VyLTE3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDYgMTY6MDg6NDAsMzgxIFtXb3JrZXItMTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA2IDE5OjQzOjMzLDgzNCBbV29ya2VyLTQwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDYgMTk6NDM6MzMsODU3IFtXb3JrZXItNDA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA2IDE5OjU4OjMwLDgwNCBbV29ya2VyLTQ2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDYgMTk6NTg6MzAsODA4IFtXb3JrZXItNDY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA2IDE5OjU4OjMwLDgxMCBbV29ya2VyLTQ2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDYgMTk6NTg6MzAsODEzIFtXb3JrZXItNDY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA2IDE5OjU4OjMxLDk3NCBbV29ya2VyLTQ2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp0ZXN0czowLjEgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHBvbS54bWwuCisyMDIwLTA1LTA2IDE5OjU4OjMyLDAzNyBbV29ya2VyLTQ2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA2IDE5OjU4OjMyLDAzNyBbV29ya2VyLTQ2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDYgMTk6NTg6MzIsMDM4IFtXb3JrZXItNDY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA2IDE5OjU4OjMyLDcxNyBbV29ya2VyLTQ2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDYgMTk6NTg6MzIsNzE5IFtXb3JrZXItNDY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDYgMTk6NTg6MzIsNzIwIFtXb3JrZXItNDY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNiAxOTo1ODozMiw3MjIgW1dvcmtlci00NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNiAyMDowMDoyMiwyMzkgW1dvcmtlci00ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHMKKzIwMjAtMDUtMDYgMjA6MDA6MjIsMjQwIFtXb3JrZXItNDg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNiAyMDowMTozMCw2NTMgW1dvcmtlci01MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA2IDIwOjAxOjMwLDY1NCBbV29ya2VyLTUyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNyAwOToyNDo0MywzNDYgW1dvcmtlci03MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA3IDA5OjI0OjQzLDM0OCBbV29ya2VyLTczOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNyAwOToyNjowNSw4NDUgW1dvcmtlci03NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA3IDA5OjI2OjA1LDg0NSBbV29ya2VyLTc1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNyAwOToyNjozNiwwNjUgW1dvcmtlci03NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA3IDA5OjI2OjM2LDA2NiBbV29ya2VyLTc0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNyAwOToyNzowNCwzMTQgW1dvcmtlci03MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA3IDA5OjI3OjA0LDMxNCBbV29ya2VyLTczOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNyAwOTo0MzoyMiwzODkgW1dvcmtlci03MjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA3IDA5OjQzOjIyLDM5MSBbV29ya2VyLTcyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNyAwOTo0MzoyMiwzOTMgW1dvcmtlci03MjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA3IDA5OjQzOjIyLDM5NCBbV29ya2VyLTcyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNyAwOTo0MzoyMiw5MjEgW1dvcmtlci03MjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA3IDA5OjQzOjIyLDkyMyBbV29ya2VyLTcyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA3IDA5OjQzOjIyLDkyNSBbV29ya2VyLTcyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDcgMDk6NDM6MjIsOTI3IFtXb3JrZXItNzI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDcgMDk6NDM6MjMsMzg1IFtXb3JrZXItNzI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDcgMDk6NDM6MjMsMzg1IFtXb3JrZXItNzI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNyAwOTo0MzoyMywzODUgW1dvcmtlci03MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDcgMDk6NDM6MjMsMzkwIFtXb3JrZXItNzI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNyAwOTo0MzoyMywzOTIgW1dvcmtlci03MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNyAwOTo0MzoyMywzOTQgW1dvcmtlci03MjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA3IDA5OjQzOjIzLDM5NiBbV29ya2VyLTcyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA3IDA5OjQzOjMyLDM5MCBbV29ya2VyLTg1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDcgMDk6NDM6MzIsMzkwIFtXb3JrZXItODU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA3IDA5OjQ1OjA0LDYwMCBbV29ya2VyLTg1OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA3IDA5OjQ1OjA0LDYwMSBbV29ya2VyLTg1OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDcgMDk6NDU6MDQsNjAyIFtXb3JrZXItODU6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA3IDA5OjQ1OjA0LDYyMSBbV29ya2VyLTg1OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA3IDA5OjQ1OjA0LDYyMyBbV29ya2VyLTg1OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDcgMDk6NDU6MDQsNjI0IFtXb3JrZXItODU6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA3IDEwOjAwOjI3LDExNiBbV29ya2VyLTg3OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNyAxMDowMDoyNywxMTggW1dvcmtlci04NzogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA3IDEwOjAwOjI3LDExOSBbV29ya2VyLTg3OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNyAxMDowMDoyNywxMjEgW1dvcmtlci04NzogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA3IDEwOjAwOjI3LDE1NCBbV29ya2VyLTg3OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA3IDEwOjAwOjI3LDE1NSBbV29ya2VyLTg3OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDcgMTA6MDA6MjcsMTU2IFtXb3JrZXItODc6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA3IDEwOjAwOjI3LDE2OCBbV29ya2VyLTg3OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA3IDEwOjAwOjI3LDE2OSBbV29ya2VyLTg3OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDcgMTA6MDA6MjcsMTY5IFtXb3JrZXItODc6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA3IDEwOjAwOjU0LDEzNSBbV29ya2VyLTg4OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA3IDEwOjAwOjU0LDEzNyBbV29ya2VyLTg4OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDcgMTA6MDA6NTQsMTM5IFtXb3JrZXItODg6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA3IDEwOjAwOjU0LDE2MCBbV29ya2VyLTg4OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA3IDEwOjAwOjU0LDE2MiBbV29ya2VyLTg4OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDcgMTA6MDA6NTQsMTY0IFtXb3JrZXItODg6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA3IDExOjI0OjUxLDY0MiBbV29ya2VyLTEwMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA3IDExOjI0OjUxLDY0MyBbV29ya2VyLTEwMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDcgMTE6MjU6MDUsMzg5IFtXb3JrZXItMTAxOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNyAxMToyNTowNSwzOTYgW1dvcmtlci0xMDE6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNyAxMToyNTowNSwzOTcgW1dvcmtlci0xMDE6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA3IDExOjI1OjA1LDM5OCBbV29ya2VyLTEwMTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA3IDExOjI1OjA1LDQyNyBbV29ya2VyLTEwMTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNyAxMToyNTowNSw0MjggW1dvcmtlci0xMDE6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNyAxMToyNTowNSw0MjkgW1dvcmtlci0xMDE6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA3IDExOjI1OjA1LDQ0MiBbV29ya2VyLTEwMTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNyAxMToyNTowNSw0NDMgW1dvcmtlci0xMDE6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNyAxMToyNTowNSw0NDQgW1dvcmtlci0xMDE6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA3IDEyOjA3OjM1LDM0NCBbV29ya2VyLTExMDogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTA3IDEyOjA3OjM1LDc2MSBbV29ya2VyLTExMDogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMDcgMTI6MDc6MzYsMjQ0IFtXb3JrZXItMTEyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDcgMTI6MDc6MzYsMjQ4IFtXb3JrZXItMTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNyAxMjowNzozNiwyNDkgW1dvcmtlci0xMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNyAxMjowNzozNiwyNTIgW1dvcmtlci0xMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA3IDEyOjA3OjM2LDg2MCBbV29ya2VyLTExMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA3IDEyOjA3OjM2LDg2OSBbV29ya2VyLTExMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNyAxMjowNzozNiw4NzEgW1dvcmtlci0xMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNyAxMjowNzozNiw4NzYgW1dvcmtlci0xMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDcgMTI6MDc6MzYsODc3IFtXb3JrZXItMTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTA3IDEyOjA3OjM2LDg3NyBbV29ya2VyLTExMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDUtMDcgMTI6MDc6MzksMzI5IFtXb3JrZXItMTEyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDcgMTI6MDc6NDIsMzkyIFtXb3JrZXItMTEyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDcgMTI6MDc6NDIsMzk0IFtXb3JrZXItMTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDcgMTI6MDc6NDIsMzk2IFtXb3JrZXItMTEyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDcgMTI6MDc6NDIsMzk4IFtXb3JrZXItMTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDcgMTI6MDc6NDIsNTE1IFtXb3JrZXItMTEyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDcgMTI6MDc6NDIsNTE3IFtXb3JrZXItMTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNyAxMjowNzo0Miw1MTggW1dvcmtlci0xMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNyAxMjowNzo0Miw1MjEgW1dvcmtlci0xMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA3IDEyOjA3OjQyLDYyOSBbV29ya2VyLTExMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA3IDEyOjA3OjQyLDYzMSBbV29ya2VyLTExMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNyAxMjowNzo0Miw2MzMgW1dvcmtlci0xMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNyAxMjowNzo0Miw2MzcgW1dvcmtlci0xMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDcgMTI6MDc6NDIsNjM4IFtXb3JrZXItMTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMDcgMTI6MDc6NDIsNjM4IFtXb3JrZXItMTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA1LTA3IDEyOjA3OjQyLDY0MyBbV29ya2VyLTExMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA3IDEyOjA3OjQyLDkyNSBbV29ya2VyLTExMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNyAxMjowNzo0Miw5MjYgW1dvcmtlci0xMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNyAxMjowNzo0Miw5MjYgW1dvcmtlci0xMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA3IDEyOjA3OjQyLDkzMCBbV29ya2VyLTExMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA3IDEyOjA3OjQyLDkzMiBbV29ya2VyLTExMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNyAxMjowNzo0Miw5MzQgW1dvcmtlci0xMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNyAxMjowNzo0Miw5MzYgW1dvcmtlci0xMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDcgMTI6MDc6NTAsNTk4IFtXb3JrZXItMTEwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDcgMTI6MDc6NTAsNTk4IFtXb3JrZXItMTEwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xMiAwOToxOTowMyw4MTMgW1dvcmtlci00OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMC0wNS0xMiAwOTozMzozNiw0ODkgW1dvcmtlci0xOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMC0wNS0xMiAwOTozMzo1NSw4MzIgW1dvcmtlci05OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXMyOjAuMC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNS0xMiAwOTozNDowMCwyNDQgW1dvcmtlci05OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDUtMTIgMDk6MzQ6MDAsNDgxIFtXb3JrZXItOTogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTEyIDA5OjM0OjAwLDQ4MiBbV29ya2VyLTk6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTEyIDA5OjM0OjAwLDQ4MiBbV29ya2VyLTk6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTIgMDk6MzQ6MDAsNjc0IFtXb3JrZXItOTogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDUtMTIgMDk6MzQ6MDEsNDYwIFtXb3JrZXItNDogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gRVJST1Igby5lLm0uai5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IgLSBDb3VsZCBub3QgZG93bmxvYWQgc291cmNlcyBmb3IgZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UCitvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjogQ291bGQgbm90IHJlc29sdmUgYXJ0aWZhY3QgZGUua29yYXAuc2VydmljZXM6dXRpbHM6amFyOnNvdXJjZXM6MC4xLVNOQVBTSE9UCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YTo3NzYpIH5bb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YToxKSB+W29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxMTIpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjc0MykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjcyMCkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI3OSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRBdHRhY2htZW50cyhEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNTQpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkTWF2ZW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjIxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTYxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM3KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE1MSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLmV4ZWN1dGUoTWF2ZW5JbXBsLmphdmE6MTM1NSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzUpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCisyMDIwLTA1LTEyIDA5OjM0OjAxLDQ2MCBbV29ya2VyLTk6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA1LTEyIDA5OjM0OjEwLDMzMiBbV29ya2VyLTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHBvbS54bWwuCisyMDIwLTA1LTEyIDA5OjM0OjEyLDc3NSBbV29ya2VyLTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAwOTozNDoxMiw3NzcgW1dvcmtlci00OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAwOTozNDoxMiw3ODAgW1dvcmtlci00OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMDk6MzQ6MTIsNzgyIFtXb3JrZXItNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMDk6MzQ6MTMsNTQ3IFtXb3JrZXItNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDA5OjM0OjEzLDU0OSBbV29ya2VyLTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMDk6MzQ6MTMsNTUxIFtXb3JrZXItNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDA5OjM0OjEzLDU1NCBbV29ya2VyLTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMDk6MzQ6MTMsNTU1IFtXb3JrZXItNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0xMiAwOTozNDoxMyw1NTYgW1dvcmtlci00OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0xMiAwOTozNDoxMyw2MTUgW1dvcmtlci00OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMDk6MzQ6MTQsMjM2IFtXb3JrZXItNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHBvbS54bWwuCisyMDIwLTA1LTEyIDA5OjM0OjE0LDg3NiBbV29ya2VyLTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAwOTozNDoxNCw4OTkgW1dvcmtlci00OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMDk6MzQ6MTQsOTAyIFtXb3JrZXItNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDA5OjM0OjE0LDkwOCBbV29ya2VyLTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAwOTozNDoxNSwzODEgW1dvcmtlci00OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRccG9tLnhtbC4KKzIwMjAtMDUtMTIgMDk6MzQ6MTUsODQwIFtXb3JrZXItNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDA5OjM0OjE1LDg0MyBbV29ya2VyLTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDA5OjM0OjE1LDg0NSBbV29ya2VyLTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAwOTozNDoxNSw4NDcgW1dvcmtlci00OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAwOTozNDoxNiwwNTkgW1dvcmtlci00OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMDk6MzQ6MTYsMDYzIFtXb3JrZXItNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAwOTozNDoxNiwwNjUgW1dvcmtlci00OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMDk6MzQ6MTYsMDcwIFtXb3JrZXItNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAwOTozNDoxNiwwNzEgW1dvcmtlci00OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMTIgMDk6MzQ6MTYsMDcxIFtXb3JrZXItNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0xMiAwOTozNDoxNiwwNzcgW1dvcmtlci00OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMDk6MzQ6MTYsNDcyIFtXb3JrZXItNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6dGVzdHM6MC4xIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xwb20ueG1sLgorMjAyMC0wNS0xMiAwOTozNDoxNiw1NDMgW1dvcmtlci00OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTEyIDA5OjM0OjE2LDU0MyBbV29ya2VyLTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xMiAwOTozNDoxNiw1NDMgW1dvcmtlci00OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xMiAwOTozNDoxNiw5MjMgW1dvcmtlci00OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMDk6MzQ6MTYsOTI1IFtXb3JrZXItNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAwOTozNDoxNiw5MjcgW1dvcmtlci00OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMDk6MzQ6MTYsOTI5IFtXb3JrZXItNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAwOTozNDoyMyw4MjggW1dvcmtlci0xOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMTIgMDk6MzQ6MjMsODI5IFtXb3JrZXItMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMDk6MzQ6NDAsNTAzIFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHBvbS54bWwuCisyMDIwLTA1LTEyIDA5OjM0OjQwLDYyMSBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMDk6MzQ6NDAsNjIzIFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDA5OjM0OjQwLDYyNSBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMDk6MzQ6NDAsNjI3IFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDA5OjM0OjQwLDk3NCBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2VccG9tLnhtbC4KKzIwMjAtMDUtMTIgMDk6MzQ6NDEsMTIyIFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAwOTozNDo0MSwxMjMgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDA5OjM0OjQxLDEyNSBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMDk6MzQ6NDEsMTI3IFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAwOTozNDo0MSwzNjUgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHBvbS54bWwuCisyMDIwLTA1LTEyIDA5OjM0OjQxLDQzOCBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMDk6MzQ6NDEsNDQwIFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDA5OjM0OjQxLDQ0MiBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMDk6MzQ6NDEsNDQ0IFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDA5OjM0OjQ2LDA3MiBbV29ya2VyLTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0xMiAwOTozNDo0NiwwNzMgW1dvcmtlci0yOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xMiAwOTozNDo1OSw2NDMgW1dvcmtlci00OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMTIgMDk6MzQ6NTksNjQ0IFtXb3JrZXItNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMDk6MzY6MjEsNzI5IFtXb3JrZXItMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTEyIDA5OjM2OjIxLDcyOSBbV29ya2VyLTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDA5OjM2OjM4LDQzNyBbV29ya2VyLTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAwOTozNjozOCw0MzkgW1dvcmtlci04OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDA5OjM2OjM4LDQ0MCBbV29ya2VyLTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAwOTozNjozOCw0NDEgW1dvcmtlci04OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDA5OjM2OjQ0LDMxNSBbV29ya2VyLTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0xMiAwOTozNjo0NCwzMTUgW1dvcmtlci0yOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xMiAwOTozNzowOSwyNjkgW1dvcmtlci02OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMTIgMDk6Mzc6MDksMjcwIFtXb3JrZXItNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMTA6NTQ6NTUsNTM0IFtXb3JrZXItMjU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0xMiAxMDo1NDo1NSw1MzUgW1dvcmtlci0yNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMTA6NTc6MTIsNDM2IFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxMDo1NzoxMiw0NDEgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxMDo1NzoxMiw0NDIgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDEwOjU3OjEyLDQ0NCBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDEwOjU3OjEyLDY1OSBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp0ZXN0czowLjEgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHBvbS54bWwuCisyMDIwLTA1LTEyIDEwOjU3OjEyLDgwNSBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTEyIDEwOjU3OjEyLDgwNSBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTIgMTA6NTc6MTIsODA2IFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTEyIDEwOjU3OjEyLDkzNyBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTA6NTc6MTIsOTQxIFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTA6NTc6MTIsOTQzIFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxMDo1NzoxMiw5NDUgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxMDo1NzoxNywzNjkgW1dvcmtlci0yMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTEyIDEwOjU3OjE3LDM2OSBbV29ya2VyLTIxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xMiAxMTowNDo1Miw5NDUgW1dvcmtlci0zMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0xMiAxMTowNDo1Miw5NDUgW1dvcmtlci0zMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNS0xMiAxMTowNTowMiw4MjYgW1dvcmtlci0zMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTEyIDExOjA1OjAyLDgyNyBbV29ya2VyLTMzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xMiAxMToxMjowMywyNDkgW1dvcmtlci0zNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA1LTEyIDExOjEyOjAzLDI0OSBbV29ya2VyLTM1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xMiAxMToxMjoxNSw3NTkgW1dvcmtlci0zMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTEyIDExOjEyOjE1LDc2MCBbV29ya2VyLTMzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xMiAxMTozNDozMCw3NjAgW1dvcmtlci03OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMC0wNS0xMiAxMTozNDozOSw0NDYgW1dvcmtlci00OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMTIgMTE6MzQ6MzksNDQ4IFtXb3JrZXItNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMTE6MzY6NDksNjkxIFtXb3JrZXItNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTEyIDExOjM2OjQ5LDY5MSBbV29ya2VyLTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDExOjQyOjE0LDY4NCBbV29ya2VyLTA6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTA1LTEyIDExOjQ4OjQ1LDM2MiBbV29ya2VyLTEzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlCisyMDIwLTA1LTEyIDExOjQ4OjQ1LDM2NCBbV29ya2VyLTEzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDExOjUwOjA5LDQ1OCBbV29ya2VyLTE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxMTo1MDowOSw0NjAgW1dvcmtlci0xOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxMTo1MDowOSw0NjMgW1dvcmtlci0xOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTE6NTA6MDksNDY1IFtXb3JrZXItMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTE6NTA6MTAsNDQyIFtXb3JrZXItMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDExOjUwOjEwLDQ1MiBbV29ya2VyLTE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTE6NTA6MTAsNDU0IFtXb3JrZXItMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDExOjUwOjEwLDQ4MSBbV29ya2VyLTE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTE6NTA6MTEsNzk4IFtXb3JrZXItMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDExOjUwOjExLDgwMSBbV29ya2VyLTE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxMTo1MDoxMSw4MDMgW1dvcmtlci0xOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTE6NTA6MTEsODA2IFtXb3JrZXItMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDExOjUwOjExLDk5OCBbV29ya2VyLTE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxMTo1MDoxMiwwMDAgW1dvcmtlci0xOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxMTo1MDoxMiwwMDIgW1dvcmtlci0xOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTE6NTA6MTIsMDA0IFtXb3JrZXItMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTE6NTA6MTIsMjY4IFtXb3JrZXItMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDExOjUwOjEyLDI3NSBbV29ya2VyLTE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTE6NTA6MTIsMjc3IFtXb3JrZXItMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDExOjUwOjEyLDI4MyBbV29ya2VyLTE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTE6NTA6MTIsNDY5IFtXb3JrZXItMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xMiAxMTo1MDoxMiw0NzAgW1dvcmtlci0xOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTIgMTE6NTA6MTIsNDcwIFtXb3JrZXItMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTIgMTE6NTA6MTIsNDg2IFtXb3JrZXItMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDExOjUwOjEyLDQ4OSBbV29ya2VyLTE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTE6NTA6MTIsNDkxIFtXb3JrZXItMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDExOjUwOjEyLDQ5NCBbV29ya2VyLTE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTE6NTA6MjEsMzAyIFtXb3JrZXItMTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0xMiAxMTo1MDoyMSwzMDMgW1dvcmtlci0xMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMTI6NTQ6MzIsNjg2IFtNb2RhbENvbnRleHRdIFdBUk4gIG8uZS5tLmouaS5KYXZhUHJvamVjdENvbnZlcnNpb25QYXJ0aWNpcGFudCAtIHdmb3JtU2VydmljZUphciBoYXMgbXVsdGlwbGUgc291cmNlIGVudHJpZXMsIHRoaXMgaXMgbm90IHN1cHBvcnRlZCB5ZXQKKzIwMjAtMDUtMTIgMTI6NTQ6NDAsNTc3IFtXb3JrZXItMjI6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxwb20ueG1sLgorMjAyMC0wNS0xMiAxMjo1NDo0MSwwNzcgW1dvcmtlci0yMjogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIEFkZGluZyBzb3VyY2UgZm9sZGVyIC93Zm9ybVNlcnZpY2VKYXIvc3JjCisyMDIwLTA1LTEyIDEyOjU0OjQxLDA3OCBbV29ya2VyLTIyOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gTm90IGFkZGluZyBzb3VyY2UgZm9sZGVyIC93Zm9ybVNlcnZpY2VKYXIvc3JjL3Rlc3QvamF2YSBiZWNhdXNlIGl0IG92ZXJsYXBzIHdpdGggL3dmb3JtU2VydmljZUphci9zcmMKKzIwMjAtMDUtMTIgMTI6NTQ6NDEsMzQxIFtXb3JrZXItMjI6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLnAuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyIC0gVXBkYXRlIHN0YXJ0ZWQKKzIwMjAtMDUtMTIgMTI6NTQ6NDEsODgxIFtXb3JrZXItMjI6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxwb20ueG1sLgorMjAyMC0wNS0xMiAxMjo1NDo0MiwxNjkgW1dvcmtlci0yMjogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIEFkZGluZyBzb3VyY2UgZm9sZGVyIC93Zm9ybVNlcnZpY2VKYXIvc3JjCisyMDIwLTA1LTEyIDEyOjU0OjQyLDE3MCBbV29ya2VyLTIyOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gTm90IGFkZGluZyBzb3VyY2UgZm9sZGVyIC93Zm9ybVNlcnZpY2VKYXIvc3JjL3Rlc3QvamF2YSBiZWNhdXNlIGl0IG92ZXJsYXBzIHdpdGggL3dmb3JtU2VydmljZUphci9zcmMKKzIwMjAtMDUtMTIgMTI6NTQ6NDIsMzcyIFtXb3JrZXItMjI6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLnAuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyIC0gVXBkYXRlIGNvbXBsZXRlZDogMSBzZWMKKzIwMjAtMDUtMTIgMTI6NTQ6NTIsMDQ2IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxMjo1NDo1MiwwNDggW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDEyOjU0OjUyLDA0OSBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTI6NTQ6NTIsMDUxIFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxMjo1Njo1MSwyMTYgW1dvcmtlci0yMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxwb20ueG1sLgorMjAyMC0wNS0xMiAxMjo1Njo1MSw1OTAgW1dvcmtlci0yMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDEyOjU2OjUxLDU5NSBbV29ya2VyLTIzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTI6NTY6NTEsNTk5IFtXb3JrZXItMjM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxMjo1Njo1MSw2MDEgW1dvcmtlci0yMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDEyOjU3OjAzLDc4OSBbV29ya2VyLTI1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlSmFyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyCisyMDIwLTA1LTEyIDEyOjU3OjAzLDc5MCBbV29ya2VyLTI1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlSmFyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDEyOjU5OjI4LDIwMSBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTI6NTk6MjgsMjAzIFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxMjo1OToyOCwyMDUgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDEyOjU5OjI4LDIwNyBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTI6NTk6NDAsODI0IFtXb3JrZXItMjc6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlSmFyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyCisyMDIwLTA1LTEyIDEyOjU5OjQwLDgyNCBbV29ya2VyLTI3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZUphcl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDUtMTIgMTI6NTk6NTAsNDY0IFtXb3JrZXItMjM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxMjo1OTo1MCw0NjYgW1dvcmtlci0yMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDEyOjU5OjUwLDQ2NyBbV29ya2VyLTIzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTI6NTk6NTAsNDY5IFtXb3JrZXItMjM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxMjo1OTo1NSw3MjkgW1dvcmtlci0yMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZUphcl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphcgorMjAyMC0wNS0xMiAxMjo1OTo1NSw3MjkgW1dvcmtlci0yMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZUphcl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xMiAxMzowMDowOSwxMjMgW1dvcmtlci0yNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDEzOjAwOjA5LDEyNSBbV29ya2VyLTI2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTM6MDA6MDksMTI3IFtXb3JrZXItMjY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxMzowMDowOSwxMjggW1dvcmtlci0yNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDEzOjAwOjA5LDE0NiBbV29ya2VyLTI2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTM6MDA6MDksMTQ4IFtXb3JrZXItMjY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTM6MDA6MDksMTQ5IFtXb3JrZXItMjY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxMzowMDowOSwxNTUgW1dvcmtlci0yNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxMzowMDoxNyw2MTQgW1dvcmtlci0yMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0xMiAxMzowMDoxNyw2MTQgW1dvcmtlci0yMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNS0xMiAxMzowMDoyNSw1MjIgW1dvcmtlci0yNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTEyIDEzOjAwOjI1LDUyMiBbV29ya2VyLTI1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xMiAxNToyMTo1MSwyMTEgW1dvcmtlci0yOTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE1OjIxOjUxLDIxMyBbV29ya2VyLTI5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTU6MjE6NTEsMjE1IFtXb3JrZXItMjk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNToyMTo1MSwyMTcgW1dvcmtlci0yOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE1OjI0OjEwLDgzOSBbV29ya2VyLTI3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHBvbS54bWwuCisyMDIwLTA1LTEyIDE1OjI0OjExLDM1NyBbV29ya2VyLTI3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTU6MjQ6MTEsMzU5IFtXb3JrZXItMjc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxNToyNDoxMSwzNjEgW1dvcmtlci0yNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE1OjI0OjExLDM2MyBbV29ya2VyLTI3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTU6Mjc6MjMsNzYzIFtXb3JrZXItMjk6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlSmFyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyCisyMDIwLTA1LTEyIDE1OjI3OjIzLDc2MyBbV29ya2VyLTI5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZUphcl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDUtMTIgMTU6Mjc6MzcsMDUxIFtXb3JrZXItMzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXIKKzIwMjAtMDUtMTIgMTU6Mjc6MzcsMDUxIFtXb3JrZXItMzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMTU6Mjg6MDAsNTkzIFtXb3JrZXItMzE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNToyODowMCw1OTUgW1dvcmtlci0zMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE1OjI4OjAwLDU5NiBbV29ya2VyLTMxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTU6Mjg6MDAsNTk4IFtXb3JrZXItMzE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxNToyODowMCw2MzAgW1dvcmtlci0zMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE1OjI4OjAwLDYzMSBbV29ya2VyLTMxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE1OjI4OjAwLDYzNCBbV29ya2VyLTMxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTU6Mjg6MDAsNjM1IFtXb3JrZXItMzE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTU6Mjg6MDksNDUzIFtXb3JrZXItMzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0xMiAxNToyODowOSw0NTMgW1dvcmtlci0zMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMTU6Mjg6NTYsMzczIFtXb3JrZXItMjc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNToyODo1NiwzNzUgW1dvcmtlci0yNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxNToyODo1NiwzNzYgW1dvcmtlci0yNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE1OjI4OjU2LDM3OCBbV29ya2VyLTI3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE1OjI5OjAzLDYxMCBbV29ya2VyLTI3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMTIgMTU6Mjk6MDMsNjEwIFtXb3JrZXItMjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDE1OjMyOjIzLDc4NCBbV29ya2VyLTI3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTEyIDE1OjMyOjIzLDc4NCBbV29ya2VyLTI3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA1LTEyIDE1OjMyOjMyLDIzMyBbV29ya2VyLTI5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMTIgMTU6MzI6MzIsMjMzIFtXb3JrZXItMjk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDE1OjQzOjE0LDEyMyBbV29ya2VyLTI3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlscworMjAyMC0wNS0xMiAxNTo0MzoxNCwxMjQgW1dvcmtlci0yNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDE1OjQ4OjI3LDY2MSBbV29ya2VyLTI3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlSmFyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyCisyMDIwLTA1LTEyIDE1OjQ4OjI3LDY2MiBbV29ya2VyLTI3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlSmFyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDE1OjU4OjM5LDExMyBbV29ya2VyLTM5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZUphcl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphcgorMjAyMC0wNS0xMiAxNTo1ODozOSwxMTMgW1dvcmtlci0zOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA1LTEyIDE1OjU4OjQ3LDY5MCBbV29ya2VyLTQwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTU6NTg6NDcsNjkzIFtXb3JrZXItNDA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE1OjU4OjQ3LDY5NCBbV29ya2VyLTQwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTU6NTg6NDcsNjk2IFtXb3JrZXItNDA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE1OjU4OjQ3LDgxMyBbV29ya2VyLTQwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTU6NTg6NDcsODE2IFtXb3JrZXItNDA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxNTo1ODo0Nyw4MTggW1dvcmtlci00MDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE1OjU4OjQ3LDgxOSBbV29ya2VyLTQwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTU6NTg6NTcsMjI2IFtXb3JrZXItNDA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXIKKzIwMjAtMDUtMTIgMTU6NTg6NTcsMjI2IFtXb3JrZXItNDA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMTY6MDA6MTEsMTI5IFtXb3JrZXItMzg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0xMiAxNjowMDoxMSwxMjkgW1dvcmtlci0zODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMTY6MDE6MDMsODM2IFtXb3JrZXItNDE6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMTIgMTY6MDE6MDMsODM2IFtXb3JrZXItNDE6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDUtMTIgMTY6MDE6MTEsODk4IFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNjowMToxMSw5MDAgW1dvcmtlci00MTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxNjowMToxMSw5MDIgW1dvcmtlci00MTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE2OjAxOjExLDkwNCBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE2OjAxOjEyLDExNyBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTY6MDE6MTIsMTE5IFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxNjowMToxMiwxMjAgW1dvcmtlci00MTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE2OjAxOjEyLDEyMyBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTY6MDE6MTIsMjYwIFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNjowMToxMiwyNjIgW1dvcmtlci00MTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxNjowMToxMiwyNjQgW1dvcmtlci00MTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE2OjAxOjEyLDI2NiBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE2OjA0OjQyLDE5MCBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTY6MDQ6NDIsMTkyIFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxNjowNDo0MiwxOTQgW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE2OjA0OjQyLDE5NSBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTY6MDU6NDYsMDE5IFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNjowNTo0NiwwMjIgW1dvcmtlci00MTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE2OjA1OjQ2LDAyNCBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTY6MDU6NDYsMDI3IFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxNjowNjo0MCw5ODAgW1dvcmtlci00MTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE2OjA2OjQwLDk4MiBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTY6MDY6NDAsOTgzIFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNjowNjo0MCw5ODUgW1dvcmtlci00MTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE2OjA2OjQ4LDIyNyBbV29ya2VyLTQzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlSmFyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyCisyMDIwLTA1LTEyIDE2OjA2OjQ4LDIyNyBbV29ya2VyLTQzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlSmFyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDE2OjA4OjE0LDg5NiBbV29ya2VyLTQyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTY6MDg6MTQsODk4IFtXb3JrZXItNDI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxNjowODoxNCw4OTkgW1dvcmtlci00MjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE2OjA4OjE0LDkwMSBbV29ya2VyLTQyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTY6MDg6MTQsOTc0IFtXb3JrZXItNDI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNjowODoxNCw5NzYgW1dvcmtlci00MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxNjowODoxNCw5NzcgW1dvcmtlci00MjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE2OjA4OjE0LDk4MCBbV29ya2VyLTQyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE2OjA4OjIwLDI4NCBbV29ya2VyLTQyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMTIgMTY6MDg6MjAsMjg0IFtXb3JrZXItNDI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDE2OjA4OjM2LDY2NiBbV29ya2VyLTM4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMTIgMTY6MDg6MzYsNjY2IFtXb3JrZXItMzg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDE2OjA5OjQ5LDQzNiBbV29ya2VyLTQyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTEyIDE2OjA5OjQ5LDQzNyBbV29ya2VyLTQyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA1LTEyIDE2OjA5OjU5LDIwNSBbV29ya2VyLTQxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMTIgMTY6MDk6NTksMjA2IFtXb3JrZXItNDE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDE2OjE4OjMyLDY5NyBbV29ya2VyLTQxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnQKKzIwMjAtMDUtMTIgMTY6MTg6MzIsNjk4IFtXb3JrZXItNDE6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA1LTEyIDE2OjE4OjQ0LDI3NCBbV29ya2VyLTM5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudAorMjAyMC0wNS0xMiAxNjoxODo0NCwyNzQgW1dvcmtlci0zOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDE2OjE5OjU3LDgxNCBbV29ya2VyLTM4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTY6MTk6NTcsODIwIFtXb3JrZXItMzg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE2OjE5OjU3LDgyMiBbV29ya2VyLTM4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTY6MTk6NTcsODI0IFtXb3JrZXItMzg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE2OjIwOjAzLDUzOSBbV29ya2VyLTQ1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudAorMjAyMC0wNS0xMiAxNjoyMDowMyw1NDAgW1dvcmtlci00NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDE2OjIxOjI5LDk5NyBbV29ya2VyLTQ0OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDUtMTIgMTY6MjE6MzAsMjE1IFtXb3JrZXItNDQ6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA1LTEyIDE2OjIxOjMwLDI4MSBbV29ya2VyLTQ1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTY6MjE6MzAsMjg0IFtXb3JrZXItNDU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE2OjIxOjMwLDI4NiBbV29ya2VyLTQ1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTY6MjE6MzAsMjg4IFtXb3JrZXItNDU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE2OjIxOjMwLDYyMiBbV29ya2VyLTQ1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTY6MjE6MzAsNjI0IFtXb3JrZXItNDU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTY6MjE6MzAsNjI1IFtXb3JrZXItNDU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNjoyMTozMCw2MjcgW1dvcmtlci00NTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxNjoyMTozMCw2MjcgW1dvcmtlci00NTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0xMiAxNjoyMTozMCw2MjkgW1dvcmtlci00NTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDUtMTIgMTY6MjE6MzAsNjg2IFtXb3JrZXItNDU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNjoyMTozMiw4NDcgW1dvcmtlci00NTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE2OjIxOjMyLDg0OSBbV29ya2VyLTQ1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxNjoyMTozMiw4NTEgW1dvcmtlci00NTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE2OjIxOjMyLDg1MyBbV29ya2VyLTQ1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxNjoyMTo0MiwxMDYgW1dvcmtlci0zODogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50CisyMDIwLTA1LTEyIDE2OjIxOjQyLDEwNiBbV29ya2VyLTM4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNS0xMiAxNjoyMjowNCw0NzcgW1dvcmtlci0zODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnQKKzIwMjAtMDUtMTIgMTY6MjI6MDQsNDc3IFtXb3JrZXItMzg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xMiAxNjoyNDoyMCw1OTUgW1dvcmtlci0zODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE2OjI0OjIwLDU5NyBbV29ya2VyLTM4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxNjoyNDoyMCw1OTkgW1dvcmtlci0zODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE2OjI0OjIwLDYwMSBbV29ya2VyLTM4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxNjoyNDoyNyw4NDEgW1dvcmtlci0zODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnQKKzIwMjAtMDUtMTIgMTY6MjQ6MjcsODQxIFtXb3JrZXItMzg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xMiAxNjoyODo0NSw5MzYgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA1LTEyIDE2OjI4OjUyLDM1MiBbV29ya2VyLTQ3OiBMYXVuY2hpbmcgR2xlbW1TZXJ2aWNlcyAoMildIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA1LTEyIDE2OjI4OjUyLDM1MiBbV29ya2VyLTQ3OiBMYXVuY2hpbmcgR2xlbW1TZXJ2aWNlcyAoMildIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNvbXBpbGUKKzIwMjAtMDUtMTIgMTY6Mjk6NDksMjc4IFtXb3JrZXItNDg6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudAorMjAyMC0wNS0xMiAxNjoyOTo0OSwyNzggW1dvcmtlci00ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDUtMTIgMTY6Mjk6NTksNDQxIFtXb3JrZXItNTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50CisyMDIwLTA1LTEyIDE2OjI5OjU5LDQ0MSBbV29ya2VyLTUxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMTY6MzQ6MTUsNjc4IFtXb3JrZXItNTE6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDUtMTIgMTY6MzQ6MTUsNjc5IFtXb3JrZXItNTE6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDUtMTIgMTY6MzQ6NTcsODkyIFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNS0xMiAxNjozNTowMSw3NTQgW1dvcmtlci01NDogTGF1bmNoaW5nIEdsZW1tU2VydmljZXMgKDMpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNS0xMiAxNjozNTowMSw3NTQgW1dvcmtlci01NDogTGF1bmNoaW5nIEdsZW1tU2VydmljZXMgKDMpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjb21waWxlCisyMDIwLTA1LTEyIDE2OjM1OjMxLDc2NyBbV29ya2VyLTUxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlscworMjAyMC0wNS0xMiAxNjozNTozMSw3NjcgW1dvcmtlci01MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDE2OjM1OjQ2LDkzMCBbV29ya2VyLTUyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDUtMTIgMTY6MzU6NDYsOTMxIFtXb3JrZXItNTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDE2OjM3OjU2LDczNCBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDUtMTIgMTY6Mzg6MDEsODcxIFtXb3JrZXItNTA6IExhdW5jaGluZyBHbGVtbVNlcnZpY2VzICg0KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDUtMTIgMTY6Mzg6MDEsODcyIFtXb3JrZXItNTA6IExhdW5jaGluZyBHbGVtbVNlcnZpY2VzICg0KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY29tcGlsZQorMjAyMC0wNS0xMiAxNjo0MDo0Niw1MjUgW1dvcmtlci01NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNS0xMiAxNjo0MDo0Niw1MjUgW1dvcmtlci01NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNS0xMiAxNjo0MDo1NSw3MjUgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE2OjQwOjU1LDcyNyBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxNjo0MDo1NSw3MjggW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE2OjQwOjU1LDczMCBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxNjo0MDo1NSw5NDMgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE2OjQwOjU1LDk0NSBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE2OjQwOjU1LDk0OCBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTY6NDA6NTUsOTUxIFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTY6NDA6NTUsOTUyIFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDUtMTIgMTY6NDA6NTUsOTUyIFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTEyIDE2OjQwOjU1LDk2OCBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTY6NDE6MDMsNTk3IFtXb3JrZXItNTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNS0xMiAxNjo0MTowMyw1OTcgW1dvcmtlci01NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMTY6NDM6MDksMTMzIFtXb3JrZXItNTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNjo0MzowOSwxMzUgW1dvcmtlci01NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxNjo0MzowOSwxMzUgW1dvcmtlci01NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE2OjQzOjA5LDEzNyBbV29ya2VyLTU2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE2OjQzOjE0LDg3NyBbV29ya2VyLTUyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDUtMTIgMTY6NDM6MTQsODc3IFtXb3JrZXItNTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDE2OjQ0OjUwLDUzMCBbV29ya2VyLTUzOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDUtMTIgMTY6NDQ6NTAsNjI4IFtXb3JrZXItNTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xMiAxNjo0NDo1MCw2MjggW1dvcmtlci01MzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTIgMTY6NDQ6NTAsNjI5IFtXb3JrZXItNTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTIgMTY6NDQ6NTAsNzc4IFtXb3JrZXItNTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNjo0NDo1MCw3ODAgW1dvcmtlci01NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTY6NDQ6NTAsNzgxIFtXb3JrZXItNTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNjo0NDo1MCw3ODMgW1dvcmtlci01NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTY6NDQ6NTEsMTIxIFtXb3JrZXItNTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNjo0NDo1MSwxMjYgW1dvcmtlci01NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxNjo0NDo1MSwxMjggW1dvcmtlci01NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE2OjQ0OjUxLDEzMCBbV29ya2VyLTU2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE2OjQ0OjUxLDEzMSBbV29ya2VyLTU2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTEyIDE2OjQ0OjUxLDEzMSBbV29ya2VyLTU2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0xMiAxNjo0NDo1MSwxMzYgW1dvcmtlci01NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE2OjQ0OjU5LDU3NCBbV29ya2VyLTU4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDUtMTIgMTY6NDQ6NTksNTc0IFtXb3JrZXItNTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDE2OjQ1OjE0LDQ5MCBbV29ya2VyLTU3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA1LTEyIDE2OjQ1OjE0LDQ5MCBbV29ya2VyLTU3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA1LTEyIDE2OjQ1OjI0LDg4NCBbV29ya2VyLTUxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDUtMTIgMTY6NDU6MjQsODg0IFtXb3JrZXItNTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDE2OjUxOjQ5LDY4MSBbV29ya2VyLTU2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA1LTEyIDE2OjUxOjQ5LDY4MSBbV29ya2VyLTU2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA1LTEyIDE2OjUyOjAxLDAxMyBbV29ya2VyLTU4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTY6NTI6MDEsMDE0IFtXb3JrZXItNTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTY6NTI6MDEsMDE1IFtXb3JrZXItNTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNjo1MjowMSwwMTcgW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxNjo1MjowMSwwMTcgW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0xMiAxNjo1MjowMSwwMTcgW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDUtMTIgMTY6NTI6MDEsMDIyIFtXb3JrZXItNTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNjo1MjoxMCw4NzMgW1dvcmtlci01MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA1LTEyIDE2OjUyOjEwLDg3MyBbV29ya2VyLTUxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xMiAxNjo1NDowMSwwOTIgW1dvcmtlci02MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHMKKzIwMjAtMDUtMTIgMTY6NTQ6MDEsMDkyIFtXb3JrZXItNjE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xMiAxNjo1NDoxNSwzMjkgW1dvcmtlci02MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA1LTEyIDE2OjU0OjE1LDMyOSBbV29ya2VyLTYwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xMiAxNjo1NTozNiw1NzIgW1dvcmtlci00OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMC0wNS0xMiAxNzoxMDoxNiw4NTAgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTc6MTA6MTYsODU0IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTc6MTA6MTYsODU3IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE3OjEwOjE2LDg2MCBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE3OjEwOjE4LDAwMCBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNzoxMDoxOCwwMDMgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE3OjEwOjE4LDAwNiBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNzoxMDoxOCwwMDkgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE3OjEwOjI2LDY1OCBbV29ya2VyLTE0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDUtMTIgMTc6MTA6MjYsNjYzIFtXb3JrZXItMTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDE5OjA1OjQ0LDM3NCBbV29ya2VyLTI2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTEyIDE5OjA1OjQ0LDM3NCBbV29ya2VyLTI2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA1LTEyIDE5OjA1OjUwLDY5NiBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTk6MDU6NTAsNjk4IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTk6MDU6NTAsNzAwIFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOTowNTo1MCw3MDMgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxOTowNTo1MSwwOTQgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE5OjA1OjUxLDA5NiBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTk6MDU6NTEsMDk3IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOTowNTo1MSwwOTkgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE5OjA1OjUxLDMwNiBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTk6MDU6NTEsMzA5IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE5OjA1OjUxLDMxMSBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTk6MDU6NTEsMzEzIFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE5OjA1OjUxLDgwNyBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTk6MDU6NTEsODA5IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxOTowNTo1MSw4MTEgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE5OjA1OjUxLDgxNSBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTk6MDU6NTIsMDMxIFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOTowNTo1MiwwMzIgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxOTowNTo1MiwwMzQgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE5OjA1OjUyLDAzOSBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE5OjA1OjUyLDA1MCBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMTIgMTk6MDU6NTIsMDUxIFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMTIgMTk6MDU6NTIsMDkxIFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOTowNTo1Miw0MjggW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xMiAxOTowNTo1Miw0MjkgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTEyIDE5OjA1OjUyLDQyOSBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xMiAxOTowNTo1Miw0NTUgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE5OjA1OjUyLDQ2MSBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE5OjA1OjUyLDQ2MiBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTk6MDU6NTIsNDY5IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTk6MDU6NTksMDYxIFtXb3JrZXItMjM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0xMiAxOTowNTo1OSwwNjEgW1dvcmtlci0yMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMTk6MDY6NDgsNjA4IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOTowNjo0OCw2MTAgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxOTowNjo0OCw2MTIgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE5OjA2OjQ4LDYxMyBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE5OjA2OjU1LDA1OSBbV29ya2VyLTE5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMTIgMTk6MDY6NTUsMDU5IFtXb3JrZXItMTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDE5OjA4OjE1LDg3MyBbV29ya2VyLTExOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTEyIDE5OjA4OjE1LDg3NiBbV29ya2VyLTExOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTIgMTk6MDg6MTUsODc5IFtXb3JrZXItMTE6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTEyIDE5OjA4OjE1LDkxMSBbV29ya2VyLTExOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTEyIDE5OjA4OjE1LDkxMyBbV29ya2VyLTExOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTIgMTk6MDg6MTUsOTE2IFtXb3JrZXItMTE6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTEyIDE5OjA5OjM2LDc3MyBbV29ya2VyLTI1OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDUtMTIgMTk6MDk6MzcsMDYxIFtXb3JrZXItMjU6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA1LTEyIDE5OjA5OjM3LDIwMSBbV29ya2VyLTE5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTk6MDk6MzcsMjA0IFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE5OjA5OjM3LDIwNiBbV29ya2VyLTE5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTk6MDk6MzcsMjEzIFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE5OjA5OjM3LDY4NyBbV29ya2VyLTE5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTk6MDk6MzcsNzQyIFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTk6MDk6MzcsNzU0IFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOTowOTozNyw4NjcgW1dvcmtlci0xOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxOTowOTozNyw4NjcgW1dvcmtlci0xOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0xMiAxOTowOTozNyw4NjggW1dvcmtlci0xOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDUtMTIgMTk6MDk6MzcsODg4IFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOTowOTozOSwxMDcgW1dvcmtlci0xOTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE5OjA5OjM5LDEwOSBbV29ya2VyLTE5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTk6MDk6MzksMTExIFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOTowOTozOSwxMTQgW1dvcmtlci0xOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE5OjA5OjM5LDIzNSBbV29ya2VyLTE5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTk6MDk6MzksMjM4IFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE5OjA5OjM5LDI0MCBbV29ya2VyLTE5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTk6MDk6MzksMjQyIFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE5OjA5OjM5LDYwNyBbV29ya2VyLTE5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTk6MDk6MzksNjIzIFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxOTowOTozOSw2MjUgW1dvcmtlci0xOTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE5OjA5OjM5LDYyOSBbV29ya2VyLTE5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTk6MDk6MzksNzk1IFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOTowOTozOSw4MDUgW1dvcmtlci0xOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxOTowOTozOSw4MTIgW1dvcmtlci0xOTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE5OjA5OjM5LDgxMyBbV29ya2VyLTE5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE5OjA5OjM5LDgxNCBbV29ya2VyLTE5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMTIgMTk6MDk6MzksODE0IFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMTIgMTk6MDk6MzksODE5IFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOTowOTo0MCwwNjggW1dvcmtlci0xOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xMiAxOTowOTo0MCwwNjkgW1dvcmtlci0xOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTEyIDE5OjA5OjQwLDA2OSBbV29ya2VyLTE5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xMiAxOTowOTo0MCwwNzQgW1dvcmtlci0xOTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE5OjA5OjQwLDA3NiBbV29ya2VyLTE5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE5OjA5OjQwLDA4MCBbV29ya2VyLTE5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTk6MDk6NDAsMDgyIFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTk6MDk6NDUsMTI3IFtXb3JrZXItMjY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0xMiAxOTowOTo0NSwxMjcgW1dvcmtlci0yNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMTk6MTA6MzEsNTczIFtXb3JrZXItMjogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjAtMDUtMTIgMTk6MTE6MzEsMDA1IFtXb3JrZXItMTE6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE5OjExOjMxLDAwOSBbV29ya2VyLTExOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE5OjExOjMxLDAxMiBbV29ya2VyLTExOiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOToxMTozMSwwMTQgW1dvcmtlci0xMTogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxOToxMTozMiw5NTQgW1dvcmtlci0xMTogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTk6MTE6MzIsOTU4IFtXb3JrZXItMTE6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxOToxMTozMiw5NjIgW1dvcmtlci0xMTogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTk6MTE6MzIsOTY0IFtXb3JrZXItMTE6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxOToxMTozNiw0NjMgW1dvcmtlci0xOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDUtMTIgMTk6MTE6MzYsNjgwIFtXb3JrZXItMTogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTEyIDE5OjExOjM2LDY4MSBbV29ya2VyLTE6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTEyIDE5OjExOjM2LDY4MSBbV29ya2VyLTE6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTIgMTk6MTE6MzYsODk3IFtXb3JrZXItMTogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMTIgMTk6MTE6MzcsMDkwIFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOToxMTozNywwOTMgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTk6MTE6MzcsMDk1IFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOToxMTozNywwOTcgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTk6MTE6MzcsNTE4IFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOToxMTozNyw1MjIgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxOToxMTozNyw1MjQgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE5OjExOjM3LDUyNSBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE5OjExOjM3LDUyNSBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTEyIDE5OjExOjM3LDUyNiBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0xMiAxOToxMTozNyw1NjAgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE5OjExOjM4LDg3MCBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTk6MTE6MzgsODcyIFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxOToxMTozOCw4NzQgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE5OjExOjM4LDg3NiBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTk6MTE6MzksMDcxIFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOToxMTozOSwwNzUgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTk6MTE6MzksMDc2IFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOToxMTozOSwwNzkgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTk6MTE6MzksNDk2IFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOToxMTozOSw1MTMgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE5OjExOjM5LDUxNiBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTk6MTE6MzksNTE5IFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxOToxMTozOSw3NTAgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE5OjExOjM5LDc1MyBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE5OjExOjM5LDc1NCBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTk6MTE6MzksNzcyIFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTk6MTE6MzksNzczIFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0xMiAxOToxMTozOSw3NzMgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0xMiAxOToxMTozOSw3NzggW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE5OjExOjQwLDAxNSBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTEyIDE5OjExOjQwLDAxNSBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTIgMTk6MTE6NDAsMDE2IFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTEyIDE5OjExOjQwLDAyMCBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTk6MTE6NDAsMDIzIFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTk6MTE6NDAsMDI0IFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOToxMTo0MCwwMjcgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxOToxMTo0OSwyNzIgW1dvcmtlci01OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTEyIDE5OjExOjQ5LDI3MyBbV29ya2VyLTU6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDUtMTIgMTk6MTI6MDEsMTUwIFtXb3JrZXItMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTEyIDE5OjEyOjAxLDE1MSBbV29ya2VyLTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDIxOjQ1OjE3LDk3NCBbV29ya2VyLTMyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMjE6NDU6MTcsOTkzIFtXb3JrZXItMzI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMjE6NDU6MTcsOTk2IFtXb3JrZXItMzI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAyMTo0NToxNyw5OTggW1dvcmtlci0zMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAyMTo0OToxNywwNzQgW1dvcmtlci05OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMjE6NDk6MTcsMTE5IFtXb3JrZXItOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAyMTo0OToxNywxMjEgW1dvcmtlci05OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMjE6NDk6MTcsMTIzIFtXb3JrZXItOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAyMTo0OToyNiw1NjggW1dvcmtlci05OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMTIgMjE6NDk6MjYsNTY5IFtXb3JrZXItOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMjE6NTA6MzksODYwIFtXb3JrZXItMzI6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMTIgMjE6NTA6MzksODYwIFtXb3JrZXItMzI6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDUtMTIgMjE6NTA6NTQsNjQ4IFtXb3JrZXItMjY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0xMiAyMTo1MDo1NCw2NDggW1dvcmtlci0yNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMjE6NTY6MTYsODY1IFtXb3JrZXItMzQ6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMTIgMjE6NTY6MTYsODY1IFtXb3JrZXItMzQ6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDUtMTIgMjE6NTY6MjcsMDI3IFtXb3JrZXItMzU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAyMTo1NjoyNywwMzAgW1dvcmtlci0zNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAyMTo1NjoyNywwMzIgW1dvcmtlci0zNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDIxOjU2OjI3LDAzNiBbV29ya2VyLTM1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDIxOjU2OjMyLDkzMyBbV29ya2VyLTM2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMTIgMjE6NTY6MzIsOTMzIFtXb3JrZXItMzY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDIyOjA0OjAxLDU1MyBbV29ya2VyLTM1OiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIgLSBVcGRhdGUgc3RhcnRlZAorMjAyMC0wNS0xMiAyMjowNDowOSw1MjAgW1dvcmtlci0zNTogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6dGVzdHM6MC4xIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xwb20ueG1sLgorMjAyMC0wNS0xMiAyMjowNDowOSw2MzAgW1dvcmtlci0zNTogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xMiAyMjowNDowOSw2MzEgW1dvcmtlci0zNTogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTEyIDIyOjA0OjA5LDYzMSBbV29ya2VyLTM1OiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xMiAyMjowNDoxNCwzODUgW1dvcmtlci0zNTogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBBZGRpbmcgc291cmNlIGZvbGRlciAvVGVzdHMvc3JjCisyMDIwLTA1LTEyIDIyOjA0OjE0LDM4NiBbV29ya2VyLTM1OiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIE5vdCBhZGRpbmcgc291cmNlIGZvbGRlciAvVGVzdHMvc3JjL3Rlc3QvamF2YSBiZWNhdXNlIGl0IG92ZXJsYXBzIHdpdGggL1Rlc3RzL3NyYworMjAyMC0wNS0xMiAyMjowNDoxNSwwNzYgW1dvcmtlci0zNTogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyIC0gVXBkYXRlIGNvbXBsZXRlZDogMTMgc2VjCisyMDIwLTA1LTEyIDIyOjA1OjE5LDM3OCBbV29ya2VyLTM1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTEyIDIyOjA1OjE5LDM3OSBbV29ya2VyLTM1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTIgMjI6MDU6MTksMzgwIFtXb3JrZXItMzU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTEyIDIyOjA1OjE5LDM4NyBbV29ya2VyLTM1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMjI6MDU6MTksMzkxIFtXb3JrZXItMzU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMjI6MDU6MTksMzkyIFtXb3JrZXItMzU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAyMjowNToxOSwzOTQgW1dvcmtlci0zNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAyMjowNTozNCw2OTcgW1dvcmtlci0zNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTEyIDIyOjA1OjM0LDY5NyBbV29ya2VyLTM1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xMiAyMjowODoxNCw2MjEgW1dvcmtlci0zNDogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xMiAyMjowODoxNCw2MzUgW1dvcmtlci0zNDogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTEyIDIyOjA4OjE0LDYzOCBbV29ya2VyLTM0OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xMiAyMjowODoxNCw2NjAgW1dvcmtlci0zNDogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xMiAyMjowODoxNCw2NjMgW1dvcmtlci0zNDogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTEyIDIyOjA4OjE0LDY2NSBbV29ya2VyLTM0OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAwOTo1MjowMSwyNjYgW1dvcmtlci0wOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMC0wNS0xNSAwOTo1OTo0NywyMTAgW1dvcmtlci0xOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMC0wNS0xNSAxMTozMzozOCw1MDUgW1dvcmtlci0yMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTE1IDExOjMzOjM4LDUwNiBbV29ya2VyLTIxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xNSAxMTozMzo1OCw2MzAgW1dvcmtlci0yMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0xNSAxMTozMzo1OCw2MzAgW1dvcmtlci0yMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNS0xNSAxMTozNDowOCw1MzIgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDExOjM0OjA4LDUzNCBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxMTozNDowOCw1MzcgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDExOjM0OjA4LDUzOSBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxMTozNDoxMiwyOTcgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6R2xlbW1TZXJ2aWNlczI6MC4wLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA1LTE1IDExOjM0OjE1LDkxMyBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTE6MzQ6MTUsOTE1IFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTE6MzQ6MTUsOTE3IFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxMTozNDoxNSw5MTkgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxMTozNDoxNiwwMjkgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDExOjM0OjE2LDAzMSBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTE6MzQ6MTYsMDM0IFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxMTozNDoxNiwwMzcgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDExOjM0OjE2LDEzNyBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTE6MzQ6MTYsMTM5IFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDExOjM0OjE2LDE0MSBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTE6MzQ6MTYsMTQzIFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDExOjM0OjE2LDI0NCBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTE6MzQ6MTYsMjQ2IFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxMTozNDoxNiwyNDggW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDExOjM0OjE2LDI1MCBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTE6MzQ6MTYsNTY5IFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNS0xNSAxMTozNDoxNywwMDkgW1dvcmtlci0yNjogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gRVJST1Igby5lLm0uai5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IgLSBDb3VsZCBub3QgZG93bmxvYWQgamF2YWRvYyBmb3IgZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UCitvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjogQ291bGQgbm90IHJlc29sdmUgYXJ0aWZhY3QgZGUua29yYXAuc2VydmljZXM6dXRpbHM6amFyOmphdmFkb2M6MC4xLVNOQVBTSE9UCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YTo3NzYpIH5bb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YToxKSB+W29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxMTIpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjc0MykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjcyMCkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI3OSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRBdHRhY2htZW50cyhEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNjUpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkTWF2ZW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjIxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTYxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM3KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE1MSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLmV4ZWN1dGUoTWF2ZW5JbXBsLmphdmE6MTM1NSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzUpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCisyMDIwLTA1LTE1IDExOjM0OjE3LDA5MSBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTE6MzQ6MTcsMDkzIFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTE6MzQ6MTcsMDk1IFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxMTozNDoxNywwOTcgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxMTozNDoxNywzNTcgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6dGVzdHM6MC4xIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xwb20ueG1sLgorMjAyMC0wNS0xNSAxMTozNDoxNyw0MTcgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxMTozNDoxNyw0MTcgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDExOjM0OjE3LDQxNyBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxMTozNDoxNyw4MjAgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDExOjM0OjE3LDgyMiBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDExOjM0OjE3LDgyNCBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTE6MzQ6MTcsODI2IFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTE6MzU6MDgsMTY0IFtXb3JrZXItMTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0xNSAxMTozNTowOCwxNjUgW1dvcmtlci0xOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTUgMTE6MzY6MTMsNTQxIFtXb3JrZXItMjE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXIKKzIwMjAtMDUtMTUgMTE6MzY6MTMsNTQxIFtXb3JrZXItMjE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTUgMTE6MzY6MjYsMjMwIFtXb3JrZXItMjU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0xNSAxMTozNjoyNiwyMzAgW1dvcmtlci0yNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTUgMTE6NDA6NDEsMDUzIFtXb3JrZXItMjE6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDExOjQwOjQxLDA1MyBbV29ya2VyLTIxOiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDExOjQwOjQxLDA1NCBbV29ya2VyLTIxOiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTQ6NDI6MTAsNDE3IFtXb3JrZXItMjogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjAtMDUtMTUgMTQ6NDI6MTIsODMwIFtXb3JrZXItOTogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTQ6NDI6MTIsODM3IFtXb3JrZXItOTogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNDo0MjoxMiw4MzggW1dvcmtlci05OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTQ6NDI6MTIsODM5IFtXb3JrZXItOTogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC93Zm9ybVNlcnZpY2VKYXI6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvd2Zvcm1TZXJ2aWNlSmFyL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE0OjQyOjE4LDMzNiBbV29ya2VyLTY6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHBvbS54bWwuCisyMDIwLTA1LTE1IDE0OjQyOjE5LDUyNiBbV29ya2VyLTY6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0xNSAxNDo0MjoxOSw2ODYgW1dvcmtlci02OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxwb20ueG1sLgorMjAyMC0wNS0xNSAxNDo0MjoyMCwyMTQgW1dvcmtlci02OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOnRlc3RzOjAuMSBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNccG9tLnhtbC4KKzIwMjAtMDUtMTUgMTQ6NDI6MjAsMzEwIFtXb3JrZXItNjogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE0OjQyOjIwLDMxMSBbV29ya2VyLTY6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE0OjQyOjIwLDMxMSBbV29ya2VyLTY6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTQ6NDI6MjAsMzEyIFtXb3JrZXItNjogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvd2Zvcm1TZXJ2aWNlSmFyOiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3dmb3JtU2VydmljZUphci90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNDo0MjoyMCw4NDYgW1dvcmtlci02OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHBvbS54bWwuCisyMDIwLTA1LTE1IDE0OjQyOjIxLDMzMCBbV29ya2VyLTY6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxwb20ueG1sLgorMjAyMC0wNS0xNSAxNDo0MjoyMSw3MTQgW1dvcmtlci02OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0xNSAxNDo0MjoyMiw0NzkgW1dvcmtlci04OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTQ6NDI6MjIsNDgyIFtXb3JrZXItODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTQ6NDI6MjIsNDg1IFtXb3JrZXItODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE0OjQyOjIyLDQ4NiBbV29ya2VyLTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE0OjQyOjIyLDk4OSBbV29ya2VyLTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxNDo0MjoyMiw5OTEgW1dvcmtlci04OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE0OjQyOjIyLDk5MyBbV29ya2VyLTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxNDo0MjoyMywwMDEgW1dvcmtlci04OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE0OjQyOjIzLDAwMyBbV29ya2VyLTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDUtMTUgMTQ6NDI6MjMsMDA0IFtXb3JrZXItODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDUtMTUgMTQ6NDI6MjMsMDM3IFtXb3JrZXItODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE0OjQyOjI0LDIzMiBbV29ya2VyLTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxNDo0MjoyNCwyMzQgW1dvcmtlci04OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTQ6NDI6MjQsMjM2IFtXb3JrZXItODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE0OjQyOjI0LDIzOCBbV29ya2VyLTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxNDo0MjoyNCw0MTIgW1dvcmtlci04OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTQ6NDI6MjQsNDE0IFtXb3JrZXItODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTQ6NDI6MjQsNDE2IFtXb3JrZXItODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE0OjQyOjI0LDQxOCBbV29ya2VyLTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE0OjQyOjI1LDIwOCBbV29ya2VyLTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxNDo0MjoyNSwyNzQgW1dvcmtlci04OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTQ6NDI6MjUsMjc2IFtXb3JrZXItODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE0OjQyOjI1LDU1OSBbV29ya2VyLTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxNDo0MjoyNywyNDAgW1dvcmtlci04OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTQ6NDI6MjcsMjg3IFtXb3JrZXItODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxNDo0MjoyNywyODkgW1dvcmtlci04OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTQ6NDI6MjcsNDQxIFtXb3JrZXItODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxNDo0MjoyNyw0NDIgW1dvcmtlci04OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMTUgMTQ6NDI6MjcsNDQyIFtXb3JrZXItODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0xNSAxNDo0MjoyNyw0NDkgW1dvcmtlci04OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTQ6NDI6MjcsNzUzIFtXb3JrZXItODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNDo0MjoyNyw3NTMgW1dvcmtlci04OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTQ6NDI6MjcsNzU0IFtXb3JrZXItODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTQ6NDI6MjcsNzU1IFtXb3JrZXItODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3dmb3JtU2VydmljZUphcjogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC93Zm9ybVNlcnZpY2VKYXIvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTQ6NDI6MjcsNzYxIFtXb3JrZXItODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE0OjQyOjI3LDc2MyBbV29ya2VyLTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTQ6NDI6MjcsNzY4IFtXb3JrZXItODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE0OjQyOjI3LDc3MCBbV29ya2VyLTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTQ6NDM6NDIsMzU3IFtXb3JrZXItMTE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxNDo0Mzo0MiwzNjAgW1dvcmtlci0xMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxNDo0Mzo0MiwzNjIgW1dvcmtlci0xMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE0OjQzOjQyLDM2NCBbV29ya2VyLTExOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE0OjQzOjQyLDgxMiBbV29ya2VyLTExOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTQ6NDM6NDIsODE0IFtXb3JrZXItMTE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxNDo0Mzo0Miw4MTYgW1dvcmtlci0xMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE0OjQzOjQyLDgxOSBbV29ya2VyLTExOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTQ6NDM6NDIsOTI0IFtXb3JrZXItMTE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxNDo0Mzo0Miw5MjYgW1dvcmtlci0xMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxNDo0Mzo0Miw5MjcgW1dvcmtlci0xMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE0OjQzOjQyLDkzMCBbV29ya2VyLTExOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE0OjQzOjUwLDM1NyBbV29ya2VyLTEzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTE1IDE0OjQzOjUwLDM1OCBbV29ya2VyLTEzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA1LTE1IDE0OjQzOjU3LDk1MyBbV29ya2VyLTExOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMTUgMTQ6NDM6NTcsOTUzIFtXb3JrZXItMTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTE1IDE0OjQ2OjQyLDYzNSBbV29ya2VyLTc6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE0OjQ2OjQyLDYzNyBbV29ya2VyLTc6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxNDo0Njo0Miw2MzkgW1dvcmtlci03OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxNDo0Njo0Miw2NDEgW1dvcmtlci03OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTQ6NDc6MTQsMTA3IFtXb3JrZXItMTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzCisyMDIwLTA1LTE1IDE0OjQ3OjE0LDEwNyBbV29ya2VyLTExOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTUgMTQ6NDc6MzEsOTk0IFtXb3JrZXItMDogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTQ6NDc6MzEsOTk2IFtXb3JrZXItMDogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxNDo0NzozMSw5OTggW1dvcmtlci0wOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxNDo0NzozMiwwMDAgW1dvcmtlci0wOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE0OjQ3OjMyLDE5MSBbV29ya2VyLTA6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE0OjQ3OjMyLDE5MyBbV29ya2VyLTA6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxNDo0NzozMiwxOTUgW1dvcmtlci0wOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxNDo0NzozMiwxOTcgW1dvcmtlci0wOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTQ6NDc6MzIsNTUyIFtXb3JrZXItMDogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTQ6NDc6MzIsNTUzIFtXb3JrZXItMDogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTQ6NDc6MzIsNTU0IFtXb3JrZXItMDogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTQ6NDc6MzIsNTU2IFtXb3JrZXItMDogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTQ6NDc6NTQsMjY4IFtXb3JrZXItNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZQorMjAyMC0wNS0xNSAxNDo0Nzo1NCwyNjggW1dvcmtlci01OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTE1IDE0OjQ4OjA1LDE5NSBbV29ya2VyLTE6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE0OjQ4OjA1LDIwMCBbV29ya2VyLTE6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE0OjQ4OjA1LDIwMSBbV29ya2VyLTE6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE0OjQ4OjA1LDIwNCBbV29ya2VyLTE6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE0OjQ4OjE4LDA1NyBbV29ya2VyLTExOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlSmFyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyCisyMDIwLTA1LTE1IDE0OjQ4OjE4LDA1NyBbV29ya2VyLTExOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlSmFyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTE1IDE0OjQ4OjI4LDI0OCBbV29ya2VyLTExOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxNDo0ODoyOCwyNTEgW1dvcmtlci0xMTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTQ6NDg6MjgsMjU1IFtXb3JrZXItMTE6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE0OjQ4OjI4LDI1NyBbV29ya2VyLTExOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxNDo0ODoyOSw5MzYgW1dvcmtlci0xMTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNDo0ODoyOSw5MzggW1dvcmtlci0xMTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE0OjQ4OjI5LDk0MSBbV29ya2VyLTExOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNDo0ODoyOSw5NDEgW1dvcmtlci0xMTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvd2Zvcm1TZXJ2aWNlSmFyOiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC93Zm9ybVNlcnZpY2VKYXIvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTQ6NDg6MjksOTY1IFtXb3JrZXItMTE6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTQ6NDg6MjksOTY4IFtXb3JrZXItMTE6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNDo0ODoyOSw5NzAgW1dvcmtlci0xMTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTQ6NDg6MjksOTcwIFtXb3JrZXItMTE6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3dmb3JtU2VydmljZUphcjogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvd2Zvcm1TZXJ2aWNlSmFyL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE0OjQ4OjQ2LDY3NiBbV29ya2VyLTE6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTQ6NDg6NDYsNjc3IFtXb3JrZXItMTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE0OjQ4OjQ2LDY3OSBbV29ya2VyLTE6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE0OjQ4OjQ2LDY3OSBbV29ya2VyLTE6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3dmb3JtU2VydmljZUphcjogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvd2Zvcm1TZXJ2aWNlSmFyL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE0OjQ4OjQ2LDY5OSBbV29ya2VyLTE6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTQ6NDg6NDYsNzAxIFtXb3JrZXItMTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE0OjQ4OjQ2LDcwMiBbV29ya2VyLTE6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE0OjQ4OjQ2LDcwMiBbV29ya2VyLTE6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3dmb3JtU2VydmljZUphcjogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvd2Zvcm1TZXJ2aWNlSmFyL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE1OjI4OjIxLDA4NyBbV29ya2VyLTE1OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE1OjI4OjIxLDA4OSBbV29ya2VyLTE1OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTU6Mjg6MjEsMDkzIFtXb3JrZXItMTU6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE1OjI4OjIxLDA5MyBbV29ya2VyLTE1OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC93Zm9ybVNlcnZpY2VKYXI6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL3dmb3JtU2VydmljZUphci90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNToyODoyMSwxMTYgW1dvcmtlci0xNTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNToyODoyMSwxMjAgW1dvcmtlci0xNTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE1OjI4OjIxLDEyMSBbV29ya2VyLTE1OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNToyODoyMSwxMjIgW1dvcmtlci0xNTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvd2Zvcm1TZXJ2aWNlSmFyOiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC93Zm9ybVNlcnZpY2VKYXIvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTY6NTg6MzAsMTU1IFtXb3JrZXItMTogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjAtMDUtMTUgMTY6NTg6MzIsMTMxIFtXb3JrZXItNDogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTY6NTg6MzIsMTMxIFtXb3JrZXItNDogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNjo1ODozMiwxMzMgW1dvcmtlci00OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTY6NTg6MzIsMTMzIFtXb3JrZXItNDogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC93Zm9ybVNlcnZpY2VKYXI6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvd2Zvcm1TZXJ2aWNlSmFyL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE3OjA0OjA3LDY2MSBbV29ya2VyLTQ6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTA1LTE1IDE3OjA0OjA5LDY3MCBbV29ya2VyLTE6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE3OjA0OjA5LDY3MiBbV29ya2VyLTE6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTc6MDQ6MDksNjcyIFtXb3JrZXItMTogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE3OjA0OjA5LDY3MiBbV29ya2VyLTE6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvd2Zvcm1TZXJ2aWNlSmFyOiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3dmb3JtU2VydmljZUphci90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNzo1Njo1Nyw3NjkgW1dvcmtlci0yOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMC0wNS0xNSAxNzo1NzowMCwzMjkgW1dvcmtlci0yOiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNzo1NzowMCwzMzIgW1dvcmtlci0yOiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE3OjU3OjAwLDMzMyBbV29ya2VyLTI6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNzo1NzowMCwzMzUgW1dvcmtlci0yOiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3dmb3JtU2VydmljZUphcjogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC93Zm9ybVNlcnZpY2VKYXIvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTc6NTg6MTcsNTQ3IFtXb3JrZXItNzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzMjowLjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDUtMTUgMTc6NTg6MTksMDgyIFtXb3JrZXItNzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTE1IDE3OjU4OjE5LDM4NiBbV29ya2VyLTc6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6dGVzdHM6MC4xIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xwb20ueG1sLgorMjAyMC0wNS0xNSAxNzo1ODoxOSw0NjYgW1dvcmtlci03OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTc6NTg6MTksNDY3IFtXb3JrZXItNzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTc6NTg6MTksNDY4IFtXb3JrZXItNzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNzo1ODoxOSw0NjkgW1dvcmtlci03OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC93Zm9ybVNlcnZpY2VKYXI6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvd2Zvcm1TZXJ2aWNlSmFyL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE3OjU4OjIwLDM5NiBbV29ya2VyLTc6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA1LTE1IDE3OjU4OjIwLDc5NCBbV29ya2VyLTc6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA1LTE1IDE3OjU5OjAwLDA2OCBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHBvbS54bWwuCisyMDIwLTA1LTE1IDE3OjU5OjAwLDUyMyBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxNzo1OTowMCw1MjUgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxNzo1OTowMCw1MjggW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTc6NTk6MDAsNTI5IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTc6NTk6MDAsNzc5IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE3OjU5OjAwLDgwNSBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTc6NTk6MDAsODA4IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE3OjU5OjAwLDgxMCBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTc6NTk6MDAsODExIFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0xNSAxNzo1OTowMCw4MTIgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0xNSAxNzo1OTowMCw4MzggW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTc6NTk6MDEsMTg1IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHBvbS54bWwuCisyMDIwLTA1LTE1IDE3OjU5OjAxLDU0NCBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxNzo1OTowMSw1NDYgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTc6NTk6MDEsNTQ4IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE3OjU5OjAxLDU1MCBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxNzo1OTowMSw3NjkgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRccG9tLnhtbC4KKzIwMjAtMDUtMTUgMTc6NTk6MDIsMDAwIFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE3OjU5OjAyLDAwMSBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE3OjU5OjAyLDAwMiBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxNzo1OTowMiwwMDQgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxNzo1OTowMiwyMDAgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHBvbS54bWwuCisyMDIwLTA1LTE1IDE3OjU5OjAyLDUwNSBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxNzo1OTowMiw1MDcgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTc6NTk6MDIsNTA4IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE3OjU5OjAyLDUxMCBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxNzo1OTowMiw2ODcgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTc6NTk6MDIsNjk1IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxNzo1OTowMiw2OTcgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTc6NTk6MDIsNzEzIFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxNzo1OTowMiw3MTQgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMTUgMTc6NTk6MDIsNzE0IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0xNSAxNzo1OTowMiw3MjAgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTc6NTk6MDIsOTY0IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6dGVzdHM6MC4xIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xwb20ueG1sLgorMjAyMC0wNS0xNSAxNzo1OTowMywwMDYgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE3OjU5OjAzLDAwNiBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNzo1OTowMywwMDYgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNzo1OTowMywwMDcgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvd2Zvcm1TZXJ2aWNlSmFyOiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3dmb3JtU2VydmljZUphci90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNzo1OTowMywwOTIgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTc6NTk6MDMsMDk0IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxNzo1OTowMywwOTcgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTc6NTk6MDMsMTAwIFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxNzo1OToxMCwzNDAgW1dvcmtlci04OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMTUgMTc6NTk6MTAsMzQxIFtXb3JrZXItODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTUgMTg6MDA6NDAsMjk2IFtXb3JrZXItMzogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xwb20ueG1sLgorMjAyMC0wNS0xNSAxODowMDo0MCwzNzggW1dvcmtlci0zOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODowMDo0MCwzODIgW1dvcmtlci0zOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE4OjAwOjQwLDM4MyBbV29ya2VyLTM6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE4OjAwOjQwLDM4NSBbV29ya2VyLTM6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTg6MDA6NDAsNTcwIFtXb3JrZXItMzogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2VccG9tLnhtbC4KKzIwMjAtMDUtMTUgMTg6MDA6NDAsNjg2IFtXb3JrZXItMzogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTg6MDA6NDAsNjg4IFtXb3JrZXItMzogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTg6MDA6NDAsNjg5IFtXb3JrZXItMzogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTg6MDA6NDAsNjkxIFtXb3JrZXItMzogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTg6MDA6NDAsODcyIFtXb3JrZXItMzogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRccG9tLnhtbC4KKzIwMjAtMDUtMTUgMTg6MDA6NDAsOTUzIFtXb3JrZXItMzogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTg6MDA6NDAsOTU0IFtXb3JrZXItMzogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxODowMDo0MCw5NTYgW1dvcmtlci0zOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODowMDo0MCw5NTcgW1dvcmtlci0zOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE4OjAwOjQxLDExMiBbV29ya2VyLTM6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxwb20ueG1sLgorMjAyMC0wNS0xNSAxODowMDo0MSwyMzYgW1dvcmtlci0zOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODowMDo0MSwyMzggW1dvcmtlci0zOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxODowMDo0MSwyMzkgW1dvcmtlci0zOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODowMDo0MSwyNDEgW1dvcmtlci0zOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxODowMDo0MSwyNzUgW1dvcmtlci0zOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODowMDo0MSwyODMgW1dvcmtlci0zOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTg6MDA6NDEsMjg0IFtXb3JrZXItMzogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTg6MDA6NDEsMjg5IFtXb3JrZXItMzogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE4OjAwOjQxLDM3NyBbV29ya2VyLTM6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxODowMDo0MSwzNzcgW1dvcmtlci0zOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxODowMDo0MSwzNzcgW1dvcmtlci0zOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE4OjAwOjQxLDM3OCBbV29ya2VyLTM6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3dmb3JtU2VydmljZUphcjogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC93Zm9ybVNlcnZpY2VKYXIvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTg6MDA6NDEsMzg4IFtXb3JrZXItMzogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTg6MDA6NDEsMzkwIFtXb3JrZXItMzogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE4OjAwOjQxLDM5MiBbV29ya2VyLTM6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE4OjAwOjQxLDM5NCBbV29ya2VyLTM6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxODowMTowOCw0NzEgW1dvcmtlci04OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlscworMjAyMC0wNS0xNSAxODowMTowOCw0NzEgW1dvcmtlci04OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTUgMTg6MDE6MTksMDcyIFtXb3JrZXItMTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXIKKzIwMjAtMDUtMTUgMTg6MDE6MTksMDczIFtXb3JrZXItMTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTUgMTg6MDE6MjksNDA3IFtXb3JrZXItODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZQorMjAyMC0wNS0xNSAxODowMToyOSw0MDggW1dvcmtlci04OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTE1IDE4OjAyOjI3LDIwNyBbV29ya2VyLTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50CisyMDIwLTA1LTE1IDE4OjAyOjI3LDIwOCBbV29ya2VyLTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xNSAxODowMjo0NSw4NDQgW1dvcmtlci0xMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA1LTE1IDE4OjAyOjQ1LDg0NCBbV29ya2VyLTExOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xNSAxODowMzo1MiwxODAgW1dvcmtlci04OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTg6MDM6NTIsMTgyIFtXb3JrZXItODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTg6MDM6NTIsMTgzIFtXb3JrZXItODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE4OjAzOjUyLDE4NCBbV29ya2VyLTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE4OjAzOjUyLDIwNiBbV29ya2VyLTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODowMzo1MiwyMDcgW1dvcmtlci04OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE4OjAzOjUyLDIwOSBbV29ya2VyLTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODowMzo1MiwyMTEgW1dvcmtlci04OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE4OjAzOjU5LDYwNSBbV29ya2VyLTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNS0xNSAxODowMzo1OSw2MDUgW1dvcmtlci0zOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xNSAxODowODowNiw3MzcgW1dvcmtlci0zOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA1LTE1IDE4OjA4OjA2LDczOCBbV29ya2VyLTM6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDUtMTUgMTg6MDg6MTcsODg1IFtXb3JrZXItMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE4OjA4OjE3LDg4NyBbV29ya2VyLTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTg6MDg6MTcsODkwIFtXb3JrZXItMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE4OjA4OjE3LDg5MyBbV29ya2VyLTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTg6MDg6MTcsODk0IFtXb3JrZXItMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0xNSAxODowODoxNyw4OTQgW1dvcmtlci0zOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0xNSAxODowODoxNyw5NDAgW1dvcmtlci0zOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTg6MDg6MjIsNjk5IFtXb3JrZXItMTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNS0xNSAxODowODoyMiw2OTkgW1dvcmtlci0xNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTUgMTg6MTI6NDgsNTU5IFtXb3JrZXItMTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNS0xNSAxODoxMjo0OCw1NjAgW1dvcmtlci0xNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTUgMTg6MTM6NTgsNjY5IFtXb3JrZXItMTY6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDUtMTUgMTg6MTM6NTgsNjcwIFtXb3JrZXItMTY6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDUtMTUgMTg6MTQ6MDgsNjc5IFtXb3JrZXItMTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODoxNDowOCw2ODEgW1dvcmtlci0xODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxODoxNDowOCw2ODIgW1dvcmtlci0xODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE4OjE0OjA4LDY4NCBbV29ya2VyLTE4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE4OjE0OjA4LDY4NSBbV29ya2VyLTE4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTE1IDE4OjE0OjA4LDY4NSBbV29ya2VyLTE4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0xNSAxODoxNDowOCw2OTcgW1dvcmtlci0xODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE4OjE0OjEzLDk2MCBbV29ya2VyLTE2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDUtMTUgMTg6MTQ6MTMsOTYxIFtXb3JrZXItMTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTE1IDE4OjE5OjAwLDkzOCBbV29ya2VyLTE5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZUphcl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphcgorMjAyMC0wNS0xNSAxODoxOTowMCw5MzkgW1dvcmtlci0xOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA1LTE1IDE4OjE5OjEwLDM0MiBbV29ya2VyLTE1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlSmFyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyCisyMDIwLTA1LTE1IDE4OjE5OjEwLDM0MyBbV29ya2VyLTE1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlSmFyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTE1IDE4OjIzOjU3LDA5NiBbV29ya2VyLTE5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlSmFyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyCisyMDIwLTA1LTE1IDE4OjIzOjU3LDA5NiBbV29ya2VyLTE5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlSmFyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTE1IDE4OjI3OjMzLDk2NiBbV29ya2VyLTI0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTg6Mjc6MzMsOTY3IFtXb3JrZXItMjQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxODoyNzozMyw5NjkgW1dvcmtlci0yNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE4OjI3OjMzLDk3MCBbV29ya2VyLTI0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTg6Mjc6MzQsMTA0IFtXb3JrZXItMjQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODoyNzozNCwxMDYgW1dvcmtlci0yNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTg6Mjc6MzQsMTA4IFtXb3JrZXItMjQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODoyNzozNCwxMTAgW1dvcmtlci0yNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTg6Mjc6MzQsMjA5IFtXb3JrZXItMjQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODoyNzozNCwyMTIgW1dvcmtlci0yNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE4OjI3OjM0LDIxMyBbV29ya2VyLTI0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTg6Mjc6MzQsMjE1IFtXb3JrZXItMjQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxODoyNzozNCwzNDUgW1dvcmtlci0yNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE4OjI3OjM0LDM0NyBbV29ya2VyLTI0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE4OjI3OjM0LDM0OCBbV29ya2VyLTI0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTg6Mjc6MzQsMzUwIFtXb3JrZXItMjQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTg6Mjc6MzQsNDE3IFtXb3JrZXItMjQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTg6Mjc6MzQsNDE3IFtXb3JrZXItMjQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxODoyNzozNCw0MTggW1dvcmtlci0yNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTg6Mjc6MzQsNDE5IFtXb3JrZXItMjQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC93Zm9ybVNlcnZpY2VKYXI6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvd2Zvcm1TZXJ2aWNlSmFyL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE4OjI3OjM0LDQyNyBbV29ya2VyLTI0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTg6Mjc6MzQsNDI5IFtXb3JrZXItMjQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTg6Mjc6MzQsNDMxIFtXb3JrZXItMjQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODoyNzozNCw0MzMgW1dvcmtlci0yNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxODoyNzo0MCw2NzcgW1dvcmtlci0yMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTE1IDE4OjI3OjQwLDY3NyBbV29ya2VyLTIzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xNSAxODoyODowNiwwMjggW1dvcmtlci0yMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzCisyMDIwLTA1LTE1IDE4OjI4OjA2LDAyOCBbV29ya2VyLTIzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNS0xNSAxODoyODoxMSw2MTkgW1dvcmtlci0yMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHMKKzIwMjAtMDUtMTUgMTg6Mjg6MTEsNjE5IFtXb3JrZXItMjI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xNSAxODoyODozMywyNjQgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE4OjI4OjMzLDI2NiBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxODoyODozMywyNjcgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE4OjI4OjMzLDI2OCBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxODoyODozMyw2NjQgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE4OjI4OjMzLDY2NyBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE4OjI4OjMzLDY2OCBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTg6Mjg6MzMsNjcwIFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTg6Mjg6MzMsNzk0IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODoyODozMyw3OTYgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE4OjI4OjMzLDc5NyBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTg6Mjg6MzMsNzk5IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxODoyODozOSwxMDUgW1dvcmtlci0yNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZQorMjAyMC0wNS0xNSAxODoyODozOSwxMDUgW1dvcmtlci0yNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xNSAxODozMDowMiw3NTIgW1dvcmtlci0xOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXIKKzIwMjAtMDUtMTUgMTg6MzA6MDIsNzUyIFtXb3JrZXItMTk6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlSmFyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNS0xNSAxODozMDowOSwzOTEgW1dvcmtlci0yMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE4OjMwOjA5LDM5NCBbV29ya2VyLTIzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTg6MzA6MDksMzk2IFtXb3JrZXItMjM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODozMDowOSwzOTggW1dvcmtlci0yMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE4OjMwOjE3LDUxMSBbV29ya2VyLTI1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlSmFyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyCisyMDIwLTA1LTE1IDE4OjMwOjE3LDUxMiBbV29ya2VyLTI1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlSmFyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTE1IDE4OjM5OjEzLDY3NiBbV29ya2VyLTI1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTE1IDE4OjM5OjEzLDY3NiBbV29ya2VyLTI1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA1LTE1IDE4OjM5OjI0LDExNiBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTg6Mzk6MjQsMTE4IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxODozOToyNCwxMTkgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE4OjM5OjI0LDEyMSBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTg6Mzk6MjQsMjI2IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODozOToyNCwyMjggW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTg6Mzk6MjQsMjI5IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODozOToyNCwyMzEgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTg6Mzk6MjQsMjY2IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODozOToyNCwyNjggW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE4OjM5OjI0LDI2OSBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTg6Mzk6MjQsMjcxIFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxODozOToyNCwzNTEgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE4OjM5OjI0LDM1NCBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE4OjM5OjI0LDM1NiBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTg6Mzk6MjQsMzU4IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTg6Mzk6MjQsNDk0IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTg6Mzk6MjQsNDk0IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxODozOToyNCw0OTQgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTg6Mzk6MjQsNDk1IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC93Zm9ybVNlcnZpY2VKYXI6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvd2Zvcm1TZXJ2aWNlSmFyL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE4OjM5OjI0LDQ5OSBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTg6Mzk6MjQsNTAxIFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTg6Mzk6MjQsNTAzIFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODozOToyNCw1MDUgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxODozOToyOSw0ODIgW1dvcmtlci0yNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTE1IDE4OjM5OjI5LDQ4MiBbV29ya2VyLTI1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xNSAxODozOTo1MCwyNzAgW1dvcmtlci0yNTogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTg6Mzk6NTAsMjcyIFtXb3JrZXItMjU6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxODozOTo1MCwyNzMgW1dvcmtlci0yNTogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTg6Mzk6NTAsMjc1IFtXb3JrZXItMjU6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxODozOTo1MCwzMTYgW1dvcmtlci0yNTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxODozOTo1MCwzMTggW1dvcmtlci0yNTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE4OjM5OjUwLDMyMCBbV29ya2VyLTI1OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxODozOTo1MCwzMjAgW1dvcmtlci0yNTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvd2Zvcm1TZXJ2aWNlSmFyOiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC93Zm9ybVNlcnZpY2VKYXIvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTg6Mzk6NTAsMzMzIFtXb3JrZXItMjU6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTg6Mzk6NTAsMzM0IFtXb3JrZXItMjU6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxODozOTo1MCwzMzUgW1dvcmtlci0yNTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTg6Mzk6NTAsMzM1IFtXb3JrZXItMjU6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3dmb3JtU2VydmljZUphcjogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvd2Zvcm1TZXJ2aWNlSmFyL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE5OjQ3OjM2LDQyMSBbV29ya2VyLTI6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTA1LTE1IDE5OjQ4OjU2LDc0NiBbV29ya2VyLTA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxOTo0ODo1Niw3NDggW1dvcmtlci0wOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxOTo0ODo1Niw3NTEgW1dvcmtlci0wOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTk6NDg6NTYsNzUyIFtXb3JrZXItMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTk6NDk6MDEsODA4IFtXb3JrZXItMTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzCisyMDIwLTA1LTE1IDE5OjQ5OjAxLDgwOSBbV29ya2VyLTExOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTUgMTk6NDk6MTEsNjA3IFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHBvbS54bWwuCisyMDIwLTA1LTE1IDE5OjQ5OjEyLDE1OSBbV29ya2VyLTEzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTk6NDk6MTIsMTYxIFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE5OjQ5OjEyLDE2MyBbV29ya2VyLTEzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTk6NDk6MTIsMTY1IFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE5OjQ5OjEyLDU0NiBbV29ya2VyLTEzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTk6NDk6MTIsNTQ4IFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxOTo0OToxMiw1NTAgW1dvcmtlci0xMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE5OjQ5OjEyLDU1MiBbV29ya2VyLTEzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTk6NDk6MTcsNjAyIFtXb3JrZXItOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZUphcl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphcgorMjAyMC0wNS0xNSAxOTo0OToxNyw2MDIgW1dvcmtlci05OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlSmFyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTE1IDE5OjQ5OjM4LDAzMyBbV29ya2VyLTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXMyOjAuMC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNS0xNSAxOTo0OTozOSw1OTIgW1dvcmtlci05OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTk6NDk6MzksNTk0IFtXb3JrZXItOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxOTo0OTozOSw1OTYgW1dvcmtlci05OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTk6NDk6MzksNTk4IFtXb3JrZXItOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxOTo0OTozOSw2MDIgW1dvcmtlci05OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTE1IDE5OjQ5OjM5LDYwNCBbV29ya2VyLTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTE1IDE5OjQ5OjM5LDYzMiBbV29ya2VyLTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxOTo0OTozOSw4NzkgW1dvcmtlci05OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTk6NDk6MzksODgxIFtXb3JrZXItOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTk6NDk6MzksODgzIFtXb3JrZXItOTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE5OjQ5OjM5LDg4NSBbV29ya2VyLTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE5OjUwOjA4LDI4MiBbV29ya2VyLTc6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlSmFyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyCisyMDIwLTA1LTE1IDE5OjUwOjA4LDI4MiBbV29ya2VyLTc6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlSmFyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNS0xNSAxOTo1MDoxOSw2OTAgW1dvcmtlci02OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHBvbS54bWwuCisyMDIwLTA1LTE1IDE5OjUwOjIwLDAwMyBbV29ya2VyLTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxOTo1MDoyMCwwMDUgW1dvcmtlci02OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTk6NTA6MjAsMDA3IFtXb3JrZXItNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE5OjUwOjIwLDAxMCBbV29ya2VyLTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxOTo1MDoyOCw3MzggW1dvcmtlci00OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlSmFyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyCisyMDIwLTA1LTE1IDE5OjUwOjI4LDczOCBbV29ya2VyLTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTIgMTU6MzI6MTUsMTk3IFtXb3JrZXItNzogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjAtMDYtMTIgMTY6MTQ6MTQsMDExIFtXb3JrZXItMzogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIwLTA2LTEyIDE4OjM5OjIxLDQ2NSBbV29ya2VyLTI4OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xMiAxODozOToyMSw0NjcgW1dvcmtlci0yODogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTEyIDE4OjM5OjIxLDQ2OSBbV29ya2VyLTI4OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xMiAxODozOToyMSw0NzAgW1dvcmtlci0yODogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTEyIDE4OjM5OjI1LDc4MyBbV29ya2VyLTI4OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xMiAxODozOToyNSw3ODUgW1dvcmtlci0yODogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTIgMTg6Mzk6MjUsNzg3IFtXb3JrZXItMjg6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTEyIDE4OjM5OjI1LDc4OSBbV29ya2VyLTI4OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xMiAxODozOTozMCwxNDMgW1dvcmtlci0yODogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRccG9tLnhtbC4KKzIwMjAtMDYtMTIgMTg6Mzk6MzAsOTM4IFtXb3JrZXItMjg6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTEyIDE4OjM5OjMwLDk0MCBbV29ya2VyLTI4OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTEyIDE4OjM5OjMwLDk0MSBbV29ya2VyLTI4OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xMiAxODozOTozMCw5NDMgW1dvcmtlci0yODogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xMiAxODozOTozMSwzNzEgW1dvcmtlci0yODogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTIgMTg6Mzk6MzEsMzczIFtXb3JrZXItMjg6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTEyIDE4OjM5OjMxLDM3NiBbV29ya2VyLTI4OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xMiAxODozOTozMSwzNzggW1dvcmtlci0yODogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTIgMTg6Mzk6MzEsNzI0IFtXb3JrZXItMjg6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA2LTEyIDE4OjM5OjMyLDU2NSBbV29ya2VyLTI4OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xMiAxODozOTozMiw2MDAgW1dvcmtlci0yODogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTEyIDE4OjM5OjMyLDYwMiBbV29ya2VyLTI4OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xMiAxODozOTozMiw2MDQgW1dvcmtlci0yODogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTEyIDE4OjM5OjMzLDE0NSBbV29ya2VyLTI4OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOnRlc3RzOjAuMSBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNccG9tLnhtbC4KKzIwMjAtMDYtMTIgMTg6Mzk6MzMsMjMwIFtXb3JrZXItMjg6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xMiAxODozOTozMywyMzEgW1dvcmtlci0yODogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTIgMTg6Mzk6MzMsMjMxIFtXb3JrZXItMjg6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTIgMTg6Mzk6MzMsMjMyIFtXb3JrZXItMjg6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3dmb3JtU2VydmljZUphcjogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC93Zm9ybVNlcnZpY2VKYXIvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTIgMTg6Mzk6MzMsNTEyIFtXb3JrZXItMjg6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTEyIDE4OjM5OjMzLDUxNiBbV29ya2VyLTI4OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTIgMTg6Mzk6MzMsNTE4IFtXb3JrZXItMjg6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTEyIDE4OjM5OjMzLDUxOSBbV29ya2VyLTI4OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTIgMTg6Mzk6MzksMjc4IFtXb3JrZXItMjg6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xMiAxODozOTozOSwyNzggW1dvcmtlci0yODogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTIgMTg6Mzk6MzksMjc5IFtXb3JrZXItMjg6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTIgMTg6Mzk6MzksMjc5IFtXb3JrZXItMjg6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3dmb3JtU2VydmljZUphcjogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC93Zm9ybVNlcnZpY2VKYXIvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTIgMTg6NTE6NDAsNjg1IFtXb3JrZXItMjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xMiAxODo1MTo0MCw2ODYgW1dvcmtlci0yODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTIgMTk6Mzg6MjYsOTc2IFtXb3JrZXItMzg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xMiAxOTozODoyNiw5NzcgW1dvcmtlci0zODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTIgMTk6NDI6NTcsMTg4IFtXb3JrZXItNDE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzCisyMDIwLTA2LTEyIDE5OjQyOjU3LDE4OSBbV29ya2VyLTQxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTIgMTk6NDM6MDksNTgzIFtXb3JrZXItMzk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xMiAxOTo0MzowOSw1ODMgW1dvcmtlci0zOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTIgMTk6NDQ6NTMsMTgwIFtXb3JrZXItMzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2UKKzIwMjAtMDYtMTIgMTk6NDQ6NTMsMTgwIFtXb3JrZXItMzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTIgMTk6NDU6MDcsMDM1IFtXb3JrZXItMzY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xMiAxOTo0NTowNywwMzUgW1dvcmtlci0zNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTIgMTk6NDU6MzEsNTAzIFtXb3JrZXItMzY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xMiAxOTo0NTozMSw1MTYgW1dvcmtlci0zNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTIgMTk6NDU6MzEsNTE3IFtXb3JrZXItMzY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xMiAxOTo0NTozMSw1MTkgW1dvcmtlci0zNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTIgMTk6NDU6MzEsNzIxIFtXb3JrZXItMzY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xMiAxOTo0NTozMSw3MjIgW1dvcmtlci0zNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xMiAxOTo0NTozMSw3MjUgW1dvcmtlci0zNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTEyIDE5OjQ1OjMxLDcyNiBbV29ya2VyLTM2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTEyIDE5OjQ1OjMxLDk1MyBbV29ya2VyLTM2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2VccG9tLnhtbC4KKzIwMjAtMDYtMTIgMTk6NDU6MzIsMjg4IFtXb3JrZXItMzY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xMiAxOTo0NTozMiwyOTAgW1dvcmtlci0zNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTEyIDE5OjQ1OjMyLDI5MSBbV29ya2VyLTM2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTIgMTk6NDU6MzIsMjkzIFtXb3JrZXItMzY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xMiAxOTo0NTo0Miw0MzEgW1dvcmtlci0zNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTEyIDE5OjQ1OjQyLDQzMyBbV29ya2VyLTM2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xMiAxOTo0NTo0Miw0MzQgW1dvcmtlci0zNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTEyIDE5OjQ1OjQyLDQzNyBbV29ya2VyLTM2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xMiAxOTo0NTo0Miw1OTggW1dvcmtlci0zNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTEyIDE5OjQ1OjQyLDYwMCBbV29ya2VyLTM2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTEyIDE5OjQ1OjQyLDYwMSBbV29ya2VyLTM2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTIgMTk6NDU6NDIsNjAzIFtXb3JrZXItMzY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTIgMTk6NDU6NTAsMzA3IFtXb3JrZXItMzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xMiAxOTo0NTo1MCwzMDcgW1dvcmtlci0zNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTUgMDk6Mjc6MDgsNjczIFtXb3JrZXItNTogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjAtMDYtMTUgMjE6MzA6MDgsNDMyIFtXb3JrZXItMTIzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTUgMjE6MzA6MDgsNDM0IFtXb3JrZXItMTIzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xNSAyMjowNDo1Niw2MDMgW1dvcmtlci0xMjY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xNSAyMjowNDo1Niw2MDMgW1dvcmtlci0xMjY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE1IDIyOjA2OjA2LDAzNiBbV29ya2VyLTEyNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE1IDIyOjA2OjA2LDAzOSBbV29ya2VyLTEyNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNSAyMjowNjowNiwwNDIgW1dvcmtlci0xMjc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNSAyMjowNjowNiwwNDQgW1dvcmtlci0xMjc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTUgMjI6MDY6MDcsNzI4IFtXb3JrZXItMTI3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTUgMjI6MDY6MDcsNzMwIFtXb3JrZXItMTI3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTUgMjI6MDY6MDcsNzMyIFtXb3JrZXItMTI3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTUgMjI6MDY6MDcsNzM0IFtXb3JrZXItMTI3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTUgMjI6MDY6MDksMDI2IFtXb3JrZXItMTI3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTUgMjI6MDY6MDksMDI4IFtXb3JrZXItMTI3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNSAyMjowNjowOSwwMzAgW1dvcmtlci0xMjc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNSAyMjowNjowOSwwMzIgW1dvcmtlci0xMjc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE1IDIyOjA2OjA5LDIwNSBbV29ya2VyLTEyNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE1IDIyOjA2OjA5LDIwNyBbV29ya2VyLTEyNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNSAyMjowNjowOSwyMDkgW1dvcmtlci0xMjc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNSAyMjowNjowOSwyMTEgW1dvcmtlci0xMjc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTUgMjI6MDY6MTcsNDE1IFtXb3JrZXItMTI2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTUgMjI6MDY6MTcsNDE1IFtXb3JrZXItMTI2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xNSAyMjoxMzo1OCwwNjIgW1dvcmtlci0xMjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xNSAyMjoxMzo1OCwwNjIgW1dvcmtlci0xMjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE2IDA4OjU3OjUwLDEzMiBbV29ya2VyLTI6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTA2LTE2IDA4OjU3OjUxLDY2NCBbV29ya2VyLTE6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNiAwOToyODo0OSwyNjYgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDA5OjI4OjQ5LDI2OCBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE2IDA5OjI4OjQ5LDI3MCBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMDk6Mjg6NDksMjcyIFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMDk6Mjg6NTIsMzk1IFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAwOToyODo1MiwzOTcgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE2IDA5OjI4OjUyLDM5OSBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMDk6Mjg6NTIsNDAxIFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNiAwOToyODo1MywyMTMgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDA5OjI4OjUzLDIxNSBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNiAwOToyODo1MywyMTcgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDA5OjI4OjUzLDIxOCBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNiAwOToyODo1NSw3MTEgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA2LTE2IDA5OjI4OjU1LDc2NyBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFRoZSBQT00gZm9yIGRlLmtvcmFwLnNlcnZpY2VzOkpzb25UcmF2ZXJzZTpqYXI6MC4xLVNOQVBTSE9UIGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA2LTE2IDA5OjI4OjU1LDc3MyBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNiAwOToyODo1Niw1OTIgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBUaGUgUE9NIGZvciBkZS5rb3JhcC5zZXJ2aWNlczpKc29uVHJhdmVyc2U6amFyOjAuMS1TTkFQU0hPVCBpcyBtaXNzaW5nLCBubyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorMjAyMC0wNi0xNiAwOToyODo1Niw1OTYgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTYgMDk6Mjg6NTYsODk5IFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAwOToyODo1Niw5MDAgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNiAwOToyODo1Niw5MDIgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDA5OjI4OjU2LDkwNCBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE2IDA5OjI4OjU2LDkwNSBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIHdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTYgMDk6Mjg6NTYsOTA2IFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTYgMDk6Mjg6NTYsOTYwIFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAwOToyODo1Nyw5ODkgW1dvcmtlci0xNDogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBUaGUgUE9NIGZvciBkZS5rb3JhcC5zZXJ2aWNlczpKc29uVHJhdmVyc2U6amFyOjAuMS1TTkFQU0hPVCBpcyBtaXNzaW5nLCBubyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorMjAyMC0wNi0xNiAwOToyODo1Nyw5OTMgW1dvcmtlci0xNDogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTYgMDk6Mjg6NTgsMDE3IFtXb3JrZXItMTQ6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIEVSUk9SIG8uZS5tLmouaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iIC0gQ291bGQgbm90IGRvd25sb2FkIHNvdXJjZXMgZm9yIGRlLmtvcmFwLnNlcnZpY2VzOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1QKK29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOiBDb3VsZCBub3QgcmVzb2x2ZSBhcnRpZmFjdCBkZS5rb3JhcC5zZXJ2aWNlczpKc29uVHJhdmVyc2U6amFyOnNvdXJjZXM6MC4xLVNOQVBTSE9UCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YTo3NzYpIH5bb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YToxKSB+W29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxMTIpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjc0MykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjcyMCkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI3OSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRBdHRhY2htZW50cyhEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNTQpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkTWF2ZW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjIxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTYxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM3KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE1MSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLmV4ZWN1dGUoTWF2ZW5JbXBsLmphdmE6MTM1NSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzUpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCisyMDIwLTA2LTE2IDA5OjMxOjM3LDkxOSBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMDk6MzE6MzcsOTIwIFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE2IDA5OjMxOjM3LDkyMiBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMDk6MzE6MzcsOTI0IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE2IDA5OjMxOjM4LDY3MSBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDYtMTYgMDk6MzE6MzgsNzMyIFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3IgZGUua29yYXAuc2VydmljZXM6SnNvblRyYXZlcnNlOmphcjowLjEtU05BUFNIT1QgaXMgbWlzc2luZywgbm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKzIwMjAtMDYtMTYgMDk6MzE6MzgsNzM4IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE2IDA5OjMxOjM4LDk0MSBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMDk6MzE6MzgsOTQ1IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMDk6MzE6MzgsOTQ3IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAwOTozMTozOCw5NDkgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNiAwOTozMTozOCw5NTAgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiB3Zm9ybVNlcnZpY2VzCisyMDIwLTA2LTE2IDA5OjMxOjM4LDk1MCBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA2LTE2IDA5OjMxOjM4LDk1NiBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMDk6MzE6MzksOTQzIFtXb3JrZXItMjE6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3IgZGUua29yYXAuc2VydmljZXM6SnNvblRyYXZlcnNlOmphcjowLjEtU05BUFNIT1QgaXMgbWlzc2luZywgbm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKzIwMjAtMDYtMTYgMDk6MzE6MzksOTUzIFtXb3JrZXItMjE6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE2IDA5OjMxOjM5LDk3NyBbV29ya2VyLTIxOiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBFUlJPUiBvLmUubS5qLmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiAtIENvdWxkIG5vdCBkb3dubG9hZCBqYXZhZG9jIGZvciBkZS5rb3JhcC5zZXJ2aWNlczpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UCitvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjogQ291bGQgbm90IHJlc29sdmUgYXJ0aWZhY3QgZGUua29yYXAuc2VydmljZXM6SnNvblRyYXZlcnNlOmphcjpqYXZhZG9jOjAuMS1TTkFQU0hPVAorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6Nzc2KSB+W29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6MSkgfltvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTEyKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3NDMpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3MjApIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNzkpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkQXR0YWNobWVudHMoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjY1KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZE1hdmVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjIyMSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjE2MSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNykgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNTEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5leGVjdXRlKE1hdmVuSW1wbC5qYXZhOjEzNTUpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM1KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorMjAyMC0wNi0xNiAwOTozMjowMSw3MTkgW1dvcmtlci0yMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE2IDA5OjMyOjAxLDcxOSBbV29ya2VyLTIxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xNiAwOTozMzoxMSw5MDEgW1dvcmtlci0yMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZQorMjAyMC0wNi0xNiAwOTozMzoxMSw5MDEgW1dvcmtlci0yMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xNiAwOTozMzozMSw5MzAgW1dvcmtlci0xODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDA5OjMzOjMxLDkzMiBbV29ya2VyLTE4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMDk6MzM6MzEsOTM0IFtXb3JrZXItMTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAwOTozMzozMSw5MzYgW1dvcmtlci0xODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE2IDA5OjMzOjQ2LDgyMyBbV29ya2VyLTIwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTYgMDk6MzM6NDYsODIzIFtXb3JrZXItMjA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE2IDA5OjM3OjEzLDYyOSBbV29ya2VyLTE0OiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA2LTE2IDA5OjM3OjEzLDY4NiBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMDk6Mzc6MTMsNjg4IFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMDk6Mzc6MTMsNjg5IFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAwOTozNzoxMyw2OTEgW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNiAwOTozNzoxMyw2OTIgW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiB3Zm9ybVNlcnZpY2VzCisyMDIwLTA2LTE2IDA5OjM3OjEzLDY5MiBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA2LTE2IDA5OjM3OjEzLDcwMyBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMDk6Mzc6MzMsNzY1IFtXb3JrZXItMTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xNiAwOTozNzozMyw3NjUgW1dvcmtlci0xNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTYgMDk6Mzg6MjgsODQzIFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xNiAwOTozODoyOCw5MDUgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTYgMDk6Mzg6MzksNDM2IFtXb3JrZXItMjI6IExvYWRpbmcgcG9tLnhtbF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTYgMDk6Mzg6NDAsMDYyIFtXb3JrZXItMjI6IExvYWRpbmcgcG9tLnhtbF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2RlL2tvcmFwL3NlcnZpY2VzL0pzb25UcmF2ZXJzZS8vSnNvblRyYXZlcnNlLS5wb20KKzIwMjAtMDYtMTYgMDk6Mzg6NDAsMDc1IFtXb3JrZXItMjI6IExvYWRpbmcgcG9tLnhtbF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBUaGUgUE9NIGZvciBkZS5rb3JhcC5zZXJ2aWNlczpKc29uVHJhdmVyc2U6amFyOiBpcyBtaXNzaW5nLCBubyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorMjAyMC0wNi0xNiAwOTo0MTozMSwyODkgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA2LTE2IDA5OjQxOjMxLDMzOSBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFRoZSBQT00gZm9yIGRlLmtvcmFwLnNlcnZpY2VzOkpzb25UcmF2ZXJzZTpqYXI6MC4xLVNOQVBTSE9UIGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA2LTE2IDA5OjQxOjMxLDM0MyBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNiAwOTo0MTozMSw0NjMgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDA5OjQxOjMxLDQ2NCBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE2IDA5OjQxOjMxLDQ2NiBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMDk6NDE6MzEsNDY4IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMDk6NDI6NDksODYyIFttYWluXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFRoZSBQT00gZm9yIGRlLmtvcmFwLnNlcnZpY2VzOkpzb25UcmF2ZXJzZTpqYXI6MC4xLVNOQVBTSE9UIGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA2LTE2IDA5OjQyOjQ5LDg2NyBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTYgMDk6NDM6MDQsNDM5IFtXb3JrZXItMTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xNiAwOTo0MzowNCw0OTIgW1dvcmtlci0xODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTYgMDk6NDM6MDQsNDk0IFtXb3JrZXItMTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTYgMDk6NDM6MDQsNTk4IFtXb3JrZXItMTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAwOTo0MzowNCw2MDAgW1dvcmtlci0xODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNiAwOTo0MzowNCw2MDIgW1dvcmtlci0xODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDA5OjQzOjA0LDYwNCBbV29ya2VyLTE4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE2IDA5OjQzOjE1LDMxNyBbV29ya2VyLTIxOiBMb2FkaW5nIHBvbS54bWxdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE2IDA5OjQzOjE1LDMxOSBbV29ya2VyLTIxOiBMb2FkaW5nIHBvbS54bWxdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTYgMDk6NDM6MjcsNTIxIFtXb3JrZXItMjE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xNiAwOTo0MzoyNyw1MjIgW1dvcmtlci0yMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTYgMDk6NTI6MjksNzkyIFtXb3JrZXItMTg6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE2IDA5OjUyOjI5LDc5MyBbV29ya2VyLTE4OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE2IDA5OjUyOjI5LDc5MyBbV29ya2VyLTE4OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTYgMDk6NTI6MjksNzk0IFtXb3JrZXItMTg6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvd2Zvcm1TZXJ2aWNlSmFyOiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3dmb3JtU2VydmljZUphci90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNiAwOTo1NjoyNiw1NDMgW1dvcmtlci0yMDogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xNiAwOTo1NjoyNiw2MDUgW1dvcmtlci0yMDogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE2IDA5OjU2OjI2LDYwNiBbV29ya2VyLTIwOiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNiAwOTo1NjoyNiw5NTEgW1dvcmtlci0yMDogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE2IDA5OjU2OjI2LDk1MSBbV29ya2VyLTIwOiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNiAwOTo1NjoyNywyMDUgW1dvcmtlci0yMDogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xNiAwOTo1NjoyNyw4MTggW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDA5OjU2OjI3LDgyMSBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMDk6NTY6MjcsODIzIFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAwOTo1NjoyNyw4MjcgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE2IDA5OjU2OjI4LDAwMSBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNiAwOTo1NjoyOCwwMDIgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNiAwOTo1NjoyOCwwMDkgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDA5OjU2OjI4LDAyMCBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE2IDA5OjU2OjI4LDAyMSBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMDk6NTY6MjgsMDM5IFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMDk6NTY6MjgsMDM5IFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xNiAwOTo1NjoyOCwwMzkgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xNiAwOTo1NjoyOCwwNDUgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDA5OjU3OjEyLDQwMyBbV29ya2VyLTIyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTYgMDk6NTc6MTIsNDAzIFtXb3JrZXItMjI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE2IDEwOjA0OjA3LDgxNCBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDYtMTYgMTA6MDQ6MDcsODU1IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE2IDEwOjA0OjA3LDg1NSBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE2IDEwOjA0OjA3LDg1NSBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTYgMTA6MDQ6MDgsMTg3IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE2IDEwOjA0OjA4LDE4OCBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE2IDEwOjA0OjA4LDE4OCBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTYgMTA6MDQ6MDgsOTU1IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxMDowNDowOCw5NTggW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNiAxMDowNDowOCw5NTkgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDEwOjA0OjA4LDk2MiBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE2IDEwOjA0OjA4LDk2MiBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIHdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTYgMTA6MDQ6MDgsOTYzIFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTYgMTA6MDQ6MDgsOTY4IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxMDowNDoxNyw5OTYgW1dvcmtlci0yMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE2IDEwOjA0OjE3LDk5NyBbV29ya2VyLTIxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xNiAxMTowODo1MCw1NjUgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDExOjA4OjUwLDU3NiBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNiAxMTowODo1MCw1NzggW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDExOjA4OjUwLDU3OSBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNiAxMTowODo1MCw3NzQgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTYgMTE6MDg6NTAsNzc1IFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTYgMTE6MDg6NTAsNzc1IFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNiAxMTowODo1MCw3NzkgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDExOjA4OjUwLDc4MSBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE2IDExOjA4OjUwLDc4MyBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMTE6MDg6NTAsNzg0IFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMTE6MDg6NTYsNjM3IFtXb3JrZXItMjk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xNiAxMTowODo1Niw2MzcgW1dvcmtlci0yOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTYgMTE6MTQ6MjUsNjAwIFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxMToxNDoyNSw2MDIgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMTE6MTQ6MjUsNjA0IFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxMToxNDoyNSw2MDYgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMTE6MTQ6MjUsNjY1IFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxMToxNDoyNSw2NjcgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNiAxMToxNDoyNSw2NjkgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDExOjE0OjI1LDY3MSBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE2IDExOjE0OjMxLDU0MiBbV29ya2VyLTMxOiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA2LTE2IDExOjE0OjMxLDYyMSBbV29ya2VyLTI4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMTE6MTQ6MzEsNjI0IFtXb3JrZXItMjg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMTE6MTQ6MzEsNjI1IFtXb3JrZXItMjg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxMToxNDozMSw2MjkgW1dvcmtlci0yODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNiAxMToxNDozMSw2MzAgW1dvcmtlci0yODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiB3Zm9ybVNlcnZpY2VzCisyMDIwLTA2LTE2IDExOjE0OjMxLDYzMCBbV29ya2VyLTI4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA2LTE2IDExOjE0OjMxLDY0MiBbV29ya2VyLTI4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMTE6MTQ6NDEsNzY5IFtXb3JrZXItMjk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xNiAxMToxNDo0MSw3NzAgW1dvcmtlci0yOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTYgMTE6NTg6NTEsNzAwIFtXb3JrZXItMjg6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTA2LTE2IDExOjU4OjUxLDczOCBbV29ya2VyLTI4OiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA2LTE2IDExOjU4OjUxLDk5MCBbV29ya2VyLTMyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMTE6NTg6NTEsOTkxIFtXb3JrZXItMzI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMTE6NTg6NTEsOTkzIFtXb3JrZXItMzI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxMTo1ODo1MSw5OTUgW1dvcmtlci0zMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNiAxMTo1ODo1MSw5OTYgW1dvcmtlci0zMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNi0xNiAxMTo1ODo1MSw5OTYgW1dvcmtlci0zMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDYtMTYgMTE6NTg6NTIsMDA0IFtXb3JrZXItMzI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxMTo1ODo1MiwyNTggW1dvcmtlci0zMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDExOjU4OjUyLDI2MCBbV29ya2VyLTMyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE2IDExOjU4OjUyLDI2MyBbV29ya2VyLTMyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMTE6NTg6NTIsMjY2IFtXb3JrZXItMzI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMTE6NTg6NTIsMjY3IFtXb3JrZXItMzI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xNiAxMTo1ODo1MiwyNjcgW1dvcmtlci0zMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xNiAxMTo1ODo1MiwyNzUgW1dvcmtlci0zMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDExOjU5OjA2LDUwNCBbV29ya2VyLTI4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTYgMTE6NTk6MDYsNTA0IFtXb3JrZXItMjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE2IDEyOjEzOjA1LDg0NiBbV29ya2VyLTI4OiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA2LTE2IDEyOjEzOjA2LDIwNyBbV29ya2VyLTMyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxMjoxMzowNiwyMDkgW1dvcmtlci0zMjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMTI6MTM6MDYsMjExIFtXb3JrZXItMzI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDEyOjEzOjA2LDIxMyBbV29ya2VyLTMyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNiAxMjoxMzowNiwzMTEgW1dvcmtlci0zMjogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMTI6MTM6MDYsMzEzIFtXb3JrZXItMzI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNiAxMjoxMzowNiwzMTQgW1dvcmtlci0zMjogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMTI6MTM6MDYsMzE2IFtXb3JrZXItMzI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNiAxMjoxMzowNiwzMTcgW1dvcmtlci0zMjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIHdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTYgMTI6MTM6MDYsMzE3IFtXb3JrZXItMzI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xNiAxMjoxMzowNiwzMjggW1dvcmtlci0zMjogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMTI6MTM6MDYsNzY4IFtXb3JrZXItMzI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6dGVzdHM6MC4xIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xwb20ueG1sLgorMjAyMC0wNi0xNiAxMjoxMzowNiw4MDkgW1dvcmtlci0zMjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE2IDEyOjEzOjA2LDgwOSBbV29ya2VyLTMyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNiAxMjoxMzowNiw4MDkgW1dvcmtlci0zMjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNiAxMjoxMzowNiw4MDkgW1dvcmtlci0zMjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvd2Zvcm1TZXJ2aWNlSmFyOiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3dmb3JtU2VydmljZUphci90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNiAxMjoxMzowNiw5NjAgW1dvcmtlci0zMjogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMTI6MTM6MDYsOTYxIFtXb3JrZXItMzI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNiAxMjoxMzowNiw5NjIgW1dvcmtlci0zMjogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMTI6MTM6MDYsOTY0IFtXb3JrZXItMzI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNiAxMjoxNToxMiwwOTAgW1dvcmtlci0zODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE2IDEyOjE1OjEyLDA5MCBbV29ya2VyLTM4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xNiAxMjoxOToxMCwyMjMgW1dvcmtlci0zMjogQnVpbGQgUHJvamVjdF0gRVJST1Igby5lLm0uYy5pLlVSTENvbm5lY3Rpb25DYWNoZXMgLSBVbmV4cGVjdGVkIFVSTENvbm5lY3Rpb24gZGVmYXVsdFVzZUNhY2hlcyBlbmFibGVkCisyMDIwLTA2LTE2IDEyOjE5OjEwLDIyOCBbV29ya2VyLTMyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMTI6MTk6MTAsMjI5IFtXb3JrZXItMzI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMTI6MTk6MTAsMjMwIFtXb3JrZXItMzI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxMjoxOToxMCwyMzEgW1dvcmtlci0zMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNiAxMjoxOToxNSwzMjUgW1dvcmtlci0zMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE2IDEyOjE5OjE1LDMyNiBbV29ya2VyLTMyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xNiAxMjoyMzoyMCwyMjMgW1dvcmtlci0yODogQnVpbGQgUHJvamVjdF0gRVJST1Igby5lLm0uYy5pLlVSTENvbm5lY3Rpb25DYWNoZXMgLSBVbmV4cGVjdGVkIFVSTENvbm5lY3Rpb24gZGVmYXVsdFVzZUNhY2hlcyBlbmFibGVkCisyMDIwLTA2LTE2IDEyOjIzOjIwLDIyNyBbV29ya2VyLTI4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMTI6MjM6MjAsMjI4IFtXb3JrZXItMjg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMTI6MjM6MjAsMjMwIFtXb3JrZXItMjg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxMjoyMzoyMCwyMzAgW1dvcmtlci0yODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNiAxMjoyMzoyNywzMTYgW1dvcmtlci0zMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE2IDEyOjIzOjI3LDMxNyBbV29ya2VyLTMyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xNiAxNToxOTowMSw0MTIgW1dvcmtlci01NDogQnVpbGQgUHJvamVjdF0gRVJST1Igby5lLm0uYy5pLlVSTENvbm5lY3Rpb25DYWNoZXMgLSBVbmV4cGVjdGVkIFVSTENvbm5lY3Rpb24gZGVmYXVsdFVzZUNhY2hlcyBlbmFibGVkCisyMDIwLTA2LTE2IDE1OjE5OjAxLDQxOCBbV29ya2VyLTU0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMTU6MTk6MDEsNDE5IFtXb3JrZXItNTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMTU6MTk6MDEsNDIwIFtXb3JrZXItNTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxNToxOTowMSw0MjIgW1dvcmtlci01NDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNiAxNToxOTowMSw1MjEgW1dvcmtlci01NDogQnVpbGQgUHJvamVjdF0gRVJST1Igby5lLm0uYy5pLlVSTENvbm5lY3Rpb25DYWNoZXMgLSBVbmV4cGVjdGVkIFVSTENvbm5lY3Rpb24gZGVmYXVsdFVzZUNhY2hlcyBlbmFibGVkCisyMDIwLTA2LTE2IDE1OjE5OjAxLDUyNCBbV29ya2VyLTU0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMTU6MTk6MDEsNTI2IFtXb3JrZXItNTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNiAxNToxOTowMSw1MjggW1dvcmtlci01NDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDE1OjE5OjAxLDUyOSBbV29ya2VyLTU0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMTU6MTk6MDYsNzgzIFtXb3JrZXItNTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2UKKzIwMjAtMDYtMTYgMTU6MTk6MDYsNzg0IFtXb3JrZXItNTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTYgMTU6MTk6MzYsMTM3IFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIEVSUk9SIG8uZS5tLmMuaS5VUkxDb25uZWN0aW9uQ2FjaGVzIC0gVW5leHBlY3RlZCBVUkxDb25uZWN0aW9uIGRlZmF1bHRVc2VDYWNoZXMgZW5hYmxlZAorMjAyMC0wNi0xNiAxNToxOTozNiwxNDAgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDE1OjE5OjM2LDE0MyBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMTU6MTk6MzYsMTQ1IFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxNToxOTozNiwxNDcgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE2IDE1OjE5OjM2LDIzMiBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBFUlJPUiBvLmUubS5jLmkuVVJMQ29ubmVjdGlvbkNhY2hlcyAtIFVuZXhwZWN0ZWQgVVJMQ29ubmVjdGlvbiBkZWZhdWx0VXNlQ2FjaGVzIGVuYWJsZWQKKzIwMjAtMDYtMTYgMTU6MTk6MzYsMjM1IFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxNToxOTozNiwyMzcgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMTU6MTk6MzYsMjM4IFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxNToxOTozNiwyMzkgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMTU6MTk6MzYsMzY0IFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIEVSUk9SIG8uZS5tLmMuaS5VUkxDb25uZWN0aW9uQ2FjaGVzIC0gVW5leHBlY3RlZCBVUkxDb25uZWN0aW9uIGRlZmF1bHRVc2VDYWNoZXMgZW5hYmxlZAorMjAyMC0wNi0xNiAxNToxOTozNiwzNjggW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDE1OjE5OjM2LDM3MCBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE2IDE1OjE5OjM2LDM3MSBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMTU6MTk6MzYsMzczIFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMTU6MjM6MDgsNzA2IFtXb3JrZXItNTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2UKKzIwMjAtMDYtMTYgMTU6MjM6MDgsNzA2IFtXb3JrZXItNTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTYgMTU6MjY6MjcsMjY0IFtXb3JrZXItNTQ6IEJ1aWxkIFByb2plY3RdIEVSUk9SIG8uZS5tLmMuaS5VUkxDb25uZWN0aW9uQ2FjaGVzIC0gVW5leHBlY3RlZCBVUkxDb25uZWN0aW9uIGRlZmF1bHRVc2VDYWNoZXMgZW5hYmxlZAorMjAyMC0wNi0xNiAxNToyNjoyNywyNjggW1dvcmtlci01NDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDE1OjI2OjI3LDI3MSBbV29ya2VyLTU0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMTU6MjY6MjcsMjcyIFtXb3JrZXItNTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxNToyNjoyNywyNzMgW1dvcmtlci01NDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE2IDE1OjMwOjUxLDg4MCBbV29ya2VyLTQ3OiBCdWlsZCBQcm9qZWN0XSBFUlJPUiBvLmUubS5jLmkuVVJMQ29ubmVjdGlvbkNhY2hlcyAtIFVuZXhwZWN0ZWQgVVJMQ29ubmVjdGlvbiBkZWZhdWx0VXNlQ2FjaGVzIGVuYWJsZWQKKzIwMjAtMDYtMTYgMTU6MzA6NTEsODg4IFtXb3JrZXItNDc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxNTozMDo1MSw4ODkgW1dvcmtlci00NzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMTU6MzA6NTEsODkwIFtXb3JrZXItNDc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxNTozMDo1MSw4OTIgW1dvcmtlci00NzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMTU6MzE6MDQsMTA0IFtXb3JrZXItNTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50CisyMDIwLTA2LTE2IDE1OjMxOjA0LDEwNCBbV29ya2VyLTUwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTYgMTU6MzE6MTgsNjYyIFtXb3JrZXItNTQ6IEJ1aWxkIFByb2plY3RdIEVSUk9SIG8uZS5tLmMuaS5VUkxDb25uZWN0aW9uQ2FjaGVzIC0gVW5leHBlY3RlZCBVUkxDb25uZWN0aW9uIGRlZmF1bHRVc2VDYWNoZXMgZW5hYmxlZAorMjAyMC0wNi0xNiAxNTozMToxOCw2NjYgW1dvcmtlci01NDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDE1OjMxOjE4LDY2OCBbV29ya2VyLTU0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNiAxNTozMToxOCw2NzEgW1dvcmtlci01NDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDE1OjMxOjE4LDY3MyBbV29ya2VyLTU0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNiAxNTozMToxOCw3MzQgW1dvcmtlci01NDogQnVpbGQgUHJvamVjdF0gRVJST1Igby5lLm0uYy5pLlVSTENvbm5lY3Rpb25DYWNoZXMgLSBVbmV4cGVjdGVkIFVSTENvbm5lY3Rpb24gZGVmYXVsdFVzZUNhY2hlcyBlbmFibGVkCisyMDIwLTA2LTE2IDE1OjMxOjE4LDczNiBbV29ya2VyLTU0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMTU6MzE6MTgsNzM4IFtXb3JrZXItNTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMTU6MzE6MTgsNzM5IFtXb3JrZXItNTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxNTozMToxOCw3NDAgW1dvcmtlci01NDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNiAxNTozMTozNSw0MjcgW1dvcmtlci01MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE2IDE1OjMxOjM1LDQyNyBbV29ya2VyLTUwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xNyAxODoxMjowOCwwODkgW1dvcmtlci0xMDY6IEJ1aWxkIFByb2plY3RdIEVSUk9SIG8uZS5tLmMuaS5VUkxDb25uZWN0aW9uQ2FjaGVzIC0gVW5leHBlY3RlZCBVUkxDb25uZWN0aW9uIGRlZmF1bHRVc2VDYWNoZXMgZW5hYmxlZAorMjAyMC0wNi0xNyAxODoxMjowOCwwOTcgW1dvcmtlci0xMDY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAxODoxMjowOCwwOTkgW1dvcmtlci0xMDY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNyAxODoxMjowOCwxMDEgW1dvcmtlci0xMDY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAxODoxMjowOCwxMDIgW1dvcmtlci0xMDY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNyAxODoxMjowOCwyMjEgW1dvcmtlci0xMDY6IEJ1aWxkIFByb2plY3RdIEVSUk9SIG8uZS5tLmMuaS5VUkxDb25uZWN0aW9uQ2FjaGVzIC0gVW5leHBlY3RlZCBVUkxDb25uZWN0aW9uIGRlZmF1bHRVc2VDYWNoZXMgZW5hYmxlZAorMjAyMC0wNi0xNyAxODoxMjowOCwyMjMgW1dvcmtlci0xMDY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAxODoxMjowOCwyMjQgW1dvcmtlci0xMDY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTcgMTg6MTI6MDgsMjI1IFtXb3JrZXItMTA2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMTg6MTI6MDgsMjI4IFtXb3JrZXItMTA2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE3IDE4OjEyOjA5LDI3NCBbV29ya2VyLTEwNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNyAxODoxMjowOSwyNzQgW1dvcmtlci0xMDY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNyAxODoxMjowOSwyNzQgW1dvcmtlci0xMDY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE3IDE4OjEyOjA5LDI3NSBbV29ya2VyLTEwNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3dmb3JtU2VydmljZUphcjogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC93Zm9ybVNlcnZpY2VKYXIvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTcgMTg6MTI6MDksMjc3IFtXb3JrZXItMTA2OiBCdWlsZCBQcm9qZWN0XSBFUlJPUiBvLmUubS5jLmkuVVJMQ29ubmVjdGlvbkNhY2hlcyAtIFVuZXhwZWN0ZWQgVVJMQ29ubmVjdGlvbiBkZWZhdWx0VXNlQ2FjaGVzIGVuYWJsZWQKKzIwMjAtMDYtMTcgMTg6MTI6MDksMjgxIFtXb3JrZXItMTA2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMTg6MTI6MDksMjgzIFtXb3JrZXItMTA2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE3IDE4OjEyOjA5LDI4NCBbV29ya2VyLTEwNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDE4OjEyOjA5LDI4NiBbV29ya2VyLTEwNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNyAxODoxMjoxNiw0MTQgW1dvcmtlci0xMDc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNi0xNyAxODoxMjoxNiw0MTQgW1dvcmtlci0xMDc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE3IDE4OjEyOjU4LDk5MyBbV29ya2VyLTEwNjogTGF1bmNoaW5nIFRlc3RKc29uXSBFUlJPUiBvLmUubS5jLmkuVVJMQ29ubmVjdGlvbkNhY2hlcyAtIFVuZXhwZWN0ZWQgVVJMQ29ubmVjdGlvbiBkZWZhdWx0VXNlQ2FjaGVzIGVuYWJsZWQKKzIwMjAtMDYtMTcgMTg6MTI6NTgsOTk5IFtXb3JrZXItMTA2OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAxODoxMjo1OSwwMDEgW1dvcmtlci0xMDY6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNyAxODoxMjo1OSwwMDIgW1dvcmtlci0xMDY6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDE4OjEyOjU5LDAwNSBbV29ya2VyLTEwNjogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE3IDE4OjEzOjA1LDMzMyBbV29ya2VyLTEwNjogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNyAxODoxMzowNSwzMzYgW1dvcmtlci0xMDY6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNyAxODoxMzowNSwzMzkgW1dvcmtlci0xMDY6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE3IDE4OjEzOjA1LDMzOSBbV29ya2VyLTEwNjogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvd2Zvcm1TZXJ2aWNlSmFyOiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC93Zm9ybVNlcnZpY2VKYXIvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTcgMTg6MTM6MDUsMzU5IFtXb3JrZXItMTA2OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE3IDE4OjEzOjA1LDM2MSBbV29ya2VyLTEwNjogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE3IDE4OjEzOjA1LDM2NSBbV29ya2VyLTEwNjogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTcgMTg6MTM6MDUsMzY1IFtXb3JrZXItMTA2OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC93Zm9ybVNlcnZpY2VKYXI6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL3dmb3JtU2VydmljZUphci90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNyAxODoxNDoxOSwxMTcgW1dvcmtlci0xMDc6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMC0wNi0xNyAxODoxNzoyNyw1ODUgW1dvcmtlci0xMDE6IEJ1aWxkIFByb2plY3RdIEVSUk9SIG8uZS5tLmMuaS5VUkxDb25uZWN0aW9uQ2FjaGVzIC0gVW5leHBlY3RlZCBVUkxDb25uZWN0aW9uIGRlZmF1bHRVc2VDYWNoZXMgZW5hYmxlZAorMjAyMC0wNi0xNyAxODoxNzoyNyw1OTAgW1dvcmtlci0xMDE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAxODoxNzoyNyw1OTMgW1dvcmtlci0xMDE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTcgMTg6MTc6MjcsNTk0IFtXb3JrZXItMTAxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMTg6MTc6MjcsNTk2IFtXb3JrZXItMTAxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE3IDE4OjE3OjM0LDMzNyBbV29ya2VyLTEwMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE3IDE4OjE3OjM0LDMzOCBbV29ya2VyLTEwMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTcgMTg6NTY6NDEsNDg4IFtXb3JrZXItMTExOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTcgMTg6NTY6NDEsNDg4IFtXb3JrZXItMTExOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xNyAxOTowMDo0Myw1MTUgW1dvcmtlci0xMTY6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTcgMTk6MDA6NDMsNjI5IFtXb3JrZXItMTExOiBCdWlsZGluZyBXb3Jrc3BhY2VdIEVSUk9SIG8uZS5tLmMuaS5VUkxDb25uZWN0aW9uQ2FjaGVzIC0gVW5leHBlY3RlZCBVUkxDb25uZWN0aW9uIGRlZmF1bHRVc2VDYWNoZXMgZW5hYmxlZAorMjAyMC0wNi0xNyAxOTowMDo0Myw2MzMgW1dvcmtlci0xMTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDE5OjAwOjQzLDYzNSBbV29ya2VyLTExMTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNyAxOTowMDo0Myw2MzcgW1dvcmtlci0xMTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDE5OjAwOjQzLDYzOSBbV29ya2VyLTExMTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNyAxOTowMDo0Myw5NDEgW1dvcmtlci0xMTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gRVJST1Igby5lLm0uYy5pLlVSTENvbm5lY3Rpb25DYWNoZXMgLSBVbmV4cGVjdGVkIFVSTENvbm5lY3Rpb24gZGVmYXVsdFVzZUNhY2hlcyBlbmFibGVkCisyMDIwLTA2LTE3IDE5OjAwOjQzLDk0NCBbV29ya2VyLTExMTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMTk6MDA6NDMsOTQ2IFtXb3JrZXItMTExOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNyAxOTowMDo0Myw5NDggW1dvcmtlci0xMTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDE5OjAwOjQzLDk1MCBbV29ya2VyLTExMTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTcgMTk6MDA6NDQsMDUxIFtXb3JrZXItMTExOiBCdWlsZGluZyBXb3Jrc3BhY2VdIEVSUk9SIG8uZS5tLmMuaS5VUkxDb25uZWN0aW9uQ2FjaGVzIC0gVW5leHBlY3RlZCBVUkxDb25uZWN0aW9uIGRlZmF1bHRVc2VDYWNoZXMgZW5hYmxlZAorMjAyMC0wNi0xNyAxOTowMDo0NCwwNjggW1dvcmtlci0xMTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDE5OjAwOjQ0LDA4OSBbV29ya2VyLTExMTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE3IDE5OjAwOjQ0LDA5MyBbV29ya2VyLTExMTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMTk6MDA6NDQsMDk3IFtXb3JrZXItMTExOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTcgMTk6MDA6NDQsMDk3IFtXb3JrZXItMTExOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xNyAxOTowMDo0NCwwOTggW1dvcmtlci0xMTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xNyAxOTowMDo0NCwyMzkgW1dvcmtlci0xMTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDE5OjAwOjQ0LDMwOSBbV29ya2VyLTExMTogQnVpbGRpbmcgV29ya3NwYWNlXSBFUlJPUiBvLmUubS5jLmkuVVJMQ29ubmVjdGlvbkNhY2hlcyAtIFVuZXhwZWN0ZWQgVVJMQ29ubmVjdGlvbiBkZWZhdWx0VXNlQ2FjaGVzIGVuYWJsZWQKKzIwMjAtMDYtMTcgMTk6MDA6NDQsMzEyIFtXb3JrZXItMTExOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAxOTowMDo0NCwzMTUgW1dvcmtlci0xMTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNyAxOTowMDo0NCwzMTYgW1dvcmtlci0xMTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDE5OjAwOjQ0LDMxOCBbV29ya2VyLTExMTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE3IDE5OjExOjUxLDQ5MCBbV29ya2VyLTExNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE3IDE5OjExOjUxLDQ5MSBbV29ya2VyLTExNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTcgMTk6MTI6MTUsNjQ4IFtXb3JrZXItMTE1OiBCdWlsZCBQcm9qZWN0XSBFUlJPUiBvLmUubS5jLmkuVVJMQ29ubmVjdGlvbkNhY2hlcyAtIFVuZXhwZWN0ZWQgVVJMQ29ubmVjdGlvbiBkZWZhdWx0VXNlQ2FjaGVzIGVuYWJsZWQKKzIwMjAtMDYtMTcgMTk6MTI6MTUsNjUzIFtXb3JrZXItMTE1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMTk6MTI6MTUsNjU1IFtXb3JrZXItMTE1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE3IDE5OjEyOjE1LDY1NiBbV29ya2VyLTExNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDE5OjEyOjE1LDY1OCBbV29ya2VyLTExNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNyAxOToxMjoyNSwxMjIgW1dvcmtlci0xMTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xNyAxOToxMjoyNSwxMjIgW1dvcmtlci0xMTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE3IDIwOjA1OjE4LDE5MSBbV29ya2VyLTI6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgb3V0LW9mLWRhdGUuIFRyeWluZyB0byB1cGRhdGUuCisyMDIwLTA2LTE3IDIwOjA1OjU4LDMxMyBbV29ya2VyLTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xNyAyMDowNTo1OCwzMTUgW1dvcmtlci04OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xNyAyMDowNjoyMCwyNDggW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNyAyMDowNjoyMCwyNDkgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE3IDIwOjA2OjIwLDI1MCBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNyAyMDowNjoyMSwzOTMgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6MDY6MjEsMzk4IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNyAyMDowNjoyMSw0MDMgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6MDY6MjEsNDA1IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNyAyMDowNjoyOCw4MTAgW1dvcmtlci0xMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE3IDIwOjA2OjI4LDgxMCBbV29ya2VyLTExOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xNyAyMDoxMDo1Nyw0MzUgW1dvcmtlci01OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDYtMTcgMjA6MTA6NTgsNDA3IFtXb3JrZXItNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDIwOjEwOjU4LDQwOSBbV29ya2VyLTU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTcgMjA6MTA6NTgsNDE1IFtXb3JrZXItNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDIwOjEwOjU4LDQxOCBbV29ya2VyLTU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTcgMjA6MTE6MTMsODI0IFtXb3JrZXItODogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xNyAyMDoxMToxNCwyMTEgW1dvcmtlci0xMzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6MTE6MTQsMjI0IFtXb3JrZXItMTM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNyAyMDoxMToxNCwyMjYgW1dvcmtlci0xMzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6MTE6MTQsMjY0IFtXb3JrZXItMTM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNyAyMDoxMToxNCwyNjggW1dvcmtlci0xMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTcgMjA6MTE6MTQsMjY4IFtXb3JrZXItMTM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xNyAyMDoxMToxNCwzMjMgW1dvcmtlci0xMzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6MTE6MTUsMDAzIFtXb3JrZXItMTM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDIwOjExOjE1LDAxOSBbV29ya2VyLTEzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNyAyMDoxMToxNSwwMjAgW1dvcmtlci0xMzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6MTE6MTUsMDIzIFtXb3JrZXItMTM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE3IDIwOjExOjE1LDUzMiBbV29ya2VyLTEzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAyMDoxMToxNSw1NDAgW1dvcmtlci0xMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNyAyMDoxMToxNSw1NDIgW1dvcmtlci0xMzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6MTE6MTUsNTQ0IFtXb3JrZXItMTM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTcgMjA6MTE6MTYsMTE1IFtXb3JrZXItMTM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDIwOjExOjE2LDEyMSBbV29ya2VyLTEzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNyAyMDoxMToxNiwxMjMgW1dvcmtlci0xMzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6MTE6MTYsMTMxIFtXb3JrZXItMTM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE3IDIwOjExOjE2LDIwMSBbV29ya2VyLTEzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAyMDoxMToxNiwyMDMgW1dvcmtlci0xMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE3IDIwOjExOjE2LDIwNSBbV29ya2VyLTEzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAyMDoxMToxNiwyMDcgW1dvcmtlci0xMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE3IDIwOjE1OjM3LDQ2NSBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDYtMTcgMjA6MTU6MzcsNTM4IFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3IgZGUua29yYXAuc2VydmljZXM6SnNvblRyYXZlcnNlOmphcjowLjEtU05BUFNIT1QgaXMgbWlzc2luZywgbm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKzIwMjAtMDYtMTcgMjA6MTU6MzcsNjk5IFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3IgZGUua29yYXAuc2VydmljZXM6SnNvblRyYXZlcnNlOmphcjowLjEtU05BUFNIT1QgaXMgbWlzc2luZywgbm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKzIwMjAtMDYtMTcgMjA6MTU6MzcsODcxIFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAyMDoxNTozNyw4ODYgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNyAyMDoxNTozNyw4ODggW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDIwOjE1OjM3LDg5OCBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE3IDIwOjE1OjM3LDg5OSBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTcgMjA6MTU6MzcsODk5IFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTcgMjA6MTU6MzcsOTI4IFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAyMDoxNTozNyw5NjIgW1dvcmtlci0xNDogTG9hZGluZyBwb20ueG1sXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFRoZSBQT00gZm9yIGRlLmtvcmFwLnNlcnZpY2VzOkpzb25UcmF2ZXJzZTpqYXI6MC4xLVNOQVBTSE9UIGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA2LTE3IDIwOjE1OjM4LDA2MiBbV29ya2VyLTE0OiBMb2FkaW5nIHBvbS54bWxdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3IgZGUua29yYXAuc2VydmljZXM6SnNvblRyYXZlcnNlOmphcjowLjEtU05BUFNIT1QgaXMgbWlzc2luZywgbm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKzIwMjAtMDYtMTcgMjA6MTc6MjAsNDk1IFtXb3JrZXItMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6R2xlbW1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA2LTE3IDIwOjE3OjIwLDU1NyBbV29ya2VyLTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3IgZGUua29yYXAuc2VydmljZXM6TGVtbWFSZXNwb25zZTpqYXI6c291cmNlczowLjEtU05BUFNIT1QgaXMgbWlzc2luZywgbm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKzIwMjAtMDYtMTcgMjA6MTc6MjAsNjM4IFtXb3JrZXItMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBUaGUgUE9NIGZvciBkZS5rb3JhcC5zZXJ2aWNlczpMZW1tYVJlc3BvbnNlOmphcjpzb3VyY2VzOjAuMS1TTkFQU0hPVCBpcyBtaXNzaW5nLCBubyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorMjAyMC0wNi0xNyAyMDoxNzoyMCw3NjUgW1dvcmtlci0zOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6MTc6MjAsNzc4IFtXb3JrZXItMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNyAyMDoxNzoyMCw3ODAgW1dvcmtlci0zOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6MTc6MjAsNzgzIFtXb3JrZXItMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNyAyMDoxNzoyMCw3ODMgW1dvcmtlci0zOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTcgMjA6MTc6MjAsNzgzIFtXb3JrZXItMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xNyAyMDoxNzoyMCw3ODggW1dvcmtlci0zOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6MTc6MjAsODcyIFtXb3JrZXItMTM6IExvYWRpbmcgcG9tLnhtbF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBUaGUgUE9NIGZvciBkZS5rb3JhcC5zZXJ2aWNlczpMZW1tYVJlc3BvbnNlOmphcjpzb3VyY2VzOjAuMS1TTkFQU0hPVCBpcyBtaXNzaW5nLCBubyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorMjAyMC0wNi0xNyAyMDoxNzoyMCw5ODUgW1dvcmtlci0xMzogTG9hZGluZyBwb20ueG1sXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFRoZSBQT00gZm9yIGRlLmtvcmFwLnNlcnZpY2VzOkxlbW1hUmVzcG9uc2U6amFyOnNvdXJjZXM6MC4xLVNOQVBTSE9UIGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA2LTE3IDIwOjE5OjA1LDI4NCBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDYtMTcgMjA6MTk6MDUsMzQ3IFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3IgZGUua29yYXAuc2VydmljZXM6SnNvblRyYXZlcnNlOmphcjowLjEtU05BUFNIT1QgaXMgbWlzc2luZywgbm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKzIwMjAtMDYtMTcgMjA6MTk6MDUsNDk1IFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAyMDoxOTowNSw1NjggW1dvcmtlci0xMzogTG9hZGluZyBwb20ueG1sXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFRoZSBQT00gZm9yIGRlLmtvcmFwLnNlcnZpY2VzOkpzb25UcmF2ZXJzZTpqYXI6MC4xLVNOQVBTSE9UIGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA2LTE3IDIwOjE5OjA1LDU3OCBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE3IDIwOjE5OjA1LDU4MCBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6MTk6MDUsNjY5IFtXb3JrZXItMTM6IExvYWRpbmcgcG9tLnhtbF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBUaGUgUE9NIGZvciBkZS5rb3JhcC5zZXJ2aWNlczpKc29uVHJhdmVyc2U6amFyOjAuMS1TTkFQU0hPVCBpcyBtaXNzaW5nLCBubyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorMjAyMC0wNi0xNyAyMDoxOTowNSw2NzIgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNyAyMDoxOTowNSw2NzMgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE3IDIwOjE5OjA1LDY3NCBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE3IDIwOjE5OjA1LDY4MCBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6MjA6NTcsNTA2IFtXb3JrZXItMTU6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDYtMTcgMjA6MjA6NTcsNTc2IFtXb3JrZXItMTU6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFRoZSBQT00gZm9yIGRlLmtvcmFwLnNlcnZpY2VzOkpzb25UcmF2ZXJzZTpqYXI6MC4xLVNOQVBTSE9UIGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA2LTE3IDIwOjIwOjU3LDY3NCBbV29ya2VyLTE1OiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE3IDIwOjIwOjU3LDc2MyBbV29ya2VyLTM6IExvYWRpbmcgcG9tLnhtbF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBUaGUgUE9NIGZvciBkZS5rb3JhcC5zZXJ2aWNlczpKc29uVHJhdmVyc2U6amFyOjAuMS1TTkFQU0hPVCBpcyBtaXNzaW5nLCBubyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorMjAyMC0wNi0xNyAyMDoyMDo1Nyw4NDIgW1dvcmtlci0xNDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6MjA6NTcsODY2IFtXb3JrZXItMTQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNyAyMDoyMDo1Nyw4NjggW1dvcmtlci0xNDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6MjA6NTcsODkxIFtXb3JrZXItMTQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNyAyMDoyMDo1Nyw4OTIgW1dvcmtlci0xNDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTcgMjA6MjA6NTcsODkyIFtXb3JrZXItMTQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xNyAyMDoyMDo1Nyw4OTcgW1dvcmtlci0xNDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6MjA6NTcsOTAyIFtXb3JrZXItMzogTG9hZGluZyBwb20ueG1sXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFRoZSBQT00gZm9yIGRlLmtvcmFwLnNlcnZpY2VzOkpzb25UcmF2ZXJzZTpqYXI6MC4xLVNOQVBTSE9UIGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA2LTE3IDIwOjIyOjQ0LDA0NiBbV29ya2VyLTEzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDYtMTcgMjA6MjI6NDQsMTgxIFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xNyAyMDoyMjo0NCwxODEgW1dvcmtlci0xMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xNyAyMDoyMjo0NCw5NTAgW1dvcmtlci0zOiBMb2FkaW5nIHBvbS54bWxdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9kZS9rb3JhcC9qc29uL0pzb25UcmF2ZXJzZS8vSnNvblRyYXZlcnNlLS5wb20KKzIwMjAtMDYtMTcgMjA6MjI6NDQsOTU5IFtXb3JrZXItMzogTG9hZGluZyBwb20ueG1sXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFRoZSBQT00gZm9yIGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOmphcjogaXMgbWlzc2luZywgbm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKzIwMjAtMDYtMTcgMjA6MjQ6MDUsMDk4IFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xNyAyMDoyNDowNSwxNDYgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNyAyMDoyNDowNSwzMTAgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNyAyMDoyNDowNSwzODEgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDIwOjI0OjA1LDM4MyBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE3IDIwOjI0OjA1LDM4NCBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6MjQ6MDUsMzg3IFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTcgMjA6MjQ6MDUsMzg3IFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xNyAyMDoyNDowNSwzODggW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xNyAyMDoyNDowNSwzOTQgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDIwOjI0OjA1LDQ1NiBbV29ya2VyLTEzOiBMb2FkaW5nIHBvbS54bWxdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTcgMjA6MjQ6MzMsNTU3IFtXb3JrZXItMTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xNyAyMDoyNDozMyw2MTAgW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNyAyMDoyNDozMyw3NjcgW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDIwOjI0OjMzLDg0NyBbV29ya2VyLTEyOiBMb2FkaW5nIHBvbS54bWxdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTcgMjA6MjQ6MzMsODc4IFtXb3JrZXItMTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTcgMjA6MjQ6MzMsODgzIFtXb3JrZXItMTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAyMDoyNDozMyw5MTIgW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNyAyMDoyNDozMyw5MTIgW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE3IDIwOjI0OjMzLDkxMyBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE3IDIwOjI0OjMzLDkxOCBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6MzY6MzUsNjU1IFtXb3JrZXItMTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xNyAyMDozNjozNSw2NTUgW1dvcmtlci0xNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTcgMjA6Mzk6MTMsNjUxIFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAyMDozOToxMyw2NTYgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNyAyMDozOToxMyw2NTcgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDIwOjM5OjEzLDY2MSBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE3IDIwOjM5OjI2LDUwMCBbV29ya2VyLTE3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTcgMjA6Mzk6MjYsNTAwIFtXb3JrZXItMTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE3IDIwOjQzOjQyLDQ0NyBbV29ya2VyLTE4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6NDM6NDIsNDYzIFtXb3JrZXItMTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTcgMjA6NDM6NDIsNDY1IFtXb3JrZXItMTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAyMDo0Mzo0Miw0NjggW1dvcmtlci0xODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNyAyMDo0Mzo1Miw0OTcgW1dvcmtlci0xMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE3IDIwOjQzOjUyLDQ5NyBbV29ya2VyLTEzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xNyAyMDo0NjozMyw3MjkgW1dvcmtlci0xMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDIwOjQ2OjMzLDczMiBbV29ya2VyLTEzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE3IDIwOjQ2OjMzLDczNyBbV29ya2VyLTEzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6NDY6MzMsNzQyIFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTcgMjA6NDY6MzksNzU3IFtXb3JrZXItMjA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xNyAyMDo0NjozOSw3NTggW1dvcmtlci0yMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTcgMjA6NTE6MTksNzg0IFtXb3JrZXItMTk6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTcgMjA6NTE6MTksODMwIFtXb3JrZXItMjA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDIwOjUxOjE5LDg1NiBbV29ya2VyLTIwOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTcgMjA6NTE6MTksODU4IFtXb3JrZXItMjA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDIwOjUxOjE5LDg2MCBbV29ya2VyLTIwOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTcgMjA6NTE6MTksODYwIFtXb3JrZXItMjA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE3IDIwOjUxOjE5LDg2MSBbV29ya2VyLTIwOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTcgMjA6NTE6MTksODc1IFtXb3JrZXItMjA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDIwOjUxOjIwLDExMiBbV29ya2VyLTIwOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAyMDo1MToyMCwxMTQgW1dvcmtlci0yMDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTcgMjA6NTE6MjAsMTE2IFtXb3JrZXItMjA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDIwOjUxOjIwLDExOSBbV29ya2VyLTIwOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNyAyMDo1MToyMCwxMzIgW1dvcmtlci0yMDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6NTE6MjAsMTM0IFtXb3JrZXItMjA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNyAyMDo1MToyMCwxMzUgW1dvcmtlci0yMDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6NTE6MjAsMTM3IFtXb3JrZXItMjA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNyAyMDo1MTozNyw3OTEgW1dvcmtlci0yMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE3IDIwOjUxOjM3LDc5MiBbV29ya2VyLTIwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xNyAyMToyOToxMCw0MDYgW1dvcmtlci0yNjogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIwLTA2LTE3IDIxOjI5OjUyLDU3NSBbV29ya2VyLTE0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTcgMjE6Mjk6NTIsNTc1IFtXb3JrZXItMTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE3IDIxOjUzOjU3LDE4OSBbV29ya2VyLTI3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDYtMTcgMjE6NTM6NTcsMjMyIFtXb3JrZXItMjc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3IgZGUua29yYXA6anNvbjpqYXI6MC4xLVNOQVBTSE9UIGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA2LTE3IDIxOjUzOjU3LDMwMyBbV29ya2VyLTI3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFRoZSBQT00gZm9yIGRlLmtvcmFwOmpzb246amFyOjAuMS1TTkFQU0hPVCBpcyBtaXNzaW5nLCBubyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorMjAyMC0wNi0xNyAyMTo1Mzo1NywzNzIgW1dvcmtlci0yNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDIxOjUzOjU3LDM3MyBbV29ya2VyLTI3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE3IDIxOjUzOjU3LDM3NSBbV29ya2VyLTI3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjE6NTM6NTcsMzc2IFtXb3JrZXItMjc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTcgMjE6NTM6NTcsMzc3IFtXb3JrZXItMjc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xNyAyMTo1Mzo1NywzNzcgW1dvcmtlci0yNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xNyAyMTo1Mzo1NywzODMgW1dvcmtlci0yNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDIxOjUzOjU3LDQzMCBbV29ya2VyLTI2OiBMb2FkaW5nIHBvbS54bWxdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3IgZGUua29yYXA6anNvbjpqYXI6MC4xLVNOQVBTSE9UIGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA2LTE3IDIxOjUzOjU3LDQ3MyBbV29ya2VyLTI2OiBMb2FkaW5nIHBvbS54bWxdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3IgZGUua29yYXA6anNvbjpqYXI6MC4xLVNOQVBTSE9UIGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA2LTE3IDIxOjUzOjU4LDQxMiBbV29ya2VyLTE0OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBFUlJPUiBvLmUubS5qLmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiAtIENvdWxkIG5vdCBkb3dubG9hZCBzb3VyY2VzIGZvciBkZS5rb3JhcDpqc29uOjAuMS1TTkFQU0hPVAorb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb246IENvdWxkIG5vdCByZXNvbHZlIGFydGlmYWN0IGRlLmtvcmFwOmpzb246amFyOnNvdXJjZXM6MC4xLVNOQVBTSE9UCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YTo3NzYpIH5bb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YToxKSB+W29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxMTIpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjc0MykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjcyMCkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI3OSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRBdHRhY2htZW50cyhEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNTQpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkTWF2ZW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjIxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTYxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM3KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE1MSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLmV4ZWN1dGUoTWF2ZW5JbXBsLmphdmE6MTM1NSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzUpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCisyMDIwLTA2LTE4IDE0OjU2OjE1LDc2NSBbV29ya2VyLTI6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTA2LTE4IDE0OjU2OjMxLDQ1NSBbV29ya2VyLTU6IFVwZGF0aW5nIE1hdmVuIERlcGVuZGVuY2llc10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHBvbS54bWwuCisyMDIwLTA2LTE4IDE0OjU2OjMyLDI0NCBbV29ya2VyLTU6IFVwZGF0aW5nIE1hdmVuIERlcGVuZGVuY2llc10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6R2xlbW1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA2LTE4IDE0OjU2OjMyLDUzMiBbV29ya2VyLTU6IFVwZGF0aW5nIE1hdmVuIERlcGVuZGVuY2llc10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAxNDo1NjozMiw2ODIgW1dvcmtlci01OiBVcGRhdGluZyBNYXZlbiBEZXBlbmRlbmNpZXNdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxwb20ueG1sLgorMjAyMC0wNi0xOCAxNDo1NjozMywwNTggW1dvcmtlci01OiBVcGRhdGluZyBNYXZlbiBEZXBlbmRlbmNpZXNdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOnRlc3RzOjAuMSBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNccG9tLnhtbC4KKzIwMjAtMDYtMTggMTQ6NTY6MzMsMDc2IFtXb3JrZXItNTogVXBkYXRpbmcgTWF2ZW4gRGVwZW5kZW5jaWVzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDE0OjU2OjMzLDA4NyBbV29ya2VyLTU6IFVwZGF0aW5nIE1hdmVuIERlcGVuZGVuY2llc10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDE0OjU2OjMzLDA4OCBbV29ya2VyLTU6IFVwZGF0aW5nIE1hdmVuIERlcGVuZGVuY2llc10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMTQ6NTY6MzMsMDkwIFtXb3JrZXItNTogVXBkYXRpbmcgTWF2ZW4gRGVwZW5kZW5jaWVzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvd2Zvcm1TZXJ2aWNlSmFyOiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3dmb3JtU2VydmljZUphci90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAxNDo1NjozMywyNTggW1dvcmtlci01OiBVcGRhdGluZyBNYXZlbiBEZXBlbmRlbmNpZXNdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHBvbS54bWwuCisyMDIwLTA2LTE4IDE0OjU2OjMzLDQyMiBbV29ya2VyLTU6IFVwZGF0aW5nIE1hdmVuIERlcGVuZGVuY2llc10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxwb20ueG1sLgorMjAyMC0wNi0xOCAxNDo1NjozMyw1NzQgW1dvcmtlci01OiBVcGRhdGluZyBNYXZlbiBEZXBlbmRlbmNpZXNdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xOCAxNDo1NjozMyw1ODcgW1dvcmtlci01OiBVcGRhdGluZyBNYXZlbiBEZXBlbmRlbmNpZXNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDE0OjU2OjMzLDU4OCBbV29ya2VyLTU6IFVwZGF0aW5nIE1hdmVuIERlcGVuZGVuY2llc10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAxNDo1NjozMyw1ODkgW1dvcmtlci01OiBVcGRhdGluZyBNYXZlbiBEZXBlbmRlbmNpZXNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAxNDo1NjozNCw3MTUgW1dvcmtlci01OiBVcGRhdGluZyBNYXZlbiBEZXBlbmRlbmNpZXNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMTQ6NTY6NDIsNDgwIFtXb3JrZXItNTogVXBkYXRpbmcgTWF2ZW4gRGVwZW5kZW5jaWVzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAxNDo1Njo0Miw0ODEgW1dvcmtlci01OiBVcGRhdGluZyBNYXZlbiBEZXBlbmRlbmNpZXNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMTQ6NTY6NDIsNDgxIFtXb3JrZXItNTogVXBkYXRpbmcgTWF2ZW4gRGVwZW5kZW5jaWVzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMTQ6NTY6NDQsOTEzIFtXb3JrZXItMjogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMTQ6NTY6NDQsOTU2IFtXb3JrZXItMjogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOCAxNDo1Njo0NywxNDkgW1dvcmtlci0xOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAxNDo1Njo0NywxNTEgW1dvcmtlci0xOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE4IDE0OjU2OjQ3LDE1MyBbV29ya2VyLTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDE0OjU2OjQ3LDE1NSBbV29ya2VyLTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMTQ6NTY6NDcsOTQ3IFtXb3JrZXItMTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMTQ6NTY6NDcsOTUwIFtXb3JrZXItMTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMTQ6NTY6NDcsOTU3IFtXb3JrZXItMTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMTQ6NTY6NDcsOTU5IFtXb3JrZXItMTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMTQ6NTY6NDgsMTExIFtXb3JrZXItMTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMTQ6NTY6NDgsMTEzIFtXb3JrZXItMTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE4IDE0OjU2OjQ4LDExNiBbV29ya2VyLTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDE0OjU2OjQ4LDExOCBbV29ya2VyLTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOCAxNDo1Njo0OCwxMTkgW1dvcmtlci0xOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOCAxNDo1Njo0OCwxMjAgW1dvcmtlci0xOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTggMTQ6NTY6NDgsMTYxIFtXb3JrZXItMTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMTQ6NTY6NDgsMzQ3IFtXb3JrZXItMTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMTQ6NTY6NDgsMzQ5IFtXb3JrZXItMTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOCAxNDo1Njo0OCwzNTEgW1dvcmtlci0xOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAxNDo1Njo0OCwzNTIgW1dvcmtlci0xOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE4IDE0OjU2OjQ5LDE5MCBbV29ya2VyLTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDE0OjU2OjQ5LDE5NiBbV29ya2VyLTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE4IDE0OjU2OjQ5LDIxNCBbV29ya2VyLTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDE0OjU2OjQ5LDIxNiBbV29ya2VyLTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE4IDE0OjU2OjQ5LDQwMiBbV29ya2VyLTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMTQ6NTY6NDksNDAzIFtXb3JrZXItMTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDE0OjU2OjQ5LDQwMyBbV29ya2VyLTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDE0OjU2OjQ5LDQxMiBbV29ya2VyLTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDE0OjU2OjQ5LDQxNCBbV29ya2VyLTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOCAxNDo1Njo0OSw0MjAgW1dvcmtlci0xOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAxNDo1Njo0OSw0MjUgW1dvcmtlci0xOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMTQ6NTY6NDksNTcxIFtXb3JrZXItMTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDE0OjU2OjQ5LDU3MiBbV29ya2VyLTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDE0OjU2OjQ5LDU3MiBbV29ya2VyLTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMTQ6NTY6NDksNTczIFtXb3JrZXItMTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvd2Zvcm1TZXJ2aWNlSmFyOiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3dmb3JtU2VydmljZUphci90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAxNDo1Njo0OSw1ODUgW1dvcmtlci0xOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAxNDo1Njo0OSw1ODcgW1dvcmtlci0xOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMTQ6NTY6NDksNTg5IFtXb3JrZXItMTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMTQ6NTY6NDksNTk1IFtXb3JrZXItMTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE4IDE1OjA0OjQwLDg4OCBbV29ya2VyLTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOCAxNTowNDo0MCw4ODkgW1dvcmtlci0yOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOCAxOToyMTo1Myw2NzEgW1dvcmtlci0yODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZQorMjAyMC0wNi0xOCAxOToyMTo1Myw2NzIgW1dvcmtlci0yODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOCAxOToyNjoyMCw1NDIgW1dvcmtlci0zMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDE5OjI2OjIwLDU0MyBbV29ya2VyLTMyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMTk6MjY6MjAsNTQ1IFtXb3JrZXItMzI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAxOToyNjoyMCw1NDggW1dvcmtlci0zMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE4IDE5OjI2OjI3LDExMiBbV29ya2VyLTMzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTggMTk6MjY6MjcsMTEzIFtXb3JrZXItMzM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE4IDE5OjQ0OjA1LDQ2NCBbV29ya2VyLTM3OiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE4IDE5OjQ0OjA1LDUwNyBbV29ya2VyLTMyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAxOTo0NDowNSw1MTggW1dvcmtlci0zMjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE4IDE5OjQ0OjA1LDUyMCBbV29ya2VyLTMyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAxOTo0NDowNSw1MjMgW1dvcmtlci0zMjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE4IDE5OjQ0OjA1LDUyMyBbV29ya2VyLTMyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOCAxOTo0NDowNSw1MjQgW1dvcmtlci0zMjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE4IDE5OjQ0OjA1LDU1NSBbV29ya2VyLTMyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAxOTo0NDoxNyw4MTkgW1dvcmtlci0zOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE4IDE5OjQ0OjE3LDgxOSBbV29ya2VyLTM5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOCAxOTo0NTo0OCwwMjggW1dvcmtlci0zOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNccG9tLnhtbC4KKzIwMjAtMDYtMTggMTk6NDU6NDgsMTk2IFtXb3JrZXItMzk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xOCAxOTo0NTo0OCwyNDIgW1dvcmtlci0zOTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBUaGUgUE9NIGZvciBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczpqYXI6MC4xLVNOQVBTSE9UIGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA2LTE4IDE5OjQ1OjQ4LDI1MSBbV29ya2VyLTM5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDE5OjQ1OjQ4LDI1MiBbV29ya2VyLTM5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMTk6NDU6NDgsMzYyIFtXb3JrZXItMzk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xOCAxOTo0NTo0OCwzNzEgW1dvcmtlci0zOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMTk6NDU6NDgsMzcyIFtXb3JrZXItMzk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMTk6NDU6NDksMDQzIFtXb3JrZXItMzk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAxOTo0NTo0OSwwNDUgW1dvcmtlci0zOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMTk6NDU6NDksMDQ3IFtXb3JrZXItMzk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAxOTo0NTo0OSwwNDggW1dvcmtlci0zOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMTk6NDU6NTAsMTA5IFtXb3JrZXItMzk6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3IgZGUua29yYXAuc2VydmljZXM6VXRpbHM6amFyOjAuMS1TTkFQU0hPVCBpcyBtaXNzaW5nLCBubyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorMjAyMC0wNi0xOCAxOTo0NTo1MCwxMTggW1dvcmtlci0zOTogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAxOTo0NTo1MCwxMTkgW1dvcmtlci0zOTogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDE5OjQ1OjUwLDE0OCBbV29ya2VyLTM5OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBFUlJPUiBvLmUubS5qLmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiAtIENvdWxkIG5vdCBkb3dubG9hZCBzb3VyY2VzIGZvciBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1QKK29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOiBDb3VsZCBub3QgcmVzb2x2ZSBhcnRpZmFjdCBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczpqYXI6c291cmNlczowLjEtU05BUFNIT1QKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjc3NikgfltvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjEpIH5bb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjExMikgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzQzKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzIwKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWQoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6Mjc5KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZEF0dGFjaG1lbnRzKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI1NCkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRNYXZlbihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyMjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxNjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzcpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTUxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwuZXhlY3V0ZShNYXZlbkltcGwuamF2YToxMzU1KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KKzIwMjAtMDYtMTggMTk6NDY6MTAsMjQzIFtXb3JrZXItMzg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzCisyMDIwLTA2LTE4IDE5OjQ2OjEwLDI0MyBbV29ya2VyLTM4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTggMTk6NDc6MDUsMjgzIFtXb3JrZXItNDA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAxOTo0NzowNSwyODUgW1dvcmtlci00MDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMTk6NDc6MDUsMjg3IFtXb3JrZXItNDA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAxOTo0NzowNSwyODggW1dvcmtlci00MDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMTk6NDc6NTUsMzUyIFtXb3JrZXItMTogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjAtMDYtMTggMTk6NDc6NTcsNTczIFtXb3JrZXItNDogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDE5OjQ3OjU3LDU4MiBbV29ya2VyLTQ6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDE5OjQ4OjU1LDIxNyBbV29ya2VyLTE6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlscworMjAyMC0wNi0xOCAxOTo0ODo1NSwyMTggW1dvcmtlci0xOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNi0xOCAxOTo0OTowNiw4ODEgW1dvcmtlci0xMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNccG9tLnhtbC4KKzIwMjAtMDYtMTggMTk6NDk6MDcsNzk2IFtXb3JrZXItMTE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAxOTo0OTowNyw4MDMgW1dvcmtlci0xMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMTk6NDk6MDcsODA1IFtXb3JrZXItMTE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAxOTo0OTowNyw4MDcgW1dvcmtlci0xMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMTk6NDk6MjksNTQyIFtXb3JrZXItMTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzCisyMDIwLTA2LTE4IDE5OjQ5OjI5LDU0MiBbV29ya2VyLTExOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTggMTk6NDk6NTEsMjgxIFtXb3JrZXItMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDE5OjQ5OjUxLDI4NCBbV29ya2VyLTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE4IDE5OjQ5OjUxLDI4NiBbV29ya2VyLTA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAxOTo0OTo1MSwyODggW1dvcmtlci0wOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOCAxOTo0OTo1MSw0MDEgW1dvcmtlci0wOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMTk6NDk6NTEsNDE1IFtXb3JrZXItMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOCAxOTo0OTo1MSw0MTggW1dvcmtlci0wOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMTk6NDk6NTEsNDIxIFtXb3JrZXItMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOCAxOTo0OTo1OSw4NDYgW1dvcmtlci0yOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE4IDE5OjQ5OjU5LDg0NyBbV29ya2VyLTI6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDYtMTggMTk6NTA6MTEsNTI1IFtXb3JrZXItMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDE5OjUwOjExLDUyOCBbV29ya2VyLTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMTk6NTA6MTEsNTI5IFtXb3JrZXItMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDE5OjUwOjExLDUzMSBbV29ya2VyLTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMTk6NTA6MTEsNTMzIFtXb3JrZXItMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE4IDE5OjUwOjExLDUzNCBbV29ya2VyLTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTggMTk6NTA6MTEsNTYwIFtXb3JrZXItMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDE5OjUwOjI1LDI0OSBbV29ya2VyLTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOCAxOTo1MDoyNSwyNTAgW1dvcmtlci0zOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOCAxOTo1MzoxMywzNjkgW1dvcmtlci04OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE4IDE5OjUzOjEzLDM2OSBbV29ya2VyLTg6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDYtMTggMTk6NTM6MjAsNDE0IFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAxOTo1MzoyMCw0MTUgW1dvcmtlci0xMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOCAxOTo1MzoyMCw0MTcgW1dvcmtlci0xMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDE5OjUzOjIwLDQxOSBbV29ya2VyLTEzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE4IDE5OjUzOjIwLDU2NSBbV29ya2VyLTEzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDE5OjUzOjIwLDU2NSBbV29ya2VyLTEzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMTk6NTM6MjAsNTcyIFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAxOTo1MzoyMCw1NzcgW1dvcmtlci0xMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOCAxOTo1MzoyMCw1ODEgW1dvcmtlci0xMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDE5OjUzOjIwLDU4MyBbV29ya2VyLTEzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE4IDE5OjUzOjIwLDU4NCBbV29ya2VyLTEzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIHdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTggMTk6NTM6MjAsNTg0IFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTggMTk6NTM6MjAsNTkzIFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAxOTo1MzoyNiwzMzYgW1dvcmtlci01OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTggMTk6NTM6MjYsMzM2IFtXb3JrZXItNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTggMTk6NTU6NTgsMjA4IFtXb3JrZXItMTM6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDYtMTggMTk6NTU6NTgsMjk4IFtXb3JrZXItMTM6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAxOTo1NTo1OCwyOTkgW1dvcmtlci0xMzogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMTk6NTU6NTgsMzAwIFtXb3JrZXItMTM6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMTk6NTU6NTgsNDgyIFtXb3JrZXItMTM6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAxOTo1NTo1OCw0ODMgW1dvcmtlci0xMzogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMTk6NTU6NTgsNDgzIFtXb3JrZXItMTM6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMTk6NTU6NTgsODE0IFtXb3JrZXItMTM6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTggMTk6NTU6NTksMDExIFtXb3JrZXItNTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAxOTo1NTo1OSwwMTIgW1dvcmtlci01OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMTk6NTU6NTksMDEyIFtXb3JrZXItNTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMTk6NTU6NTksMDE4IFtXb3JrZXItNTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMTk6NTU6NTksMDUyIFtXb3JrZXItNTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE4IDE5OjU1OjU5LDA1NyBbV29ya2VyLTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDE5OjU1OjU5LDA4NSBbV29ya2VyLTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOCAxOTo1NTo1OSwwODUgW1dvcmtlci01OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xOCAxOTo1NTo1OSwwODUgW1dvcmtlci01OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTggMTk6NTU6NTksMDk5IFtXb3JrZXItNTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMTk6NTY6MjMsMDA5IFtXb3JrZXItODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE4IDE5OjU2OjIzLDAwOSBbV29ya2VyLTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE4IDIwOjA2OjQwLDU3NyBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMDowNjo0MCw1NzkgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIwOjA2OjQwLDU4MSBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMDowNjo0MCw1ODMgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIwOjA2OjQ2LDI1MCBbV29ya2VyLTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xOCAyMDowNjo0NiwyNTAgW1dvcmtlci03OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOCAyMDoyMDozNiwzMTQgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDYtMTggMjA6MjA6MzYsMzk4IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjA6MjA6MzYsNDAwIFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAyMDoyMDozNiw0MDAgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjA6MjA6MzYsNjQ0IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIwOjIwOjM2LDY0NiBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMjA6MjA6MzYsNjQ3IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIwOjIwOjM2LDY0OSBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMjA6MjA6MzYsNjUwIFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiB3Zm9ybVNlcnZpY2VzCisyMDIwLTA2LTE4IDIwOjIwOjM2LDY1MCBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTggMjA6MjA6MzYsNjYzIFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIwOjIyOjAxLDM0NSBbV29ya2VyLTIxOiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjA6MjI6MDEsMzQ2IFtXb3JrZXItMjE6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDIwOjIyOjAxLDM0NiBbV29ya2VyLTIxOiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDIwOjIyOjA4LDUzMSBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDYtMTggMjA6MjI6MDgsNjQxIFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDIwOjIyOjA4LDY0MyBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDIwOjIyOjA4LDY0NCBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjA6MjI6MDgsOTMwIFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMDoyMjowOCw5MzQgW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOCAyMDoyMjowOCw5MzYgW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIwOjIyOjA4LDkzOCBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIwOjIyOjA4LDkzOSBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIHdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTggMjA6MjI6MDgsOTM5IFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTggMjA6MjI6MDgsOTQ2IFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMDoyMjozNCwyODQgW1dvcmtlci0xNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xOCAyMDoyMjozNCwyODQgW1dvcmtlci0xNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNi0xOCAyMDoyMjo0NCwyNDcgW1dvcmtlci0yMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE4IDIwOjIyOjQ0LDI0NyBbV29ya2VyLTIxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOCAyMDoyNTozNywxODEgW1dvcmtlci0yMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2UKKzIwMjAtMDYtMTggMjA6MjU6MzcsMTgyIFtXb3JrZXItMjM6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNi0xOCAyMDoyNTo0NiwyOTcgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIwOjI1OjQ2LDMwMiBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMjA6MjU6NDYsMzA0IFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMDoyNTo0NiwzMDYgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIwOjI1OjUyLDU5NCBbV29ya2VyLTE3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlCisyMDIwLTA2LTE4IDIwOjI1OjUyLDU5NCBbV29ya2VyLTE3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE4IDIwOjI2OjQ3LDU2MSBbV29ya2VyLTE3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE4IDIwOjI2OjQ3LDU2MSBbV29ya2VyLTE3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA2LTE4IDIwOjI2OjU0LDE1OSBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjA6MjY6NTQsMTYxIFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOCAyMDoyNjo1NCwxNjIgW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIwOjI2OjU0LDE2NCBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMjA6MjY6NTQsMjM4IFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDIwOjI2OjU0LDIzOSBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDIwOjI2OjU0LDI0MCBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjA6MjY6NTQsMjQ1IFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMDoyNjo1NCwyNDkgW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOCAyMDoyNjo1NCwyNTEgW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIwOjI2OjU0LDI1NCBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIwOjI2OjU0LDI1NCBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIHdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTggMjA6MjY6NTQsMjU0IFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTggMjA6MjY6NTQsMjYwIFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMDoyNjo1OSwzMjYgW1dvcmtlci0xNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE4IDIwOjI2OjU5LDMyNiBbV29ya2VyLTE3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOCAyMDoyODozNiw2NzQgW21haW5dIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xOCAyMDo0NDo0NywyNzIgW1dvcmtlci0yNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xOCAyMDo0NDo0NywyNzIgW1dvcmtlci0yNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNi0xOCAyMDo0NjoxNCw5OTMgW1dvcmtlci0yODogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xOCAyMDo0NjoxNCw5OTMgW1dvcmtlci0yODogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNi0xOCAyMDo0Njo1MCw5NDcgW1dvcmtlci0zMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xOCAyMDo0Njo1MCw5NDggW1dvcmtlci0zMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNi0xOCAyMDo0NzozMCw5NDMgW1dvcmtlci0zMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE4IDIwOjQ3OjMwLDk0MyBbV29ya2VyLTMwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOCAyMDo1MzoyNyw4ODIgW1dvcmtlci0xOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMC0wNi0xOCAyMDo1MzozMCwyNjUgW1dvcmtlci0zOiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjA6NTM6MzAsMjY2IFtXb3JrZXItMzogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjA6NTM6MzAsMjY3IFtXb3JrZXItMzogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAyMjoyNzo1Nyw4MDMgW1dvcmtlci0xNzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAyMjoyNzo1Nyw4MDQgW1dvcmtlci0xNzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDIyOjI3OjU3LDg2MiBbV29ya2VyLTE3OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOCAyMjoyNzo1OCwxNTcgW1dvcmtlci0xNzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDIyOjI3OjU4LDE1OCBbV29ya2VyLTE3OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAyMjoyNzo1OCwxNTkgW1dvcmtlci0xNzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvd2Zvcm1TZXJ2aWNlSmFyOiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3dmb3JtU2VydmljZUphci90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAyMjoyNzo1OSwwMzEgW1dvcmtlci0xNzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDYtMTggMjI6Mjc6NTksMTE4IFtXb3JrZXItMTc6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjI6Mjc6NTksMTE5IFtXb3JrZXItMTc6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAyMjoyNzo1OSwxMTkgW1dvcmtlci0xNzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjI6Mjc6NTksMzk3IFtXb3JrZXItMTc6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjI6Mjc6NTksNDAxIFtXb3JrZXItMTc6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAyMjoyNzo1OSw0MDIgW1dvcmtlci0xNzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjI6Mjg6MDAsNTI3IFtXb3JrZXItMTc6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA2LTE4IDIyOjI4OjAxLDQ5MyBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMjoyODowMSw0OTYgW1dvcmtlci0yMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOCAyMjoyODowMSw0OTkgW1dvcmtlci0yMzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjI6Mjg6MDEsNTAyIFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMjI6Mjg6MDEsOTAxIFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIyOjI4OjAxLDkyNiBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOCAyMjoyODowMSw5MjggW1dvcmtlci0yMzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjI6Mjg6MDEsOTMwIFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIyOjI4OjAyLDIwMiBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDIyOjI4OjAyLDIwMyBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjI6Mjg6MDIsMjE3IFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIyOjI4OjAyLDIyNCBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMjI6Mjg6MDIsMjI2IFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIyOjI4OjAyLDIzNiBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMjI6Mjg6MDIsMjM3IFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE4IDIyOjI4OjAyLDIzOCBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTggMjI6Mjg6MDIsMjYxIFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIyOjI4OjAyLDM1MyBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMjoyODowMiwzNzggW1dvcmtlci0yMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOCAyMjoyODowMiwzODAgW1dvcmtlci0yMzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjI6Mjg6MDIsMzg1IFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMjI6Mjg6MDIsNTE3IFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIyOjI4OjAyLDU2MiBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOCAyMjoyODowMiw1NjQgW1dvcmtlci0yMzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjI6Mjg6MDIsNTcwIFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIyOjI4OjAyLDc2MCBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDIyOjI4OjAyLDc2MSBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjI6Mjg6MDIsNzYyIFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDIyOjI4OjAyLDc4MCBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMjoyODowMiw3OTYgW1dvcmtlci0yMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIyOjI4OjAyLDc5OSBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMjoyODowMiw4MjAgW1dvcmtlci0yMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIyOjI4OjAyLDgyMSBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xOCAyMjoyODowMiw4MjEgW1dvcmtlci0yMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA2LTE4IDIyOjI4OjAyLDgyNyBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMjoyODowMywwMTQgW1dvcmtlci0yMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDIyOjI4OjAzLDAxNCBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAyMjoyODowMywwMTYgW1dvcmtlci0yMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvd2Zvcm1TZXJ2aWNlSmFyOiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3dmb3JtU2VydmljZUphci90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAyMjoyODowMywwMjUgW1dvcmtlci0yMzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjI6Mjg6MDMsMDI3IFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOCAyMjoyODowMywwMzAgW1dvcmtlci0yMzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjI6Mjg6MDMsMDMzIFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOCAyMjoyODoxMiw4MDQgW1dvcmtlci0yMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnQKKzIwMjAtMDYtMTggMjI6Mjg6MTIsODA1IFtXb3JrZXItMjE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOCAyMjozMTozNCwzMzUgW1dvcmtlci0yMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnQKKzIwMjAtMDYtMTggMjI6MzE6MzQsMzM1IFtXb3JrZXItMjE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOCAyMjo0MTo0OSw0OTcgW1dvcmtlci0xNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHBvbS54bWwuCisyMDIwLTA2LTE4IDIyOjQxOjQ5LDUzNCBbV29ya2VyLTE3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDIyOjQxOjQ5LDY2MyBbV29ya2VyLTE3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp0ZXN0czowLjEgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHBvbS54bWwuCisyMDIwLTA2LTE4IDIyOjQxOjQ5LDY5MyBbV29ya2VyLTE3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDIyOjQxOjQ5LDY5NCBbV29ya2VyLTE3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjI6NDE6NDksNjk1IFtXb3JrZXItMTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC93Zm9ybVNlcnZpY2VKYXI6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvd2Zvcm1TZXJ2aWNlSmFyL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDIyOjQxOjQ5LDgyNSBbV29ya2VyLTE3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDYtMTggMjI6NDE6NDksODMzIFtXb3JrZXItMTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDIyOjQxOjQ5LDgzNCBbV29ya2VyLTE3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDIyOjQxOjQ5LDgzNSBbV29ya2VyLTE3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjI6NDE6NTAsMTMyIFtXb3JrZXItMTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMjo0MTo1MCwxMzQgW1dvcmtlci0xNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMjI6NDE6NTAsMTM2IFtXb3JrZXItMTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMjo0MTo1MCwxMzggW1dvcmtlci0xNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMjI6NDE6NTEsMTczIFtXb3JrZXItMjM6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjI6NDE6NTEsMTc0IFtXb3JrZXItMjM6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAyMjo0MTo1MSwxNzUgW1dvcmtlci0yMzogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3dmb3JtU2VydmljZUphcjogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC93Zm9ybVNlcnZpY2VKYXIvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjI6NDE6NTEsMTk4IFtXb3JrZXItMjM6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIEVSUk9SIG8uZS5tLmouaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iIC0gQ291bGQgbm90IGRvd25sb2FkIHNvdXJjZXMgZm9yIGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVAorb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb246IENvdWxkIG5vdCByZXNvbHZlIGFydGlmYWN0IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOmphcjpzb3VyY2VzOjAuMS1TTkFQU0hPVAorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6Nzc2KSB+W29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6MSkgfltvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTEyKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3NDMpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3MjApIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNzkpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkQXR0YWNobWVudHMoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjU0KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZE1hdmVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjIyMSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjE2MSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNykgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNTEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5leGVjdXRlKE1hdmVuSW1wbC5qYXZhOjEzNTUpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM1KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorMjAyMC0wNi0xOCAyMjo0MjowNCwxNzIgW1dvcmtlci0yMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50CisyMDIwLTA2LTE4IDIyOjQyOjA0LDE3MiBbV29ya2VyLTIwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNi0xOCAyMjo0MjoxMCw0MzQgW1dvcmtlci0yMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAyMjo0MjoxMCw0MzkgW1dvcmtlci0yMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIyOjQyOjEwLDQ0MiBbV29ya2VyLTIzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOCAyMjo0MjoxMCw0NDMgW1dvcmtlci0yMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIyOjQyOjEwLDQ0NiBbV29ya2VyLTIzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOCAyMjo0MjoyNCwzMDEgW1dvcmtlci0yODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnQKKzIwMjAtMDYtMTggMjI6NDI6MjQsMzAyIFtXb3JrZXItMjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOCAyMjo0NDoxOSwxNzAgW1dvcmtlci0yMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xOCAyMjo0NDoxOSwxNzEgW1dvcmtlci0yMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNi0xOCAyMjo0NDoyOCwyMjUgW1dvcmtlci0yMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIyOjQ0OjI4LDIyOCBbV29ya2VyLTIzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOCAyMjo0NDoyOCwyMzAgW1dvcmtlci0yMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIyOjQ0OjI4LDIzMiBbV29ya2VyLTIzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOCAyMjo0NDoyOCwzMTggW1dvcmtlci0yMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjI6NDQ6MjgsMzE5IFtXb3JrZXItMjM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjI6NDQ6MjgsMzIwIFtXb3JrZXItMjM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAyMjo0NDoyOCwzMjggW1dvcmtlci0yMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIyOjQ0OjI4LDMzMSBbV29ya2VyLTIzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIyOjQ0OjI4LDMzMyBbV29ya2VyLTIzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjI6NDQ6MjgsMzM1IFtXb3JrZXItMjM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMjI6NDQ6MjgsMzM3IFtXb3JrZXItMjM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xOCAyMjo0NDoyOCwzMzcgW1dvcmtlci0yMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xOCAyMjo0NDoyOCwzNTAgW1dvcmtlci0yMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIyOjQ0OjM0LDQyMiBbV29ya2VyLTIwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTggMjI6NDQ6MzQsNDIyIFtXb3JrZXItMjA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE4IDIyOjQ1OjUyLDY4NyBbV29ya2VyLTMwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE4IDIyOjQ1OjUyLDY4NyBbV29ya2VyLTMwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA2LTE4IDIyOjQ2OjA0LDcwMyBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMjo0NjowNCw3MTIgW1dvcmtlci0yMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIyOjQ2OjA0LDcxMyBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMjo0NjowNCw3MjQgW1dvcmtlci0yMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIyOjQ2OjA0LDcyNSBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xOCAyMjo0NjowNCw3MjUgW1dvcmtlci0yMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA2LTE4IDIyOjQ2OjA0LDczMCBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMjo0NjowNCw4MjkgW1dvcmtlci0yMzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjI6NDY6MDQsODc5IFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOCAyMjo0NjowNCw4ODEgW1dvcmtlci0yMzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjI6NDY6MDQsODgzIFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOCAyMjo0NjoxNCw1NDcgW1dvcmtlci0yODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE4IDIyOjQ2OjE0LDU0OCBbV29ya2VyLTI4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOCAyMjo0OTozNiwyNDUgW1dvcmtlci0yODogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2UKKzIwMjAtMDYtMTggMjI6NDk6MzYsMjQ1IFtXb3JrZXItMjg6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNi0xOCAyMjo0OTo0NiwxMDggW1dvcmtlci0yODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIyOjQ5OjQ2LDExMCBbV29ya2VyLTI4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMjI6NDk6NDYsMTEyIFtXb3JrZXItMjg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMjo0OTo0NiwxMjEgW1dvcmtlci0yODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIyOjQ5OjU0LDQxMiBbV29ya2VyLTMxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlCisyMDIwLTA2LTE4IDIyOjQ5OjU0LDQxMiBbV29ya2VyLTMxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE4IDIyOjUwOjQ1LDE2OSBbV29ya2VyLTMwOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDIyOjUwOjQ1LDE3MCBbV29ya2VyLTMwOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjI6NTA6NDUsMTc2IFtXb3JrZXItMzA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIyOjUwOjQ1LDE3OCBbV29ya2VyLTMwOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMjI6NTA6NDUsMTgwIFtXb3JrZXItMzA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIyOjUwOjQ1LDE4MiBbV29ya2VyLTMwOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMjI6NTA6NDUsMjc0IFtXb3JrZXItMzA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIyOjUwOjQ1LDI3NiBbV29ya2VyLTMwOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIyOjUwOjQ1LDI3OSBbV29ya2VyLTMwOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMjo1MDo0NSwyODEgW1dvcmtlci0zMDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOCAyMjo1MDo0NSw0OTggW1dvcmtlci0zMDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjI6NTA6NDUsNDk5IFtXb3JrZXItMzA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOCAyMjo1MDo0NSw1MDEgW1dvcmtlci0zMDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjI6NTA6NDUsNTAzIFtXb3JrZXItMzA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOCAyMjo1MDo1Miw1NzAgW1dvcmtlci0xNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnQKKzIwMjAtMDYtMTggMjI6NTA6NTIsNTcwIFtXb3JrZXItMTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOCAyMjo1NDoxMSw1MzQgW1dvcmtlci0zMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xOCAyMjo1NDoxMSw1MzQgW1dvcmtlci0zMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNi0xOCAyMjo1NDoxNyw0OTkgW1dvcmtlci0yODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIyOjU0OjE3LDUwMSBbV29ya2VyLTI4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMjI6NTQ6MTcsNTAzIFtXb3JrZXItMjg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMjo1NDoxNyw1MDQgW1dvcmtlci0yODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIyOjU0OjE3LDUyNiBbV29ya2VyLTI4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjI6NTQ6MTcsNTI4IFtXb3JrZXItMjg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIyOjU0OjE3LDUzMSBbV29ya2VyLTI4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjI6NTQ6MTcsNTM0IFtXb3JrZXItMjg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIyOjU0OjE3LDU1NyBbV29ya2VyLTI4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjI6NTQ6MTcsNTU4IFtXb3JrZXItMjg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMjI6NTQ6MTcsNTYwIFtXb3JrZXItMjg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMjo1NDoxNyw1NjEgW1dvcmtlci0yODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOCAyMjo1NDoxNyw1NjIgW1dvcmtlci0yODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiB3Zm9ybVNlcnZpY2VzCisyMDIwLTA2LTE4IDIyOjU0OjE3LDU2MiBbV29ya2VyLTI4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA2LTE4IDIyOjU0OjE3LDU2OCBbV29ya2VyLTI4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjI6NTQ6MzAsNzQ1IFtXb3JrZXItMzA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xOCAyMjo1NDozMCw3NDUgW1dvcmtlci0zMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTkgMDg6NDY6NDYsMzM1IFtXb3JrZXItMzQ6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMDg6NDY6NDYsMzM2IFtXb3JrZXItMzQ6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDYtMTkgMDg6NDc6NDUsNzI3IFtXb3JrZXItMzc6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDA4OjQ3OjQ1LDczMCBbV29ya2VyLTM3OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMDg6NDc6NDUsNzMxIFtXb3JrZXItMzc6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDA4OjQ3OjQ1LDczMyBbV29ya2VyLTM3OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMDg6NDc6NDUsNzM0IFtXb3JrZXItMzc6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDA4OjQ3OjQ1LDczNCBbV29ya2VyLTM3OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMDg6NDc6NDUsODQwIFtXb3JrZXItMzc6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDA4OjQ3OjQ1LDkyNSBbV29ya2VyLTM3OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAwODo0Nzo0NSw5MjYgW1dvcmtlci0zNzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDA4OjQ3OjQ1LDkyNyBbV29ya2VyLTM3OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAwODo0Nzo0NSw5MjkgW1dvcmtlci0zNzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDA4OjQ3OjU1LDI1OCBbV29ya2VyLTM3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMDg6NDc6NTUsMjU4IFtXb3JrZXItMzc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE5IDA4OjUzOjAzLDY3NSBbV29ya2VyLTM0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE5IDA4OjUzOjAzLDY3NSBbV29ya2VyLTM0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA2LTE5IDA4OjUzOjEzLDAyMyBbV29ya2VyLTQ0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAwODo1MzoxMywwMjUgW1dvcmtlci00NDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDA4OjUzOjEzLDAyNiBbV29ya2VyLTQ0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAwODo1MzoxMywwMjkgW1dvcmtlci00NDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDA4OjUzOjEzLDE4MiBbV29ya2VyLTQ0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAwODo1MzoxMywxODkgW1dvcmtlci00NDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDA4OjUzOjEzLDE5MiBbV29ya2VyLTQ0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAwODo1MzoxMywyMDcgW1dvcmtlci00NDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDA4OjUzOjEzLDIwOCBbV29ya2VyLTQ0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xOSAwODo1MzoxMywyMDggW1dvcmtlci00NDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA2LTE5IDA4OjUzOjEzLDIxOCBbV29ya2VyLTQ0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAwODo1MzoyNyw1MjggW1dvcmtlci00MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE5IDA4OjUzOjI3LDUyOCBbV29ya2VyLTQzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOSAwODo1MzozNCw2NTAgW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDA4OjUzOjM0LDY1MiBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDA4OjUzOjM0LDY1NCBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMDg6NTM6MzQsNjU2IFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMDg6NTM6NDAsMDg3IFtXb3JrZXItNDA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xOSAwODo1Mzo0MCwwODcgW1dvcmtlci00MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTkgMDk6MDU6MzMsNTIzIFtXb3JrZXItMzc6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMDk6MDU6MzMsNTIzIFtXb3JrZXItMzc6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDYtMTkgMDk6MDU6NDEsMzYzIFtXb3JrZXItNDM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDA5OjA1OjQxLDM2NSBbV29ya2VyLTQzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMDk6MDU6NDEsMzY3IFtXb3JrZXItNDM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDA5OjA1OjQxLDM3MiBbV29ya2VyLTQzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMDk6MDU6NDEsMzcyIFtXb3JrZXItNDM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDA5OjA1OjQxLDM3MiBbV29ya2VyLTQzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMDk6MDU6NDEsMzc5IFtXb3JrZXItNDM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDA5OjA1OjQxLDQ3MyBbV29ya2VyLTQzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAwOTowNTo0MSw0NzUgW1dvcmtlci00MzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDA5OjA1OjQxLDQ3NyBbV29ya2VyLTQzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAwOTowNTo0MSw0NzggW1dvcmtlci00MzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDA5OjA1OjU3LDA4NiBbV29ya2VyLTQ2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMDk6MDU6NTcsMDg3IFtXb3JrZXItNDY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE5IDA5OjA5OjI5LDIxNyBbV29ya2VyLTQzOiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjAtMDYtMTkgMDk6MTE6MjMsNjg1IFtXb3JrZXItNDY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAwOToxMToyMyw2ODYgW1dvcmtlci00NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTkgMDk6MTM6NTUsMDc0IFtXb3JrZXItNTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzCisyMDIwLTA2LTE5IDA5OjEzOjU1LDA3NCBbV29ya2VyLTUwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTkgMDk6MTQ6MDYsNTc2IFtXb3JrZXItNTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAwOToxNDowNiw1NzYgW1dvcmtlci01MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTkgMDk6MjI6NTIsODk1IFtXb3JrZXItMzQ6IFVwZGF0aW5nIE1hdmVuIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciAtIFVwZGF0ZSBzdGFydGVkCisyMDIwLTA2LTE5IDA5OjIyOjUzLDY1MyBbV29ya2VyLTM0OiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDYtMTkgMDk6MjI6NTMsNzcyIFtXb3JrZXItMzQ6IFVwZGF0aW5nIE1hdmVuIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDA5OjIyOjUzLDc3MyBbV29ya2VyLTM0OiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDA5OjIyOjU0LDAwNyBbV29ya2VyLTM0OiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAwOToyMjo1NCwwMDggW1dvcmtlci0zNDogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAwOToyMjo1NCw1NjAgW1dvcmtlci0zNDogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBBZGRpbmcgc291cmNlIGZvbGRlciAvR2xlbW1TZXJ2aWNlcy9zcmMKKzIwMjAtMDYtMTkgMDk6MjI6NTQsNTYwIFtXb3JrZXItMzQ6IFVwZGF0aW5nIE1hdmVuIFByb2plY3RdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gTm90IGFkZGluZyBzb3VyY2UgZm9sZGVyIC9HbGVtbVNlcnZpY2VzL3NyYy90ZXN0L2phdmEgYmVjYXVzZSBpdCBvdmVybGFwcyB3aXRoIC9HbGVtbVNlcnZpY2VzL3NyYworMjAyMC0wNi0xOSAwOToyMjo1NCw5MDYgW1dvcmtlci0zNDogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gRVJST1Igby5lLm0yZS53dHAuV1RQUHJvamVjdENvbmZpZ3VyYXRvciAtIFVuYWJsZSB0byBjb25maWd1cmUgR2xlbW1TZXJ2aWNlcworb3JnLmVjbGlwc2UubTJlLnd0cC5NYXJrZWRFeGNlcHRpb246IFVuYWJsZSB0byBjb25maWd1cmUgR2xlbW1TZXJ2aWNlcworCWF0IG9yZy5lY2xpcHNlLm0yZS53dHAuQWJzdHJhY3RQcm9qZWN0Q29uZmlndXJhdG9yRGVsZWdhdGUuY29uZmlndXJlUHJvamVjdChBYnN0cmFjdFByb2plY3RDb25maWd1cmF0b3JEZWxlZ2F0ZS5qYXZhOjk5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS53dHAuV1RQUHJvamVjdENvbmZpZ3VyYXRvci5jb25maWd1cmUoV1RQUHJvamVjdENvbmZpZ3VyYXRvci5qYXZhOjY4KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLnByb2plY3QuY29uZmlndXJhdG9yLkFic3RyYWN0TGlmZWN5Y2xlTWFwcGluZy5jb25maWd1cmUoQWJzdHJhY3RMaWZlY3ljbGVNYXBwaW5nLmphdmE6MTIwKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIkMy5jYWxsKFByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5qYXZhOjUwOCkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLnByb2plY3QuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyJDMuY2FsbChQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YToxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE1MSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLnByb2plY3QuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLnVwZGF0ZVByb2plY3RDb25maWd1cmF0aW9uKFByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5qYXZhOjUwMSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLnByb2plY3QuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLnVwZGF0ZVByb2plY3RDb25maWd1cmF0aW9uMChQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YTo0MzkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciQyLmNhbGwoUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6MzUyKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIkMi5jYWxsKFByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5qYXZhOjEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTUxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwuZXhlY3V0ZShNYXZlbkltcGwuamF2YToxMzUxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIudXBkYXRlUHJvamVjdENvbmZpZ3VyYXRpb24oUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6MzQ5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUudWkuaW50ZXJuYWwuVXBkYXRlTWF2ZW5Qcm9qZWN0Sm9iLnJ1bkluV29ya3NwYWNlKFVwZGF0ZU1hdmVuUHJvamVjdEpvYi5qYXZhOjc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmUudWlfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuSW50ZXJuYWxXb3Jrc3BhY2VKb2IucnVuKEludGVybmFsV29ya3NwYWNlSm9iLmphdmE6MzkpIFtvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlc18zLjEzLjAudjIwMTgwNTEyLTExMzguamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOiBPbmUgb3IgbW9yZSBjb25zdHJhaW50cyBoYXZlIG5vdCBiZWVuIHNhdGlzZmllZC4KKwlhdCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5pbnRlcm5hbC5GYWNldGVkUHJvamVjdC5tb2RpZnlJbnRlcm5hbChGYWNldGVkUHJvamVjdC5qYXZhOjM2MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5pbnRlcm5hbC5GYWNldGVkUHJvamVjdC5tZXJnZUNoYW5nZXNJbnRlcm5hbChGYWNldGVkUHJvamVjdC5qYXZhOjExODEpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuaW50ZXJuYWwuRmFjZXRlZFByb2plY3QuYWNjZXNzJDIoRmFjZXRlZFByb2plY3QuamF2YToxMTE3KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmludGVybmFsLkZhY2V0ZWRQcm9qZWN0JDEucnVuKEZhY2V0ZWRQcm9qZWN0LmphdmE6MzI0KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjI4OSkgfltvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlc18zLjEzLjAudjIwMTgwNTEyLTExMzguamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjMxNikgfltvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlc18zLjEzLjAudjIwMTgwNTEyLTExMzguamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmludGVybmFsLkZhY2V0ZWRQcm9qZWN0Lm1vZGlmeShGYWNldGVkUHJvamVjdC5qYXZhOjMzOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUud3RwLldlYlByb2plY3RDb25maWd1cmF0b3JEZWxlZ2F0ZS5jb25maWd1cmUoV2ViUHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmphdmE6MTM2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS53dHAuQWJzdHJhY3RQcm9qZWN0Q29uZmlndXJhdG9yRGVsZWdhdGUuY29uZmlndXJlUHJvamVjdChBYnN0cmFjdFByb2plY3RDb25maWd1cmF0b3JEZWxlZ2F0ZS5qYXZhOjk1KSB+W25hOm5hXQorCS4uLiAxOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjAtMDYtMTkgMDk6MjI6NTUsMTQ4IFtXb3JrZXItMzQ6IFVwZGF0aW5nIE1hdmVuIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAwOToyMjo1NSwxNTcgW1dvcmtlci0zNDogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyIC0gVXBkYXRlIGNvbXBsZXRlZDogMiBzZWMKKzIwMjAtMDYtMTkgMDk6MjU6MzgsOTM2IFtXb3JrZXItNDY6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAwOToyNTozOCw5MzcgW1dvcmtlci00NjogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMDk6MjU6NTQsMjg3IFtXb3JrZXItNTI6IFVwZGF0aW5nIE1hdmVuIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciAtIFVwZGF0ZSBzdGFydGVkCisyMDIwLTA2LTE5IDA5OjI1OjU0LDM5OCBbV29ya2VyLTUyOiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDYtMTkgMDk6MjU6NTQsNDU0IFtXb3JrZXItNTI6IFVwZGF0aW5nIE1hdmVuIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDA5OjI1OjU0LDQ1NSBbV29ya2VyLTUyOiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDA5OjI1OjU0LDY2MyBbV29ya2VyLTUyOiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIEFkZGluZyBzb3VyY2UgZm9sZGVyIC9HbGVtbVNlcnZpY2VzL3NyYworMjAyMC0wNi0xOSAwOToyNTo1NCw2NjMgW1dvcmtlci01MjogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBOb3QgYWRkaW5nIHNvdXJjZSBmb2xkZXIgL0dsZW1tU2VydmljZXMvc3JjL3Rlc3QvamF2YSBiZWNhdXNlIGl0IG92ZXJsYXBzIHdpdGggL0dsZW1tU2VydmljZXMvc3JjCisyMDIwLTA2LTE5IDA5OjI1OjU0LDc5NSBbV29ya2VyLTUyOiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBFUlJPUiBvLmUubTJlLnd0cC5XVFBQcm9qZWN0Q29uZmlndXJhdG9yIC0gVW5hYmxlIHRvIGNvbmZpZ3VyZSBHbGVtbVNlcnZpY2VzCitvcmcuZWNsaXBzZS5tMmUud3RwLk1hcmtlZEV4Y2VwdGlvbjogVW5hYmxlIHRvIGNvbmZpZ3VyZSBHbGVtbVNlcnZpY2VzCisJYXQgb3JnLmVjbGlwc2UubTJlLnd0cC5BYnN0cmFjdFByb2plY3RDb25maWd1cmF0b3JEZWxlZ2F0ZS5jb25maWd1cmVQcm9qZWN0KEFic3RyYWN0UHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmphdmE6OTkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLnd0cC5XVFBQcm9qZWN0Q29uZmlndXJhdG9yLmNvbmZpZ3VyZShXVFBQcm9qZWN0Q29uZmlndXJhdG9yLmphdmE6NjgpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUucHJvamVjdC5jb25maWd1cmF0b3IuQWJzdHJhY3RMaWZlY3ljbGVNYXBwaW5nLmNvbmZpZ3VyZShBYnN0cmFjdExpZmVjeWNsZU1hcHBpbmcuamF2YToxMjApIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciQzLmNhbGwoUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6NTA4KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIkMy5jYWxsKFByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5qYXZhOjEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTUxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIudXBkYXRlUHJvamVjdENvbmZpZ3VyYXRpb24oUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6NTAxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIudXBkYXRlUHJvamVjdENvbmZpZ3VyYXRpb24wKFByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5qYXZhOjQzOSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLnByb2plY3QuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyJDIuY2FsbChQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YTozNTIpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciQyLmNhbGwoUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6MSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNTEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5leGVjdXRlKE1hdmVuSW1wbC5qYXZhOjEzNTEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci51cGRhdGVQcm9qZWN0Q29uZmlndXJhdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YTozNDkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS51aS5pbnRlcm5hbC5VcGRhdGVNYXZlblByb2plY3RKb2IucnVuSW5Xb3Jrc3BhY2UoVXBkYXRlTWF2ZW5Qcm9qZWN0Sm9iLmphdmE6NzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZS51aV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5JbnRlcm5hbFdvcmtzcGFjZUpvYi5ydW4oSW50ZXJuYWxXb3Jrc3BhY2VKb2IuamF2YTozOSkgW29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzXzMuMTMuMC52MjAxODA1MTItMTEzOC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb246IE9uZSBvciBtb3JlIGNvbnN0cmFpbnRzIGhhdmUgbm90IGJlZW4gc2F0aXNmaWVkLgorCWF0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmludGVybmFsLkZhY2V0ZWRQcm9qZWN0Lm1vZGlmeUludGVybmFsKEZhY2V0ZWRQcm9qZWN0LmphdmE6MzYzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmludGVybmFsLkZhY2V0ZWRQcm9qZWN0Lm1lcmdlQ2hhbmdlc0ludGVybmFsKEZhY2V0ZWRQcm9qZWN0LmphdmE6MTE4MSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5pbnRlcm5hbC5GYWNldGVkUHJvamVjdC5hY2Nlc3MkMihGYWNldGVkUHJvamVjdC5qYXZhOjExMTcpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuaW50ZXJuYWwuRmFjZXRlZFByb2plY3QkMS5ydW4oRmFjZXRlZFByb2plY3QuamF2YTozMjQpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMjg5KSB+W29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzXzMuMTMuMC52MjAxODA1MTItMTEzOC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMzE2KSB+W29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzXzMuMTMuMC52MjAxODA1MTItMTEzOC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuaW50ZXJuYWwuRmFjZXRlZFByb2plY3QubW9kaWZ5KEZhY2V0ZWRQcm9qZWN0LmphdmE6MzM5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS53dHAuV2ViUHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmNvbmZpZ3VyZShXZWJQcm9qZWN0Q29uZmlndXJhdG9yRGVsZWdhdGUuamF2YToxMzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLnd0cC5BYnN0cmFjdFByb2plY3RDb25maWd1cmF0b3JEZWxlZ2F0ZS5jb25maWd1cmVQcm9qZWN0KEFic3RyYWN0UHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmphdmE6OTUpIH5bbmE6bmFdCisJLi4uIDE4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMC0wNi0xOSAwOToyNTo1NCw5MjcgW1dvcmtlci01MjogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDA5OjI1OjU0LDkzMiBbV29ya2VyLTUyOiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIgLSBVcGRhdGUgY29tcGxldGVkOiAwIHNlYworMjAyMC0wNi0xOSAwOToyNjoxMSw1MjUgW1dvcmtlci01MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAwOToyNjoxMSw1MjYgW1dvcmtlci01MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNi0xOSAwOToyNjoxOCwyNjAgW1dvcmtlci0zNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDA5OjI2OjE4LDI2MiBbV29ya2VyLTM0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAwOToyNjoxOCwyNjQgW1dvcmtlci0zNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDA5OjI2OjE4LDI2NiBbV29ya2VyLTM0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOSAwOToyNjoxOCw1MjUgW1dvcmtlci0zNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMDk6MjY6MTgsNTI2IFtXb3JrZXItMzQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMDk6MjY6MTgsNTM0IFtXb3JrZXItMzQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAwOToyNjoxOCw1NDMgW1dvcmtlci0zNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAwOToyNjoxOCw1NDQgW1dvcmtlci0zNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDA5OjI2OjE4LDU0NiBbV29ya2VyLTM0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDA5OjI2OjE4LDU0NyBbV29ya2VyLTM0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMDk6MjY6MTgsNTQ3IFtXb3JrZXItMzQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMDk6MjY6MTgsNTYzIFtXb3JrZXItMzQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAwOToyNjoyNyw0MDQgW1dvcmtlci01NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDA5OjI2OjI3LDQwNCBbV29ya2VyLTU1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOSAxMTo1MzoxNyw0MzUgW21haW5dIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xOSAxMjowMDoxNiwwNDcgW1dvcmtlci04OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxMjowMDoxNiwwNDcgW1dvcmtlci04OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNi0xOSAxMjowMDoyMSw4NTUgW1dvcmtlci04OTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDEyOjAwOjIxLDg1NyBbV29ya2VyLTg5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDEyOjAwOjIxLDg1OCBbV29ya2VyLTg5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTI6MDA6MjEsODU5IFtXb3JrZXItODk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTI6MDA6MjEsODYwIFtXb3JrZXItODk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxMjowMDoyMSw4NjAgW1dvcmtlci04OTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxMjowMDoyMSw4NjkgW1dvcmtlci04OTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDEyOjAwOjMxLDk4MSBbV29ya2VyLTg5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTI6MDA6MzEsOTgyIFtXb3JrZXItODk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE5IDEyOjA0OjQ5LDI0NyBbV29ya2VyLTE6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTA2LTE5IDEyOjA0OjUxLDAxOSBbV29ya2VyLTA6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxMjowNDo1MSwwMjkgW1dvcmtlci0wOiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxMjowNDo1MSwwMjkgW1dvcmtlci0wOiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDEyOjA4OjQ1LDQyOCBbV29ya2VyLTEwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDEyOjA4OjQ1LDQyOSBbV29ya2VyLTEwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA2LTE5IDEyOjA5OjA2LDEzMiBbV29ya2VyLTEzOiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMTI6MDk6MDYsMTMzIFtXb3JrZXItMTM6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDEyOjA5OjA3LDY0NCBbV29ya2VyLTM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDEyOjA5OjA3LDY0NyBbV29ya2VyLTM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAxMjowOTowNyw2NTEgW1dvcmtlci0zOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxMjowOTowNyw2NTMgW1dvcmtlci0zOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTI6MDk6MDcsNjU2IFtXb3JrZXItMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTI6MDk6MDcsNjU3IFtXb3JrZXItMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDEyOjA5OjA3LDY5MSBbV29ya2VyLTM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDEyOjA5OjA4LDk2MSBbV29ya2VyLTM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxMjowOTowOCw5ODkgW1dvcmtlci0zOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxMjowOTowOCw5OTEgW1dvcmtlci0zOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDEyOjA5OjA4LDk5MyBbV29ya2VyLTM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDEyOjA5OjA4LDk5NSBbV29ya2VyLTM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTI6MDk6MDksNTEyIFtXb3JrZXItMzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTI6MDk6MDksNTE0IFtXb3JrZXItMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTI6MDk6MDksNTE3IFtXb3JrZXItMzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTI6MDk6MDksNTE5IFtXb3JrZXItMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTI6MDk6MDksNjg0IFtXb3JrZXItMzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTI6MDk6MDksNjg2IFtXb3JrZXItMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDEyOjA5OjA5LDY4OSBbV29ya2VyLTM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDEyOjA5OjA5LDY5MSBbV29ya2VyLTM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOSAxMjowOTowOSw4OTcgW1dvcmtlci0zOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMTI6MDk6MDksODk4IFtXb3JrZXItMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMTI6MDk6MDksOTAwIFtXb3JrZXItMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvd2Zvcm1TZXJ2aWNlSmFyOiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3dmb3JtU2VydmljZUphci90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxMjowOTowOSw5MDggW1dvcmtlci0zOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxMjowOTowOSw5MTEgW1dvcmtlci0zOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTI6MDk6MDksOTE0IFtXb3JrZXItMzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTI6MDk6MDksOTE2IFtXb3JrZXItMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDEyOjA5OjMwLDM0MiBbV29ya2VyLTEwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTI6MDk6MzAsMzQyIFtXb3JrZXItMTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE5IDE4OjE3OjU2LDMyOCBbV29ya2VyLTQxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTg6MTc6NTYsMzMwIFtXb3JrZXItNDE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE5IDE4OjIwOjA4LDU2NCBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTg6MjA6MDgsNTgwIFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTg6MjA6MDgsNTkxIFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxODoyMDowOCw2MTUgW1dvcmtlci00MTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOSAxODoyMDowOCw2NTAgW1dvcmtlci00MTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE4OjIwOjA4LDY1MyBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE4OjIwOjA4LDY1NSBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTg6MjA6MDgsNjU3IFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTg6MjI6MzcsODk4IFtXb3JrZXItNDQ6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDYtMTkgMTg6MjI6MzcsOTkxIFtXb3JrZXItNDQ6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDE4OjIyOjM4LDUxMSBbV29ya2VyLTQ0OiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxODoyMjozOSwxMjcgW1dvcmtlci00NDogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxODoyMjozOSw1NDAgW1dvcmtlci0zOTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDE4OjIyOjM5LDU2NiBbV29ya2VyLTM5OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxODoyMjozOSw1ODEgW1dvcmtlci0zOTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE4OjIyOjM5LDU4MyBbV29ya2VyLTM5OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxODoyMjozOSw1ODkgW1dvcmtlci0zOTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE4OjIyOjM5LDU4OSBbV29ya2VyLTM5OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxODoyMjozOSw1ODkgW1dvcmtlci0zOTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE4OjIyOjM5LDU5NyBbV29ya2VyLTM5OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxODoyMjozOSw4NTIgW1dvcmtlci0zOTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDE4OjIyOjM5LDg2MSBbV29ya2VyLTM5OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxODoyMjozOSw4NjMgW1dvcmtlci0zOTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAxODoyMjozOSw4NjQgW1dvcmtlci0zOTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTg6MjI6MzksODY2IFtXb3JrZXItMzk6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTg6MjI6MzksOTc4IFtXb3JrZXItMzk6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE4OjIyOjM5LDk4MCBbV29ya2VyLTM5OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAxODoyMjozOSw5ODIgW1dvcmtlci0zOTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTg6MjI6MzksOTg0IFtXb3JrZXItMzk6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE4OjIyOjU3LDI0OSBbV29ya2VyLTQzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE4OjIyOjU3LDI1MCBbV29ya2VyLTQzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA2LTE5IDE4OjIzOjA3LDk4MCBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTg6MjM6MDcsOTgxIFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTg6MjM6MDcsOTgzIFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxODoyMzowNyw5ODggW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOSAxODoyMzowNyw5ODkgW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE4OjIzOjA3LDk4OSBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE4OjIzOjA3LDk5MyBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTg6MjM6MTQsNjI2IFtXb3JrZXItMzk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxODoyMzoxNCw2MjYgW1dvcmtlci0zOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTkgMTg6MjU6MzUsMzE1IFtXb3JrZXItNDQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxODoyNTozNSwzMTcgW1dvcmtlci00NDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAxODoyNTozNSwzMjAgW1dvcmtlci00NDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE4OjI1OjM1LDMyMSBbV29ya2VyLTQ0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE4OjI2OjM5LDQ2NSBbV29ya2VyLTQzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE4OjI2OjM5LDQ2NSBbV29ya2VyLTQzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA2LTE5IDE4OjI2OjUwLDA1NiBbV29ya2VyLTQ0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDYtMTkgMTg6MjY6NTAsMTA5IFtXb3JrZXItNDQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3IgZGUua29yYXAuc2VydmljZXMudXRpbHM6dXRpbHM6amFyOjAuMS1TTkFQU0hPVCBpcyBtaXNzaW5nLCBubyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorMjAyMC0wNi0xOSAxODoyNjo1MCwxMTUgW1dvcmtlci00NDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxODoyNjo1MCwyMzIgW1dvcmtlci00NDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBUaGUgUE9NIGZvciBkZS5rb3JhcC5zZXJ2aWNlcy51dGlsczp1dGlsczpqYXI6MC4xLVNOQVBTSE9UIGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA2LTE5IDE4OjI2OjUwLDIzNSBbV29ya2VyLTQ0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDE4OjI2OjUwLDU2MyBbV29ya2VyLTQ0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTg6MjY6NTAsNTY1IFtXb3JrZXItNDQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTg6MjY6NTAsNTY2IFtXb3JrZXItNDQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxODoyNjo1MCw1NjcgW1dvcmtlci00NDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOSAxODoyNjo1MCw1NjggW1dvcmtlci00NDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE4OjI2OjUwLDU2OCBbV29ya2VyLTQ0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE4OjI2OjUwLDU3MSBbV29ya2VyLTQ0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTg6MjY6NTEsNjAyIFtXb3JrZXItMzk6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3IgZGUua29yYXAuc2VydmljZXMudXRpbHM6dXRpbHM6amFyOjAuMS1TTkFQU0hPVCBpcyBtaXNzaW5nLCBubyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorMjAyMC0wNi0xOSAxODoyNjo1MSw2MDggW1dvcmtlci0zOTogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxODoyNjo1MSw3ODkgW1dvcmtlci0zOTogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gRVJST1Igby5lLm0uai5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IgLSBDb3VsZCBub3QgZG93bmxvYWQgc291cmNlcyBmb3IgZGUua29yYXAuc2VydmljZXMudXRpbHM6dXRpbHM6MC4xLVNOQVBTSE9UCitvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjogQ291bGQgbm90IHJlc29sdmUgYXJ0aWZhY3QgZGUua29yYXAuc2VydmljZXMudXRpbHM6dXRpbHM6amFyOnNvdXJjZXM6MC4xLVNOQVBTSE9UCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YTo3NzYpIH5bb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YToxKSB+W29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxMTIpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjc0MykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjcyMCkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI3OSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRBdHRhY2htZW50cyhEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNTQpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkTWF2ZW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjIxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTYxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM3KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE1MSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLmV4ZWN1dGUoTWF2ZW5JbXBsLmphdmE6MTM1NSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzUpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCisyMDIwLTA2LTE5IDE4OjI5OjI2LDExNCBbV29ya2VyLTM5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHMKKzIwMjAtMDYtMTkgMTg6Mjk6MjYsMTE0IFtXb3JrZXItMzk6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA2LTE5IDE4OjI5OjM0LDExNyBbV29ya2VyLTQ3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTg6Mjk6MzQsMTIxIFtXb3JrZXItNDc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE4OjI5OjM0LDEyMiBbV29ya2VyLTQ3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTg6Mjk6MzQsMTI0IFtXb3JrZXItNDc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE4OjI5OjQyLDU0MiBbV29ya2VyLTQ4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlscworMjAyMC0wNi0xOSAxODoyOTo0Miw1NDMgW1dvcmtlci00ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE5IDE4OjMwOjMwLDI0MSBbV29ya2VyLTQ3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE4OjMwOjMwLDI0MSBbV29ya2VyLTQ3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA2LTE5IDE4OjMwOjM2LDIxOCBbV29ya2VyLTQ4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTg6MzA6MzYsMjIxIFtXb3JrZXItNDg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE4OjMwOjM2LDIyMiBbV29ya2VyLTQ4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTg6MzA6MzYsMjI0IFtXb3JrZXItNDg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE4OjMwOjM2LDg0MiBbV29ya2VyLTQ4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDYtMTkgMTg6MzA6MzYsODkxIFtXb3JrZXItNDg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMTg6MzA6MzYsODkxIFtXb3JrZXItNDg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDE4OjMwOjM2LDk4OCBbV29ya2VyLTQ4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDE4OjMwOjM2LDk4OSBbV29ya2VyLTQ4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxODozMDozNywzMTMgW1dvcmtlci00ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE4OjMwOjM3LDMxNSBbV29ya2VyLTQ4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE4OjMwOjM3LDMxNyBbV29ya2VyLTQ4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTg6MzA6MzcsMzE4IFtXb3JrZXItNDg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTg6MzA6MzcsMzE5IFtXb3JrZXItNDg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxODozMDozNywzMTkgW1dvcmtlci00ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxODozMDozNywzMjQgW1dvcmtlci00ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE4OjMxOjAzLDc3NSBbV29ya2VyLTQ4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDE4OjMxOjAzLDc3NSBbV29ya2VyLTQ4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxODozMTowMyw3ODEgW1dvcmtlci00ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE4OjMxOjAzLDc4MyBbV29ya2VyLTQ4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE4OjMxOjAzLDc4NCBbV29ya2VyLTQ4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTg6MzE6MDMsNzg1IFtXb3JrZXItNDg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTg6MzE6MTMsMDI2IFtXb3JrZXItMzk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxODozMToxMywwMjYgW1dvcmtlci0zOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTkgMTg6Mzg6MjQsMTkyIFtXb3JrZXItNDM6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDYtMTkgMTg6Mzg6MjQsMjM4IFtXb3JrZXItNDM6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDE4OjM4OjI0LDIzOCBbV29ya2VyLTQzOiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMTg6Mzg6MjQsNDI1IFtXb3JrZXItNDM6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDE4OjM4OjI0LDQyNSBbV29ya2VyLTQzOiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMTg6Mzg6MjQsNjE1IFtXb3JrZXItNDM6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTg6Mzg6MjQsOTIxIFtXb3JrZXItMzk6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxODozODoyNCw5MjIgW1dvcmtlci0zOTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxODozODoyNCw5MzAgW1dvcmtlci0zOTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTg6Mzg6MjQsOTMzIFtXb3JrZXItMzk6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAxODozODoyNCw5MzUgW1dvcmtlci0zOTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTg6Mzg6MjQsOTM2IFtXb3JrZXItMzk6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOSAxODozODoyNCw5MzcgW1dvcmtlci0zOTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTg6Mzg6MjQsOTM3IFtXb3JrZXItMzk6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxODozODoyNCw5NDIgW1dvcmtlci0zOTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTg6Mzg6MzUsMTAyIFtXb3JrZXItNTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxODozODozNSwxMDIgW1dvcmtlci01MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTkgMTg6Mzk6MDQsMDc2IFtXb3JrZXItNTE6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTg6Mzk6MDQsMDc2IFtXb3JrZXItNTE6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDYtMTkgMTg6Mzk6MTEsOTc0IFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxODozOToxMSw5NzYgW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAxODozOToxMSw5NzcgW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE4OjM5OjExLDk3OSBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE4OjM5OjExLDk4MCBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTg6Mzk6MTEsOTgwIFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTg6Mzk6MTEsOTgzIFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxODozOToxOCw1MjQgW1dvcmtlci0zOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE4OjM5OjE4LDUyNSBbV29ya2VyLTM5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOSAxOTowMzo1NSw4NjEgW1dvcmtlci01MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNccG9tLnhtbC4KKzIwMjAtMDYtMTkgMTk6MDM6NTYsMTU5IFtXb3JrZXItNTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxOTowMzo1NiwxNjEgW1dvcmtlci01MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTk6MDM6NTYsMTYyIFtXb3JrZXItNTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxOTowMzo1NiwxNjQgW1dvcmtlci01MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTk6MDc6MDAsNDkxIFtXb3JrZXItNTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTk6MDc6MDAsNDkxIFtXb3JrZXItNTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDYtMTkgMTk6MDc6MDcsMjk4IFtXb3JrZXItNDg6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDYtMTkgMTk6MDc6MDcsNjI0IFtXb3JrZXItNDg6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTk6MDc6MDgsNTE5IFtXb3JrZXItNTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHBvbS54bWwuCisyMDIwLTA2LTE5IDE5OjA3OjA5LDExNiBbV29ya2VyLTU1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxOTowNzowOSwxMTggW1dvcmtlci01NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTk6MDc6MDksMTIwIFtXb3JrZXItNTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE5OjA3OjA5LDEyMiBbV29ya2VyLTU1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOSAxOTowNzowOSwyOTYgW1dvcmtlci01NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xwb20ueG1sLgorMjAyMC0wNi0xOSAxOTowNzowOSwzNjIgW1dvcmtlci01NTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTk6MDc6MDksMzY0IFtXb3JrZXItNTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTk6MDc6MDksMzY1IFtXb3JrZXItNTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE5OjA3OjA5LDM2NyBbV29ya2VyLTU1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE5OjA3OjA5LDU4MiBbV29ya2VyLTU1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxOTowNzowOSw1ODUgW1dvcmtlci01NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE5OjA3OjA5LDU4OSBbV29ya2VyLTU1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxOTowNzowOSw1OTEgW1dvcmtlci01NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE5OjA3OjA5LDU5MSBbV29ya2VyLTU1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxOTowNzowOSw1OTEgW1dvcmtlci01NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE5OjA3OjA5LDU5OSBbV29ya2VyLTU1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxOToxMToyOSwyNDkgW1dvcmtlci01MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE5OjExOjI5LDI1MCBbV29ya2VyLTUyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOSAxOToxNzo1OSwwMzIgW1dvcmtlci01OTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE5OjE3OjU5LDA0OCBbV29ya2VyLTU5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE5OjE3OjU5LDA0OSBbV29ya2VyLTU5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTk6MTc6NTksMDUxIFtXb3JrZXItNTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTk6MTg6MDcsOTQ5IFtXb3JrZXItNTI6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTk6MTg6MDgsMTY5IFtXb3JrZXItNTY6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE5OjE4OjA4LDE3MCBbV29ya2VyLTU2OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTk6MTg6MDgsMTkyIFtXb3JrZXItNTY6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE5OjE4OjA4LDE5NCBbV29ya2VyLTU2OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTk6MTg6MDgsMTk1IFtXb3JrZXItNTY6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE5OjE4OjA4LDE5NSBbV29ya2VyLTU2OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTk6MTg6MDgsMjA4IFtXb3JrZXItNTY6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE5OjE4OjIxLDMxNSBbV29ya2VyLTU4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE5OjE4OjIxLDMxNSBbV29ya2VyLTU4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA2LTE5IDE5OjE4OjI5LDI5OSBbV29ya2VyLTU2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTk6MTg6MjksMjk5IFtXb3JrZXItNTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE5IDE5OjIwOjIzLDAwMyBbV29ya2VyLTU2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTk6MjA6MjMsMDA1IFtXb3JrZXItNTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTk6MjA6MjMsMDA2IFtXb3JrZXItNTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxOToyMDoyMywwMDggW1dvcmtlci01NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOSAxOToyMDoyMywwMDggW1dvcmtlci01NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE5OjIwOjIzLDAwOCBbV29ya2VyLTU2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE5OjIwOjIzLDAxMiBbV29ya2VyLTU2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTk6MjA6MzEsNzU3IFtXb3JrZXItNTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxOToyMDozMSw3NTcgW1dvcmtlci01ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTkgMTk6MjE6MjIsODY5IFtXb3JrZXItNTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxOToyMToyMiw4NjkgW1dvcmtlci01MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTkgMTk6MzE6MDQsODE2IFtXb3JrZXItNTY6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTk6MzE6MDQsODE3IFtXb3JrZXItNTY6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDYtMTkgMTk6MzE6MTcsMTQ5IFtXb3JrZXItNTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xOSAxOTozMToxNyw4NTUgW1dvcmtlci01NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2RlL2tvcmFwL3NlcnZpY2VzL3V0aWxzLzAuMS1TTkFPU0hPVC91dGlscy0wLjEtU05BT1NIT1QucG9tCisyMDIwLTA2LTE5IDE5OjMxOjE3LDg3OCBbV29ya2VyLTU2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFRoZSBQT00gZm9yIGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOmphcjowLjEtU05BT1NIT1QgaXMgbWlzc2luZywgbm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKzIwMjAtMDYtMTkgMTk6MzE6MTgsMDQ2IFtXb3JrZXItNTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9kZS9rb3JhcC9zZXJ2aWNlcy91dGlscy8wLjEtU05BT1NIT1QvdXRpbHMtMC4xLVNOQU9TSE9ULmphcgorMjAyMC0wNi0xOSAxOTozMToxOCwxMDIgW1dvcmtlci01NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBUaGUgUE9NIGZvciBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczpqYXI6MC4xLVNOQU9TSE9UIGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA2LTE5IDE5OjMxOjE4LDQ0OSBbV29ya2VyLTU2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTk6MzE6MTgsNDUwIFtXb3JrZXItNTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTk6MzE6MTgsNDUxIFtXb3JrZXItNTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxOTozMToxOCw0NTMgW1dvcmtlci01NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOSAxOTozMToxOCw0NTMgW1dvcmtlci01NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE5OjMxOjE4LDQ1MyBbV29ya2VyLTU2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE5OjMxOjE4LDQ1NiBbV29ya2VyLTU2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTk6MzE6MTksNDQwIFtXb3JrZXItNTY6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3IgZGUua29yYXAuc2VydmljZXM6dXRpbHM6amFyOjAuMS1TTkFPU0hPVCBpcyBtaXNzaW5nLCBubyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorMjAyMC0wNi0xOSAxOTozMToxOSw3NzggW1dvcmtlci01NjogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2RlL2tvcmFwL3NlcnZpY2VzL3V0aWxzLzAuMS1TTkFPU0hPVC91dGlscy0wLjEtU05BT1NIT1Qtc291cmNlcy5qYXIKKzIwMjAtMDYtMTkgMTk6MzE6MTksODAwIFtXb3JrZXItNTY6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIEVSUk9SIG8uZS5tLmouaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iIC0gQ291bGQgbm90IGRvd25sb2FkIHNvdXJjZXMgZm9yIGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFPU0hPVAorb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb246IENvdWxkIG5vdCByZXNvbHZlIGFydGlmYWN0IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOmphcjpzb3VyY2VzOjAuMS1TTkFPU0hPVAorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6Nzc2KSB+W29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6MSkgfltvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTEyKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3NDMpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3MjApIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNzkpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkQXR0YWNobWVudHMoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjU0KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZE1hdmVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjIyMSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjE2MSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNykgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNTEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5leGVjdXRlKE1hdmVuSW1wbC5qYXZhOjEzNTUpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM1KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorMjAyMC0wNi0xOSAxOTozNDowMywxNjAgW1dvcmtlci01ODogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xOSAxOTozNDowMywyMDAgW1dvcmtlci01ODogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDE5OjM0OjAzLDI1NSBbV29ya2VyLTU4OiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMTk6MzQ6MDMsMzQ0IFtXb3JrZXItNTg6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTk6MzQ6MDMsNzQwIFtXb3JrZXItNTY6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMTk6MzQ6MDMsNzQ2IFtXb3JrZXItNTY6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE5OjM0OjAzLDc1NSBbV29ya2VyLTU2OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTk6MzQ6MDMsNzU3IFtXb3JrZXItNTY6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE5OjM0OjAzLDc2MiBbV29ya2VyLTU2OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTk6MzQ6MDMsNzYyIFtXb3JrZXItNTY6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE5OjM0OjAzLDc2MiBbV29ya2VyLTU2OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTk6MzQ6MDMsNzY3IFtXb3JrZXItNTY6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE5OjM0OjAzLDgzOSBbV29ya2VyLTU2OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxOTozNDowMyw4NDEgW1dvcmtlci01NjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTk6MzQ6MDMsODQzIFtXb3JrZXItNTY6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE5OjM0OjAzLDg0NSBbV29ya2VyLTU2OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOSAxOTozNDowMyw4NTcgW1dvcmtlci01NjogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTk6MzQ6MDMsODU5IFtXb3JrZXItNTY6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAxOTozNDowMyw4NjAgW1dvcmtlci01NjogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTk6MzQ6MDMsODYyIFtXb3JrZXItNTY6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOSAxOTozNDo1Myw5OTggW1dvcmtlci02NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE5OjM0OjUzLDk5OCBbV29ya2VyLTY1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOSAxOTozNzowOSw3MjEgW1dvcmtlci02MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6R2xlbW1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA2LTE5IDE5OjM3OjA5LDgxMyBbV29ya2VyLTYyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxOTozNzowOSw4MTQgW1dvcmtlci02MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxOTozNzowOSw4ODYgW1dvcmtlci02MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMTk6Mzc6MDksODg2IFtXb3JrZXItNjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMTk6Mzc6MDksOTc2IFtXb3JrZXItNjI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxOTozNzowOSw5NzggW1dvcmtlci02MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAxOTozNzowOSw5NzkgW1dvcmtlci02MjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE5OjM3OjA5LDk4MSBbV29ya2VyLTYyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE5OjM3OjA5LDk4MSBbV29ya2VyLTYyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTk6Mzc6MDksOTgxIFtXb3JrZXItNjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTk6Mzc6MDksOTg0IFtXb3JrZXItNjI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxOTozNzozMCwyMjAgW1dvcmtlci02NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxOTozNzozMCwyMjAgW1dvcmtlci02NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNi0xOSAxOTozNzozNyw4MTAgW1dvcmtlci02NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE5OjM3OjM3LDgxMCBbV29ya2VyLTY1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOSAxOTozOToyMSwwODcgW1dvcmtlci02ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMTk6Mzk6MjEsMDg4IFtXb3JrZXItNjg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMTk6Mzk6MjEsMDkzIFtXb3JrZXItNjg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxOTozOToyMSwwOTggW1dvcmtlci02ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAxOTozOToyMSwwOTkgW1dvcmtlci02ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE5OjM5OjIxLDEwMSBbV29ya2VyLTY4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE5OjM5OjIxLDEwMiBbV29ya2VyLTY4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTk6Mzk6MjEsMTAyIFtXb3JrZXItNjg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTk6Mzk6MjEsMTA3IFtXb3JrZXItNjg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxOTozOTozOSw2MzkgW1dvcmtlci02MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE5OjM5OjM5LDYzOSBbV29ya2VyLTYyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOSAxOTo0MToxNCw4OTAgW1dvcmtlci02MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxOTo0MToxNCw4OTAgW1dvcmtlci02MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNi0xOSAxOTo0MToyMiwzMDMgW1dvcmtlci02MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE5OjQxOjIyLDMwMyBbV29ya2VyLTYyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOSAxOTo0Mjo1MSw3MzkgW1dvcmtlci02ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6R2xlbW1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA2LTE5IDE5OjQyOjUxLDc4NyBbV29ya2VyLTY4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxOTo0Mjo1MSw3ODggW1dvcmtlci02ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxOTo0Mjo1MSw4NjkgW1dvcmtlci02ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMTk6NDI6NTEsODY5IFtXb3JrZXItNjg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMTk6NDI6NTIsMjU3IFtXb3JrZXItNjg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxOTo0Mjo1MiwyNTggW1dvcmtlci02ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAxOTo0Mjo1MiwyNjAgW1dvcmtlci02ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE5OjQyOjUyLDI2MSBbV29ya2VyLTY4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE5OjQyOjUyLDI2MiBbV29ya2VyLTY4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTk6NDI6NTIsMjYyIFtXb3JrZXItNjg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTk6NDI6NTIsMjY2IFtXb3JrZXItNjg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxOTo0Mjo1OCwwMTkgW1dvcmtlci02MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxOTo0Mjo1OCwwMTkgW1dvcmtlci02MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNi0xOSAxOTo0MzowNSw4NTggW1dvcmtlci02ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE5OjQzOjA1LDg1OCBbV29ya2VyLTY4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOSAxOTo0MzozNiwyOTUgW1dvcmtlci02NzogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDE5OjQzOjM2LDI5NiBbV29ya2VyLTY3OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxOTo0NjozOCw5NjAgW1dvcmtlci02ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6R2xlbW1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA2LTE5IDE5OjQ2OjM5LDAwNSBbV29ya2VyLTY4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxOTo0NjozOSwwMDYgW1dvcmtlci02ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxOTo0NjozOSwwNzIgW1dvcmtlci02ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMTk6NDY6MzksMDcyIFtXb3JrZXItNjg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMTk6NDY6MzksMzA2IFtXb3JrZXItNjg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxOTo0NjozOSwzMDggW1dvcmtlci02ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAxOTo0NjozOSwzMDkgW1dvcmtlci02ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE5OjQ2OjM5LDMxMCBbV29ya2VyLTY4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE5OjQ2OjM5LDMxMSBbV29ya2VyLTY4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTk6NDY6MzksMzExIFtXb3JrZXItNjg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTk6NDY6MzksMzE0IFtXb3JrZXItNjg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxOTo0Njo0Nyw3NjUgW1dvcmtlci02ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE5OjQ2OjQ3LDc2NSBbV29ya2VyLTY4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOSAxOTo1NTo0MiwxNTcgW1dvcmtlci02NzogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDE5OjU1OjQyLDE1OCBbV29ya2VyLTY3OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxOTo1NTo0NiwxMjYgW1dvcmtlci02NTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6R2xlbW1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA2LTE5IDE5OjU1OjQ2LDE2NiBbV29ya2VyLTY1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxOTo1NTo0NiwxNjcgW1dvcmtlci02NTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxOTo1NTo0NiwzNDUgW1dvcmtlci02NTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE5OjU1OjQ2LDM0NyBbV29ya2VyLTY1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE5OjU1OjQ2LDM0OCBbV29ya2VyLTY1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTk6NTU6NDYsMzUwIFtXb3JrZXItNjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTk6NTU6NDYsMzUwIFtXb3JrZXItNjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxOTo1NTo0NiwzNTAgW1dvcmtlci02NTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxOTo1NTo0NiwzNTQgW1dvcmtlci02NTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE5OjU1OjUzLDE3OSBbV29ya2VyLTcyOiBMb2FkaW5nIEVmZmVjdGl2ZSBQT00uLi5dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDE5OjU1OjUzLDE4MCBbV29ya2VyLTcyOiBMb2FkaW5nIEVmZmVjdGl2ZSBQT00uLi5dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMjA6MDU6NDYsMjE2IFtXb3JrZXItNzM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAyMDowNTo0NiwyMjAgW1dvcmtlci03MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAyMDowNTo0NiwyMjMgW1dvcmtlci03MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDIwOjA1OjQ2LDIyNSBbV29ya2VyLTczOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDIwOjA1OjU2LDI3MSBbV29ya2VyLTcyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMjA6MDU6NTYsMjcxIFtXb3JrZXItNzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE5IDIwOjA2OjA2LDU4NCBbV29ya2VyLTcyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDIwOjA2OjA2LDU4NCBbV29ya2VyLTcyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA2LTE5IDIwOjA2OjEzLDgwNCBbV29ya2VyLTc0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAyMDowNjoxMyw4MDkgW1dvcmtlci03NDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDIwOjA2OjEzLDgxMCBbV29ya2VyLTc0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAyMDowNjoxMyw4MTQgW1dvcmtlci03NDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDIwOjA2OjEzLDgxNCBbV29ya2VyLTc0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAyMDowNjoxMyw4MTQgW1dvcmtlci03NDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDIwOjA2OjEzLDgyMSBbV29ya2VyLTc0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAyMDowNjoxMyw5OTUgW1dvcmtlci03NDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDIwOjA2OjEzLDk5OCBbV29ya2VyLTc0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAyMDowNjoxNCwwMDAgW1dvcmtlci03NDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAyMDowNjoxNCwwMDEgW1dvcmtlci03NDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMjA6MDY6MTQsMDAzIFtXb3JrZXItNzQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMjA6MDY6MTksNTQzIFtXb3JrZXItNzM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAyMDowNjoxOSw1NDMgW1dvcmtlci03MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTkgMjA6MDc6NDUsMTEyIFtXb3JrZXItNzI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAyMDowNzo0NSwxMTQgW1dvcmtlci03MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAyMDowNzo0NSwxMTQgW1dvcmtlci03MjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDIwOjA3OjQ1LDExNiBbV29ya2VyLTcyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDIwOjA3OjUwLDY3NCBbV29ya2VyLTczOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMjA6MDc6NTAsNjc1IFtXb3JrZXItNzM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE5IDIwOjA4OjI0LDQ4NyBbV29ya2VyLTcyOiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDIwOjA4OjI0LDY3NCBbV29ya2VyLTc1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAyMDowODoyNCw2NzYgW1dvcmtlci03NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDIwOjA4OjI0LDY3OCBbV29ya2VyLTc1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAyMDowODoyNCw2NzkgW1dvcmtlci03NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDIwOjA4OjI0LDY4MCBbV29ya2VyLTc1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAyMDowODoyNCw2ODAgW1dvcmtlci03NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDIwOjA4OjI0LDY4NCBbV29ya2VyLTc1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAyMDowODoyNCw3OTUgW1dvcmtlci03NTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMjA6MDg6MjQsNzk3IFtXb3JrZXItNzU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMjA6MDg6MjQsNzk4IFtXb3JrZXItNzU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDIwOjA4OjI0LDgwMCBbV29ya2VyLTc1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDIwOjA4OjM0LDUwNyBbV29ya2VyLTczOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDIwOjA4OjM0LDUwOCBbV29ya2VyLTczOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA2LTE5IDIwOjA4OjQwLDk5OCBbV29ya2VyLTc0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMjA6MDg6NDEsMDAzIFtXb3JrZXItNzQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMjA6MDg6NDEsMDA0IFtXb3JrZXItNzQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAyMDowODo0MSwwMDUgW1dvcmtlci03NDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOSAyMDowODo0MSwwMDYgW1dvcmtlci03NDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDIwOjA4OjQxLDAwNiBbV29ya2VyLTc0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDIwOjA4OjQxLDAwOSBbV29ya2VyLTc0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMjA6MDg6NDYsMjI4IFtXb3JrZXItNzM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAyMDowODo0NiwyMjkgW1dvcmtlci03MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTkgMjA6MTI6NDcsMjI0IFtXb3JrZXItNzY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xOSAyMDoxMjo0NywyNzEgW1dvcmtlci03NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMjA6MTI6NDcsMjcyIFtXb3JrZXItNzY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMjA6MTI6NDcsMzU2IFtXb3JrZXItNzY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDIwOjEyOjQ3LDM1NiBbV29ya2VyLTc2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDIwOjEyOjQ3LDY4MyBbV29ya2VyLTc2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMjA6MTI6NDcsNjg0IFtXb3JrZXItNzY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMjA6MTI6NDcsNjg1IFtXb3JrZXItNzY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAyMDoxMjo0Nyw2ODcgW1dvcmtlci03NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOSAyMDoxMjo0Nyw2ODggW1dvcmtlci03NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDIwOjEyOjQ3LDY4OCBbV29ya2VyLTc2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDIwOjEyOjQ3LDY5MiBbV29ya2VyLTc2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMjA6MTM6MDcsOTIyIFtXb3JrZXItNzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAyMDoxMzowNyw5MjIgW1dvcmtlci03NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTkgMjA6MTQ6MDUsNzE4IFtXb3JrZXItNzc6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAyMDoxNDowNSw3MTkgW1dvcmtlci03NzogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMjA6MTQ6MTEsODg4IFtXb3JrZXItNzU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xOSAyMDoxNDoxMSw5MzQgW1dvcmtlci03NTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMjA6MTQ6MTEsOTM1IFtXb3JrZXItNzU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMjA6MTQ6MTIsMTAzIFtXb3JrZXItNzU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAyMDoxNDoxMiwxMDQgW1dvcmtlci03NTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAyMDoxNDoxMiwxMDUgW1dvcmtlci03NTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDIwOjE0OjEyLDEwNyBbV29ya2VyLTc1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDIwOjE0OjEyLDEwNyBbV29ya2VyLTc1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMjA6MTQ6MTIsMTA4IFtXb3JrZXItNzU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMjA6MTQ6MTIsMTExIFtXb3JrZXItNzU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAyMDoxNjo0NSwwOTkgW1dvcmtlci03NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDIwOjE2OjQ1LDA5OSBbV29ya2VyLTc2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOSAyMDoxNzoyOSw5OTUgW1dvcmtlci03MzogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDIwOjE3OjI5LDk5NiBbV29ya2VyLTczOiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAyMDoxNzozMyw1MjIgW1dvcmtlci03NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6R2xlbW1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA2LTE5IDIwOjE3OjMzLDU1NiBbV29ya2VyLTc2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAyMDoxNzozMyw1NTcgW1dvcmtlci03NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAyMDoxNzozMyw2NjYgW1dvcmtlci03NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDIwOjE3OjMzLDY2OCBbV29ya2VyLTc2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDIwOjE3OjMzLDY2OSBbV29ya2VyLTc2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMjA6MTc6MzMsNjcxIFtXb3JrZXItNzY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMjA6MTc6MzMsNjcxIFtXb3JrZXItNzY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAyMDoxNzozMyw2NzEgW1dvcmtlci03NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAyMDoxNzozMyw2NzUgW1dvcmtlci03NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDIwOjE3OjM5LDY0NSBbV29ya2VyLTc0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMjA6MTc6MzksNjQ1IFtXb3JrZXItNzQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE5IDIwOjIzOjQ5LDM0NyBbV29ya2VyLTc0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDIwOjIzOjQ5LDM0NyBbV29ya2VyLTc0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA2LTE5IDIwOjI0OjAxLDA0MiBbV29ya2VyLTc3OiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMjA6MjQ6MDEsMDQzIFtXb3JrZXItNzc6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDIwOjI0OjAxLDI2OCBbV29ya2VyLTczOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAyMDoyNDowMSwyODUgW1dvcmtlci03MzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDIwOjI0OjAxLDI4NiBbV29ya2VyLTczOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAyMDoyNDowMSwyODggW1dvcmtlci03MzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDIwOjI0OjAxLDI4OCBbV29ya2VyLTczOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAyMDoyNDowMSwyODggW1dvcmtlci03MzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDIwOjI0OjAxLDI5MyBbV29ya2VyLTczOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAyMDoyNDoxMSw5NzcgW1dvcmtlci03NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDIwOjI0OjExLDk3OCBbV29ya2VyLTc1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOSAyMDoyNjoxMiw1MTUgW1dvcmtlci03NzogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xOSAyMDoyNjoxMiw1NTUgW1dvcmtlci03NzogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDIwOjI2OjEyLDU1NSBbV29ya2VyLTc3OiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAyMDoyNjoxMiw3NDUgW1dvcmtlci03NzogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDIwOjI2OjEyLDc0NiBbV29ya2VyLTc3OiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAyMDoyNjoxMywwNTQgW1dvcmtlci03NzogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAyMDoyNjoxMyw0MjIgW1dvcmtlci03NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAyMDoyNjoxMyw0MjMgW1dvcmtlci03NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDIwOjI2OjEzLDQyOSBbV29ya2VyLTc1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAyMDoyNjoxMyw0MzUgW1dvcmtlci03NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDIwOjI2OjEzLDQzNiBbV29ya2VyLTc1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAyMDoyNjoxMyw0NDIgW1dvcmtlci03NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDIwOjI2OjEzLDQ0MyBbV29ya2VyLTc1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAyMDoyNjoxMyw0NDMgW1dvcmtlci03NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDIwOjI2OjEzLDQ0OCBbV29ya2VyLTc1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAyMDoyNjoxOCw2NjYgW1dvcmtlci04MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDIwOjI2OjE4LDY2NiBbV29ya2VyLTgxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0yMyAxODo0NTozMCw2MjkgW1dvcmtlci0yOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMC0wNi0yMyAxOTowNDowNiw0NzIgW1dvcmtlci05OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudAorMjAyMC0wNi0yMyAxOTowNDowNiw0ODggW1dvcmtlci05OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMjMgMTk6MDQ6MjksODU4IFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0yMyAxOTowNDoyOSw4NjEgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTIzIDE5OjA0OjI5LDg2NCBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMjMgMTk6MDQ6MjksODY2IFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0yMyAxOTowNDozMCw3NDQgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTIzIDE5OjA0OjMwLDc0NyBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0yMyAxOTowNDozMCw3NTAgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTIzIDE5OjA0OjMwLDc1MiBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0yMyAxOTowNDozMSw1NzIgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMjMgMTk6MDQ6MzEsNTczIFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMjMgMTk6MDQ6MzEsNzI1IFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0yMyAxOTowNDozMSw3MjcgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0yMyAxOTowNDozMSw3MjkgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTIzIDE5OjA0OjMxLDczMSBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTIzIDE5OjA0OjU0LDkwNCBbV29ya2VyLTE1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTIzIDE5OjA0OjU0LDkwNCBbV29ya2VyLTE1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA2LTIzIDE5OjA1OjAwLDczMSBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMjMgMTk6MDU6MDAsNzM0IFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMjMgMTk6MDU6MDAsNzM3IFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0yMyAxOTowNTowMCw3MzkgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0yMyAxOTowNTowMCw3NDAgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTIzIDE5OjA1OjAwLDc0MSBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTIzIDE5OjA1OjAwLDc4MyBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMjMgMTk6MDU6MDUsNzQxIFtXb3JrZXItMTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0yMyAxOTowNTowNSw3NDEgW1dvcmtlci0xNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMjMgMTk6MDg6MjIsNzAyIFtXb3JrZXItMTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0yMyAxOTowODoyMiw3MDIgW1dvcmtlci0xNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMjMgMTk6MjI6MzMsNTY4IFtXb3JrZXItOTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTIzIDE5OjIyOjMzLDU3NyBbV29ya2VyLTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMjMgMTk6MjI6MzMsNTc5IFtXb3JrZXItOTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTIzIDE5OjIyOjMzLDU4MCBbV29ya2VyLTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMjMgMTk6MjI6MzgsNjI3IFtXb3JrZXItMTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0yMyAxOToyMjozOCw2MjcgW1dvcmtlci0xOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMjQgMTc6MDM6MTUsNzA0IFtXb3JrZXItNjogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjAtMDYtMjkgMTY6NTE6MTUsNDM4IFtXb3JrZXItNTogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjAtMDYtMjkgMTc6MjI6MDgsNTcxIFtXb3JrZXItMTQ6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMC0wNi0yOSAxNzoyNTowNiw1NzggW1dvcmtlci01OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMjkgMTc6MjU6MDYsNTc5IFtXb3JrZXItNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMjkgMTc6MjU6MzYsOTgyIFtXb3JrZXItMTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0yOSAxNzoyNTozNiw5ODUgW1dvcmtlci0xNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTI5IDE3OjI1OjM2LDk4OCBbV29ya2VyLTE3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMjkgMTc6MjU6MzYsOTkwIFtXb3JrZXItMTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0yOSAxNzoyNTozOCwzNzAgW1dvcmtlci0xNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTI5IDE3OjI1OjM4LDM4MCBbV29ya2VyLTE3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0yOSAxNzoyNTozOCwzODQgW1dvcmtlci0xNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTI5IDE3OjI1OjM4LDM4NiBbV29ya2VyLTE3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0yOSAxNzoyNTozOSwyODkgW1dvcmtlci0xNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMjkgMTc6MjU6MzksMjkwIFtXb3JrZXItMTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMjkgMTc6MjU6MzksMzUwIFtXb3JrZXItMTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0yOSAxNzoyNTozOSwzNjYgW1dvcmtlci0xNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0yOSAxNzoyNTozOSwzNjggW1dvcmtlci0xNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTI5IDE3OjI1OjM5LDM3MiBbV29ya2VyLTE3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTI5IDE3OjI1OjQzLDc4MiBbV29ya2VyLTE3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTI5IDE3OjI1OjQzLDc4NyBbV29ya2VyLTE3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMjkgMTc6MjU6NDMsNzg5IFtXb3JrZXItMTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTI5IDE3OjI1OjQzLDc5MSBbV29ya2VyLTE3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMjkgMTc6MjU6NDMsNzk0IFtXb3JrZXItMTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTI5IDE3OjI1OjQ0LDA4NiBbV29ya2VyLTE3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0yOSAxNzoyNTo0NCwwODcgW1dvcmtlci0xNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0yOSAxNzoyNTo0NCwwODcgW1dvcmtlci0xNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTI5IDE3OjI1OjQ0LDA5NSBbV29ya2VyLTE3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMjkgMTc6MjU6NDQsMDk3IFtXb3JrZXItMTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMjkgMTc6MjU6NDQsMTAzIFtXb3JrZXItMTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0yOSAxNzoyNTo0NCwxMTcgW1dvcmtlci0xNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0yOSAxNzoyNTo1MCw4ODcgW1dvcmtlci0xNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTI5IDE3OjI1OjUwLDg4NyBbV29ya2VyLTE3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0yOSAxNzozNjoxNCwzNzkgW1dvcmtlci0yNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTI5IDE3OjM2OjE0LDM3OSBbV29ya2VyLTI2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0yOSAxNzozNjozNCwzNzUgW1dvcmtlci0yNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTI5IDE3OjM2OjM0LDM3OSBbV29ya2VyLTI2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTI5IDE3OjM2OjM0LDM4MiBbV29ya2VyLTI2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMjkgMTc6MzY6MzQsMzg0IFtXb3JrZXItMjY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMjkgMTc6MzY6NDMsMzA1IFtXb3JrZXItMjA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0yOSAxNzozNjo0MywzMDUgW1dvcmtlci0yMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMjkgMTc6NDc6NDAsNDEzIFtXb3JrZXItMjM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0yOSAxNzo0Nzo0MCw0MTMgW1dvcmtlci0yMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMjkgMTc6NDc6NTIsNDk5IFtXb3JrZXItMjc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0yOSAxNzo0Nzo1Miw1MDEgW1dvcmtlci0yNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0yOSAxNzo0Nzo1Miw1MDIgW1dvcmtlci0yNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTI5IDE3OjQ3OjUyLDUwNCBbV29ya2VyLTI3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTI5IDE3OjQ3OjU3LDc3MCBbV29ya2VyLTI3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMjkgMTc6NDc6NTcsNzcwIFtXb3JrZXItMjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTI5IDE3OjUzOjA2LDc0OSBbV29ya2VyLTMxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMjkgMTc6NTM6MDYsNzUwIFtXb3JrZXItMzE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTI5IDE3OjUzOjE2LDE0OCBbV29ya2VyLTMwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMjkgMTc6NTM6MTYsMTUwIFtXb3JrZXItMzA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMjkgMTc6NTM6MTYsMTU0IFtXb3JrZXItMzA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0yOSAxNzo1MzoxNiwxNTYgW1dvcmtlci0zMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0yOSAxNzo1MzoyMyw0NjQgW1dvcmtlci0zMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTI5IDE3OjUzOjIzLDQ2NCBbV29ya2VyLTMxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0yOSAyMzowMDo0NSwzMzUgW1dvcmtlci01NzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTI5IDIzOjAwOjQ1LDMzNyBbV29ya2VyLTU3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTI5IDIzOjAwOjQ1LDMzOSBbV29ya2VyLTU3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMjkgMjM6MDA6NDUsMzQwIFtXb3JrZXItNTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMjkgMjM6MDA6NTMsOTIyIFtXb3JrZXItNTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0yOSAyMzowMDo1Myw5MjIgW1dvcmtlci01ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMjkgMjM6MDg6MjQsNjg3IFtXb3JrZXItNjI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0yOSAyMzowODoyNCw2OTIgW1dvcmtlci02MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0yOSAyMzowODoyNCw3MDYgW1dvcmtlci02MjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTI5IDIzOjA4OjI0LDcxMyBbV29ya2VyLTYyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTI5IDIzOjA4OjMwLDI4NSBbV29ya2VyLTU5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMjkgMjM6MDg6MzAsMjg1IFtXb3JrZXItNTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTI5IDIzOjE4OjIxLDY4MCBbV29ya2VyLTQ4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMjkgMjM6MTg6MjEsNjgwIFtXb3JrZXItNDg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTI5IDIzOjE4OjMwLDExNiBbV29ya2VyLTQ4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMjkgMjM6MTg6MzAsMTE3IFtXb3JrZXItNDg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMjkgMjM6MTg6MzAsMTE4IFtXb3JrZXItNDg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0yOSAyMzoxODozMCwxMjAgW1dvcmtlci00ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0yOSAyMzoxODozNSwzNjAgW1dvcmtlci02MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTI5IDIzOjE4OjM1LDM2MCBbV29ya2VyLTYzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0yOSAyMzoyMjoyMCwwNjcgW1dvcmtlci00ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTI5IDIzOjIyOjIwLDA2OCBbV29ya2VyLTQ4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTI5IDIzOjIyOjIwLDA3MCBbV29ya2VyLTQ4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMjkgMjM6MjI6MjAsMDcxIFtXb3JrZXItNDg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMjkgMjM6MjI6MjcsMDc5IFtXb3JrZXItNjM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0yOSAyMzoyMjoyNywwODAgW1dvcmtlci02MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMjkgMjM6MjQ6MDAsMjM0IFtXb3JrZXItNjg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0yOSAyMzoyNDowMCwyMzYgW1dvcmtlci02ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0yOSAyMzoyNDowMCwyNDAgW1dvcmtlci02ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTI5IDIzOjI0OjAwLDI0MiBbV29ya2VyLTY4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTI5IDIzOjI0OjA1LDI2NCBbV29ya2VyLTY3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMjkgMjM6MjQ6MDUsMjY0IFtXb3JrZXItNjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTI5IDIzOjMwOjA5LDg4OCBbV29ya2VyLTYyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMjkgMjM6MzA6MDksODkyIFtXb3JrZXItNjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMjkgMjM6MzA6MDksODk0IFtXb3JrZXItNjI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0yOSAyMzozMDowOSw4OTUgW1dvcmtlci02MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0yOSAyMzozMDoxNCw3NjAgW1dvcmtlci02OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTI5IDIzOjMwOjE0LDc2MCBbV29ya2VyLTY5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0yOSAyMzozMjoxNCwzNDYgW1dvcmtlci02OTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTI5IDIzOjMyOjE0LDM0OCBbV29ya2VyLTY5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTI5IDIzOjMyOjE0LDM0OSBbV29ya2VyLTY5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMjkgMjM6MzI6MTQsMzUxIFtXb3JrZXItNjk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMjkgMjM6MzI6MTgsNTUzIFtXb3JrZXItNjk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0yOSAyMzozMjoxOCw1NTMgW1dvcmtlci02OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMjkgMjM6MzQ6MDQsMzYzIFtXb3JrZXItNjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0yOSAyMzozNDowNCwzNjUgW1dvcmtlci02NTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0yOSAyMzozNDowNCwzNjkgW1dvcmtlci02NTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTI5IDIzOjM0OjA0LDM3MSBbV29ya2VyLTY1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTI5IDIzOjQ0OjE5LDQwMiBbV29ya2VyLTQ4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMjkgMjM6NDQ6MTksNDA0IFtXb3JrZXItNDg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMjkgMjM6NDQ6MTksNDA2IFtXb3JrZXItNDg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0yOSAyMzo0NDoxOSw0MDcgW1dvcmtlci00ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0yOSAyMzo0NzozNCw2MDggW1dvcmtlci03MDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTI5IDIzOjQ3OjM0LDYxNCBbV29ya2VyLTcwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTI5IDIzOjQ3OjM0LDYxNyBbV29ya2VyLTcwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMjkgMjM6NDc6MzQsNjE5IFtXb3JrZXItNzA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMjkgMjM6NDc6MzgsNDI0IFtXb3JrZXItNzA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0yOSAyMzo0NzozOCw0MjQgW1dvcmtlci03MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDctMDEgMTI6Mjk6MTQsNzcwIFtXb3JrZXItNzogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjAtMTAtMTIgMTI6MTU6MzUsMDY1IFtXb3JrZXItMTogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjAtMTAtMTUgMDk6NTI6NTQsMzY1IFtXb3JrZXItMjogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjEtMDktMjQgMTg6MjY6NTksOTE2IFtXb3JrZXItNDogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjEtMDktMjQgMTg6Mjg6NTksOTMwIFtXb3JrZXItMTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMS0wOS0yNCAxODoyODo1OSw5MzMgW1dvcmtlci0xMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMDktMjggMDk6MDc6NTcsMzYxIFtXb3JrZXItMTogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjEtMDktMjggMDk6MjE6MTUsMTA3IFtXb3JrZXItMTogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjEtMDktMjggMDk6MjM6NDIsMzk2IFtXb3JrZXItMTogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tQ2xpZW50XHBvbS54bWwuCisyMDIxLTA5LTI4IDA5OjIzOjQ1LDMzOSBbV29ya2VyLTI6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIEVSUk9SIG8uZS5tLmouaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iIC0gQ291bGQgbm90IGRvd25sb2FkIHNvdXJjZXMgZm9yIGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVAorb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb246IENvdWxkIG5vdCByZXNvbHZlIGFydGlmYWN0IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOmphcjpzb3VyY2VzOjAuMS1TTkFQU0hPVAorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6Nzc2KSB+W29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6MSkgfltvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTEyKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3NDMpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3MjApIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNzkpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkQXR0YWNobWVudHMoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjU0KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZE1hdmVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjIyMSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjE2MSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNykgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNTEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5leGVjdXRlKE1hdmVuSW1wbC5qYXZhOjEzNTUpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM1KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorMjAyMS0wOS0yOCAwOToyMzo0OCwzNzQgW1dvcmtlci0xOiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gQWRkaW5nIHNvdXJjZSBmb2xkZXIgL0dsZW1tQ2xpZW50L3NyYworMjAyMS0wOS0yOCAwOToyMzo0OCwzNzggW1dvcmtlci0xOiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gTm90IGFkZGluZyBzb3VyY2UgZm9sZGVyIC9HbGVtbUNsaWVudC9zcmMvdGVzdC9qYXZhIGJlY2F1c2UgaXQgb3ZlcmxhcHMgd2l0aCAvR2xlbW1DbGllbnQvc3JjCisyMDIxLTA5LTI4IDA5OjIzOjQ4LDcyNCBbV29ya2VyLTE6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyIC0gSW1wb3J0ZWQgYW5kIGNvbmZpZ3VyZWQgMSBwcm9qZWN0KHMpIGluIDIwIHNlYworMjAyMS0wOS0yOCAwOToyMzo0OSw0OTEgW1dvcmtlci00OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBFUlJPUiBvLmUubS5qLmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiAtIENvdWxkIG5vdCBkb3dubG9hZCBqYXZhZG9jIGZvciBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1QKK29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOiBDb3VsZCBub3QgcmVzb2x2ZSBhcnRpZmFjdCBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTpqYXI6amF2YWRvYzowLjEtU05BUFNIT1QKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjc3NikgfltvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjEpIH5bb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjExMikgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzQzKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzIwKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWQoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6Mjc5KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZEF0dGFjaG1lbnRzKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI2NSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRNYXZlbihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyMjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxNjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzcpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTUxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwuZXhlY3V0ZShNYXZlbkltcGwuamF2YToxMzU1KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KKzIwMjEtMDktMjggMDk6MjY6NTEsMDY0IFtXb3JrZXItMTogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzXHBvbS54bWwuCisyMDIxLTA5LTI4IDA5OjI3OjAyLDA1OCBbV29ya2VyLTE6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBBZGRpbmcgc291cmNlIGZvbGRlciAvR2xlbW1TZXJ2aWNlcy9zcmMKKzIwMjEtMDktMjggMDk6Mjc6MDIsMDU5IFtXb3JrZXItMTogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIE5vdCBhZGRpbmcgc291cmNlIGZvbGRlciAvR2xlbW1TZXJ2aWNlcy9zcmMvdGVzdC9qYXZhIGJlY2F1c2UgaXQgb3ZlcmxhcHMgd2l0aCAvR2xlbW1TZXJ2aWNlcy9zcmMKKzIwMjEtMDktMjggMDk6Mjc6MDMsMTk0IFtXb3JrZXItMTogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBFUlJPUiBvLmUubTJlLnd0cC5XVFBQcm9qZWN0Q29uZmlndXJhdG9yIC0gVW5hYmxlIHRvIGNvbmZpZ3VyZSBHbGVtbVNlcnZpY2VzCitvcmcuZWNsaXBzZS5tMmUud3RwLk1hcmtlZEV4Y2VwdGlvbjogVW5hYmxlIHRvIGNvbmZpZ3VyZSBHbGVtbVNlcnZpY2VzCisJYXQgb3JnLmVjbGlwc2UubTJlLnd0cC5BYnN0cmFjdFByb2plY3RDb25maWd1cmF0b3JEZWxlZ2F0ZS5jb25maWd1cmVQcm9qZWN0KEFic3RyYWN0UHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmphdmE6OTkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLnd0cC5XVFBQcm9qZWN0Q29uZmlndXJhdG9yLmNvbmZpZ3VyZShXVFBQcm9qZWN0Q29uZmlndXJhdG9yLmphdmE6NjgpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUucHJvamVjdC5jb25maWd1cmF0b3IuQWJzdHJhY3RMaWZlY3ljbGVNYXBwaW5nLmNvbmZpZ3VyZShBYnN0cmFjdExpZmVjeWNsZU1hcHBpbmcuamF2YToxMjApIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciQzLmNhbGwoUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6NTA4KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIkMy5jYWxsKFByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5qYXZhOjEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTUxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIudXBkYXRlUHJvamVjdENvbmZpZ3VyYXRpb24oUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6NTAxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuY29uZmlndXJlTmV3TWF2ZW5Qcm9qZWN0cyhQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YToyODgpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciQxLmNhbGwoUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6MTc1KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIkMS5jYWxsKFByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5qYXZhOjEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTUxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwuZXhlY3V0ZShNYXZlbkltcGwuamF2YToxMzU1KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuaW1wb3J0UHJvamVjdHMoUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6MTQzKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUudWkuaW50ZXJuYWwud2l6YXJkcy5JbXBvcnRNYXZlblByb2plY3RzSm9iJDEuZG9DcmVhdGVNYXZlblByb2plY3RzKEltcG9ydE1hdmVuUHJvamVjdHNKb2IuamF2YTo2OCkgW29yZy5lY2xpcHNlLm0yZS5jb3JlLnVpXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLnVpLmludGVybmFsLndpemFyZHMuQWJzdHJhY3RDcmVhdGVNYXZlblByb2plY3RzT3BlcmF0aW9uLnJ1bihBYnN0cmFjdENyZWF0ZU1hdmVuUHJvamVjdHNPcGVyYXRpb24uamF2YTo3MykgW29yZy5lY2xpcHNlLm0yZS5jb3JlLnVpXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLnVpLmludGVybmFsLndpemFyZHMuSW1wb3J0TWF2ZW5Qcm9qZWN0c0pvYi5ydW5JbldvcmtzcGFjZShJbXBvcnRNYXZlblByb2plY3RzSm9iLmphdmE6NzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZS51aV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5JbnRlcm5hbFdvcmtzcGFjZUpvYi5ydW4oSW50ZXJuYWxXb3Jrc3BhY2VKb2IuamF2YTozOSkgW29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzXzMuMTMuMC52MjAxODA1MTItMTEzOC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb246IE9uZSBvciBtb3JlIGNvbnN0cmFpbnRzIGhhdmUgbm90IGJlZW4gc2F0aXNmaWVkLgorCWF0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmludGVybmFsLkZhY2V0ZWRQcm9qZWN0Lm1vZGlmeUludGVybmFsKEZhY2V0ZWRQcm9qZWN0LmphdmE6MzYzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmludGVybmFsLkZhY2V0ZWRQcm9qZWN0Lm1lcmdlQ2hhbmdlc0ludGVybmFsKEZhY2V0ZWRQcm9qZWN0LmphdmE6MTE4MSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5pbnRlcm5hbC5GYWNldGVkUHJvamVjdC5hY2Nlc3MkMihGYWNldGVkUHJvamVjdC5qYXZhOjExMTcpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuaW50ZXJuYWwuRmFjZXRlZFByb2plY3QkMS5ydW4oRmFjZXRlZFByb2plY3QuamF2YTozMjQpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMjg5KSB+W29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzXzMuMTMuMC52MjAxODA1MTItMTEzOC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMzE2KSB+W29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzXzMuMTMuMC52MjAxODA1MTItMTEzOC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuaW50ZXJuYWwuRmFjZXRlZFByb2plY3QubW9kaWZ5KEZhY2V0ZWRQcm9qZWN0LmphdmE6MzM5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS53dHAuV2ViUHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmNvbmZpZ3VyZShXZWJQcm9qZWN0Q29uZmlndXJhdG9yRGVsZWdhdGUuamF2YToxMzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLnd0cC5BYnN0cmFjdFByb2plY3RDb25maWd1cmF0b3JEZWxlZ2F0ZS5jb25maWd1cmVQcm9qZWN0KEFic3RyYWN0UHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmphdmE6OTUpIH5bbmE6bmFdCisJLi4uIDIwIGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMS0wOS0yOCAwOToyNzowMywyODcgW1dvcmtlci0xOiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciAtIEltcG9ydGVkIGFuZCBjb25maWd1cmVkIDEgcHJvamVjdChzKSBpbiAxMyBzZWMKKzIwMjEtMDktMjggMDk6NDU6NDUsNDcxIFtXb3JrZXItMTM6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEpzb25UcmF2ZXJzZVxwb20ueG1sLgorMjAyMS0wOS0yOCAwOTo0NTo0NSw3MjQgW1dvcmtlci0xMzogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tQ2xpZW50XHBvbS54bWwuCisyMDIxLTA5LTI4IDA5OjQ1OjQ1LDc1NSBbV29ya2VyLTEzOiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMDktMjggMDk6NDU6NDUsOTEzIFtXb3JrZXItMTM6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6R2xlbW1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMS0wOS0yOCAwOTo0NTo0NSw5OTMgW1dvcmtlci0xMzogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTA5LTI4IDA5OjQ1OjQ3LDA0MyBbV29ya2VyLTEzOiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gQWRkaW5nIHNvdXJjZSBmb2xkZXIgL0pzb25UcmF2ZXJzZS9zcmMKKzIwMjEtMDktMjggMDk6NDU6NDcsMDQ1IFtXb3JrZXItMTM6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBOb3QgYWRkaW5nIHNvdXJjZSBmb2xkZXIgL0pzb25UcmF2ZXJzZS9zcmMvdGVzdC9qYXZhIGJlY2F1c2UgaXQgb3ZlcmxhcHMgd2l0aCAvSnNvblRyYXZlcnNlL3NyYworMjAyMS0wOS0yOCAwOTo0NTo0NywyNjkgW1dvcmtlci0xMzogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIgLSBJbXBvcnRlZCBhbmQgY29uZmlndXJlZCAxIHByb2plY3QocykgaW4gMiBzZWMKKzIwMjEtMDktMjggMDk6NDY6MTUsMTI1IFtXb3JrZXItMTY6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6dGVzdHM6MC4xIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFByb2plY3QtVGVzdHNccG9tLnhtbC4KKzIwMjEtMDktMjggMDk6NDY6MTUsMzgyIFtXb3JrZXItMTY6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0wOS0yOCAwOTo0NjoxNSwzODMgW1dvcmtlci0xNjogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMDktMjggMDk6NDY6MTUsNTMwIFtXb3JrZXItMTY6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBBZGRpbmcgc291cmNlIGZvbGRlciAvdGVzdHMvc3JjCisyMDIxLTA5LTI4IDA5OjQ2OjE1LDUzMiBbV29ya2VyLTE2OiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gTm90IGFkZGluZyBzb3VyY2UgZm9sZGVyIC90ZXN0cy9zcmMvdGVzdC9qYXZhIGJlY2F1c2UgaXQgb3ZlcmxhcHMgd2l0aCAvdGVzdHMvc3JjCisyMDIxLTA5LTI4IDA5OjQ2OjE1LDY4MSBbV29ya2VyLTE2OiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciAtIEltcG9ydGVkIGFuZCBjb25maWd1cmVkIDEgcHJvamVjdChzKSBpbiAwIHNlYworMjAyMS0wOS0yOCAwOTo0NjoxNiw2MjUgW1dvcmtlci0xNTogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0wOS0yOCAwOTo0NjoxNiw2MjYgW1dvcmtlci0xNTogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIxLTA5LTI4IDA5OjQ2OjE2LDY0OSBbV29ya2VyLTE1OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBFUlJPUiBvLmUubS5qLmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiAtIENvdWxkIG5vdCBkb3dubG9hZCBzb3VyY2VzIGZvciBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UCitvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjogQ291bGQgbm90IHJlc29sdmUgYXJ0aWZhY3QgZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOmphcjpzb3VyY2VzOjAuMS1TTkFQU0hPVAorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6Nzc2KSB+W29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6MSkgfltvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTEyKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3NDMpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3MjApIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNzkpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkQXR0YWNobWVudHMoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjU0KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZE1hdmVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjIyMSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjE2MSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNykgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNTEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5leGVjdXRlKE1hdmVuSW1wbC5qYXZhOjEzNTUpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM1KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorMjAyMS0wOS0yOCAwOTo0NjoxNiw2NzYgW1dvcmtlci0xNTogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gRVJST1Igby5lLm0uai5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IgLSBDb3VsZCBub3QgZG93bmxvYWQgamF2YWRvYyBmb3IgZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVAorb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb246IENvdWxkIG5vdCByZXNvbHZlIGFydGlmYWN0IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjpqYXI6amF2YWRvYzowLjEtU05BUFNIT1QKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjc3NikgfltvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjEpIH5bb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjExMikgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzQzKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzIwKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWQoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6Mjc5KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZEF0dGFjaG1lbnRzKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI2NSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRNYXZlbihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyMjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxNjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzcpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTUxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwuZXhlY3V0ZShNYXZlbkltcGwuamF2YToxMzU1KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KKzIwMjEtMDktMjggMDk6NDY6NDQsNDUwIFtXb3JrZXItMTU6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFV0aWxzXHBvbS54bWwuCisyMDIxLTA5LTI4IDA5OjQ2OjQ0LDY1MiBbV29ya2VyLTE1OiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjEtMDktMjggMDk6NDY6NDQsNzQ5IFtXb3JrZXItMTU6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMDktMjggMDk6NDY6NDQsNzUxIFtXb3JrZXItMTU6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0wOS0yOCAwOTo0Njo0NSwyMDUgW1dvcmtlci0xNTogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIEFkZGluZyBzb3VyY2UgZm9sZGVyIC91dGlscy9zcmMKKzIwMjEtMDktMjggMDk6NDY6NDUsMjA2IFtXb3JrZXItMTU6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBOb3QgYWRkaW5nIHNvdXJjZSBmb2xkZXIgL3V0aWxzL3NyYy90ZXN0L2phdmEgYmVjYXVzZSBpdCBvdmVybGFwcyB3aXRoIC91dGlscy9zcmMKKzIwMjEtMDktMjggMDk6NDY6NDUsMzc3IFtXb3JrZXItMTU6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyIC0gSW1wb3J0ZWQgYW5kIGNvbmZpZ3VyZWQgMSBwcm9qZWN0KHMpIGluIDEgc2VjCisyMDIxLTA5LTI4IDA5OjQ3OjA1LDI1NiBbV29ya2VyLTEzOiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlSmFyXHBvbS54bWwuCisyMDIxLTA5LTI4IDA5OjQ3OjA1LDQzOCBbV29ya2VyLTEzOiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOnRlc3RzOjAuMSBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxQcm9qZWN0LVRlc3RzXHBvbS54bWwuCisyMDIxLTA5LTI4IDA5OjQ3OjA1LDUwOCBbV29ya2VyLTEzOiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMDktMjggMDk6NDc6MDUsNTEwIFtXb3JrZXItMTM6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIxLTA5LTI4IDA5OjQ3OjA1LDUxMyBbV29ya2VyLTEzOiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC93Zm9ybVNlcnZpY2VKYXI6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvd2Zvcm1TZXJ2aWNlSmFyL3RhcmdldC9jbGFzc2VzCisyMDIxLTA5LTI4IDA5OjQ3OjA2LDA3MyBbV29ya2VyLTEzOiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gQWRkaW5nIHNvdXJjZSBmb2xkZXIgL3dmb3JtU2VydmljZUphci9zcmMKKzIwMjEtMDktMjggMDk6NDc6MDYsMDc0IFtXb3JrZXItMTM6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBOb3QgYWRkaW5nIHNvdXJjZSBmb2xkZXIgL3dmb3JtU2VydmljZUphci9zcmMvdGVzdC9qYXZhIGJlY2F1c2UgaXQgb3ZlcmxhcHMgd2l0aCAvd2Zvcm1TZXJ2aWNlSmFyL3NyYworMjAyMS0wOS0yOCAwOTo0NzowNiwxOTcgW1dvcmtlci0xMzogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIgLSBJbXBvcnRlZCBhbmQgY29uZmlndXJlZCAxIHByb2plY3QocykgaW4gMSBzZWMKKzIwMjEtMDktMjggMDk6NDc6MjQsNTA4IFtXb3JrZXItMTA6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMS0wOS0yOCAwOTo0NzoyNCw2MTEgW1dvcmtlci0xMDogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvdXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC91dGlscy90YXJnZXQvY2xhc3NlcworMjAyMS0wOS0yOCAwOTo0NzoyNCw2MTIgW1dvcmtlci0xMDogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTA5LTI4IDA5OjQ3OjI0LDYxMyBbV29ya2VyLTEwOiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMS0wOS0yOCAwOTo0NzoyNCw3MDMgW1dvcmtlci0xMDogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTA5LTI4IDA5OjQ3OjI0LDgxNyBbV29ya2VyLTEwOiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC91dGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIxLTA5LTI4IDA5OjQ3OjI0LDgxOSBbV29ya2VyLTEwOiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMDktMjggMDk6NDc6MjQsODE5IFtXb3JrZXItMTA6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIxLTA5LTI4IDA5OjQ3OjI1LDExMSBbV29ya2VyLTEwOiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gQWRkaW5nIHNvdXJjZSBmb2xkZXIgL3dmb3JtU2VydmljZXMvc3JjCisyMDIxLTA5LTI4IDA5OjQ3OjI1LDExMiBbV29ya2VyLTEwOiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gTm90IGFkZGluZyBzb3VyY2UgZm9sZGVyIC93Zm9ybVNlcnZpY2VzL3NyYy90ZXN0L2phdmEgYmVjYXVzZSBpdCBvdmVybGFwcyB3aXRoIC93Zm9ybVNlcnZpY2VzL3NyYworMjAyMS0wOS0yOCAwOTo0NzoyNSwzNjkgW1dvcmtlci0xMDogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBFUlJPUiBvLmUubTJlLnd0cC5XVFBQcm9qZWN0Q29uZmlndXJhdG9yIC0gVW5hYmxlIHRvIGNvbmZpZ3VyZSB3Zm9ybVNlcnZpY2VzCitvcmcuZWNsaXBzZS5tMmUud3RwLk1hcmtlZEV4Y2VwdGlvbjogVW5hYmxlIHRvIGNvbmZpZ3VyZSB3Zm9ybVNlcnZpY2VzCisJYXQgb3JnLmVjbGlwc2UubTJlLnd0cC5BYnN0cmFjdFByb2plY3RDb25maWd1cmF0b3JEZWxlZ2F0ZS5jb25maWd1cmVQcm9qZWN0KEFic3RyYWN0UHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmphdmE6OTkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLnd0cC5XVFBQcm9qZWN0Q29uZmlndXJhdG9yLmNvbmZpZ3VyZShXVFBQcm9qZWN0Q29uZmlndXJhdG9yLmphdmE6NjgpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUucHJvamVjdC5jb25maWd1cmF0b3IuQWJzdHJhY3RMaWZlY3ljbGVNYXBwaW5nLmNvbmZpZ3VyZShBYnN0cmFjdExpZmVjeWNsZU1hcHBpbmcuamF2YToxMjApIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciQzLmNhbGwoUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6NTA4KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIkMy5jYWxsKFByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5qYXZhOjEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTUxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIudXBkYXRlUHJvamVjdENvbmZpZ3VyYXRpb24oUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6NTAxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuY29uZmlndXJlTmV3TWF2ZW5Qcm9qZWN0cyhQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YToyODgpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciQxLmNhbGwoUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6MTc1KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIkMS5jYWxsKFByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5qYXZhOjEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTUxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwuZXhlY3V0ZShNYXZlbkltcGwuamF2YToxMzU1KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuaW1wb3J0UHJvamVjdHMoUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6MTQzKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUudWkuaW50ZXJuYWwud2l6YXJkcy5JbXBvcnRNYXZlblByb2plY3RzSm9iJDEuZG9DcmVhdGVNYXZlblByb2plY3RzKEltcG9ydE1hdmVuUHJvamVjdHNKb2IuamF2YTo2OCkgW29yZy5lY2xpcHNlLm0yZS5jb3JlLnVpXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLnVpLmludGVybmFsLndpemFyZHMuQWJzdHJhY3RDcmVhdGVNYXZlblByb2plY3RzT3BlcmF0aW9uLnJ1bihBYnN0cmFjdENyZWF0ZU1hdmVuUHJvamVjdHNPcGVyYXRpb24uamF2YTo3MykgW29yZy5lY2xpcHNlLm0yZS5jb3JlLnVpXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLnVpLmludGVybmFsLndpemFyZHMuSW1wb3J0TWF2ZW5Qcm9qZWN0c0pvYi5ydW5JbldvcmtzcGFjZShJbXBvcnRNYXZlblByb2plY3RzSm9iLmphdmE6NzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZS51aV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5JbnRlcm5hbFdvcmtzcGFjZUpvYi5ydW4oSW50ZXJuYWxXb3Jrc3BhY2VKb2IuamF2YTozOSkgW29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzXzMuMTMuMC52MjAxODA1MTItMTEzOC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb246IE9uZSBvciBtb3JlIGNvbnN0cmFpbnRzIGhhdmUgbm90IGJlZW4gc2F0aXNmaWVkLgorCWF0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmludGVybmFsLkZhY2V0ZWRQcm9qZWN0Lm1vZGlmeUludGVybmFsKEZhY2V0ZWRQcm9qZWN0LmphdmE6MzYzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmludGVybmFsLkZhY2V0ZWRQcm9qZWN0Lm1lcmdlQ2hhbmdlc0ludGVybmFsKEZhY2V0ZWRQcm9qZWN0LmphdmE6MTE4MSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5pbnRlcm5hbC5GYWNldGVkUHJvamVjdC5hY2Nlc3MkMihGYWNldGVkUHJvamVjdC5qYXZhOjExMTcpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuaW50ZXJuYWwuRmFjZXRlZFByb2plY3QkMS5ydW4oRmFjZXRlZFByb2plY3QuamF2YTozMjQpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMjg5KSB+W29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzXzMuMTMuMC52MjAxODA1MTItMTEzOC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMzE2KSB+W29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzXzMuMTMuMC52MjAxODA1MTItMTEzOC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuaW50ZXJuYWwuRmFjZXRlZFByb2plY3QubW9kaWZ5KEZhY2V0ZWRQcm9qZWN0LmphdmE6MzM5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS53dHAuV2ViUHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmNvbmZpZ3VyZShXZWJQcm9qZWN0Q29uZmlndXJhdG9yRGVsZWdhdGUuamF2YToxMzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLnd0cC5BYnN0cmFjdFByb2plY3RDb25maWd1cmF0b3JEZWxlZ2F0ZS5jb25maWd1cmVQcm9qZWN0KEFic3RyYWN0UHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmphdmE6OTUpIH5bbmE6bmFdCisJLi4uIDIwIGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMS0wOS0yOCAwOTo0NzoyNSw0MDkgW1dvcmtlci0xMDogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIgLSBJbXBvcnRlZCBhbmQgY29uZmlndXJlZCAxIHByb2plY3QocykgaW4gMSBzZWMKKzIwMjEtMDktMjggMDk6NDg6MjYsNjE4IFtXb3JrZXItMTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTA5LTI4IDA5OjQ4OjI2LDYyMSBbV29ya2VyLTE0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMDktMjggMDk6NDg6NTUsMDU5IFtXb3JrZXItMTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTA5LTI4IDA5OjQ4OjU1LDA2MCBbV29ya2VyLTE1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMDktMjggMTE6MDc6MTAsODI5IFtXb3JrZXItMTogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjEtMDktMjkgMTY6MjE6NTMsNTA3IFtXb3JrZXItODogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjEtMDktMzAgMTM6MDI6NTMsMDA0IFtXb3JrZXItMDogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjEtMDktMzAgMTM6MTM6MTgsOTY1IFtXb3JrZXItNzogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIxLTA5LTMwIDE0OjM2OjE1LDY2NSBbV29ya2VyLTIyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0wOS0zMCAxNDozNjoxNSw2NjggW1dvcmtlci0yMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTA5LTMwIDE0OjQwOjEwLDk2MiBbV29ya2VyLTI0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0wOS0zMCAxNDo0MDoxMCw5NjMgW1dvcmtlci0yNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTA5LTMwIDE3OjE3OjAzLDYyNyBbV29ya2VyLTMyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0wOS0zMCAxNzoxNzowMyw2MjkgW1dvcmtlci0zMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTA5LTMwIDE3OjE4OjEyLDQxMCBbV29ya2VyLTM1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0wOS0zMCAxNzoxODoxMiw0MTEgW1dvcmtlci0zNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTA5LTMwIDE3OjI1OjM5LDcwMSBbV29ya2VyLTM2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0wOS0zMCAxNzoyNTozOSw3MDIgW1dvcmtlci0zNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTA5LTMwIDE3OjMwOjA5LDM2MCBbV29ya2VyLTM1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tQ2xpZW50CisyMDIxLTA5LTMwIDE3OjMwOjA5LDM2MCBbV29ya2VyLTM1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTA5LTMwIDE3OjMwOjM0LDQ4NiBbV29ya2VyLTQwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0wOS0zMCAxNzozMDozNCw0ODcgW1dvcmtlci00MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTA5LTMwIDE3OjM3OjA0LDAzNCBbV29ya2VyLTQyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tQ2xpZW50CisyMDIxLTA5LTMwIDE3OjM3OjA0LDAzNCBbV29ya2VyLTQyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTA5LTMwIDE3OjM3OjIxLDc1MSBbV29ya2VyLTQwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0wOS0zMCAxNzozNzoyMSw3NTEgW1dvcmtlci00MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTA5LTMwIDE3OjM4OjI2LDk2OSBbV29ya2VyLTQwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxKc29uVHJhdmVyc2UKKzIwMjEtMDktMzAgMTc6Mzg6MjYsOTY5IFtXb3JrZXItNDA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTA5LTMwIDE3OjM4OjQyLDY1NCBbV29ya2VyLTQzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFV0aWxzCisyMDIxLTA5LTMwIDE3OjM4OjQyLDY1NCBbV29ya2VyLTQzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTA5LTMwIDE3OjM4OjU5LDI2MiBbV29ya2VyLTQyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZUphcl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VKYXIKKzIwMjEtMDktMzAgMTc6Mzg6NTksMjYzIFtXb3JrZXItNDI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlSmFyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTA5LTMwIDE3OjM5OjUyLDQ3MSBbV29ya2VyLTQwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0wOS0zMCAxNzozOTo1Miw0NzEgW1dvcmtlci00MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTA5LTMwIDE3OjQyOjM3LDI1NCBbV29ya2VyLTQxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tQ2xpZW50CisyMDIxLTA5LTMwIDE3OjQyOjM3LDI1NCBbV29ya2VyLTQxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTA5LTMwIDE3OjQzOjU4LDIxNSBbV29ya2VyLTQxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0wOS0zMCAxNzo0Mzo1OCwyMTUgW1dvcmtlci00MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTA5LTMwIDE3OjUzOjEzLDc4MiBbV29ya2VyLTQxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tQ2xpZW50CisyMDIxLTA5LTMwIDE3OjUzOjEzLDc4MiBbV29ya2VyLTQxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTA5LTMwIDE3OjUzOjQ1LDY3MSBbV29ya2VyLTQ5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0wOS0zMCAxNzo1Mzo0NSw2NzEgW1dvcmtlci00OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTA5LTMwIDE3OjU2OjI4LDM2MiBbV29ya2VyLTQ4OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMDktMzAgMTc6NTY6MzAsMjk2IFtXb3JrZXItNDg6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMDktMzAgMTc6NTY6MzAsMjk5IFtXb3JrZXItNDg6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0wOS0zMCAxNzo1NjozMCw1NjIgW1dvcmtlci00ODogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMKKzIwMjEtMDktMzAgMTc6NTY6MzEsMDUxIFtXb3JrZXItNDg6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0wOS0zMCAxNzo1NjozMSwwNTEgW1dvcmtlci00ODogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMDktMzAgMTc6NTY6MzEsMDU1IFtXb3JrZXItNDg6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3dmb3JtU2VydmljZUphcjogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC93Zm9ybVNlcnZpY2VKYXIvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMDktMzAgMTc6NTY6MzEsNDUwIFtXb3JrZXItNDg6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMDktMzAgMTc6NTY6MzEsNDUyIFtXb3JrZXItNDg6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0wOS0zMCAxNzo1NjozMSw0NTIgW1dvcmtlci00ODogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMDktMzAgMTc6NTY6MzEsNDYxIFtXb3JrZXItNDg6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIxLTA5LTMwIDE3OjU2OjM0LDk3NSBbV29ya2VyLTUyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0wOS0zMCAxNzo1NjozNCw5NzcgW1dvcmtlci01MjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIxLTA5LTMwIDE3OjU2OjM0LDk4MiBbV29ya2VyLTUyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0wOS0zMCAxNzo1NjozNCw5ODUgW1dvcmtlci01MjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIxLTA5LTMwIDE3OjU2OjM3LDE4MSBbV29ya2VyLTUyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0wOS0zMCAxNzo1NjozNywxODQgW1dvcmtlci01MjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjEtMDktMzAgMTc6NTY6MzcsMTg5IFtXb3JrZXItNTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTA5LTMwIDE3OjU2OjM3LDE5MSBbV29ya2VyLTUyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMS0wOS0zMCAxNzo1NjozNyw3MDAgW1dvcmtlci01MjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvdXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC91dGlscy90YXJnZXQvY2xhc3NlcworMjAyMS0wOS0zMCAxNzo1NjozNyw3MDIgW1dvcmtlci01MjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTA5LTMwIDE3OjU2OjM3LDcyMCBbV29ya2VyLTUyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0wOS0zMCAxNzo1NjozNyw3MjIgW1dvcmtlci01MjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMS0wOS0zMCAxNzo1NjozNyw3MjYgW1dvcmtlci01MjogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMDktMzAgMTc6NTY6MzcsNzI5IFtXb3JrZXItNTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjEtMDktMzAgMTc6NTY6MzcsNzMyIFtXb3JrZXItNTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDIxLTA5LTMwIDE3OjU2OjM3LDczNiBbV29ya2VyLTUyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjEtMDktMzAgMTc6NTY6MzgsMjcxIFtXb3JrZXItNTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTA5LTMwIDE3OjU2OjQzLDExNyBbV29ya2VyLTUyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMDktMzAgMTc6NTY6NDMsMTMyIFtXb3JrZXItNTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTA5LTMwIDE3OjU2OjQzLDEzNSBbV29ya2VyLTUyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMS0wOS0zMCAxNzo1Njo0MywxMzggW1dvcmtlci01MjogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMDktMzAgMTc6NTY6NDMsMTQxIFtXb3JrZXItNTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIxLTA5LTMwIDE3OjU2OjQzLDMxOSBbV29ya2VyLTUyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0wOS0zMCAxNzo1Njo0MywzMjUgW1dvcmtlci01MjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VKYXJcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIxLTA5LTMwIDE3OjU2OjQzLDMyOCBbV29ya2VyLTUyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0wOS0zMCAxNzo1Njo0MywzMzMgW1dvcmtlci01MjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VKYXJcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIxLTA5LTMwIDE3OjU2OjQzLDU3NiBbV29ya2VyLTUyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC91dGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIxLTA5LTMwIDE3OjU2OjQzLDU3NyBbV29ya2VyLTUyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMDktMzAgMTc6NTY6NDMsNTc4IFtXb3JrZXItNTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIxLTA5LTMwIDE3OjU2OjQzLDU5MCBbV29ya2VyLTUyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0wOS0zMCAxNzo1Njo0Myw1OTQgW1dvcmtlci01MjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMS0wOS0zMCAxNzo1Njo0Myw2MDYgW1dvcmtlci01MjogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMDktMzAgMTc6NTY6NDMsNjA4IFtXb3JrZXItNTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjEtMDktMzAgMTc6NTY6NDMsNjA5IFtXb3JrZXItNTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiB3Zm9ybVNlcnZpY2VzCisyMDIxLTA5LTMwIDE3OjU2OjQzLDYxMCBbV29ya2VyLTUyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIHdmb3JtU2VydmljZXMKKzIwMjEtMDktMzAgMTc6NTY6NDMsNjIxIFtXb3JrZXItNTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTA5LTMwIDE3OjU2OjQzLDk0OSBbV29ya2VyLTUyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMDktMzAgMTc6NTY6NDMsOTQ5IFtXb3JrZXItNTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIxLTA5LTMwIDE3OjU2OjQzLDk1MiBbV29ya2VyLTUyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC93Zm9ybVNlcnZpY2VKYXI6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvd2Zvcm1TZXJ2aWNlSmFyL3RhcmdldC9jbGFzc2VzCisyMDIxLTA5LTMwIDE3OjU2OjQzLDk3MyBbV29ya2VyLTUyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0wOS0zMCAxNzo1Njo0Myw5NzUgW1dvcmtlci01MjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMS0wOS0zMCAxNzo1Njo0Myw5ODQgW1dvcmtlci01MjogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMDktMzAgMTc6NTY6NDMsOTg2IFtXb3JrZXItNTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjEtMDktMzAgMTc6NTc6MDQsMzY2IFtXb3JrZXItNTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1DbGllbnQKKzIwMjEtMDktMzAgMTc6NTc6MDQsMzY3IFtXb3JrZXItNTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMDktMzAgMTc6NTc6MjAsMDI2IFtXb3JrZXItNTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTA5LTMwIDE3OjU3OjIwLDAyNiBbV29ya2VyLTUxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMDUgMDk6NDk6NDAsODM0IFtXb3JrZXItMjogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjEtMTAtMDUgMTA6MDM6MTYsNzY5IFtXb3JrZXItNTogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjEtMTAtMDUgMTE6MDM6NTUsMDEwIFtXb3JrZXItMTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTA1IDExOjAzOjU1LDAxMyBbV29ya2VyLTE3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMDUgMTE6Mzc6MTcsOTAwIFtXb3JrZXItMjA6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMS0xMC0wNSAxMTo0ODo0NCwxNDUgW1dvcmtlci0yODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMDUgMTE6NDg6NDQsMTQ1IFtXb3JrZXItMjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0wNSAxMTo1MzoyNiwwNDkgW1dvcmtlci0yODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMDUgMTE6NTM6MjYsMDQ5IFtXb3JrZXItMjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0wNSAxMTo1NzowMSw1NDkgW1dvcmtlci0zMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMDUgMTE6NTc6MDEsNTUwIFtXb3JrZXItMzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0wNSAxMTo1OTowNyw1MzkgW1dvcmtlci0yODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMDUgMTE6NTk6MDcsNTM5IFtXb3JrZXItMjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0wNSAxMjoyNzo1OCwzOTMgW1dvcmtlci0zMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMDUgMTI6Mjc6NTgsMzkzIFtXb3JrZXItMzM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0wNSAxMjo0ODoyMiw4MTIgW1dvcmtlci0yNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMDUgMTI6NDg6MjIsODEzIFtXb3JrZXItMjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0wNSAxMzoxNjowMiw4MDYgW1dvcmtlci00MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMDUgMTM6MTY6MDIsODA2IFtXb3JrZXItNDA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0wNSAxMzoxODoyNCw3NDIgW1dvcmtlci00MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMDUgMTM6MTg6MjQsNzQyIFtXb3JrZXItNDA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0wNSAxMzoyNzozMSwzNzIgW1dvcmtlci00NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbUNsaWVudAorMjAyMS0xMC0wNSAxMzoyNzozMSwzNzMgW1dvcmtlci00NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0wNSAxMzoyNzo1Miw0MzAgW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTA1IDEzOjI3OjUyLDQzMyBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIxLTEwLTA1IDEzOjI3OjUyLDQzOCBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMDUgMTM6Mjc6NTIsNDM5IFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjEtMTAtMDUgMTM6Mjc6NTQsMTQ3IFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0wNSAxMzoyNzo1NCwxNTAgW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIxLTEwLTA1IDEzOjI3OjU0LDE1NyBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMDUgMTM6Mjc6NTQsMTU5IFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMS0xMC0wNSAxMzoyNzo1NCw3OTcgW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMDUgMTM6Mjc6NTQsNzk5IFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMDUgMTM6Mjc6NTUsMTUxIFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0wNSAxMzoyNzo1NSwxNTQgW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjEtMTAtMDUgMTM6Mjc6NTUsMTU3IFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0wNSAxMzoyNzo1NSwxNTkgW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjEtMTAtMDUgMTM6Mjg6MDAsMTU3IFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMDUgMTM6Mjg6MDAsMTc0IFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0wNSAxMzoyODowMCwxNzYgW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIxLTEwLTA1IDEzOjI4OjAwLDE5MiBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMDUgMTM6Mjg6MDAsMTk1IFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMS0xMC0wNSAxMzoyODowMCw1NDYgW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMDUgMTM6Mjg6MDAsNTQ4IFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMDUgMTM6Mjg6MDAsNTQ5IFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0wNSAxMzoyODowMCw1ODIgW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTA1IDEzOjI4OjAwLDU4NCBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMS0xMC0wNSAxMzoyODowMCw1ODggW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTA1IDEzOjI4OjAwLDU5MiBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMS0xMC0wNSAxMzoyODo1Niw0NTUgW1dvcmtlci00NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMDUgMTM6Mjg6NTYsNDU1IFtXb3JrZXItNDQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0wNSAyMjozODoxNiwxMDggW1dvcmtlci0zOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMS0xMC0wNiAxMjo0ODoyMCw3MzkgW1dvcmtlci01OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMS0xMC0wNiAxOTo0NDoyMyw5MDcgW1dvcmtlci00NjogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIxLTEwLTA2IDE5OjQ1OjQzLDc3OSBbV29ya2VyLTM4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0wNiAxOTo0NTo0Myw3OTcgW1dvcmtlci0zODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTA2IDIwOjE2OjIzLDM1NCBbV29ya2VyLTQ3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0wNiAyMDoxNjoyMywzNTYgW1dvcmtlci00NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTA2IDIwOjM0OjA1LDA2NiBbV29ya2VyLTU0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0wNiAyMDozNDowNSwwNjYgW1dvcmtlci01NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTA2IDIwOjUzOjU4LDU4OSBbV29ya2VyLTYxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0wNiAyMDo1Mzo1OCw1ODkgW1dvcmtlci02MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTA2IDIxOjM3OjU3LDQ1MCBbV29ya2VyLTY2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0wNiAyMTozNzo1Nyw0NTEgW1dvcmtlci02NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTA3IDEwOjE5OjMyLDUwOCBbV29ya2VyLTE6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIxLTEwLTA3IDEwOjIyOjQ1LDgyMSBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMDcgMTA6MjI6NDUsODMwIFttYWluXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTA3IDEwOjIyOjQ1LDgzMSBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTA3IDEwOjIyOjUyLDQ4MSBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMS0xMC0wNyAxODowMDo1MCwxNzIgW1dvcmtlci04MTogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIxLTEwLTA4IDEyOjAwOjI4LDE3NSBbV29ya2VyLTE6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgb3V0LW9mLWRhdGUuIFRyeWluZyB0byB1cGRhdGUuCisyMDIxLTEwLTA4IDEyOjAyOjEzLDkzMCBbV29ya2VyLTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTA4IDEyOjAyOjEzLDk0NCBbV29ya2VyLTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0wOCAxNzoyMzoyMSwwMTcgW1dvcmtlci00NTogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIxLTEwLTExIDA5OjQwOjAyLDMxMiBbV29ya2VyLTI6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgb3V0LW9mLWRhdGUuIFRyeWluZyB0byB1cGRhdGUuCisyMDIxLTEwLTExIDA5OjQxOjA2LDg2NSBbV29ya2VyLTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTExIDA5OjQxOjA2LDg2NyBbV29ya2VyLTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xMSAxMTozMjozNSw0ODcgW1dvcmtlci0xMjogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC91dGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTExIDExOjMyOjM1LDUwMiBbV29ya2VyLTEyOiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0xMSAxNzowNjowOCw1NTAgW1dvcmtlci0yNTogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIxLTEwLTExIDE3OjEwOjU4LDI0OCBbV29ya2VyLTM0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xMSAxNzoxMDo1OCwyNDggW1dvcmtlci0zNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTExIDE3OjU3OjMxLDM3MiBbV29ya2VyLTM0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xMSAxNzo1NzozMSwzNzIgW1dvcmtlci0zNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTEyIDE5OjU2OjE4LDgyMiBbV29ya2VyLTQzMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMTIgMTk6NTY6MTgsODI2IFtXb3JrZXItNDMwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMTIgMjA6MTI6NTAsODQ1IFtXb3JrZXItNDUwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xMiAyMDoxMjo1MCw4NDYgW1dvcmtlci00NTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xMyAxMjoyNzo0Myw3NTkgW1dvcmtlci02OTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTEzIDEyOjI3OjQzLDc3MyBbV29ya2VyLTY5OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTEzIDEyOjM1OjUwLDkyMiBbV29ya2VyLTcwNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMTMgMTI6MzU6NTAsOTIyIFtXb3JrZXItNzA3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMTMgMTI6Mzc6MTQsMzY0IFtXb3JrZXItNzAyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xMyAxMjozNzoxNCwzNjQgW1dvcmtlci03MDI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xMyAxMjo0MTowNCw0NTQgW1dvcmtlci03MDI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTEzIDEyOjQxOjA0LDQ1NCBbV29ya2VyLTcwMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTEzIDEyOjQyOjI4LDM5MSBbV29ya2VyLTcwNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMTMgMTI6NDI6MjgsMzkxIFtXb3JrZXItNzA0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMTMgMTk6NTc6NDcsNzE2IFtXb3JrZXItODIwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xMyAxOTo1Nzo0Nyw3MTkgW1dvcmtlci04MjA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xNCAwODo0OTozMiw2MzIgW1dvcmtlci01OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMS0xMC0xNCAwODo1MzoxMyw1ODEgW1dvcmtlci0xMTogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIxLTEwLTE0IDA5OjA3OjQxLDQ5MiBbV29ya2VyLTE2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xNCAwOTowNzo0MSw0OTQgW1dvcmtlci0xNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE0IDA5OjMxOjA1LDA0NiBbV29ya2VyLTIxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xNCAwOTozMTowNSwwNDYgW1dvcmtlci0yMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE0IDA5OjM4OjUwLDU1MCBbV29ya2VyLTI2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xNCAwOTozODo1MCw1NTAgW1dvcmtlci0yNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE0IDExOjQ5OjMzLDg0NSBbV29ya2VyLTM2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xNCAxMTo0OTozMyw4NDcgW1dvcmtlci0zNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE0IDExOjU3OjIxLDU2OCBbV29ya2VyLTM5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xNCAxMTo1NzoyMSw1NjkgW1dvcmtlci0zOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE0IDE3OjM3OjUwLDQzOSBbV29ya2VyLTEwNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMTQgMTc6Mzc6NTAsNDM5IFtXb3JrZXItMTA2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMTQgMTc6NTQ6MDUsMzUxIFtXb3JrZXItMTEzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xNCAxNzo1NDowNSwzNTEgW1dvcmtlci0xMTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xNCAxODoxOTozMyw2OTQgW1dvcmtlci0xMTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTE0IDE4OjE5OjMzLDY5NCBbV29ya2VyLTExOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE1IDA3OjEyOjI0LDkyMyBbV29ya2VyLTA6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIxLTEwLTE1IDA3OjI5OjI3LDM2NiBbV29ya2VyLTY6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMS0xMC0xNSAwNzo1Mjo1Miw1NDQgW1dvcmtlci0xNTogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC91dGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTE1IDA3OjUyOjUyLDU2NCBbV29ya2VyLTE1OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0xNSAwODozNzo1OCw2NjQgW1dvcmtlci0xMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMTUgMDg6Mzc6NTgsNjY0IFtXb3JrZXItMTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xNSAwODozOTo0NiwyNzcgW1dvcmtlci0xMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMTUgMDg6Mzk6NDYsMjc3IFtXb3JrZXItMTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xNSAwODo0MDo0MSw3NzMgW1dvcmtlci0yMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMTUgMDg6NDA6NDEsNzczIFtXb3JrZXItMjA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xNSAwODo0Mzo0MSwxOTIgW1dvcmtlci0yMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxVdGlscworMjAyMS0xMC0xNSAwODo0Mzo0MSwxOTIgW1dvcmtlci0yMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xNSAwODo0Mzo1Niw0MTQgW1dvcmtlci0yMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMTUgMDg6NDM6NTYsNDE0IFtXb3JrZXItMjI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xNSAwODo1NDo0Miw3MDIgW1dvcmtlci0yMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMTUgMDg6NTQ6NDIsNzAyIFtXb3JrZXItMjI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xNSAwODo1OTowNCw1NDMgW1dvcmtlci0yNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMTUgMDg6NTk6MDQsNTQzIFtXb3JrZXItMjY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xNSAwOTowMjoxNyw2NTMgW1dvcmtlci0yMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMTUgMDk6MDI6MTcsNjUzIFtXb3JrZXItMjI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xNSAwOTowNzowMSwxODYgW1dvcmtlci02OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMS0xMC0xNSAxMTozNjowMyw2ODMgW1dvcmtlci0yNTogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIxLTEwLTE1IDExOjQ0OjQ3LDE0OCBbV29ya2VyLTI0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xNSAxMTo0NDo0NywxNTAgW1dvcmtlci0yNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE1IDEyOjEyOjI1LDA3NiBbV29ya2VyLTI2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xNSAxMjoxMjoyNSwwNzcgW1dvcmtlci0yNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE1IDEyOjIwOjE3LDc4NSBbV29ya2VyLTM0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFV0aWxzCisyMDIxLTEwLTE1IDEyOjIwOjE3LDc4NiBbV29ya2VyLTM0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE1IDEyOjIwOjMyLDExNyBbV29ya2VyLTMzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xNSAxMjoyMDozMiwxMTggW1dvcmtlci0zMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE1IDE1OjU0OjI3LDU3MSBbV29ya2VyLTY4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xNSAxNTo1NDoyNyw1NzQgW1dvcmtlci02ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE1IDE5OjIxOjQ2LDA1MSBbV29ya2VyLTEwMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMTUgMTk6MjE6NDYsMDUyIFtXb3JrZXItMTAzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMTUgMTk6MzA6NTIsOTkyIFtXb3JrZXItMTA5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xNSAxOTozMDo1Miw5OTIgW1dvcmtlci0xMDk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xNSAxOTozMjozMiw4MDggW1dvcmtlci0xMDE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTE1IDE5OjMyOjMyLDgwOSBbV29ya2VyLTEwMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE1IDE5OjM5OjA0LDk4MiBbV29ya2VyLTExMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMTUgMTk6Mzk6MDQsOTgzIFtXb3JrZXItMTExOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMTUgMTk6NTQ6NTQsODAwIFtXb3JrZXItMTE1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xNSAxOTo1NDo1NCw4MDEgW1dvcmtlci0xMTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xNSAxOTo1NTo0Myw2MzYgW1dvcmtlci0xMTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTE1IDE5OjU1OjQzLDYzNyBbV29ya2VyLTExNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE1IDE5OjU3OjMyLDU3MyBbV29ya2VyLTExMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMTUgMTk6NTc6MzIsNTc0IFtXb3JrZXItMTEyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMTggMTM6MTA6MTgsNzEzIFtXb3JrZXItMjogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjEtMTAtMTggMTM6Mjg6NDAsNTIwIFtXb3JrZXItMTE6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMS0xMC0xOCAxMzozMTo0NSw2OTggW1dvcmtlci0xMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMTggMTM6MzE6NDUsNzIzIFtXb3JrZXItMTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xOCAxMzo0MDozNiw3NjggW1dvcmtlci01OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMTggMTM6NDA6MzYsNzc5IFtXb3JrZXItNTogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMTggMTU6MzU6MzYsMjI3IFtXb3JrZXItMjc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0xOCAxNTozNTozNiwyMzAgW1dvcmtlci0yNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMS0xMC0xOCAxNTozNTozNiwyMzUgW1dvcmtlci0yNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTE4IDE1OjM1OjM2LDIzNiBbV29ya2VyLTI3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIxLTEwLTE4IDE1OjM1OjM3LDg0MiBbV29ya2VyLTI3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMTggMTU6MzU6MzcsODQ0IFtXb3JrZXItMjc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMS0xMC0xOCAxNTozNTozNyw4NDkgW1dvcmtlci0yNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTE4IDE1OjM1OjM3LDg1MSBbV29ya2VyLTI3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjEtMTAtMTggMTU6MzU6NDEsNjE0IFtXb3JrZXItMjc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXM6MC4xLVRlc3QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMS0xMC0xOCAxNTozNTo0MSw3OTcgW1dvcmtlci0yNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMTggMTU6MzU6NDEsNzk5IFtXb3JrZXItMjc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMTggMTU6MzU6NDIsMTgwIFtXb3JrZXItMjc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC91dGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTE4IDE1OjM1OjQyLDE4MiBbV29ya2VyLTI3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTE4IDE1OjM1OjQ0LDU4OSBbV29ya2VyLTI3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMTggMTU6MzU6NDQsNTkyIFtXb3JrZXItMjc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIxLTEwLTE4IDE1OjM1OjQ0LDU5NSBbV29ya2VyLTI3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMTggMTU6MzU6NDQsNTk3IFtXb3JrZXItMjc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIxLTEwLTE4IDE1OjM1OjQ0LDYwMyBbV29ya2VyLTI3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTE4IDE1OjM1OjQ0LDY1OCBbV29ya2VyLTI3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMTggMTU6MzU6NDQsNjczIFtXb3JrZXItMjc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gQ29weWluZyAzIHJlc291cmNlcworMjAyMS0xMC0xOCAxNTo1MToyNiwzNTIgW1dvcmtlci0yNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMTggMTU6NTE6MjYsMzUyIFtXb3JrZXItMjY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xOCAxNTo1NDowNSw5NjcgW1dvcmtlci0yNjogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC91dGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTE4IDE1OjU0OjA1LDk2OCBbV29ya2VyLTI2OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0xOCAxNjoyNzozOSwwMTQgW1dvcmtlci00MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMTggMTY6Mjc6MzksMDE2IFtXb3JrZXItNDE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xOCAxNjozNzo1MCw4NjEgW1dvcmtlci0zNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMTggMTY6Mzc6NTAsODYyIFtXb3JrZXItMzc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xOCAxNjo0MzoyNCwzMDcgW1dvcmtlci01OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xOCAxNjo0MzoyNCwzMDcgW1dvcmtlci01OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMTggMTY6NDc6MzEsMzQxIFtXb3JrZXItNDE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTE4IDE2OjQ3OjMxLDM0MiBbV29ya2VyLTQxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMTggMTY6NDc6NDksMDAwIFtXb3JrZXItNDY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTE4IDE2OjQ3OjQ5LDAwMSBbV29ya2VyLTQ2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMTggMTY6NTI6MjgsNTg2IFtXb3JrZXItNzogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjEtMTAtMTggMTY6NTQ6MDUsNDI5IFtXb3JrZXItNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMTggMTY6NTQ6MDUsNDMyIFtXb3JrZXItNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE4IDE2OjU1OjI5LDYwOCBbV29ya2VyLTg6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMS0xMC0xOCAxNjo1Nzo1Nyw4ODIgW1dvcmtlci0xMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMTggMTY6NTc6NTcsODgzIFtXb3JrZXItMTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xOCAxNzowNTowMSwzNzcgW1dvcmtlci05OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xOCAxNzowNTowMSwzNzggW1dvcmtlci05OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMTkgMTE6NDU6NDMsNDg5IFtXb3JrZXItMTgwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xOSAxMTo0NTo0Myw0OTEgW1dvcmtlci0xODA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xOSAxMjozNTozOSw2MDYgW1dvcmtlci0xODk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTE5IDEyOjM1OjM5LDYwNyBbV29ya2VyLTE4OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE5IDE3OjI0OjE4LDI0OSBbV29ya2VyLTIyMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMTkgMTc6MjQ6MTgsMjUwIFtXb3JrZXItMjIyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMTkgMTc6NDM6MDUsNzMzIFtXb3JrZXItMjIyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0xOSAxNzo0MzowNSw3MzQgW1dvcmtlci0yMjI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xOSAxNzo1MTo1MywxODggW1dvcmtlci0yMjQ6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvdXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC91dGlscy90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0xOSAxNzo1MTo1Myw0MjAgW1dvcmtlci0yMjQ6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTE5IDE3OjUxOjUzLDQyMCBbV29ya2VyLTIyNDogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0xOSAxNzo1MjoyOCw1NzkgW1dvcmtlci0yMjQ6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvdXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC91dGlscy90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0xOSAxNzo1MjoyOCw1ODEgW1dvcmtlci0yMjQ6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTE5IDE3OjUyOjUyLDk0NiBbV29ya2VyLTIyNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMTkgMTc6NTI6NTIsOTQ3IFtXb3JrZXItMjI0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMTkgMTg6MDI6NDAsOTc5IFtXb3JrZXItMjI0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0xOSAxODowMjo0MCw5NzkgW1dvcmtlci0yMjQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xOSAxODowMzo0Miw5NTMgW1dvcmtlci0yMjE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTE5IDE4OjAzOjQyLDk1MyBbV29ya2VyLTIyMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE5IDE4OjA2OjUwLDEzNCBbV29ya2VyLTIyMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMTkgMTg6MDY6NTAsMTM0IFtXb3JrZXItMjIyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjAgMTE6MjM6MzksNTA0IFtXb3JrZXItMjogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjEtMTAtMjAgMTE6MzI6MjQsMjIzIFtXb3JrZXItMTI6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvdXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC91dGlscy90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yMCAxMTozMjoyNCwyNjggW1dvcmtlci0xMjogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjAgMTI6MTE6MTIsNDI2IFtXb3JrZXItMTU6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMS0xMC0yMCAxMjoxNzoxMiwzOTkgW1dvcmtlci0yMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjAgMTI6MTc6MTIsNDAxIFtXb3JrZXItMjI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMCAyMDoyOTowNyw5NTggW1dvcmtlci0xMDg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTIwIDIwOjI5OjA4LDAwNiBbV29ya2VyLTEwODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIwIDIwOjM4OjE5LDcyNyBbV29ya2VyLTExNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjAgMjA6Mzg6MTksNzI3IFtXb3JrZXItMTE2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjEgMDk6Mjc6MjgsNTA1IFtXb3JrZXItMzI3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yMSAwOToyNzoyOCw1MDkgW1dvcmtlci0zMjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMiAwOToyMDo0MiwzNzggW1dvcmtlci02NDY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTIyIDA5OjIwOjQyLDQzMSBbV29ya2VyLTY0NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIyIDA5OjI2OjM3LDc1MyBbV29ya2VyLTY2MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjIgMDk6MjY6MzcsNzUzIFtXb3JrZXItNjYxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjIgMDk6Mjk6NDIsODE4IFtXb3JrZXItNjQ2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yMiAwOToyOTo0Miw4MTggW1dvcmtlci02NDY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMiAwOTozMjozOCw4MDYgW1dvcmtlci02NjA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTIyIDA5OjMyOjM4LDgwNyBbV29ya2VyLTY2MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIyIDA5OjQ4OjQ0LDA2MSBbV29ya2VyLTY1OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjIgMDk6NDg6NDQsMTA1IFtXb3JrZXItNjU5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjIgMDk6NTY6MzEsMzY3IFtXb3JrZXItNjY4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yMiAwOTo1NjozMSwzNjggW1dvcmtlci02Njg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMiAxMDowMTo1NywyMzYgW1dvcmtlci02NDY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTIyIDEwOjAxOjU3LDIzNiBbV29ya2VyLTY0NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIyIDEwOjUxOjU0LDkxMCBbV29ya2VyLTY2OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjIgMTA6NTE6NTQsOTEyIFtXb3JrZXItNjY5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjIgMTE6MzU6NDEsNDA0IFtXb3JrZXItOTogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjEtMTAtMjIgMTI6MTU6MDIsMzkxIFtXb3JrZXItMTQ6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMS0xMC0yMiAxMjoxNzowMCw0MDEgW1dvcmtlci0xMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjIgMTI6MTc6MDAsNDE1IFtXb3JrZXItMTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMiAxNzo0Njo1Miw4NzQgW1dvcmtlci02NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjIgMTc6NDY6NTIsOTA4IFtXb3JrZXItNjU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMiAxNzo1NDoxMiw1NjAgW1dvcmtlci02NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjIgMTc6NTQ6MTIsNTYxIFtXb3JrZXItNjU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMiAxODo1MjoyMywzMDMgW1dvcmtlci03NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjIgMTg6NTI6MjMsMzQ1IFtXb3JrZXItNzc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMiAxODo1Njo1NiwxNjEgW1dvcmtlci03NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjIgMTg6NTY6NTYsMTYyIFtXb3JrZXItNzQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMiAxOToxOTo0MywzODEgW1dvcmtlci03OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjIgMTk6MTk6NDMsMzgxIFtXb3JrZXItNzk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMiAxOToyNjowNSw2ODIgW1dvcmtlci04MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjIgMTk6MjY6MDUsNjgyIFtXb3JrZXItODA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMiAxOToyNzo1Myw5MDIgW1dvcmtlci03ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjIgMTk6Mjc6NTMsOTAzIFtXb3JrZXItNzg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMiAxOTo1MDoyOCw3MDEgW1dvcmtlci03NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjIgMTk6NTA6MjgsNzAyIFtXb3JrZXItNzc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMiAxOTo1ODowNCw3MDcgW1dvcmtlci0wOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMS0xMC0yMiAyMDoxMTo1MCw1MDUgW1dvcmtlci0xOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yMiAyMDoxMTo1MCw1MTAgW1dvcmtlci0xOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjIgMjA6MjM6NDAsODIzIFtXb3JrZXItMTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTIyIDIwOjIzOjQwLDgyMyBbV29ya2VyLTE0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjIgMjA6NDE6MzIsNTc2IFtXb3JrZXItMTQ6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvdXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC91dGlscy90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yMiAyMDo0MTozMiw1ODUgW1dvcmtlci0xNDogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjIgMjA6NDE6MzIsNTg2IFtXb3JrZXItMTQ6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjIgMjE6MDE6MDgsMjczIFtXb3JrZXItMTQ6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMS0xMC0yMiAyMTowODozNyw1OTkgW1dvcmtlci0xNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbUNsaWVudAorMjAyMS0xMC0yMiAyMTowODozNyw2MDAgW1dvcmtlci0xNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMiAyMToxMDoyOCwxOTUgW1dvcmtlci0xODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjIgMjE6MTA6MjgsMTk1IFtXb3JrZXItMTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMiAyMToxMTowMyw3OTIgW1dvcmtlci0xODogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjIgMjE6MTI6MDMsOTE4IFtXb3JrZXItMjM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1DbGllbnQKKzIwMjEtMTAtMjIgMjE6MTI6MDMsOTE4IFtXb3JrZXItMjM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjIgMjE6MTI6NDksMTk5IFtXb3JrZXItMTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1DbGllbnQKKzIwMjEtMTAtMjIgMjE6MTI6NDksMTk5IFtXb3JrZXItMTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjIgMjE6MTM6MzYsMjYwIFtXb3JrZXItMjM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTIyIDIxOjEzOjM2LDI2MSBbV29ya2VyLTIzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjIgMjE6MzE6MTAsNDU3IFtXb3JrZXItMjY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTIyIDIxOjMxOjEwLDQ1OCBbV29ya2VyLTI2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjMgMDc6NTI6MzYsODc2IFtXb3JrZXItMTg0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFV0aWxzCisyMDIxLTEwLTIzIDA3OjUyOjM2LDg3OCBbV29ya2VyLTE4NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMyAwNzo1Mjo1OSwxMTAgW1dvcmtlci0xODM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTIzIDA3OjUyOjU5LDExMSBbV29ya2VyLTE4MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIzIDA4OjE4OjE2LDE0NSBbV29ya2VyLTE4OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjMgMDg6MTg6MTYsMTQ2IFtXb3JrZXItMTg5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjMgMDg6MjY6NTQsOTM2IFtXb3JrZXItMTg0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tQ2xpZW50CisyMDIxLTEwLTIzIDA4OjI2OjU0LDkzNyBbV29ya2VyLTE4NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMyAwODozMzoxMCw0OTggW1dvcmtlci0xODc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTIzIDA4OjMzOjEwLDQ5OSBbV29ya2VyLTE4NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIzIDA4OjQ1OjQzLDcxMSBbV29ya2VyLTE4NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjMgMDg6NDU6NDMsNzExIFtXb3JrZXItMTg3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjMgMDg6NTk6MjIsMjIyIFtXb3JrZXItMTkwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yMyAwODo1OToyMiwyMjMgW1dvcmtlci0xOTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMyAwOTowMDo1Niw0MDIgW1dvcmtlci0xOTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1DbGllbnQKKzIwMjEtMTAtMjMgMDk6MDA6NTYsNDAzIFtXb3JrZXItMTk1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIzIDA5OjAxOjExLDg2MyBbV29ya2VyLTE5NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjMgMDk6MDE6MTEsODYzIFtXb3JrZXItMTk3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjMgMDk6MTg6NDksNDAyIFtXb3JrZXItMTk0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yMyAwOToxODo0OSw0MDIgW1dvcmtlci0xOTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMyAwOToxOTo0MCw4MzUgW1dvcmtlci0xOTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1DbGllbnQKKzIwMjEtMTAtMjMgMDk6MTk6NDAsODM1IFtXb3JrZXItMTk4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIzIDA5OjIxOjA4LDE0MiBbV29ya2VyLTE5MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbUNsaWVudAorMjAyMS0xMC0yMyAwOToyMTowOCwxNDMgW1dvcmtlci0xOTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjMgMDk6MjE6MjMsNzQwIFtXb3JrZXItMTk4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yMyAwOToyMToyMyw3NDAgW1dvcmtlci0xOTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMyAwOToyNTo0NCwwNjYgW1dvcmtlci0xOTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1DbGllbnQKKzIwMjEtMTAtMjMgMDk6MjU6NDQsMDY3IFtXb3JrZXItMTk5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIzIDA5OjI1OjU5LDA1NiBbV29ya2VyLTE5NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjMgMDk6MjU6NTksMDU2IFtXb3JrZXItMTk1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjMgMDk6MzQ6MTEsMzMxIFtXb3JrZXItMTkxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yMyAwOTozNDoxMSwzMzEgW1dvcmtlci0xOTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMyAxMDowNjoxNiwwMTAgW1dvcmtlci0xOTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1DbGllbnQKKzIwMjEtMTAtMjMgMTA6MDY6MTYsMDExIFtXb3JrZXItMTk1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIzIDEwOjA2OjI5LDk1NSBbV29ya2VyLTE5NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjMgMTA6MDY6MjksOTU1IFtXb3JrZXItMTk1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjMgMTA6MDY6NDYsMTYxIFtXb3JrZXItMjA3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yMyAxMDowNjo0NiwxNjEgW1dvcmtlci0yMDc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMyAxMDoxMTo0OSw0NjAgW1dvcmtlci0xOTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1DbGllbnQKKzIwMjEtMTAtMjMgMTA6MTE6NDksNDYwIFtXb3JrZXItMTk1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIzIDEwOjEyOjA1LDgyNiBbV29ya2VyLTIwOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjMgMTA6MTI6MDUsODI2IFtXb3JrZXItMjA5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjMgMTA6MTk6MDAsOTc5IFtXb3JrZXItMjEwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yMyAxMDoxOTowMCw5ODAgW1dvcmtlci0yMTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMyAxMDoyNzoyOCw3NzcgW1dvcmtlci0yMTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTIzIDEwOjI3OjI4LDc3NyBbV29ya2VyLTIxMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIzIDEyOjM4OjQyLDYxOSBbV29ya2VyLTIyMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjMgMTI6Mzg6NDIsNjIwIFtXb3JrZXItMjIwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjMgMTU6MDU6MDksOTgwIFtXb3JrZXItMjM0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxKc29uVHJhdmVyc2UKKzIwMjEtMTAtMjMgMTU6MDU6MDksOTgxIFtXb3JrZXItMjM0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMyAxNToxNzozMCw3NjcgW1dvcmtlci0yNDM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTIzIDE1OjE3OjMwLDc2OCBbV29ya2VyLTI0MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIzIDE1OjM4OjQwLDg0MiBbV29ya2VyLTI0NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjMgMTU6Mzg6NDAsODQzIFtXb3JrZXItMjQ0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjMgMTU6NDI6MTYsMTEwIFtXb3JrZXItMjQ1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yMyAxNTo0MjoxNiwxMTAgW1dvcmtlci0yNDU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMyAxNTo1MDo0Nyw1MDggW1dvcmtlci0yNTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTIzIDE1OjUwOjQ3LDUwOSBbV29ya2VyLTI1MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIzIDE5OjAxOjI0LDgyMiBbV29ya2VyLTI5MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjMgMTk6MDE6MjQsODIzIFtXb3JrZXItMjkwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjMgMTk6MDM6MzcsMTQ4IFtXb3JrZXItMjg5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yMyAxOTowMzozNywxNDggW1dvcmtlci0yODk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMyAxOToyOTozNyw0OTkgW1dvcmtlci0yOTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTIzIDE5OjI5OjM3LDUwMCBbV29ya2VyLTI5NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIzIDE5OjMzOjIxLDg0NyBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMjMgMTk6MzM6MjEsODUwIFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjEtMTAtMjMgMTk6MzM6MjEsODU2IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0yMyAxOTozMzoyMSw4NTkgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMS0xMC0yMyAxOTozMzoyMyw5MjEgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTIzIDE5OjMzOjIzLDkyMyBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjEtMTAtMjMgMTk6MzM6MjMsOTI5IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0yMyAxOTozMzoyMyw5MzIgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIxLTEwLTIzIDE5OjMzOjMwLDc3NyBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzOjAuMi1UZXN0IEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjEtMTAtMjMgMTk6MzM6MzEsMDAwIFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC91dGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTIzIDE5OjMzOjMxLDAwMiBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTIzIDE5OjMzOjMxLDg2OSBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvdXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC91dGlscy90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yMyAxOTozMzozMSw4NzEgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yMyAxOTozMzozNiwzNzAgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTIzIDE5OjMzOjM2LDM3MiBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMS0xMC0yMyAxOTozMzozNiwzNzYgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTIzIDE5OjMzOjM2LDM3OSBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMS0xMC0yMyAxOTozMzozNiw3NzMgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMi1UZXN0IEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tQ2xpZW50XHBvbS54bWwuCisyMDIxLTEwLTIzIDE5OjMzOjM2LDkxOSBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTIzIDE5OjMzOjM2LDkyMCBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvdXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC91dGlscy90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yMyAxOTozMzozNywxNDggW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6dGVzdHM6MC4xIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFByb2plY3QtVGVzdHNccG9tLnhtbC4KKzIwMjEtMTAtMjMgMTk6MzM6MzcsMzYzIFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjMgMTk6MzM6MzcsMzY1IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC91dGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTIzIDE5OjMzOjM3LDM2NyBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvd2Zvcm1TZXJ2aWNlSmFyOiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3dmb3JtU2VydmljZUphci90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yMyAxOTozMzozNyw0ODAgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMS0xMC0yMyAxOTozMzozNyw0OTAgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjMgMTk6MzM6MzcsNDkyIFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjMgMTk6MzM6MzcsOTA4IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC91dGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTIzIDE5OjMzOjM3LDkxMCBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTIzIDE5OjMzOjM5LDAxNiBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMjMgMTk6MzM6MzksMDE4IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMS0xMC0yMyAxOTozMzozOSwwMjEgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTIzIDE5OjMzOjM5LDAyMiBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjEtMTAtMjMgMTk6MzM6MzksMTc2IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0yMyAxOTozMzozOSwyMDEgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlSmFyXHNyY1xtYWluXHJlc291cmNlcworMjAyMS0xMC0yMyAxOTozMzozOSwyMDMgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTIzIDE5OjMzOjM5LDIyNyBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VKYXJcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIxLTEwLTIzIDE5OjMzOjM5LDc3MyBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VzOjAuMi1UZXN0IEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXNccG9tLnhtbC4KKzIwMjEtMTAtMjMgMTk6MzM6MzksOTE4IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC91dGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTIzIDE5OjMzOjM5LDkyMSBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTIzIDE5OjMzOjM5LDkyNCBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjItVGVzdCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yMyAxOTozMzozOSw5NzQgW1dvcmtlci0yOTc6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjMgMTk6MzM6MzksOTc2IFtXb3JrZXItMjk3OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvdXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC91dGlscy90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yMyAxOTozMzozOSw5NzggW1dvcmtlci0yOTc6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC93Zm9ybVNlcnZpY2VKYXI6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvd2Zvcm1TZXJ2aWNlSmFyL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTIzIDE5OjMzOjQwLDA1NyBbV29ya2VyLTI5NzogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gRVJST1Igby5lLm0uai5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IgLSBDb3VsZCBub3QgZG93bmxvYWQgc291cmNlcyBmb3IgZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVAorb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb246IENvdWxkIG5vdCByZXNvbHZlIGFydGlmYWN0IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDpqYXI6c291cmNlczowLjEtU05BUFNIT1QKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjc3NikgfltvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjEpIH5bb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjExMikgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzQzKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzIwKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWQoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6Mjc5KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZEF0dGFjaG1lbnRzKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI1NCkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRNYXZlbihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyMjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxNjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzcpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTUxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwuZXhlY3V0ZShNYXZlbkltcGwuamF2YToxMzU1KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KKzIwMjEtMTAtMjMgMTk6MzM6NDAsMDc1IFtXb3JrZXItMjk3OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvdXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC91dGlscy90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yMyAxOTozMzo0MCwwNzYgW1dvcmtlci0yOTc6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjMgMTk6MzM6NDAsMDc2IFtXb3JrZXItMjk3OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjItVGVzdCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yMyAxOTozMzo0MCwwOTIgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yMyAxOTozMzo0MCwwOTMgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjMgMTk6MzM6NDAsMDk3IFtXb3JrZXItMjk3OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBFUlJPUiBvLmUubS5qLmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiAtIENvdWxkIG5vdCBkb3dubG9hZCBqYXZhZG9jIGZvciBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UCitvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjogQ291bGQgbm90IHJlc29sdmUgYXJ0aWZhY3QgZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OmphcjpqYXZhZG9jOjAuMS1TTkFQU0hPVAorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6Nzc2KSB+W29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6MSkgfltvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTEyKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3NDMpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3MjApIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNzkpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkQXR0YWNobWVudHMoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjY1KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZE1hdmVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjIyMSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjE2MSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNykgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNTEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5leGVjdXRlKE1hdmVuSW1wbC5qYXZhOjEzNTUpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM1KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorMjAyMS0xMC0yMyAxOTozMzo0MCwzMTQgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjMgMTk6MzM6NDAsMzE1IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjMgMTk6MzM6NDAsMzE1IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMi1UZXN0IHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTIzIDE5OjMzOjQwLDg1OSBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMjMgMTk6MzM6NDAsODYxIFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIxLTEwLTIzIDE5OjMzOjQwLDg2MiBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMjMgMTk6MzM6NDAsODY0IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIxLTEwLTIzIDE5OjMzOjQwLDk3MCBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMjMgMTk6MzM6NDAsOTcxIFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIxLTEwLTIzIDE5OjMzOjQwLDk3MyBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMjMgMTk6MzM6NDAsOTc0IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIxLTEwLTIzIDE5OjM0OjA2LDI1MyBbV29ya2VyLTI5ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjMgMTk6MzQ6MDYsMjUzIFtXb3JrZXItMjk4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjMgMTk6NDk6NDIsNDYwIFtXb3JrZXItMjk4OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC91dGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTIzIDE5OjQ5OjQyLDQ2MyBbV29ya2VyLTI5ODogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTIzIDE5OjQ5OjQyLDQ4MiBbV29ya2VyLTI5ODogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjMgMTk6NDk6NDMsMDY5IFtXb3JrZXItMjk4OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC91dGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTIzIDE5OjQ5OjQzLDA3MSBbV29ya2VyLTI5ODogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTIzIDE5OjQ5OjQzLDA3MSBbV29ya2VyLTI5ODogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjItVGVzdCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yMyAxOTo0OTo0MywwODcgW1dvcmtlci0yOTg6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIxLTEwLTIzIDE5OjQ5OjQzLDQwMiBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMjMgMTk6NDk6NDMsNDA1IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjEtMTAtMjMgMTk6NDk6NDMsNDA4IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0yMyAxOTo0OTo0Myw0MTEgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMS0xMC0yMyAxOTo0OTo0Myw2MDIgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTIzIDE5OjQ5OjQzLDYwNCBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjEtMTAtMjMgMTk6NDk6NDMsNjIxIFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0yMyAxOTo0OTo0Myw2MjQgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIxLTEwLTIzIDE5OjQ5OjQzLDg4NCBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvdXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC91dGlscy90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yMyAxOTo0OTo0Myw4ODYgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yMyAxOTo0OTo0Myw5MTUgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTIzIDE5OjQ5OjQzLDkxOCBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMS0xMC0yMyAxOTo0OTo0Myw5MjIgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTIzIDE5OjQ5OjQzLDkyNCBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMS0xMC0yMyAxOTo0OTo0Myw5MjUgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTIzIDE5OjQ5OjQzLDkyNyBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTIzIDE5OjQ5OjQ0LDAzMyBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMjMgMTk6NDk6NDYsMDY1IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjMgMTk6NDk6NDYsMDY2IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC91dGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTIzIDE5OjQ5OjQ2LDA3MyBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMjMgMTk6NDk6NDYsMDc1IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMS0xMC0yMyAxOTo0OTo0NiwwNzcgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTIzIDE5OjQ5OjQ2LDA3OSBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjEtMTAtMjMgMTk6NDk6NDYsMTc4IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0yMyAxOTo0OTo0NiwxNzkgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlSmFyXHNyY1xtYWluXHJlc291cmNlcworMjAyMS0xMC0yMyAxOTo0OTo0NiwxODEgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTIzIDE5OjQ5OjQ2LDE4MyBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VKYXJcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIxLTEwLTIzIDE5OjQ5OjQ2LDI5NiBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvdXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC91dGlscy90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yMyAxOTo0OTo0NiwyOTcgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yMyAxOTo0OTo0NiwyOTcgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4yLVRlc3Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjMgMTk6NDk6NDYsMzAzIFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0yMyAxOTo0OTo0NiwzMDUgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjEtMTAtMjMgMTk6NDk6NDYsMzA3IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0yMyAxOTo0OTo0NiwzMDggW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjEtMTAtMjMgMTk6NDk6NDYsMzA5IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yMyAxOTo0OTo0NiwzMDkgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yMyAxOTo0OTo0NiwzMTYgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTIzIDE5OjQ5OjQ2LDQ2NCBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTIzIDE5OjQ5OjQ2LDQ2NSBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvdXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC91dGlscy90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yMyAxOTo0OTo0Niw0NjYgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3dmb3JtU2VydmljZUphcjogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC93Zm9ybVNlcnZpY2VKYXIvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjMgMTk6NDk6NDYsNDc0IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0yMyAxOTo0OTo0Niw0NzUgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjEtMTAtMjMgMTk6NDk6NDYsNDgyIFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0yMyAxOTo0OTo0Niw0OTQgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjEtMTAtMjMgMTk6NDk6NTUsMTY4IFtXb3JrZXItMjk1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yMyAxOTo0OTo1NSwxNjkgW1dvcmtlci0yOTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMyAxOTo1ODo1MiwwMjAgW1dvcmtlci0yOTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTIzIDE5OjU4OjUyLDAyMCBbV29ya2VyLTI5NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIzIDIwOjE0OjI3LDkxMiBbV29ya2VyLTQ6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgb3V0LW9mLWRhdGUuIFRyeWluZyB0byB1cGRhdGUuCisyMDIxLTEwLTIzIDIwOjE2OjI0LDU0MyBbV29ya2VyLTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTIzIDIwOjE2OjI0LDU0NiBbV29ya2VyLTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMyAyMDoxNjo1OCwxMjggW1dvcmtlci0zOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yMyAyMDoxNjo1OCwxMjkgW1dvcmtlci0zOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjUgMDk6Mzg6MTIsMzcyIFtXb3JrZXItNDogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjEtMTAtMjUgMTk6MDM6MzIsNTg1IFtXb3JrZXItMTI3OiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjEtMTAtMjUgMTk6MTY6MTIsNjc5IFtXb3JrZXItMTI3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yNSAxOToxNjoxMiw2ODEgW1dvcmtlci0xMjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNSAxOTozNDo0NywyMTQgW1dvcmtlci0xMzA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTI1IDE5OjM0OjQ3LDIxNCBbV29ya2VyLTEzMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI1IDE5OjQzOjE4LDU2MSBbV29ya2VyLTEzMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjUgMTk6NDM6MTgsNTYyIFtXb3JrZXItMTMxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjUgMTk6NTE6MTMsMzgxIFtXb3JrZXItMTMxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yNSAxOTo1MToxMywzODEgW1dvcmtlci0xMzE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAwNzoyMTo0MiwyODYgW1dvcmtlci00OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMS0xMC0yNiAwNzoyNzo0MCw0NDIgW1dvcmtlci0xMTogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIxLTEwLTI2IDA3OjM3OjIzLDU2OSBbV29ya2VyLTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTI2IDA3OjM3OjIzLDU4OSBbV29ya2VyLTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAwNzozOToyMCw5MjcgW1dvcmtlci0xMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjYgMDc6Mzk6MjAsOTI3IFtXb3JrZXItMTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAwNzo1ODo1OSwyNzYgW1dvcmtlci0yOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yNiAwNzo1ODo1OSwyNzYgW1dvcmtlci0yOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjYgMDc6NTg6NTksMjc2IFtXb3JrZXItMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBXQVJOICBvLmUubS5pLmwuTWF2ZW5MYXVuY2hFeHRlbnNpb25zU3VwcG9ydCAtIFVua25vd24gb3IgdW5zdXBwb3J0ZWQgc291cmNlIGxvY2F0b3Igb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmxhdW5jaGluZy5zb3VyY2Vsb29rdXAuYWR2YW5jZWQuQWR2YW5jZWRTb3VyY2VMb29rdXBEaXJlY3RvcgorMjAyMS0xMC0yNiAwODowOTo1MSw3NjkgW1dvcmtlci0xMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjYgMDg6MDk6NTEsNzcwIFtXb3JrZXItMTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAwODoyMzozOCw1NzMgW1dvcmtlci0yMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjYgMDg6MjM6MzgsNTczIFtXb3JrZXItMjE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAwOToxMzowMCwyNDMgW1dvcmtlci0yODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxVdGlscworMjAyMS0xMC0yNiAwOToxMzowMCwyNDQgW1dvcmtlci0yODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAwOToxMzo1OSw5NDMgW1dvcmtlci0yMzogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC91dGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTI2IDA5OjEzOjU5LDk3NCBbV29ya2VyLTIzOiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yNiAwOToxNDo1MCw0NjkgW1dvcmtlci0yNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxVdGlscworMjAyMS0xMC0yNiAwOToxNDo1MCw0NjkgW1dvcmtlci0yNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAwOToxNjo0NSwxNjYgW1dvcmtlci0yOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxVdGlscworMjAyMS0xMC0yNiAwOToxNjo0NSwxNjYgW1dvcmtlci0yOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAwOToxNzo0MSw2MDIgW1dvcmtlci0yNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxVdGlscworMjAyMS0xMC0yNiAwOToxNzo0MSw2MDMgW1dvcmtlci0yNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAwOToxODo0OCw4MDcgW1dvcmtlci0yODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjYgMDk6MTg6NDgsODA3IFtXb3JrZXItMjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAwOToyNjoyOCw0ODggW1dvcmtlci0yMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjYgMDk6MjY6MjgsNDg5IFtXb3JrZXItMjM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAwOToyNzo0Niw2NDEgW1dvcmtlci0yNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjYgMDk6Mjc6NDYsNjQyIFtXb3JrZXItMjY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAxMTozMDo0OCwwNzIgW1dvcmtlci00MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjYgMTE6MzA6NDgsMDczIFtXb3JrZXItNDI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAxMTozMTozMSw1MTkgW1dvcmtlci00MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjYgMTE6MzE6MzEsNTE5IFtXb3JrZXItNDI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAxMTo0NDoxMywyODYgW1dvcmtlci00MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbUNsaWVudAorMjAyMS0xMC0yNiAxMTo0NDoxMywyODYgW1dvcmtlci00MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAxMjo0OTowMiw2NzggW1dvcmtlci01MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbUNsaWVudAorMjAyMS0xMC0yNiAxMjo0OTowMiw2ODAgW1dvcmtlci01MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAxMjo0OToxOCw0ODcgW1dvcmtlci00NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjYgMTI6NDk6MTgsNDg4IFtXb3JrZXItNDU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAxMjo0OTozOSw1NDkgW1dvcmtlci01MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjYgMTI6NDk6MzksNTQ5IFtXb3JrZXItNTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAxMjo1MToyNSwwNjMgW1dvcmtlci00ODogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC91dGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTI2IDEyOjUxOjI1LDA3MiBbV29ya2VyLTQ4OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yNiAxMjo1MToyNSwwNzMgW1dvcmtlci00ODogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMi1UZXN0IHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTI2IDEyOjUxOjQ3LDY1MSBbV29ya2VyLTUxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxKc29uVHJhdmVyc2UKKzIwMjEtMTAtMjYgMTI6NTE6NDcsNjUxIFtXb3JrZXItNTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDEyOjUyOjA0LDMwMCBbV29ya2VyLTQ4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yNiAxMjo1MjowNCwzMDAgW1dvcmtlci00ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDEyOjU2OjM2LDgxMyBbV29ya2VyLTQ1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yNiAxMjo1NjozNiw4MTQgW1dvcmtlci00NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDEyOjU2OjU1LDc1OSBbV29ya2VyLTQ4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yNiAxMjo1Njo1NSw3NjAgW1dvcmtlci00ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDE1OjAxOjA5LDc1MSBbV29ya2VyLTc3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tQ2xpZW50CisyMDIxLTEwLTI2IDE1OjAxOjA5LDc1NCBbV29ya2VyLTc3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDE1OjAxOjI2LDAwOCBbV29ya2VyLTc1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxKc29uVHJhdmVyc2UKKzIwMjEtMTAtMjYgMTU6MDE6MjYsMDA4IFtXb3JrZXItNzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDE1OjAxOjQ1LDIwOSBbV29ya2VyLTc4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFV0aWxzCisyMDIxLTEwLTI2IDE1OjAxOjQ1LDIwOSBbV29ya2VyLTc4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDE1OjAyOjE5LDMxOSBbV29ya2VyLTc1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yNiAxNTowMjoxOSwzMTkgW1dvcmtlci03NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDE1OjAyOjM2LDYyOSBbV29ya2VyLTc4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yNiAxNTowMjozNiw2MjkgW1dvcmtlci03ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDE1OjIwOjQ2LDg4MSBbV29ya2VyLTgxOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjYgMTU6MjA6NDYsODgyIFtXb3JrZXItODE6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjYgMTU6MjA6NDgsNTk5IFtXb3JrZXItODE6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTI2IDE1OjIwOjQ5LDUwNCBbV29ya2VyLTgxOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjYgMTU6MjA6NDksNTA2IFtXb3JrZXItODE6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjYgMTU6MjA6NDksNTA5IFtXb3JrZXItODE6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3dmb3JtU2VydmljZUphcjogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC93Zm9ybVNlcnZpY2VKYXIvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjYgMTU6MjA6NTAsMDg3IFtXb3JrZXItODE6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjYgMTU6MjA6NTAsMDg4IFtXb3JrZXItODE6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yNiAxNToyMDo1MCwwODkgW1dvcmtlci04MTogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjItVGVzdCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yNiAxNToyMDo1MCwwOTYgW1dvcmtlci04MTogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIHdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjYgMTU6MjA6NTMsNjMyIFtXb3JrZXItODQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTI2IDE1OjIwOjUzLDYzNSBbV29ya2VyLTg0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjEtMTAtMjYgMTU6MjA6NTMsNjM4IFtXb3JrZXItODQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTI2IDE1OjIwOjUzLDY0MCBbV29ya2VyLTg0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjEtMTAtMjYgMTU6MjA6NTUsMjg0IFtXb3JrZXItODQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTI2IDE1OjIwOjU1LDI4NyBbV29ya2VyLTg0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMS0xMC0yNiAxNToyMDo1NSwyOTEgW1dvcmtlci04NDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMjYgMTU6MjA6NTUsMjkzIFtXb3JrZXItODQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIxLTEwLTI2IDE1OjIwOjU1LDc2NiBbV29ya2VyLTg0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC91dGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTI2IDE1OjIwOjU1LDc2OCBbV29ya2VyLTg0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjYgMTU6MjA6NTUsNzc4IFtXb3JrZXItODQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTI2IDE1OjIwOjU1LDc4MSBbV29ya2VyLTg0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIxLTEwLTI2IDE1OjIwOjU1LDc4NSBbV29ya2VyLTg0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0yNiAxNToyMDo1NSw3ODcgW1dvcmtlci04NDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMS0xMC0yNiAxNToyMDo1NSw3ODkgW1dvcmtlci04NDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjYgMTU6MjA6NTUsNzkxIFtXb3JrZXItODQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yNiAxNToyMDo1NiwxOTcgW1dvcmtlci04NDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMjYgMTU6MjE6MDEsNTkyIFtXb3JrZXItODQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yNiAxNToyMTowMSw1OTIgW1dvcmtlci04NDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvdXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC91dGlscy90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yNiAxNToyMTowMSw2MDcgW1dvcmtlci04NDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMjYgMTU6MjE6MDEsNjEwIFtXb3JrZXItODQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIxLTEwLTI2IDE1OjIxOjAxLDYxMyBbV29ya2VyLTg0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0yNiAxNToyMTowMSw2NTkgW1dvcmtlci04NDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjEtMTAtMjYgMTU6MjE6MDEsODQyIFtXb3JrZXItODQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTI2IDE1OjIxOjAxLDg0NCBbV29ya2VyLTg0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZUphclxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjEtMTAtMjYgMTU6MjE6MDEsODQ4IFtXb3JrZXItODQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTI2IDE1OjIxOjAxLDg1MSBbV29ya2VyLTg0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZUphclxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjEtMTAtMjYgMTU6MjE6MDIsMjAyIFtXb3JrZXItODQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjYgMTU6MjE6MDIsMjA1IFtXb3JrZXItODQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yNiAxNToyMTowMiwyMDUgW1dvcmtlci04NDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjItVGVzdCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yNiAxNToyMTowMiwyMTYgW1dvcmtlci04NDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMjYgMTU6MjE6MDIsMjQ3IFtXb3JrZXItODQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjEtMTAtMjYgMTU6MjE6MDIsMjUwIFtXb3JrZXItODQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTI2IDE1OjIxOjAyLDI1MiBbV29ya2VyLTg0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIxLTEwLTI2IDE1OjIxOjAyLDI1MyBbV29ya2VyLTg0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yNiAxNToyMTowMiwyNTMgW1dvcmtlci04NDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIxLTEwLTI2IDE1OjIxOjAyLDI2NSBbV29ya2VyLTg0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0yNiAxNToyMTowMiw1MzkgW1dvcmtlci04NDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTI2IDE1OjIxOjAyLDU0MCBbV29ya2VyLTg0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC91dGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTI2IDE1OjIxOjAyLDU0MiBbV29ya2VyLTg0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC93Zm9ybVNlcnZpY2VKYXI6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvd2Zvcm1TZXJ2aWNlSmFyL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTI2IDE1OjIxOjAyLDU1NyBbV29ya2VyLTg0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0yNiAxNToyMTowMiw1NjAgW1dvcmtlci04NDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMS0xMC0yNiAxNToyMTowMiw1NjkgW1dvcmtlci04NDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMjYgMTU6MjE6MDIsNTcxIFtXb3JrZXItODQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjEtMTAtMjYgMTU6MjE6MTMsMzg0IFtXb3JrZXItNzc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1DbGllbnQKKzIwMjEtMTAtMjYgMTU6MjE6MTMsMzg0IFtXb3JrZXItNzc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjYgMTU6MjE6MzMsMDMxIFtXb3JrZXItODE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEpzb25UcmF2ZXJzZQorMjAyMS0xMC0yNiAxNToyMTozMywwMzEgW1dvcmtlci04MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjYgMTU6MjE6NDksMjA4IFtXb3JrZXItODQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcVXRpbHMKKzIwMjEtMTAtMjYgMTU6MjE6NDksMjA4IFtXb3JrZXItODQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjYgMTU6MjI6MDIsODM4IFtXb3JrZXItODM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlSmFyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZUphcgorMjAyMS0xMC0yNiAxNToyMjowMiw4MzkgW1dvcmtlci04MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjYgMTU6MjI6MTksMjczIFtXb3JrZXItODQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTI2IDE1OjIyOjE5LDI3MyBbV29ya2VyLTg0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjYgMTU6MjI6MzIsNzMxIFtXb3JrZXItODI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTI2IDE1OjIyOjMyLDczMiBbV29ya2VyLTgyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjYgMTU6MzI6MTEsNDM3IFtXb3JrZXItODQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTI2IDE1OjMyOjExLDQzNyBbV29ya2VyLTg0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjYgMTY6MDU6MjYsNTIzIFtXb3JrZXItOTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTI2IDE2OjA1OjI2LDUyNCBbV29ya2VyLTkzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjYgMTY6MjQ6MDksNzIyIFtXb3JrZXItOTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTI2IDE2OjI0OjA5LDcyMyBbV29ya2VyLTk2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjYgMTY6Mjk6NTAsMjg1IFtXb3JrZXItOTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTI2IDE2OjI5OjUwLDI4NSBbV29ya2VyLTk0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjYgMTY6MzE6NDksODExIFtXb3JrZXItMTAwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFV0aWxzCisyMDIxLTEwLTI2IDE2OjMxOjQ5LDgxMSBbV29ya2VyLTEwMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAxNjozMjowNCwwOTcgW1dvcmtlci05NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjYgMTY6MzI6MDQsMDk4IFtXb3JrZXItOTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAxNjozMjoxOCw1MjMgW1dvcmtlci05OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjYgMTY6MzI6MTgsNTI0IFtXb3JrZXItOTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAxNjozNjowMCwwOTQgW1dvcmtlci05OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjYgMTY6MzY6MDAsMDk1IFtXb3JrZXItOTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAxNjozOTowMywyMTkgW1dvcmtlci0xMDY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTI2IDE2OjM5OjAzLDIxOSBbV29ya2VyLTEwNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDE2OjQ2OjMyLDAzMyBbV29ya2VyLTEwMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxVdGlscworMjAyMS0xMC0yNiAxNjo0NjozMiwwMzMgW1dvcmtlci0xMDA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjYgMTY6NDY6NDcsNjU2IFtXb3JrZXItMTA1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yNiAxNjo0Njo0Nyw2NTYgW1dvcmtlci0xMDU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAxNjo0NzowMCw4NjQgW1dvcmtlci0xMDc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTI2IDE2OjQ3OjAwLDg2NSBbV29ya2VyLTEwNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDE2OjQ5OjQyLDkzMCBbV29ya2VyLTEwOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjYgMTY6NDk6NDIsOTMwIFtXb3JrZXItMTA5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjYgMTc6Mzk6MjcsODMwIFtXb3JrZXItMjogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjEtMTAtMjYgMTc6NDY6NTUsNDE0IFtXb3JrZXItMTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTI2IDE3OjQ2OjU1LDQxOCBbV29ya2VyLTEwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjYgMTc6NTY6MjAsODcyIFtXb3JrZXItOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjYgMTc6NTY6MjAsODcyIFtXb3JrZXItOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDE4OjI1OjQ0LDkxMSBbV29ya2VyLTE3OiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjEtMTAtMjYgMTg6MzA6NDcsNDc4IFtXb3JrZXItMTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTI2IDE4OjMwOjQ3LDQ3OSBbV29ya2VyLTE3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjYgMTg6MzI6MjQsMzQxIFtXb3JrZXItMTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTI2IDE4OjMyOjI0LDM0MyBbV29ya2VyLTE2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjYgMjA6MTY6NDUsMjYzIFtXb3JrZXItMTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTI2IDIwOjE2OjQ1LDI2NCBbV29ya2VyLTE5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjYgMjA6MjU6NDcsNTk1IFtXb3JrZXItMjY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTI2IDIwOjI1OjQ3LDU5NSBbV29ya2VyLTI2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjYgMjA6MzQ6NDUsMDM1IFtXb3JrZXItMjM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTI2IDIwOjM0OjQ1LDAzNSBbV29ya2VyLTIzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjYgMjA6Mzc6MjQsODgwIFtXb3JrZXItMjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTI2IDIwOjM3OjI0LDg4MCBbV29ya2VyLTI4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjYgMjA6Mzg6NDgsMTE2IFtXb3JrZXItMjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTI2IDIwOjM4OjQ4LDExNiBbV29ya2VyLTI4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjcgMDg6Mjk6MDUsNjI4IFtXb3JrZXItMDogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjEtMTAtMjcgMDg6Mzk6MzEsODk3IFtXb3JrZXItMzogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIxLTEwLTI3IDA4OjUwOjQ5LDIwNCBbV29ya2VyLTE1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxKc29uVHJhdmVyc2UKKzIwMjEtMTAtMjcgMDg6NTA6NDksMjA2IFtXb3JrZXItMTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDA4OjUxOjA3LDUwNiBbV29ya2VyLTE3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yNyAwODo1MTowNyw1MDcgW1dvcmtlci0xNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDA4OjU0OjIyLDM2NCBbV29ya2VyLTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTI3IDA4OjU0OjIyLDM2NSBbV29ya2VyLTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNyAwODo1ODozNSwwMDYgW1dvcmtlci0wOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxKc29uVHJhdmVyc2UKKzIwMjEtMTAtMjcgMDg6NTg6MzUsMDA2IFtXb3JrZXItMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjcgMDg6NTg6NDksOTk1IFtXb3JrZXItNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjcgMDg6NTg6NDksOTk1IFtXb3JrZXItNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDA5OjA4OjU2LDg3MCBbV29ya2VyLTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEpzb25UcmF2ZXJzZQorMjAyMS0xMC0yNyAwOTowODo1Niw4NzAgW1dvcmtlci0wOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNyAwOTowOToxMSwzMDYgW1dvcmtlci0yMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjcgMDk6MDk6MTEsMzA2IFtXb3JrZXItMjE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNyAwOToxNjo1NCw0NDQgW1dvcmtlci0yNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcSnNvblRyYXZlcnNlCisyMDIxLTEwLTI3IDA5OjE2OjU0LDQ0NSBbV29ya2VyLTI1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNyAwOToxNzoxMCwyMTIgW1dvcmtlci0yNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjcgMDk6MTc6MTAsMjEyIFtXb3JrZXItMjU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNyAwOToyMzoyNywwMjIgW1dvcmtlci0yOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcSnNvblRyYXZlcnNlCisyMDIxLTEwLTI3IDA5OjIzOjI3LDAyMyBbV29ya2VyLTI5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNyAwOToyNDo0MCw0MTIgW1dvcmtlci0yNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcSnNvblRyYXZlcnNlCisyMDIxLTEwLTI3IDA5OjI0OjQwLDQxMyBbV29ya2VyLTI3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNyAwOToyNDo1OCwyNDIgW1dvcmtlci0yODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjcgMDk6MjQ6NTgsMjQyIFtXb3JrZXItMjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNyAwOTozMzo0OSwyNDEgW1dvcmtlci0zMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcSnNvblRyYXZlcnNlCisyMDIxLTEwLTI3IDA5OjMzOjQ5LDI0MSBbV29ya2VyLTMwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNyAwOTozNjo0OCwzOTEgW1dvcmtlci0yOTogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC91dGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTI3IDA5OjM2OjQ4LDQwNSBbV29ya2VyLTI5OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yNyAwOTozNjo0OCw0MDYgW1dvcmtlci0yOTogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMi1UZXN0IHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTI3IDA5OjQzOjI4LDI4NiBbV29ya2VyLTM0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yNyAwOTo0MzoyOCwyODYgW1dvcmtlci0zNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDA5OjQ0OjI1LDEyNiBbV29ya2VyLTMzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tQ2xpZW50CisyMDIxLTEwLTI3IDA5OjQ0OjI1LDEyNiBbV29ya2VyLTMzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDA5OjQ0OjQxLDczOSBbV29ya2VyLTM1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxKc29uVHJhdmVyc2UKKzIwMjEtMTAtMjcgMDk6NDQ6NDEsNzQwIFtXb3JrZXItMzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDA5OjQ0OjUzLDMyNSBbV29ya2VyLTI5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFV0aWxzCisyMDIxLTEwLTI3IDA5OjQ0OjUzLDMyNSBbV29ya2VyLTI5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDA5OjQ1OjIzLDcxMiBbV29ya2VyLTM1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZUphcl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VKYXIKKzIwMjEtMTAtMjcgMDk6NDU6MjMsNzEzIFtXb3JrZXItMzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlSmFyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDA5OjQ1OjQyLDY3OSBbV29ya2VyLTMyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yNyAwOTo0NTo0Miw2ODAgW1dvcmtlci0zMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDEwOjU4OjIyLDIwMSBbV29ya2VyLTM5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxKc29uVHJhdmVyc2UKKzIwMjEtMTAtMjcgMTA6NTg6MjIsMjAxIFtXb3JrZXItMzk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDEwOjU4OjQ5LDI2NiBbV29ya2VyLTM2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yNyAxMDo1ODo0OSwyNjYgW1dvcmtlci0zNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDExOjE4OjE5LDI0NiBbV29ya2VyLTQ0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxKc29uVHJhdmVyc2UKKzIwMjEtMTAtMjcgMTE6MTg6MTksMjQ4IFtXb3JrZXItNDQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDExOjE4OjM2LDI2NyBbV29ya2VyLTQzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yNyAxMToxODozNiwyNjcgW1dvcmtlci00MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDExOjIyOjE0LDE4NyBbV29ya2VyLTM2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxKc29uVHJhdmVyc2UKKzIwMjEtMTAtMjcgMTE6MjI6MTQsMTg4IFtXb3JrZXItMzY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDExOjIyOjMwLDUxMSBbV29ya2VyLTQ2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yNyAxMToyMjozMCw1MTEgW1dvcmtlci00NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDEzOjQ5OjMxLDQ2OSBbV29ya2VyLTY4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxKc29uVHJhdmVyc2UKKzIwMjEtMTAtMjcgMTM6NDk6MzEsNDcwIFtXb3JrZXItNjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDEzOjQ5OjQ3LDU5MSBbV29ya2VyLTcwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yNyAxMzo0OTo0Nyw1OTIgW1dvcmtlci03MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDE2OjA4OjU0LDQ5OCBbV29ya2VyLTg3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxKc29uVHJhdmVyc2UKKzIwMjEtMTAtMjcgMTY6MDg6NTQsNDk5IFtXb3JrZXItODc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDE2OjA5OjI4LDM2MyBbV29ya2VyLTg0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yNyAxNjowOToyOCwzNjMgW1dvcmtlci04NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDE2OjEzOjUyLDEzMCBbV29ya2VyLTkxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxKc29uVHJhdmVyc2UKKzIwMjEtMTAtMjcgMTY6MTM6NTIsMTMwIFtXb3JrZXItOTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDE2OjE0OjA2LDk5MSBbV29ya2VyLTg3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yNyAxNjoxNDowNiw5OTEgW1dvcmtlci04NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDE2OjIxOjQ1LDQ1MSBbV29ya2VyLTk0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxKc29uVHJhdmVyc2UKKzIwMjEtMTAtMjcgMTY6MjE6NDUsNDUxIFtXb3JrZXItOTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDE2OjIyOjAwLDc2MCBbV29ya2VyLTkzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yNyAxNjoyMjowMCw3NjEgW1dvcmtlci05MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDE2OjU0OjI0LDkyMSBbV29ya2VyLTk3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yNyAxNjo1NDoyNCw5MjIgW1dvcmtlci05NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDE4OjEwOjQyLDU1MSBbV29ya2VyLTEwNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbUNsaWVudAorMjAyMS0xMC0yNyAxODoxMDo0Miw1NTIgW1dvcmtlci0xMDQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjcgMTg6MTE6MTAsOTMzIFtXb3JrZXItMTA1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yNyAxODoxMToxMCw5MzMgW1dvcmtlci0xMDU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNyAxODoxNTowNCw2NTkgW1dvcmtlci0xMDA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1DbGllbnQKKzIwMjEtMTAtMjcgMTg6MTU6MDQsNjU5IFtXb3JrZXItMTAwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDE4OjE1OjE5LDAxOSBbV29ya2VyLTEwMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjcgMTg6MTU6MTksMDIwIFtXb3JrZXItMTAzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjcgMTg6MTk6MTYsOTUwIFtXb3JrZXItMTA3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tQ2xpZW50CisyMDIxLTEwLTI3IDE4OjE5OjE2LDk1MCBbV29ya2VyLTEwNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNyAxODoxOTozMSwxNzQgW1dvcmtlci0xMDc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTI3IDE4OjE5OjMxLDE3NCBbV29ya2VyLTEwNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDE4OjIyOjUyLDk2MCBbV29ya2VyLTExMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjcgMTg6MjI6NTIsOTYwIFtXb3JrZXItMTExOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjcgMTg6MjQ6MjcsMDI3IFtXb3JrZXItMTA5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yNyAxODoyNDoyNywwMjcgW1dvcmtlci0xMDk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNyAxODoyNjozNywwNjEgW1dvcmtlci0xMTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTI3IDE4OjI2OjM3LDA2MSBbV29ya2VyLTExMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDE4OjI4OjUyLDAzMSBbV29ya2VyLTEwOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbUNsaWVudAorMjAyMS0xMC0yNyAxODoyODo1MiwwMzEgW1dvcmtlci0xMDk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjcgMTg6Mjk6MDcsMzgwIFtXb3JrZXItMTEwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yNyAxODoyOTowNywzODEgW1dvcmtlci0xMTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNyAxODoyOTowNywzODIgW1dvcmtlci0xMTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gV0FSTiAgby5lLm0uaS5sLk1hdmVuTGF1bmNoRXh0ZW5zaW9uc1N1cHBvcnQgLSBVbmtub3duIG9yIHVuc3VwcG9ydGVkIHNvdXJjZSBsb2NhdG9yIG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5sYXVuY2hpbmcuc291cmNlbG9va3VwLmFkdmFuY2VkLkFkdmFuY2VkU291cmNlTG9va3VwRGlyZWN0b3IKKzIwMjEtMTAtMjggMDc6MjE6MzksNzk5IFtXb3JrZXItMjogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjEtMTAtMjggMDc6Mzk6MjksNDU2IFtXb3JrZXItOTogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIxLTEwLTI4IDA3OjQxOjAwLDQ3NSBbV29ya2VyLTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1DbGllbnQKKzIwMjEtMTAtMjggMDc6NDE6MDAsNDc3IFtXb3JrZXItOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yOCAwNzo0MToyNiw0MzkgW1dvcmtlci05OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yOCAwNzo0MToyNiw0MzkgW1dvcmtlci05OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjggMDk6MDY6NTIsODEzIFtXb3JrZXItMTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1DbGllbnQKKzIwMjEtMTAtMjggMDk6MDY6NTIsODEzIFtXb3JrZXItMTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjggMDk6MDc6MDcsOTA1IFtXb3JrZXItMTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTI4IDA5OjA3OjA3LDkwNiBbV29ya2VyLTE0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjggMTM6MTU6NTksNDYxIFtXb3JrZXItMzogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjEtMTAtMjggMTU6NTQ6MDEsMTg1IFtXb3JrZXItMzc6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMS0xMC0yOCAxNjowNToxNSwyNTMgW1dvcmtlci0zOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbUNsaWVudAorMjAyMS0xMC0yOCAxNjowNToxNSwyNTYgW1dvcmtlci0zOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yOCAxNjowNTozNSwxMDggW1dvcmtlci00MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjggMTY6MDU6MzUsMTA5IFtXb3JrZXItNDA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yOCAxNjo0MzozNCw4MjcgW1dvcmtlci00NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbUNsaWVudAorMjAyMS0xMC0yOCAxNjo0MzozNCw4MjcgW1dvcmtlci00NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yOCAxNjo0Mzo1MCw1MjkgW1dvcmtlci00NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjggMTY6NDM6NTAsNTI5IFtXb3JrZXItNDY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yOCAxNjo1MjoxNSw2NDMgW1dvcmtlci00NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbUNsaWVudAorMjAyMS0xMC0yOCAxNjo1MjoxNSw2NDMgW1dvcmtlci00NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yOCAxNjo1MjozMCw4MzIgW1dvcmtlci00MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjggMTY6NTI6MzAsODMyIFtXb3JrZXItNDI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yOCAxNjo1NToxNyw2MTQgW1dvcmtlci00ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbUNsaWVudAorMjAyMS0xMC0yOCAxNjo1NToxNyw2MTQgW1dvcmtlci00ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yOCAxNjo1NTozMCw4MzAgW1dvcmtlci00MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjggMTY6NTU6MzAsODMxIFtXb3JrZXItNDI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yOCAxNzo1MDozNyw5MjcgW1dvcmtlci00NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbUNsaWVudAorMjAyMS0xMC0yOCAxNzo1MDozNyw5MjcgW1dvcmtlci00NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yOCAxNzo1MDo1NCwzMTEgW1dvcmtlci00MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjggMTc6NTA6NTQsMzExIFtXb3JrZXItNDI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yOSAwODozNjo0NiwyNDEgW1dvcmtlci0yOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMS0xMC0yOSAwOTozMDowNCw1MTcgW1dvcmtlci05OiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjEtMTAtMjkgMDk6MzU6MjcsMDY3IFtXb3JrZXItMTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTI5IDA5OjM1OjI3LDA3MCBbV29ya2VyLTE3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjkgMDk6NDE6MjksNTEyIFtXb3JrZXItOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjkgMDk6NDE6MjksNTEzIFtXb3JrZXItOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI5IDA5OjQxOjUwLDU4MiBbV29ya2VyLTE2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yOSAwOTo0MTo1MCw1ODIgW1dvcmtlci0xNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI5IDE1OjA5OjUzLDg1NCBbV29ya2VyLTcyOiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjkgMTU6MDk6NTMsODcyIFtXb3JrZXItNzI6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTI5IDE1OjA5OjUzLDg3MyBbV29ya2VyLTcyOiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4yLVRlc3Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjkgMTU6MjM6MzAsNTExIFtXb3JrZXItODA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTI5IDE1OjIzOjMwLDUxMSBbV29ya2VyLTgwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjkgMTU6MjM6NTMsMzc4IFtXb3JrZXItODE6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvdXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC91dGlscy90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yOSAxNToyMzo1MywzODEgW1dvcmtlci04MTogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjkgMTU6MjY6MTIsNzY0IFtXb3JrZXItODE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTI5IDE1OjI2OjEyLDc2NCBbV29ya2VyLTgxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjkgMTU6Mjc6MDgsMDk3IFtXb3JrZXItODE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTI5IDE1OjI3OjA4LDA5NyBbV29ya2VyLTgxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjkgMTU6MzY6MzEsOTYzIFtXb3JrZXItODI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTI5IDE1OjM2OjMxLDk2NCBbV29ya2VyLTgyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjkgMTU6NDQ6MDAsMjg4IFtXb3JrZXItODQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTI5IDE1OjQ0OjAwLDI4OSBbV29ya2VyLTg0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjkgMTc6NTA6MjQsODUzIFtXb3JrZXItMjogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjEtMTEtMDMgMDk6MTg6MDksNDg5IFtXb3JrZXItNDogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjEtMTEtMDMgMDk6MjM6MjYsMjIzIFtXb3JrZXItNjogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC91dGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIxLTExLTAzIDA5OjIzOjI2LDI0MCBbV29ya2VyLTY6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTExLTAzIDA5OjI0OjU4LDc1MSBbV29ya2VyLTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTExLTAzIDA5OjI0OjU4LDc1MyBbV29ya2VyLTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMS0wMyAwOTozMDowNiwyMTYgW1dvcmtlci02OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTEtMDMgMDk6MzA6MDYsMjE5IFtXb3JrZXItNjogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTEtMDMgMDk6MzA6MDYsMjIwIFtXb3JrZXItNjogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMi1UZXN0IHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIxLTExLTAzIDA5OjU2OjA0LDY5NSBbV29ya2VyLTE5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMS0wMyAwOTo1NjowNCw2OTUgW1dvcmtlci0xOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTExLTA0IDA4OjE1OjI3LDM4OCBbV29ya2VyLTk6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIxLTExLTA0IDA4OjI3OjIwLDY2MCBbV29ya2VyLTE4OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTEtMDQgMDg6Mjc6MjAsNjgwIFtXb3JrZXItMTg6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTExLTA0IDA4OjM5OjA5LDAyMSBbV29ya2VyLTE2OiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjEtMTEtMDQgMDg6NDQ6NTksMDA1IFtXb3JrZXItMTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTExLTA0IDA4OjQ0OjU5LDAwNyBbV29ya2VyLTE1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTEtMDQgMDk6NDE6MjUsMjYyIFtXb3JrZXItMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTEtMDQgMDk6NDE6MjUsMjYzIFtXb3JrZXItMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTExLTA0IDA5OjU3OjMyLDczNiBbV29ya2VyLTMyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMS0wNCAwOTo1NzozMiw3MzYgW1dvcmtlci0zMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTExLTA0IDEwOjM4OjExLDM1NSBbV29ya2VyLTM1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMS0wNCAxMDozODoxMSwzNTYgW1dvcmtlci0zNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTExLTA0IDEwOjQxOjQ4LDQyNiBbV29ya2VyLTM5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMS0wNCAxMDo0MTo0OCw0MjcgW1dvcmtlci0zOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTExLTA0IDEwOjQ5OjIwLDgyMCBbV29ya2VyLTQxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMS0wNCAxMDo0OToyMCw4MjEgW1dvcmtlci00MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTExLTA0IDEwOjU2OjE4LDQxNCBbV29ya2VyLTQyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMS0wNCAxMDo1NjoxOCw0MTQgW1dvcmtlci00MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTExLTA0IDExOjAwOjAxLDMzNyBbV29ya2VyLTM5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMS0wNCAxMTowMDowMSwzMzcgW1dvcmtlci0zOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTExLTA0IDE1OjQ4OjQ3LDQwMCBbV29ya2VyLTExODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTEtMDQgMTU6NDg6NDcsNDAxIFtXb3JrZXItMTE4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTEtMDQgMTg6NDM6MTYsODI1IFtXb3JrZXItMTUzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMS0wNCAxODo0MzoxNiw4MjYgW1dvcmtlci0xNTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMS0wNCAxOToxMjozNiw5NDcgW1dvcmtlci0xNjI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTExLTA0IDE5OjEyOjM2LDk0OCBbV29ya2VyLTE2MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTExLTA0IDIxOjE3OjEzLDM1OSBbV29ya2VyLTE3NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTEtMDQgMjE6MTc6MTMsMzc3IFtXb3JrZXItMTc0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTEtMDQgMjE6MzM6NTEsNDg3IFtXb3JrZXItMTc2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMS0wNCAyMTozMzo1MSw0ODggW1dvcmtlci0xNzY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMS0wNSAwODoyNjozNiwwODkgW1dvcmtlci0xOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMS0xMS0wNSAwODozMDowMSw2MTEgW1dvcmtlci0wOiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjEtMTEtMDUgMDg6MzE6NDMsMjU5IFtXb3JrZXItMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTEtMDUgMDg6MzE6NDMsMjYxIFtXb3JrZXItMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTExLTA1IDA5OjMzOjE1LDM1OCBbV29ya2VyLTE5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMS0wNSAwOTozMzoxNSwzNjAgW1dvcmtlci0xOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTExLTA1IDA5OjM0OjMxLDI5NiBbV29ya2VyLTE1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMS0wNSAwOTozNDozMSwyOTYgW1dvcmtlci0xNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTExLTA1IDE3OjU2OjA4LDIwNCBbV29ya2VyLTE6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIxLTExLTA1IDE4OjAwOjU3LDAzMSBbV29ya2VyLTg6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMS0xMS0wNSAxODowNDoyNyw2MTYgW1dvcmtlci0yOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMS0wNSAxODowNDoyNyw2MjEgW1dvcmtlci0yOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTEtMDUgMTg6MzE6NDgsMzMzIFtXb3JrZXItMTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTExLTA1IDE4OjMxOjQ4LDMzNSBbV29ya2VyLTE0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTEtMDkgMTU6MTc6NDIsNzgwIFtXb3JrZXItODogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suY29uZmlndXJhdGlvbi9sb2diYWNrLjEuOS4wLjIwMTgwNjA2LTIwMzYueG1sIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUubG9nYmFjay5jb25maWd1cmF0aW9uL2xvZ2JhY2suMS45LjAuMjAxODA2MDYtMjAzNi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMzNzU4YwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suY29uZmlndXJhdGlvbi9sb2diYWNrLjEuOS4wLjIwMTgwNjA2LTIwMzYueG1sCkBAIC0wLDAgKzEsNDMgQEAKKzxjb25maWd1cmF0aW9uIHNjYW49InRydWUiPgorICA8YXBwZW5kZXIgbmFtZT0iU1RET1VUIiBjbGFzcz0iY2gucW9zLmxvZ2JhY2suY29yZS5Db25zb2xlQXBwZW5kZXIiPgorICAgIDxlbmNvZGVyIGNsYXNzPSJjaC5xb3MubG9nYmFjay5jbGFzc2ljLmVuY29kZXIuUGF0dGVybkxheW91dEVuY29kZXIiPgorICAgICAgPHBhdHRlcm4+JWRhdGUgWyV0aHJlYWRdICUtNWxldmVsICVsb2dnZXJ7MzV9IC0gJW1zZyVuPC9wYXR0ZXJuPgorICAgIDwvZW5jb2Rlcj4KKyAgICA8ZmlsdGVyIGNsYXNzPSJjaC5xb3MubG9nYmFjay5jbGFzc2ljLmZpbHRlci5UaHJlc2hvbGRGaWx0ZXIiPgorICAgICAgPGxldmVsPk9GRjwvbGV2ZWw+IDwhLS0gY2hhbmdlIHRvIERFQlVHIHRvIG1pbWljICctY29uc29sZWxvZycgYmVoYXZpb3VyIC0tPgorICAgIDwvZmlsdGVyPgorICA8L2FwcGVuZGVyPgorCisgIDxhcHBlbmRlciBuYW1lPSJGSUxFIiBjbGFzcz0iY2gucW9zLmxvZ2JhY2suY29yZS5yb2xsaW5nLlJvbGxpbmdGaWxlQXBwZW5kZXIiPgorICAgIDxGaWxlPiR7b3JnLmVjbGlwc2UubTJlLmxvZy5kaXJ9LzAubG9nPC9GaWxlPgorICAgIDxyb2xsaW5nUG9saWN5IGNsYXNzPSJjaC5xb3MubG9nYmFjay5jb3JlLnJvbGxpbmcuRml4ZWRXaW5kb3dSb2xsaW5nUG9saWN5Ij4KKyAgICAgIDxGaWxlTmFtZVBhdHRlcm4+JHtvcmcuZWNsaXBzZS5tMmUubG9nLmRpcn0vJWkubG9nPC9GaWxlTmFtZVBhdHRlcm4+CisgICAgICA8TWluSW5kZXg+MTwvTWluSW5kZXg+CisgICAgICA8TWF4SW5kZXg+MTA8L01heEluZGV4PgorICAgIDwvcm9sbGluZ1BvbGljeT4KKyAgICA8dHJpZ2dlcmluZ1BvbGljeSBjbGFzcz0iY2gucW9zLmxvZ2JhY2suY29yZS5yb2xsaW5nLlNpemVCYXNlZFRyaWdnZXJpbmdQb2xpY3kiPgorICAgICAgPE1heEZpbGVTaXplPjEwME1CPC9NYXhGaWxlU2l6ZT4KKyAgICA8L3RyaWdnZXJpbmdQb2xpY3k+CisgICAgPGVuY29kZXIgY2xhc3M9ImNoLnFvcy5sb2diYWNrLmNsYXNzaWMuZW5jb2Rlci5QYXR0ZXJuTGF5b3V0RW5jb2RlciI+CisgICAgICA8cGF0dGVybj4lZGF0ZSBbJXRocmVhZF0gJS01bGV2ZWwgJWxvZ2dlcnszNX0gLSAlbXNnJW48L3BhdHRlcm4+CisgICAgPC9lbmNvZGVyPgorICA8L2FwcGVuZGVyPgorCisgIDxhcHBlbmRlciBuYW1lPSJFY2xpcHNlTG9nIiBjbGFzcz0ib3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIuRWNsaXBzZUxvZ0FwcGVuZGVyIj4KKyAgICA8ZmlsdGVyIGNsYXNzPSJjaC5xb3MubG9nYmFjay5jbGFzc2ljLmZpbHRlci5UaHJlc2hvbGRGaWx0ZXIiPgorICAgICAgPGxldmVsPldBUk48L2xldmVsPgorICAgIDwvZmlsdGVyPgorICA8L2FwcGVuZGVyPgorCisgIDxhcHBlbmRlciBuYW1lPSJNYXZlbkNvbnNvbGVMb2ciIGNsYXNzPSJvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlci5NYXZlbkNvbnNvbGVBcHBlbmRlciI+CisgIDwvYXBwZW5kZXI+CisgICAgICAgIAorICA8cm9vdCBsZXZlbD0iSU5GTyI+CisgICAgPGFwcGVuZGVyLXJlZiByZWY9IkZJTEUiIC8+CisgICAgPGFwcGVuZGVyLXJlZiByZWY9IlNURE9VVCIgLz4KKyAgICA8YXBwZW5kZXItcmVmIHJlZj0iRWNsaXBzZUxvZyIgLz4KKyAgICA8YXBwZW5kZXItcmVmIHJlZj0iTWF2ZW5Db25zb2xlTG9nIiAvPgorICA8L3Jvb3Q+CisKKyAgPGxvZ2dlciBuYW1lPSJjb20ubmluZy5odHRwLmNsaWVudCIgbGV2ZWw9IklORk8iIC8+Cis8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm9vbXBoLnNldHVwL3dvcmtzcGFjZS5zZXR1cCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uub29tcGguc2V0dXAvd29ya3NwYWNlLnNldHVwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNzNlMTQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm9vbXBoLnNldHVwL3dvcmtzcGFjZS5zZXR1cApAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8c2V0dXA6V29ya3NwYWNlCisgICAgeG1pOnZlcnNpb249IjIuMCIKKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiCisgICAgeG1sbnM6c2V0dXA9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb29tcGgvc2V0dXAvMS4wIgorICAgIG5hbWU9IndvcmtzcGFjZSIvPgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5wZGUuY29yZS8uY2FjaGUvY2xlYW4tY2FjaGUucHJvcGVydGllcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UucGRlLmNvcmUvLmNhY2hlL2NsZWFuLWNhY2hlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNmOTNiNAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UucGRlLmNvcmUvLmNhY2hlL2NsZWFuLWNhY2hlLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyIEBACisjQ2FjaGVkIHRpbWVzdGFtcHMKKyNGcmkgTWFyIDA2IDE3OjUyOjA3IENFVCAyMDIwCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5uZXdzLmltcGwvZG93bmxvYWRzL2h0dHAlM0ElMkYlMkZ3d3cuZWNsaXBzZS5vcmclMkZob21lJTJGZWNsaXBzZW5ld3MucnNzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubmV3cy5pbXBsL2Rvd25sb2Fkcy9odHRwJTNBJTJGJTJGd3d3LmVjbGlwc2Uub3JnJTJGaG9tZSUyRmVjbGlwc2VuZXdzLnJzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDNkOWQxCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubmV3cy5pbXBsL2Rvd25sb2Fkcy9odHRwJTNBJTJGJTJGd3d3LmVjbGlwc2Uub3JnJTJGaG9tZSUyRmVjbGlwc2VuZXdzLnJzcwpAQCAtMCwwICsxLDE0ODUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgPz4KKyA8cnNzIHZlcnNpb249IjIuMCI+CisgIDxjaGFubmVsPgorICAgIDx0aXRsZT5FY2xpcHNlIE5ld3M8L3RpdGxlPgorICAgIDxsaW5rPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmc8L2xpbms+CisgICAgPGRlc2NyaXB0aW9uPkVjbGlwc2UgTmV3czwvZGVzY3JpcHRpb24+CisgICAgPGltYWdlPgorICAgICAgPHVybD5odHRwOi8vZWNsaXBzZS5vcmcvZWNsaXBzZS5vcmctY29tbW9uL3RoZW1lcy9Ob3ZhL2ltYWdlcy9lY2xpcHNlLnBuZzwvdXJsPgorICAgICAgPHRpdGxlPmVjbGlwc2Uub3JnPC90aXRsZT4KKyAgICAgIDxsaW5rPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmc8L2xpbms+CisgICAgPC9pbWFnZT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlQ29uIDIwMjAgQ0ZQIGlzIE9wZW5dXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L3RoYWJhbmctbWFzaG9sb2d1L2VjbGlwc2Vjb24tMjAyMC1jZnAtb3Blbl1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtJZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gc3BlYWtpbmcsIG91ciBjYWxsIGZvciBwcm9wb3NhbHMgaXMgbm93IG9wZW4uIFBsZWFzZSB2aXNpdCB0aGUgQ0ZQIHBhZ2UgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBzdWJtaXQgeW91ciB0YWxrLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UaHUsIDE2IEFwciAyMDIwIDE1OjMwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtBZGQgWW91ciBWb2ljZSB0byB0aGUgMjAyMCBKYWthcnRhIEVFIERldmVsb3BlciBTdXJ2ZXldXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L21pa2UtbWlsaW5rb3ZpY2gvYWRkLXlvdXItdm9pY2UtMjAyMC1qYWthcnRhLWVlLWRldmVsb3Blci1zdXJ2ZXldXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbT3VyIHRoaXJkIGFubnVhbCBKYWthcnRhIEVFIERldmVsb3BlciBTdXJ2ZXkgaXMgbm93IG9wZW4gYW5kIEkgZW5jb3VyYWdlIGV2ZXJ5b25lIHRvIHRha2UgYSBmZXcgbWludXRlcyBhbmQgY29tcGxldGUgdGhlIHN1cnZleSBiZWZvcmUgdGhlIEFwcmlsIDMwIGRlYWRsaW5lLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UdWUsIDcgQXByIDIwMjAgMDg6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW1RoZSBFY2xpcHNlIEZvdW5kYXRpb24gUmVsZWFzZXMgRWNsaXBzZSBUaGVpYSAxLjAsIGEgVHJ1ZSBPcGVuIFNvdXJjZSBBbHRlcm5hdGl2ZSB0byBWaXN1YWwgU3R1ZGlvIENvZGVdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL3ByZXNzLXJlbGVhc2UvMjAyMDAzMzEtdGhlaWEucGhwXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoZSBFY2xpcHNlIEZvdW5kYXRpb24sIG9uZSBvZiB0aGUgd29ybGTigJlzIGxhcmdlc3Qgb3BlbiBzb3VyY2UgZm91bmRhdGlvbnMsIHRvZGF5IGFubm91bmNlZCB0aGUgcmVsZWFzZSBvZiBUaGVpYSAxLjAsIGEgdHJ1ZSBvcGVuIHNvdXJjZSBhbHRlcm5hdGl2ZSB0byBNaWNyb3NvZnTigJlzIHBvcHVsYXIgVmlzdWFsIFN0dWRpbyBDb2RlIChWUyBDb2RlKSBzb2Z0d2FyZS5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAzMSBNYXIgMjAyMCAwNzowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjE8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZUNvbiAyMDIwIHRvIEJlIEhlbGQgYXMgVmlydHVhbCBFdmVudF1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3QvcGF1bC13aGl0ZS9lY2xpcHNlY29uLTIwMjAtYmUtaGVsZC12aXJ0dWFsLWV2ZW50XV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgYW5ub3VuY2luZyB0b2RheSB0aGF0IGl0IHdpbGwgaG9sZCBpdHMgYW5udWFsIEVjbGlwc2VDb24gY29uZmVyZW5jZSBhcyBhIHZpcnR1YWwgZXZlbnQuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPkZyaSwgMjcgTWFyIDIwMjAgMDk6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgRm91bmRhdGlvbiBTdXBwb3J0cyBFVSBGdW5kZWQgU21hcnRDTElERSBQcm9qZWN0XV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9wcmVzcy1yZWxlYXNlLzIwMjAwMzI2LXNtYXJ0Y2xpZGUucGhwXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW0EgRXVyb3BlYW4gY29uc29ydGl1bSBvZiBlbGV2ZW4gcGFydG5lcnMgZnJvbSBHZXJtYW55LCBHcmVlY2UsIEx1eGVtYm91cmcsIFBvcnR1Z2FsLCBTcGFpbiwgYW5kIHRoZSBVbml0ZWQgS2luZ2RvbSBoYXMgYW5ub3VuY2VkIHRoZSBsYXVuY2ggb2YgdGhlIFNtYXJ0Q0xJREUgcHJvamVjdCwgYSDigqw0LjkgbWlsbGlvbiByZXNlYXJjaCBwcm9qZWN0IGZ1bmRlZCBieSB0aGUgRXVyb3BlYW4gVW5pb27igJlzIEhvcml6b24gMjAyMCByZXNlYXJjaCBhbmQgaW5ub3ZhdGlvbiBwcm9ncmFtLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UaHUsIDI2IE1hciAyMDIwIDA5OjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MTwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIEZvdW5kYXRpb24gQm9hcmQgRWxlY3Rpb24gUmVzdWx0c11dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvcHJlc3MtcmVsZWFzZS8yMDIwMDMxOS1ib2FyZGVsZWN0aW9uLnBocF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUb2RheSB3ZSBhcmUgcGxlYXNlZCB0byBhbm5vdW5jZSB0aGUgcmVzdWx0cyBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIFN1c3RhaW5pbmcgTWVtYmVyIGFuZCBDb21taXR0ZXIgTWVtYmVyIGVsZWN0aW9ucyBmb3IgcmVwcmVzZW50YXRpdmVzIHRvIG91ciBCb2FyZCBvZiBEaXJlY3RvcnMuIFRoZSBwb3NpdGlvbnMgb2YgU3VzdGFpbmluZyBNZW1iZXJzIGFuZCBDb21taXR0ZXIgcmVwcmVzZW50YXRpdmVzIGFyZSBhIHZpdGFsbHkgaW1wb3J0YW50IHBhcnQgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbidzIGdvdmVybmFuY2UuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlRodSwgMTkgTWFyIDIwMjAgMDk6NDU6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4xPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW1JlYWwtV29ybGQgSW9UIEFkb3B0aW9uXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC9taWtlLW1pbGlua292aWNoL3JlYWwtd29ybGQtaW90LWFkb3B0aW9uXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoZSByZXN1bHRzIG9mIG91ciBmaXJzdCBJb1QgQ29tbWVyY2lhbCBBZG9wdGlvbiBzdXJ2ZXkgdGVsbCBhIGNsZWFyIHN0b3J5IGFib3V0IHdoYXQgb3JnYW5pemF0aW9ucyBhcmUgZG9pbmcgd2l0aCBJb1QgcmlnaHQgbm93IGFuZCB0aGVpciBwbGFucyBmb3IgcHJvZHVjdGlvbiBkZXBsb3ltZW50cy5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+RnJpLCAxMyBNYXIgMjAyMCAxMjowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBSZWxlYXNlcyBJb1QgQ29tbWVyY2lhbCBBZG9wdGlvbiBTdXJ2ZXkgUmVzdWx0c11dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvcHJlc3MtcmVsZWFzZS8yMDIwMDMxMC1pb3QtY29tbWVyY2lhbC1hZG9wdGlvbi1zdXJ2ZXktMjAxOS5waHBdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBhbm5vdW5jZWQgdGhlIHJlbGVhc2Ugb2YgaXRzIGZpcnN0IGFubnVhbCBJb1QgQ29tbWVyY2lhbCBBZG9wdGlvbiBzdXJ2ZXkuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMTAgTWFyIDIwMjAgMDg6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4xPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0lPVEEgYW5kIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gTGF1bmNoIFdvcmtpbmcgR3JvdXAgdG8gRGV2ZWxvcCBDb21tZXJjaWFsIEFwcGxpY2F0aW9ucyBvbiBEaXN0cmlidXRlZCBMZWRnZXIgVGVjaG5vbG9neV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvcHJlc3MtcmVsZWFzZS8yMDIwMDIxMi1pb3RhLnBocF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtOZXcgVGFuZ2xlIEVFIFdvcmtpbmcgR3JvdXAgQnJpbmdzIFRvZ2V0aGVyIEZpZnRlZW4gRGl2ZXJzZSBPcmdhbml6YXRpb25zIHRvIEZvc3RlciBEYXRhIGFuZCBQYXltZW50IElubm92YXRpb24gb24gRGlzdHJpYnV0ZWQgTGVkZ2VyIFRlY2hub2xvZ3kgKERMVCldXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAxMSBGZWIgMjAyMCAwODowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjE8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbU3BhcmtwbHVnOiBTdGFuZGFyZGl6aW5nIEluZHVzdHJpYWwgSW9UIENvbW11bmljYXRpb25zXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC9taWtlLW1pbGlua292aWNoL3NwYXJrcGx1Zy1zdGFuZGFyZGl6aW5nLWluZHVzdHJpYWwtaW90LWNvbW11bmljYXRpb25zXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1dpdGggdGhlIGxhdW5jaCB0aGlzIHdlZWsgb2YgdGhlIFNwYXJrcGx1ZyBXb3JraW5nIEdyb3VwLCB3ZeKAmXJlIGJyaW5naW5nIHRvZ2V0aGVyIHRoZSBpbmR1c3RyeSBsZWFkZXJzIGFuZCB0ZWNobm9sb2dpZXMgbmVlZGVkIHRvIGRyaXZlLi4uXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlRodSwgMDYgRmViIDIwMjAgMTM6NDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW1RoZSBFY2xpcHNlIEZvdW5kYXRpb24gTGF1bmNoZXMgdGhlIFNwYXJrcGx1ZyBXb3JraW5nIEdyb3VwIHRvIEJyaW5nIERldmljZSBDb21tdW5pY2F0aW9ucyBTdGFuZGFyZGl6YXRpb24gdG8gdGhlIEluZHVzdHJpYWwgSW50ZXJuZXQgb2YgVGhpbmdzIGFuZCBJbmR1c3RyaWFsIEF1dG9tYXRpb25dXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZ2xvYmVuZXdzd2lyZS5jb20vbmV3cy1yZWxlYXNlLzIwMjAvMDIvMDMvMTk3ODkxMS8wL2VuL1RoZS1FY2xpcHNlLUZvdW5kYXRpb24tTGF1bmNoZXMtdGhlLVNwYXJrcGx1Zy1Xb3JraW5nLUdyb3VwLXRvLUJyaW5nLURldmljZS1Db21tdW5pY2F0aW9ucy1TdGFuZGFyZGl6YXRpb24tdG8tdGhlLUluZHVzdHJpYWwtSW50ZXJuZXQtb2YtVGhpbmdzLWFuZC1JbmR1c3RyaWFsLUF1dG9tYXRpb24uaHRtbF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtGb3VuZGluZyBtZW1iZXJzIENoZXZyb24sIENhbmFyeSBMYWJzLCBDaXJydXMgTGluayBTb2x1dGlvbnMsIEhpdmVNUSwgSW5kdWN0aXZlIEF1dG9tYXRpb24sIGFuZCBPUmluZyBhcmUgZGVmaW5pbmcgYW4gb3BlbiBzdGFuZGFyZCBzcGVjaWZpY2F0aW9uIHRvIGNyZWF0ZSBpbnRlcm9wZXJhYmxlIE1RVFQgSUlvVCBzb2x1dGlvbnNdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAwNCBGZWIgMjAyMCA4OjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MTwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIEFubm91bmNlcyB0aGUgQ040SiBEYXkgMjAyMCBFdmVudCBmb3IgQnVpbGRpbmcgRW50ZXJwcmlzZSBKYXZhIG9uIEt1YmVybmV0ZXNdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9qYWthcnRhLmVlL25ld3MvYW5ub3VuY2VtZW50cy8yMDIwLzAxLzI4L3RoZS1lY2xpcHNlLWZvdW5kYXRpb24tYW5ub3VuY2VzLXRoZS1jbjRqLWRheS0yMDIwLWV2ZW50LWZvci1idWlsZGluZy1lbnRlcnByaXNlLWphdmEtb24ta3ViZXJuZXRlcy9dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVG9kYXkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBhbm5vdW5jZWQgdGhlIGxhdW5jaCBvZiB0aGUgQ2xvdWQgTmF0aXZlIGZvciBKYXZhIChDTjRKKSBEYXkgZXZlbnQsIGEgZnVsbC1kYXkgb2YgZXhwZXJ0IHRhbGtzLCBkZW1vcywgYW5kIHRob3VnaHQtcHJvdm9raW5nIHNlc3Npb25zIGZvY3VzZWQgb24gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbnMgaW1wbGVtZW50ZWQgdXNpbmcgb3BlbiBzb3VyY2UgdmVuZG9yLW5ldXRyYWwgSmFrYXJ0YSBFRSAoc3VjY2Vzc29yIG9mIEphdmEgRUUpIGFuZCBFY2xpcHNlIE1pY3JvUHJvZmlsZSBzcGVjaWZpY2F0aW9ucyBvbiBLdWJlcm5ldGVzLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UdWUsIDI4IEphbiAyMDIwIDg6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW01vdmluZyBGb3J3YXJkIFdpdGggSmFrYXJ0YSBFRSA5XV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC9taWtlLW1pbGlua292aWNoL21vdmluZy1mb3J3YXJkLWpha2FydGEtZWUtOV1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtPbiBiZWhhbGYgb2YgdGhlIEpha2FydGEgRUUgV29ya2luZyBHcm91cCwgd2UgYXJlIGV4Y2l0ZWQgdG8gYW5ub3VuY2UgdGhlIHVuYW5pbW91cyBhcHByb3ZhbCBvZiB0aGUgcGxhbiBmb3IgSmFrYXJ0YSBFRSA5LCB3aXRoIGFuIGFudGljaXBhdGVkIG1pZC0yMDIwIHJlbGVhc2UuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPk1vbiwgMjAgSmFuIDIwMjAgMTA6NDU6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW1RoZSByZWFsaXRpZXMgb2YgcnVubmluZyBhbiBvcGVuLXNvdXJjZSBjb21tdW5pdHldXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9zZHRpbWVzLmNvbS9vcGVuLXNvdXJjZS90aGUtcmVhbGl0aWVzLW9mLXJ1bm5pbmctYW4tb3Blbi1zb3VyY2UtY29tbXVuaXR5L11dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUaGUgYmVuZWZpdHMgb2YgdXNpbmcgb3Blbi1zb3VyY2Ugc29mdHdhcmUgaXMgaW1tZWFzdXJhYmxlLCBidXQgaXTigJlzIG5vdCB0aGUgY29kZSBpdHNlbGYgdGhhdCBtYWtlcyBvcGVuLXNvdXJjZSBzb2Z0d2FyZSBhbiBpbnZhbHVhYmxlIHJlc291cmNlLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UaHUsIDkgSmFuIDIwMjAgMDk6NDU6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgRm91bmRhdGlvbuKAmXMgTmV3IEJ5bGF3cyBBcmUgaW4gRWZmZWN0XV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9wcmVzcy1yZWxlYXNlLzIwMjAwMTA3LWJ5bGF3c19yZWxlYXNlXzMucGhwXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1dlIGFyZSBwbGVhc2VkIHRvIGFubm91bmNlIHRoZSBFY2xpcHNlIEZvdW5kYXRpb27igJlzIG5ldyBCeWxhd3Mgd2VudCBpbnRvIGVmZmVjdCBvbiBKYW51YXJ5IDEsIDIwMjAuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgNyBKYW4gMjAyMCAwOTo0NTowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjE8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbQ2xvc2UgdG8gdGhlIEVkZ2VdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L21pa2UtbWlsaW5rb3ZpY2gvY2xvc2UtZWRnZV1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUb2RheSB3ZSBhcmUgbGF1bmNoaW5nIG91ciBuZXcgRWRnZSBOYXRpdmUgV29ya2luZyBHcm91cCB0byBoZWxwIGRyaXZlIHRoZSBpbmR1c3RyeSBwbGF0Zm9ybSBmb3IgZWRnZSBjb21wdXRpbmcuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMTcgRGVjIDIwMTkgOTowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBMYXVuY2hlcyB0aGUgRWRnZSBOYXRpdmUgV29ya2luZyBHcm91cCB0byBEZWxpdmVyIFByb2R1Y3Rpb24tR3JhZGUgQ29kZSBmb3IgT3BlbiBTb3VyY2UgRWRnZSBDb21wdXRpbmddXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZ2xvYmVuZXdzd2lyZS5jb20vbmV3cy1yZWxlYXNlLzIwMTkvMTIvMTAvMTk1ODQyOC8wL2VuL1RoZS1FY2xpcHNlLUZvdW5kYXRpb24tTGF1bmNoZXMtdGhlLUVkZ2UtTmF0aXZlLVdvcmtpbmctR3JvdXAtdG8tRGVsaXZlci1Qcm9kdWN0aW9uLUdyYWRlLUNvZGUtZm9yLU9wZW4tU291cmNlLUVkZ2UtQ29tcHV0aW5nLmh0bWxdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0b2RheSBhbm5vdW5jZWQgdGhlIGxhdW5jaCBvZiB0aGUgRWRnZSBOYXRpdmUgV29ya2luZyBHcm91cCwgYSB2ZW5kb3ItbmV1dHJhbCBhbmQgY29kZS1maXJzdCBpbmR1c3RyeSBjb2xsYWJvcmF0aW9uIHRoYXQgd2lsbCBkcml2ZSB0aGUgZXZvbHV0aW9uIGFuZCBicm9hZCBhZG9wdGlvbiBvZiBvcGVuIHNvdXJjZSBzb2Z0d2FyZSBmb3IgZWRnZSBjb21wdXRpbmcuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMTAgRGVjIDIwMTkgOTozMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjE8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbUGFydGljaXBhdGUgaW4gdGhlIDIwMTkgSW9UIENvbW1lcmNpYWwgQWRvcHRpb24gU3VydmV5ISFdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L3RoYWJhbmctbWFzaG9sb2d1L3BhcnRpY2lwYXRlLTIwMTktaW90LWNvbW1lcmNpYWwtYWRvcHRpb24tc3VydmV5XV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW0FjY29yZGluZyB0byBNY0tpbnNleSwgdGhlIEludGVybmV0IG9mIFRoaW5ncyAoSW9UKSB3aWxsIGhhdmUgYSB0b3RhbCBwb3RlbnRpYWwgZWNvbm9taWMgaW1wYWN0IG9mIHVwIHRvICQxMS4xIHRyaWxsaW9uIGEgeWVhciBieSAyMDI1Ll1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UaHUsIDEwIE9jdCAyMDE5IDEwOjMwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtQYXlhcmEgU2VydmVyIGlzIEpha2FydGEgRUUgOCBDb21wYXRpYmxlIV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvcHJlc3MtcmVsZWFzZS8yMDE5MTAwOS1wYXlhcmEucGhwXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1BheWFyYSBTZXJ2aWNlcyBhbmQgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiB0b2RheSBhbm5vdW5jZWQgdGhlIGFwcGxpY2F0aW9uIHNlcnZlciAsUGF5YXJhIFNlcnZlciwgYSBKYWthcnRhIEVFIDggY29tcGF0aWJsZSBpbXBsZW1lbnRhdGlvbi5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+V2VkLCA5IE9jdCAyMDE5IDEwOjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MTwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIExhdW5jaGVzIFRoZSBFY2xpcHNlIENsb3VkIERldmVsb3BtZW50IFRvb2xzIFdvcmtpbmcgR3JvdXAgZm9yIENsb3VkIE5hdGl2ZSBTb2Z0d2FyZSFdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL3ByZXNzLXJlbGVhc2UvMjAxOTEwMDgtRUNELnBocF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvZGF5IGFubm91bmNlZCB0aGUgbGF1bmNoIG9mIHRoZSBFY2xpcHNlIENsb3VkIERldmVsb3BtZW50IFRvb2xzIFdvcmtpbmcgR3JvdXAgKEVDRCBXRyldXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCA4IE9jdCAyMDE5IDEzOjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MTwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFYXJseSByZWdpc3RyYXRpb24gZm9yIEVjbGlwc2VDb24gRXVyb3BlIGVuZHMgT2N0b2JlciAxIV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlY29uLm9yZy9ldXJvcGUyMDE5L3JlZ2lzdHJhdGlvbl1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtJZiB5b3UgaGF2ZW4ndCBnb3QgeW91ciB0aWNrZXRzIHlldCwgcmVnaXN0ZXIgbm93IGFuZCBzYXZlIGZvciBFY2xpcHNlQ29uIEV1cm9wZSEgRWFybHkgQmlyZCBwcmljaW5nIGVuZHMgdG9tb3Jyb3chXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPk1vbiwgMzAgU2VwIDIwMTkgMTE6MzA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtDYWxsIGZvciBCaXJkcyBvZiBGZWF0aGVyJ3MgKEJvRnMpIGZvciBFY2xpcHNlQ29uIEV1cm9wZSAyMDE5IV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlY29uLm9yZy9ldXJvcGUyMDE5L25ld3MvY2FsbC1ib2ZzXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW0NvbW11bml0eSBFdmVuaW5nIGluY2x1ZGVzIGFuIEVkZ2UgQ29tcHV0aW5nIGhhY2thdGhvbiwgYSBQcm9qZWN0IFBpdGNoIGdhbWUsIEVjbGlwc2UgTmlnaHQgU2Nob29sLCBhbmQgLSBvZiBjb3Vyc2UgLSBCb0ZzIV1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UdWUsIDI0IFNlcCAyMDE5IDExOjE1OjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbQ29tZSB0byBFY2xpcHNlIE5pZ2h0IFNjaG9vbCBhdCBFY2xpcHNlQ29uIEV1cm9wZSFdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZWNvbi5vcmcvZXVyb3BlMjAxOS9uZXdzL2VjbGlwc2UtbmlnaHQtc2Nob29sXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW0NvbWUgdG8gTmlnaHQgU2Nob29sLCBhbmQgbGVhcm4gYWxsIGFib3V0IHdoYXQgdGhlIEZvdW5kYXRpb24gc3RhZmYgZG9lcyB0byBtYWtlIHlvdXIgKEVjbGlwc2UpIGxpZmUgYmV0dGVyIV1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UdWUsIDI0IFNlcCAyMDE5IDExOjE1OjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIFdpbnMgRHVrZSdzIENob2ljZSBBd2FyZCBmb3IgT3BlbiBTb3VyY2UgQ29udHJpYnV0aW9ucyB0byB0aGUgSmF2YSBFY29zeXN0ZW1dXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZ2xvYmVuZXdzd2lyZS5jb20vbmV3cy1yZWxlYXNlLzIwMTkvMDkvMTcvMTkxNjUzMS8wL2VuL1RoZS1FY2xpcHNlLUZvdW5kYXRpb24tV2lucy1EdWtlLXMtQ2hvaWNlLUF3YXJkLWZvci1PcGVuLVNvdXJjZS1Db250cmlidXRpb25zLXRvLXRoZS1KYXZhLUVjb3N5c3RlbS5odG1sXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoZSBFY2xpcHNlIEZvdW5kYXRpb24gd2FzIGF3YXJkZWQgYSBEdWtlJ3MgQ2hvaWNlIEF3YXJkIHllc3RlcmRheSBpbiByZWNvZ25pdGlvbiBmb3Igb3V0c3RhbmRpbmcgb3BlbiBzb3VyY2UgY29udHJpYnV0aW9ucyB0byB0aGUgSmF2YSBlY29zeXN0ZW0gYW5kIHRoZSBjb21tdW5pdHktZHJpdmVuIGFjaGlldmVtZW50IG9mIG1vdmluZyBKYXZhIEVFIHRlY2hub2xvZ2llcyBmcm9tIE9yYWNsZSB0byB0aGUgSmFrYXJ0YSBFRSBXb3JraW5nIEdyb3VwLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UdWUsIDE3IFNlcCAyMDE5IDk6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIFJlbGVhc2VzIEVjbGlwc2UgQ2hlIDcsIHRoZSBGaXJzdCBLdWJlcm5ldGVzLU5hdGl2ZSBJREUsIHRvIE1ha2UgQ3JlYXRpbmcgQ2xvdWQgTmF0aXZlIEFwcGxpY2F0aW9ucyBFYXNpZXIsIEZhc3RlciwgYW5kIE1vcmUgU2VjdXJlXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3Lmdsb2JlbmV3c3dpcmUuY29tL25ld3MtcmVsZWFzZS8yMDE5LzA5LzE3LzE5MTY1MjIvMC9lbi9UaGUtRWNsaXBzZS1Gb3VuZGF0aW9uLVJlbGVhc2VzLUVjbGlwc2UtQ2hlLTctdGhlLUZpcnN0LUt1YmVybmV0ZXMtTmF0aXZlLUlERS10by1NYWtlLUNyZWF0aW5nLUNsb3VkLU5hdGl2ZS1BcHBsaWNhdGlvbnMtRWFzaWVyLUZhc3Rlci1hbmQtTW9yZS1TZWN1cmUuaHRtbF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvZGF5IGFubm91bmNlZCBhdCB0aGUgT3JhY2xlIENvZGUgT25lIGNvbmZlcmVuY2UgYW5kIHRyYWRlc2hvdyB0aGUgcmVsZWFzZSBvZiBFY2xpcHNlIENoZSA3LCB0aGUgZmlyc3QgZGV2ZWxvcGVyIHdvcmtzcGFjZSBzZXJ2ZXIgYW5kIEludGVncmF0ZWQgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgKElERSkgZm9yIGNyZWF0aW5nIGNsb3VkIG5hdGl2ZSwgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbnMgb24gS3ViZXJuZXRlc11dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UdWUsIDE3IFNlcCAyMDE5IDk6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIENvbW11bml0eSBDb250aW51ZXMgdG8gRGVsaXZlciBvbiBPcGVuIFNvdXJjZSBDb21taXRtZW50XV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC90aGFiYW5nLW1hc2hvbG9ndS9lY2xpcHNlLWNvbW11bml0eS1jb250aW51ZXMtZGVsaXZlci1vcGVuLXNvdXJjZS1jb21taXRtZW50XV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW0NvbW11bml0eSBpcyBrZXkuIEFuZCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uJ3MgY29tbXVuaXR5IGlzIG9uIGEgcm9sbC5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAxNyBTZXAgMjAxOSA5OjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZUNvbiBFdXJvcGUgMjAxOSBLZXlub3RlcyBBbm5vdW5jZWQgLSBSZWdpc3RlciBOb3chXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Vjb24ub3JnL2V1cm9wZTIwMTkva2V5bm90ZXNdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbV2UgYXJlIGV4Y2l0ZWQgdG8gYW5ub3VuY2UgdGhlIGtleW5vdGUgc3BlYWtlciBsaW5ldXAgZm9yIG91ciBjb21tdW5pdHkncyBiaWdnZXN0IGV2ZW50IG9mIHRoZSB5ZWFyLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UdWUsIDE3IFNlcCAyMDE5IDk6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW1RoZSBFY2xpcHNlIEZvdW5kYXRpb24gUmVsZWFzZXMgSmFrYXJ0YSBFRSA4IFNwZWNpZmljYXRpb25zOyBDb21wbGV0ZXMgVHJhbnNpdGlvbiB0byBFY2xpcHNlIEZvdW5kYXRpb24gYXMgdGhlIE5ldyBIb21lIGZvciBPcGVuIFNvdXJjZSBDbG91ZCBOYXRpdmUgSmF2YV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5nbG9iZW5ld3N3aXJlLmNvbS9uZXdzLXJlbGVhc2UvMjAxOS8wOS8xMC8xOTEzMzAwLzAvZW4vVGhlLUVjbGlwc2UtRm91bmRhdGlvbi1SZWxlYXNlcy1KYWthcnRhLUVFLTgtU3BlY2lmaWNhdGlvbnMtQ29tcGxldGVzLVRyYW5zaXRpb24tdG8tRWNsaXBzZS1Gb3VuZGF0aW9uLWFzLXRoZS1OZXctSG9tZS1mb3ItT3Blbi1Tb3VyY2UtQ2xvdWQtTmF0aXZlLUphdmEuaHRtbF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvZGF5IGFubm91bmNlZCBkdXJpbmcgdGhlIEpha2FydGFPbmUgTGl2ZXN0cmVhbSB2aXJ0dWFsIGNvbmZlcmVuY2UgdGhlIHJlbGVhc2Ugb2YgdGhlIEpha2FydGEgRUUgOCBGdWxsIFBsYXRmb3JtIGFuZCBXZWIgUHJvZmlsZSBzcGVjaWZpY2F0aW9ucyBhbmQgcmVsYXRlZCBUZWNobm9sb2d5IENvbXBhdGliaWxpdHkgS2l0cyAoVENLcykuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMTcgU2VwIDIwMTkgOTowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjE8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbT3BlbkFEeCBCZWNvbWVzIEVjbGlwc2UgV29ya2luZyBHcm91cCBGb2N1c2VkIG9uIEludGVyb3BlcmFiaWxpdHkgaW4gdGhlIEF1dG9ub21vdXMgRHJpdmluZyBTb2Z0d2FyZSBTdGFja11dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5nbG9iZW5ld3N3aXJlLmNvbS9uZXdzLXJlbGVhc2UvMjAxOS8wOC8yNy8xOTA2OTU5LzAvZW4vT3BlbkFEeC1CZWNvbWVzLUVjbGlwc2UtV29ya2luZy1Hcm91cC1Gb2N1c2VkLW9uLUludGVyb3BlcmFiaWxpdHktaW4tdGhlLUF1dG9ub21vdXMtRHJpdmluZy1Tb2Z0d2FyZS1TdGFjay5odG1sXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW09yaWdpbmFsbHkgbGF1bmNoZWQgYnkgQm9zY2ggYW5kIE1pY3Jvc29mdCwgdGhlIE9wZW5BRHggd29ya2luZyBncm91cCBjYWxscyBmb3IgcGFydGljaXBhdGlvbiBmcm9tIGF1dG9tb3RpdmUgaW5kdXN0cnkgT0VNcywgdG9vbHMgdmVuZG9ycywgYW5kIGRldmVsb3BlciBjb21tdW5pdHldXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAxNyBTZXAgMjAxOSA5OjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MTwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbV2VsY29tZSB0byB0aGUgRnV0dXJlIG9mIENsb3VkIE5hdGl2ZSBKYXZhXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC9taWtlLW1pbGlua292aWNoL3dlbGNvbWUtZnV0dXJlLWNsb3VkLW5hdGl2ZS1qYXZhXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RvZGF5LCB3aXRoIHRoZSByZWxlYXNlIG9mIEpha2FydGEgRUUgOCwgd2UndmUgZW50ZXJlZCBhIG5ldyBlcmEgaW4gSmF2YSBpbm5vdmF0aW9uIV1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UdWUsIDEwIFNlcCAyMDE5IDExOjEwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbVXBkYXRlIGZvciBKYWthcnRhIEVFIGNvbW11bml0eTogU2VwdGVtYmVyIDIwMTldXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L3RhbmphLW9icmFkb3ZpYy91cGRhdGUtamFrYXJ0YS1lZS1jb21tdW5pdHktc2VwdGVtYmVyLTIwMTldXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhlcmUncyBhIGxvdCBoYXBwZW5pbmcgaW4gdGhlIEpha2FydGEgRUUgZWNvc3lzdGVtIHNvIGlmIHlvdSB3YW50IHRvIGdldCBhIHJpY2hlciBpbnNpZ2h0IGludG8gSmFrYXJ0YSBFRSwgcmVhZCBvbi5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+TW9uLCAwOSBTZXAgMjAxOSAxNToxMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW1dlbGNvbWUgSXZhciBHcmltc3RhZCFdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L3BhdWwtYnVjay93ZWxjb21lLWl2YXJdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbV2UgYXJlIGhhcHB5IHRvIGFubm91bmNlIHRoYXQgZWZmZWN0aXZlIE9jdG9iZXIgMXN0LCBJdmFyIEdyaW1zdGFkIHdpbGwgam9pbiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGluIHRoZSByb2xlIG9mIEpha2FydGEgRUUgRGV2ZWxvcGVyIEFkdm9jYXRlLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5Nb24sIDI2IEF1ZyAyMDE5IDExOjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtKYWthcnRhIE5ld3NsZXR0ZXIgQXVndXN0IDIwMTk6IEpha2FydGEgRUUgOCBQcmV2aWV3XV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC9nYWJyaWVsYS1tb3Ryb2MvamFrYXJ0YS1uZXdzbGV0dGVyLWF1Z3VzdC0yMDE5LWpha2FydGEtZWUtOC1wcmV2aWV3XV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoZXJlJ3MgYSBsb3QgaGFwcGVuaW5nIGluIHRoZSBKYWthcnRhIEVFIGVjb3N5c3RlbSBzbyBpZiB5b3Ugd2FudCB0byBnZXQgYSByaWNoZXIgaW5zaWdodCBpbnRvIEpha2FydGEgRUUsIHJlYWQgb24uXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPk1vbiwgMjYgQXVnIDIwMTkgMTE6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbQ29tbXVuaXR5IERheSBhbmQgQ29tbXVuaXR5IEV2ZW5pbmcgYXQgRWNsaXBzZUNvbiBFdXJvcGUgMjAxOV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3Qvc3RlcGhhbmllLXN3YXJ0L2NvbW11bml0eS1kYXktYW5kLWNvbW11bml0eS1ldmVuaW5nLWVjbGlwc2Vjb24tZXVyb3BlLTIwMTldXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbTGVhcm4gaG93IHlvdSBjYW4gaGVscCB1cyBwbGFuIENvbW11bml0eSBEYXkgYW5kIHRoZSBuZXcgQ29tbXVuaXR5IEV2ZW5pbmcgdGhpcyB5ZWFyIGF0IEVjbGlwc2VDb24gRXVyb3BlIV1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5XZWQsIDA3IEF1ZyAyMDE5IDE1OjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtVcGRhdGUgZm9yIEpha2FydGEgRUUgY29tbXVuaXR5OiBBdWd1c3QgMjAxOV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3QvdGFuamEtb2JyYWRvdmljL3VwZGF0ZS1qYWthcnRhLWVlLWNvbW11bml0eS1hdWd1c3QtMjAxOV1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUaGVyZSdzIGEgbG90IGhhcHBlbmluZyBpbiB0aGUgSmFrYXJ0YSBFRSBlY29zeXN0ZW0gc28gaWYgeW91IHdhbnQgdG8gZ2V0IGEgcmljaGVyIGluc2lnaHQgaW50byBKYWthcnRhIEVFLCByZWFkIG9uLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5XZWQsIDA3IEF1ZyAyMDE5IDE1OjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIE5ld3NsZXR0ZXIgLSBKdWx5IDIwMTk6IFJlc2VhcmNoQEVjbGlwc2VdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L2dhYnJpZWxhLW1vdHJvYy9lY2xpcHNlLW5ld3NsZXR0ZXItanVseS0yMDE5LXJlc2VhcmNoZWNsaXBzZV1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtSZWFkIEdhYnJpZWxhIE1vdHJvYydzIGxhdGVzdCBibG9nIG9uIHRoZSBFY2xpcHNlIE5ld3NsZXR0ZXI6IFJlc2VhcmNoQEVjbGlwc2VdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VGh1LCAyNiBKdWwgMjAxOSAwODo0NTowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW1RoZSBsYXRlc3QgRWNsaXBzZSBOZXdzbGV0dGVyIGhhZCBiZWVuIHJlbGVhc2VkOiBSZXNlYXJjaEBFY2xpcHNlXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2NvbW11bml0eS9lY2xpcHNlX25ld3NsZXR0ZXIvMjAxOS9qdWx5L11dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtXZSBhcmUgdmVyeSBwcm91ZCB0byBvZmZlciB5b3UgYW4gaW50cm9kdWN0aW9uIHRvIG1vc3Qgb2YgdGhlIHJlc2VhcmNoIHByb2plY3RzIHdlJ3JlIGludm9sdmVkIGluIGFuZCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIV1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UaHUsIDI1IEp1bCAyMDE5IDA5OjQ1OjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbSW5kdXN0cmlhbC1TY2FsZSBDb2xsYWJvcmF0aW9uIGZvciB0aGUgQnVzaW5lc3MgV2luXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC9taWtlLW1pbGlua292aWNoL2luZHVzdHJpYWwtc2NhbGUtY29sbGFib3JhdGlvbi1idXNpbmVzcy13aW5dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVG9kYXksIHdlIGFyZSB0aHJpbGxlZCB0byByZWxlYXNlIHRoZSBCdXNpbmVzcyBvZiBPcGVuIFNvdXJjZSBlQm9vayBmb2N1c2VkIG9uIGhvdyBzdWNjZXNzZnVsIGVudHJlcHJlbmV1cnMgYXJlIGxldmVyYWdpbmcgYWxsIHRoYXQgb3BlbiBzb3VyY2UgaGFzIHRvIG9mZmVyIHRvIGRyaXZlIGRpZ2l0YWwgZGlzcnVwdGlvbiB3aXRoaW4gYnVzaW5lc3MtZnJpZW5kbHkgb3BlbiBzb3VyY2UgZm91bmRhdGlvbnMuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMTYgSnVsIDIwMTkgMTA6MTA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtDb21tZXJjaWFsLUdyYWRlIENvbGxhYm9yYXRpb24gYXQgdGhlIEVjbGlwc2UgRm91bmRhdGlvbl1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3QvdGhhYmFuZy1tYXNob2xvZ3UvY29tbWVyY2lhbC1ncmFkZS1jb2xsYWJvcmF0aW9uLWVjbGlwc2UtZm91bmRhdGlvbl1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtXZSd2ZSBqdXN0IHJlbGVhc2VkIGEgQnVzaW5lc3Mgb2YgT3BlbiBTb3VyY2UgZUJvb2sgdGhhdCBpcyBlc3NlbnRpYWwgcmVhZGluZyBmb3IgbGVhZGVycyBpbiB0aGUgYWdlIG9mIGRpZ2l0YWwgZGlzcnVwdGlvbiB3aG8gYXJlIGNvbnNpZGVyaW5nIGhvdyB0byBtYXhpbWl6ZSB0aGVpciByZXR1cm5zIGZyb20gb3BlbiBzb3VyY2UgcGFydGljaXBhdGlvbi5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAxNiBKdWwgMjAxOSAxMDoxMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbVXBkYXRlIGZvciBKYWthcnRhIEVFIGNvbW11bml0eTogSnVseSAyMDE5XV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC90YW5qYS1vYnJhZG92aWMvdXBkYXRlLWpha2FydGEtZWUtY29tbXVuaXR5LWp1bHktMjAxOV1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUaGVyZSBhcmUgYSBmZXcgd2F5cyB0byBnZXQgcmljaGVyIGluc2lnaHQgaW50byB0aGUgd29yayB0aGF0IGhhcyBiZWVuIGludmVzdGVkIGluIEpha2FydGEgRUUgc28gZmFyLCBzbyBpZiB5b3UnZCBsaWtlIHRvIGxlYXJuIG1vcmUgYWJvdXQgSmFrYXJ0YSBFRS1yZWxhdGVkIHBsYW5zIGFuZCBnZXQgaW52b2x2ZWQgaW4gc2hhcGluZyB0aGUgZnV0dXJlIG9mIENsb3VkIE5hdGl2ZSBKYXZhLCByZWFkIG9uLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5Nb24sIDE1IEp1bCAyMDE5IDEwOjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWFybHktQmlyZCBUYWxrczogQSBQcmV2aWV3IG9mIFdoYXQncyB0byBDb21lXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Vjb24ub3JnL2V1cm9wZTIwMTkvbmV3cy9lYXJseS1iaXJkLXRhbGtzLXByZXZpZXctd2hhdHMtY29tZV1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUaGUgY29tbXVuaXR5IHJlYWxseSBjYW1lIHRob3VnaCBmb3IgdGhlIGVhcmx5LWJpcmQgZGVhZGxpbmUgdGhpcyB5ZWFyLiBUaGUgcHJvZ3JhbSBjb21taXR0ZWUgcmV2aWV3ZWQgYSByZWNvcmQgbnVtYmVyIG9mIHRhbGtzICgxNDQpIHRvIGNvbWUgdXAgd2l0aCBhIHRvcC1zaXggbGlzdCFdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+RnJpLCAwNSBKdWwgMjAxOSAwODoyNTowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW1RoZSBFY2xpcHNlIElvVCBOZXdzbGV0dGVyIGlzIG91dCFdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9tYWlsY2hpLm1wLzE4MzI0ZGM4OGQ2NS9lY2xpcHNlLWlvdC1uZXdzbGV0dGVyLWp1bmUtMjAxOV1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtXZWxjb21lIHRvIHRoZSBzZWNvbmQgaXNzdWUgb2YgdGhlIEVjbGlwc2UgSW9UIE5ld3NsZXR0ZXIgZm9yIDIwMTksIGEgbmV3c2xldHRlciB0YWlsb3JlZCB0byBzaGFyZSBFY2xpcHNlIElvVCBjb21tdW5pdHkgYW5kIGluZHVzdHJ5IG5ld3MuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlRodSwgMjcgSnVuIDIwMTkgMTE6MjU6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIE5ld3NsZXR0ZXI6IEZpcnN0IExvb2sgYXQgRWNsaXBzZSBJREUgMjAxOS0wNl1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlLm9yZy9jb21tdW5pdHkvZWNsaXBzZV9uZXdzbGV0dGVyLzIwMTkvanVuZS9dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhpcyBtb250aCB0aGUgRWNsaXBzZSBOZXdzbGV0dGVyIGZlYXR1cmVzIHRoZSBFY2xpcHNlIElERSAyMDE5LTA2LCB3aGljaCBpcyBub3cgYXZhaWxhYmxlIGZvciBkb3dubG9hZCFdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VGh1LCAyNyBKdW4gMjAxOSAwOTowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBpb0ZvZzogRXZvbHZpbmcgVG93YXJkIE5hdGl2ZSBLdWJlcm5ldGVzIE9yY2hlc3RyYXRpb24gYXQgdGhlIEVkZ2VdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L21pa2UtbWlsaW5rb3ZpY2gvZWNsaXBzZS1pb2ZvZy1ldm9sdmluZy10b3dhcmQtbmF0aXZlLWt1YmVybmV0ZXMtb3JjaGVzdHJhdGlvbi1lZGdlXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgZXhjaXRlZCB0byBzdXBwb3J0IHRvZGF5J3MgYW5ub3VuY2VtZW50IG9mIHRoZSBpbml0aWFsIGF2YWlsYWJpbGl0eSBvZiBFY2xpcHNlIGlvRm9nIGZlYXR1cmVzIHRoYXQgbWFrZSBhbnkgS3ViZXJuZXRlcyBkaXN0cmlidXRpb24gZWRnZS1hd2FyZS5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+TW9uLCAyNCBKdW4gMjAxOSAxMzowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbQmVjb21lIGEgU3BvbnNvciBhdCBFY2xpcHNlQ29uIEV1cm9wZSAyMDE5IV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3QvamFtZWthLXdvb2RiZXJyeS9iZWNvbWUtc3BvbnNvci1lY2xpcHNlY29uLWV1cm9wZS0yMDE5XV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1dlJ3JlIGdlYXJpbmcgdXAgZm9yIEVjbGlwc2VDb24gRXVyb3BlIDIwMTksIG91ciBiaWdnZXN0IGV2ZW50IG9mIHRoZSB5ZWFyIHdoaWNoIGJyaW5ncyB0b2dldGhlciBkZXZlbG9wZXJzLCBhcmNoaXRlY3RzLCBhbmQgb3BlbiBzb3VyY2UgYnVzaW5lc3MgbGVhZGVycy5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+RnJpLCAyMSBKdW4gMjAxOSAxMTowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbVXBkYXRlIGZvciBKYWthcnRhIEVFIGNvbW11bml0eTogSnVuZSAyMDE5XV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC90YW5qYS1vYnJhZG92aWMvdXBkYXRlLWpha2FydGEtZWUtY29tbXVuaXR5LWp1bmUtMjAxOV1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtHZXQgdGhlIGxhdGVzdCBtb250aGx5IGVtYWlsIHVwZGF0ZSBvbiB0aGUgSmFrYXJ0YSBFRSBjb21tdW5pdHkgZnJvbSBuZXdzIGhpZ2hsaWdodHMgdG8gdmFyaW91cyBtZWV0aW5ncyBhbmQgZXZlbnRzIHJlbGF0ZWQgdG8gdGhlIHBsYXRmb3JtIV1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UaHUsIDIwIEp1biAyMDE5IDEyOjA1OjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIEluZGl2aWR1YWwgQ29tbWl0dGVyIEFncmVlbWVudCA0LjAgVXBkYXRlXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC9zaGFyb24tY29yYmV0dC9lY2xpcHNlLWluZGl2aWR1YWwtY29tbWl0dGVyLWFncmVlbWVudC00MC11cGRhdGVdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbT24gSnVuZSAxM3RoLCB3ZSByZXRpcmVkIGFsbCB2ZXJzaW9ucyBvZiB0aGUgIEVjbGlwc2UgSW5kaXZpZHVhbCBDb21taXR0ZXIgQWdyZWVtZW50IChJQ0EpIHByaW9yIHRvIHZlcnNpb24gNC4wLiBVcGRhdGUgeW91cnMgdG9kYXkhXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPk1vbiwgMTcgSnVuIDIwMTkgMDk6MDU6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBWzIwMTkgQW5udWFsIEVjbGlwc2UgRm91bmRhdGlvbiBDb21tdW5pdHkgUmVwb3J0XV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9mb3VuZGF0aW9uL3JlcG9ydHMvYW5udWFsX3JlcG9ydC5waHBdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbUmVhZCB0aGUgZWlnaHRoIGFubnVhbCBFY2xpcHNlIEZvdW5kYXRpb24gQ29tbXVuaXR5IFJlcG9ydCEgQ29tbWVudHMgYW5kIGZlZWRiYWNrIG9uIHRoZSBzdHlsZSBhbmQgY29udGVudCBhcmUgd2VsY29tZSFdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAxMSBKdW4gMjAxOSAxMzowNTowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbSmFrYXJ0YSBOZXdzbGV0dGVyIE1heSAyMDE5OiBPbndhcmRzIGFuZCBVcHdhcmRzIGZvciB0aGUgSmFrYXJ0YSBDb21tdW5pdHldXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L2dhYnJpZWxhLW1vdHJvYy9qYWthcnRhLW5ld3NsZXR0ZXItbWF5LTIwMTktb253YXJkcy1hbmQtdXB3YXJkcy1qYWthcnRhLWNvbW11bml0eV1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUaGUgZWxlY3RlZCBwb3NpdGlvbnMgYXJlIHRvIHJlcHJlc2VudCBlYWNoIG9mIHRoZSBFbnRlcnByaXNlIE1lbWJlcnMsIFBhcnRpY2lwYW50IE1lbWJlcnMsIGFuZCBDb21taXR0ZXIgTWVtYmVycy5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAwNCBKdW4gMjAxOSAwODoxNTowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VsZWN0aW9uIHRpbWUgZm9yIEpha2FydGEgRUUgV29ya2luZyBHcm91cCBDb21taXR0ZWVzIV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3QvdGFuamEtb2JyYWRvdmljL2VsZWN0aW9uLXRpbWUtamFrYXJ0YS1lZS13b3JraW5nLWdyb3VwLWNvbW1pdHRlZXNdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhlIGVsZWN0ZWQgcG9zaXRpb25zIGFyZSB0byByZXByZXNlbnQgZWFjaCBvZiB0aGUgRW50ZXJwcmlzZSBNZW1iZXJzLCBQYXJ0aWNpcGFudCBNZW1iZXJzLCBhbmQgQ29tbWl0dGVyIE1lbWJlcnMuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMjggTWF5IDIwMTkgMTE6MTU6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2VDb24gRXVyb3BlIDIwMTk6IENhbGwgZm9yIFBhcGVycyBvcGVuIHVudGlsIEp1bHkgMTUgLSBTdWJtaXQgYSB0YWxrIHRvZGF5IV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3QvamFtZWthLXdvb2RiZXJyeS9lY2xpcHNlY29uLWV1cm9wZS0yMDE5LWNhbGwtcGFwZXJzLW9wZW4tdW50aWwtanVseS0xNS1zdWJtaXQtdGFsay10b2RheV1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtTdWJtaXQgeW91ciBwcm9wb3NhbHMgdG8gYmUgcGFydCBvZiBFQ0UncyAyMDE5IHNwZWFrZXIgbGluZXVwLiBUaGUgY29uZmVyZW5jZSBpcyBpbiBMdWR3aWdzYnVyZywgR2VybWFueSBPY3QgMjEtMjQsIDIwMTldXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAyOCBNYXkgMjAxOSAxMToxNTowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbU3RhdGVtZW50IGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gb24gSHVhd2VpIEVudGl0eSBMaXN0IFJ1bGluZ11dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2VjbGlwc2Uub3JnL29yZy9wcmVzcy1yZWxlYXNlLzIwMTkwNTI3LUVBUi5waHBdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbT3BlbiBTb3VyY2UgcHJvamVjdHMgaW52b2x2aW5nIGVuY3J5cHRpb24gc29mdHdhcmUgc291cmNlIGNvZGUgYXJlIHN0aWxsIHJlcXVpcmVkIHRvIHNlbmQgYSBub3RpY2Ugb2YgdGhlIFVSTCB0byBCSVMgYW5kIE5TQSB0byBzYXRpc2Z5IHRoZSAicHVibGljbHkgYXZhaWxhYmxlIiBub3RpY2UgcmVxdWlyZW1lbnQgaW4gRUFSICZzZWN0OyA3NDIuMTUoYildXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+TW9uLCAyNyBNYXkgMjAxOSAwOToxNTowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbSW5kdXN0cnkgbGVhZGVycyBSZWQgSGF0LCBFdXJvdGVjaCwgYW5kIENsb3VkZXJhIGpvaW4gZm9yY2VzIGF0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb25dXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L2phbWVrYS13b29kYmVycnkvaW5kdXN0cnktbGVhZGVycy1yZWQtaGF0LWV1cm90ZWNoLWFuZC1jbG91ZGVyYS1qb2luLWZvcmNlcy1lY2xpcHNlLWZvdW5kYXRpb25dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbSW5kdXN0cnkgbGVhZGVycyBSZWQgSGF0LCBFdXJvdGVjaCBhbmQgQ2xvdWRlcmEgdHVybmVkIHRvIHRoZSBFY2xpcHNlIElvVCBXb3JraW5nIEdyb3VwIHRvIG92ZXJjb21lIGNvbW1vbiBjaGFsbGVuZ2VzIGFuZCBwcm92aWRlIHRoZWlyIGN1c3RvbWVycyB3aXRoIGFuIGVuZC10by1lbmQgSW9UIHNvbHV0aW9uLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5Nb24sIDI3IE1heSAyMDE5IDA4OjQ1OjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFQ0UgMjAxOTogQ0ZQIE5vdyBPcGVuIV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3QvdGhhYmFuZy1tYXNob2xvZ3UvZWNlLTIwMTktY2ZwLW5vdy1vcGVuXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoZSBFQ0UgMjAxOSBDYWxsIGZvciBQYXBlcnMgaXMgbm93IG9wZW4uIFRoZSBlYXJseS1iaXJkIGRlYWRsaW5lIGlzIEp1bHkgMSBhbmQgZmluYWwgc3VibWlzc2lvbiBpcyBKdWx5IDE1LiBdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAyMSBNYXkgMjAxOSAwODozMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0Nsb3VkIE5hdGl2ZSBKYXZhIElubm92YXRpb24gYXQgdGhlIEVjbGlwc2UgRm91bmRhdGlvbl1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3QvdGhhYmFuZy1tYXNob2xvZ3UvY2xvdWQtbmF0aXZlLWphdmEtaW5ub3ZhdGlvbi1lY2xpcHNlLWZvdW5kYXRpb25dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhlIHdvcmxkJ3MgbGVhZGluZyB0ZWNobm9sb2d5IHZlbmRvcnMsIGluY2x1ZGluZyBGdWppdHN1LCBJQk0sIE1pY3Jvc29mdCwgT3JhY2xlLCBSZWQgSGF0LCBTQVAsIGFuZCBUb21pdHJpYmUsIGFyZSBjb2xsYWJvcmF0aW5nIGF0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gYWR2YW5jZSBlbnRlcnByaXNlIEphdmEgdGVjaG5vbG9naWVzIHRvIHN1cHBvcnQgdGhlIG1pZ3JhdGlvbiBvZiBtaXNzaW9uLWNyaXRpY2FsIGFwcGxpY2F0aW9ucyB0byB0aGUgY2xvdWQuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMjEgTWF5IDIwMTkgMDg6MzA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtVcGRhdGUgZm9yIEpha2FydGEgRUUgY29tbXVuaXR5OiBNYXkgMjAxOV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3QvdGFuamEtb2JyYWRvdmljL3VwZGF0ZS1qYWthcnRhLWVlLWNvbW11bml0eS1tYXktMjAxOV1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtBY3RpdmUgcGFydGljaXBhdGlvbiByZXByZXNlbnRzIHRoZSBiZXN0IHdheSB0byBkcml2ZSB0aGUgdmVuZG9yLW5ldXRyYWwgYW5kIHJhcGlkIGlubm92YXRpb24gbmVjZXNzYXJ5IHRvIG1vZGVybml6ZSBlbnRlcnByaXNlIHN5c3RlbXMgZm9yIGNsb3VkIHVzZSBjYXNlcy5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAyMSBNYXkgMjAxOSAwODozMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBGb3VuZGF0aW9uIExhdW5jaGVzIG9wZW5Nb2JpbGl0eSBXb3JraW5nIEdyb3VwXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3Lmdsb2JlbmV3c3dpcmUuY29tL25ld3MtcmVsZWFzZS8yMDE5LzA1LzEzLzE4MjIzNjQvMC9lbi9FY2xpcHNlLUZvdW5kYXRpb24tTGF1bmNoZXMtb3Blbk1vYmlsaXR5LVdvcmtpbmctR3JvdXAuaHRtbF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUb2RheSB3ZSBhbm5vdW5jZWQgdGhlIGxhdW5jaCBvZiB0aGUgb3Blbk1vYmlsaXR5IFdvcmtpbmcgR3JvdXAgdGhhdCB3aWxsIGZvY3VzIG9uIG9wZW4gYW5kIHNoYXJlZCBjb2xsYWJvcmF0aW9uIGFyb3VuZCBvbmUgb2YgdGhlIG1ham9yIGlzc3VlcyBpbiB1cmJhbiBwbGFubmluZyBhcm91bmQgYXV0b25vbW91cyB2ZWhpY2xlcyBhbmQgZnV0dXJlIHRyYW5zcG9ydGF0aW9uIHJlcXVpcmVtZW50cy5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+TW9uLCAxMyBNYXkgMjAxOSAxNzozMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbTmV3IEVjbGlwc2UgRm91bmRhdGlvbiBDb21tdW5pdHkgU3VydmV5IG9mIEphdmEgRGV2ZWxvcGVycyBTaG93cyBDbG91ZCBOYXRpdmUgQWRvcHRpb24gQWNjZWxlcmF0aW5nIERyYW1hdGljYWxseSB3aXRoIEpha2FydGEgRUVdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZ2xvYmVuZXdzd2lyZS5jb20vbmV3cy1yZWxlYXNlLzIwMTkvMDUvMDkvMTgyMDk1Mi8wL2VuL05ldy1FY2xpcHNlLUZvdW5kYXRpb24tQ29tbXVuaXR5LVN1cnZleS1vZi1KYXZhLURldmVsb3BlcnMtU2hvd3MtQ2xvdWQtTmF0aXZlLUFkb3B0aW9uLUFjY2VsZXJhdGluZy1EcmFtYXRpY2FsbHktd2l0aC1KYWthcnRhLUVFLmh0bWxdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbRWNsaXBzZSBGb3VuZGF0aW9uIGVudGVycHJpc2UgSmF2YSBzdXJ2ZXkgc2hvd3MgY2xvdWQgZGVwbG95bWVudHMgaW5jcmVhc2luZyBvdmVyIDIwMTggZmluZGluZ3Mgd2l0aCA2MiUgb2YgSmF2YSBkZXZlbG9wZXJzIGJ1aWxkaW5nIGNsb3VkIG5hdGl2ZSBhcmNoaXRlY3R1cmVzIG5vdyBvciB3aXRoaW4gdGhlIHllYXJdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VGh1LCAwOSBNYXkgMjAxOSAxNDowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW1RoZSBDbG91ZCBOYXRpdmUgSW1wZXJhdGl2ZSAtIFJlc3VsdHMgZnJvbSB0aGUgMjAxOSBKYWthcnRhIEVFIERldmVsb3BlciBTdXJ2ZXldXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L21pa2UtbWlsaW5rb3ZpY2gvY2xvdWQtbmF0aXZlLWltcGVyYXRpdmUtJUUyJTgwJTk0LXJlc3VsdHMtMjAxOS1qYWthcnRhLWVlLWRldmVsb3Blci1zdXJ2ZXldXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhlIHJlc3VsdHMgb2YgdGhlIDIwMTkgSmFrYXJ0YSBFRSBEZXZlbG9wZXIgU3VydmV5IGFyZSBvdXQuIEFsbW9zdCAxLDgwMCBKYXZhIGRldmVsb3BlcnMgZnJvbSBhcm91bmQgdGhlIHdvcmxkIGhhdmUgc3Bva2VuLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5GcmksIDEwIE1heSAyMDE5IDE0OjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9ucyBBYm91dCBKYWthcnRhIEVFIDhdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L21pa2UtbWlsaW5rb3ZpY2gvZnJlcXVlbnRseS1hc2tlZC1xdWVzdGlvbnMtYWJvdXQtamFrYXJ0YS1lZS04XV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW0hhdmUgcXVlc3Rpb25zIGFib3V0IEpha2FydGEgRUUgOD8gQ2hlY2sgb3V0IE1pa2UgTWlsaW5rb3ZpY2gncyBuZXdlc3QgRkFRIGJsb2chXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPldlZCwgMDggTWF5IDIwMTkgMTA6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIENvbnRyaWJ1dG9yIEFncmVlbWVudCAzLjBdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L3dheW5lLWJlYXRvbi9lY2xpcHNlLWNvbnRyaWJ1dG9yLWFncmVlbWVudC0zMF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUaGUgRWNsaXBzZSBGb3VuZGF0aW9uJ3MgSVAgVGVhbSBoYXMgYmVlbiB3b3JraW5nIGhhcmQgdG8gZ2V0IHRoZSB2YXJpb3VzIGFncmVlbWVudHMgdGhhdCB3ZSBtYWludGFpbiBiZXR3ZWVuIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gYW5kIGNvbW11bml0eSB1cGRhdGVkLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5XZWQsIDA4IE1heSAyMDE5IDEwOjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtVcGRhdGUgb24gSmFrYXJ0YSBFRSBSaWdodHMgdG8gSmF2YSBUcmFkZW1hcmtzXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC9taWtlLW1pbGlua292aWNoL3VwZGF0ZS1qYWthcnRhLWVlLXJpZ2h0cy1qYXZhLXRyYWRlbWFya3NdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbU3VtbWFyeSBvZiBwcm9ncmVzcyB0byBkYXRlIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhlIGFncmVlbWVudCBiZXR3ZWVuIEVjbGlwc2UgYW5kIE9yYWNsZSBvbiBKYWthcnRhIEVFIGFuZCB1c2Ugb2YgSmF2YSB0cmFkZW1hcmtzIGFuZCB0aGUgamF2YXggbmFtZXNwYWNlLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5GcmksIDAzIE1heSAyMDE5IDE1OjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIEZvdW5kYXRpb24gb24gdGhlIG1vdmUhXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC9taWtlLW1pbGlua292aWNoL2VjbGlwc2UtZm91bmRhdGlvbi1tb3ZlXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW0FmdGVyIDE1IHllYXJzIGF0IDEwMiBDZW50cmVwb2ludGUgRHJpdmUgaW4gT3R0YXdhLCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIG9uIHRoZSBtb3ZlIV1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UaHUsIDI1IEFwciAyMDE5IDE1OjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbVGhlIDIwMTkgSW9UIERldmVsb3BlciBTdXJ2ZXkgUmVzdWx0cyBhcmUgTGl2ZV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3QvbWlrZS1taWxpbmtvdmljaC8yMDE5LWlvdC1kZXZlbG9wZXItc3VydmV5LXJlc3VsdHMtYXJlLWxpdmVdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhpcyB5ZWFyIG1hcmtzIHRoZSBmaWZ0aCB5ZWFyIHRoZSBFY2xpcHNlIElvVCBXb3JraW5nIEdyb3VwIGhhcyBhc2tlZCB0aGUgZ2xvYmFsIElvVCBkZXZlbG9wZXIgY29tbXVuaXR5IHRvIHNoYXJlIHRoZWlyIHBlcmNlcHRpb25zLCByZXF1aXJlbWVudHMsIGFuZCBwcmlvcml0aWVzLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5XZWQsIDE3IEFwciAyMDE5IDA4OjQwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbTmV3IFN1cnZleSBvZiBNb3JlIFRoYW4gMSw3MDAgSW9UIERldmVsb3BlcnMgUmV2ZWFscyBUb3AgSGFyZHdhcmUsIFNvZnR3YXJlICJTdGFjayIgQ2hvaWNlc11dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwOi8vd3d3Lmdsb2JlbmV3c3dpcmUuY29tL25ld3MtcmVsZWFzZS8yMDE5LzA0LzE3LzE4MDUzMTgvMC9lbi9OZXctU3VydmV5LW9mLU1vcmUtVGhhbi0xLTcwMC1Jb1QtRGV2ZWxvcGVycy1SZXZlYWxzLVRvcC1IYXJkd2FyZS1Tb2Z0d2FyZS1TdGFjay1DaG9pY2VzLmh0bWxdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVG9kYXksIHdlIHJlbGVhc2VkIHRoZSAyMDE5IElvVCBEZXZlbG9wZXIgU3VydmV5IHJlc3VsdHMgdGhhdCBjYW52YXNzZWQgbW9yZSB0aGFuIDEsNzAwIGRldmVsb3BlcnMgYWJvdXQgdGhlaXIgSW9UIGVmZm9ydHMhXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPldlZCwgMTcgQXByIDIwMTkgMDg6NDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtSZW5hbWluZyBKYXZhIEVFIFNwZWNpZmljYXRpb25zIGZvciBKYWthcnRhIEVFXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC93YXluZS1iZWF0b24vcmVuYW1pbmctamF2YS1lZS1zcGVjaWZpY2F0aW9ucy1qYWthcnRhLWVlXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW0FzIHdlIHByZXBhcmUgdG8gZW5nYWdlIGluIGFjdHVhbCBzcGVjaWZpY2F0aW9uIHdvcmssIGl0J3MgdGltZSB0byBzdGFydCB0aGlua2luZyBhYm91dCBjaGFuZ2luZyB0aGUgbmFtZXMgb2YgdGhlIHNwZWNpZmljYXRpb25zIGFuZCB0aGUgcHJvamVjdHMgdGhhdCBjb250YWluIHRoZWlyIGFydGlmYWN0cy5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+RnJpLCAwNSBBcHIgMjAxOSAwNzo0MDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0hvdyB0byBwYXJ0aWNpcGF0ZSBpbiBhZHZhbmNpbmcgSmFrYXJ0YSBFRSBTcGVjaWZpY2F0aW9uOiBUZWNobmljYWwgYW5kIENvbGxhdGVyYWwgbWF0ZXJpYWwgcmVsYXRlZCB3b3JrXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC90YW5qYS1vYnJhZG92aWMvaG93LXBhcnRpY2lwYXRlLWFkdmFuY2luZy1qYWthcnRhLWVlLXNwZWNpZmljYXRpb24tdGVjaG5pY2FsLWFuZC1jb2xsYXRlcmFsXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1dlIGhhdmUgaGVhcmQgZnJvbSBtZW1iZXJzIG9mIHRoZSBjb21tdW5pdHkgc29tZSBzdWdnZXN0aW9ucyBvbiB3aGF0IHRoZXkgbmVlZCBmcm9tIHRoZSBzcGVjaWZpY2F0aW9uLCBidXQgd2UgY2FuIGFsd2F5cyB1c2UgbW9yZSFdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+RnJpLCAwNSBBcHIgMjAxOSAwNzo0MDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbV2VsY29tZSBHYWJyaWVsYSFdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L3RoYWJhbmctbWFzaG9sb2d1L3dlbGNvbWUtZ2FicmllbGFdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbV2UnZCBsaWtlIHRvIHdlbGNvbWUgR2FicmllbGEgTW90cm9jIHRvIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gYXMgYSBDb250ZW50IE1hcmtldGluZyBTcGVjaWFsaXN0IGJhc2VkIGluIEdlcm1hbnkhXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPk1vbiwgMDEgQXByIDIwMTkgMDk6NDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW1RoYW5rIFlvdSBmb3IgVGFraW5nIHRoZSBKYWthcnRhIEVFIDIwMTkgRGV2ZWxvcGVyIFN1cnZleSFdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L3RoYWJhbmctbWFzaG9sb2d1L3RoYW5rLXlvdS10YWtpbmctamFrYXJ0YS1lZS0yMDE5LWRldmVsb3Blci1zdXJ2ZXldXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhlIHN1cnZleSB3cmFwcGVkIHVwIGF0IG1pZG5pZ2h0IG9uIE1vbmRheSwgTWFyY2ggMjUsIHdpdGggb3ZlciAxLDc3MCByZXNwb25zZXMgZnJvbSBkZXZlbG9wZXJzIGFyb3VuZCB0aGUgZ2xvYmUuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPk1vbiwgMDEgQXByIDIwMTkgMDg6NDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtJbmN1YmF0aW9uIGluIHRoZSBFY2xpcHNlIERldmVsb3BtZW50IFByb2Nlc3NdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L3dheW5lLWJlYXRvbi9pbmN1YmF0aW9uLWVjbGlwc2UtZGV2ZWxvcG1lbnQtcHJvY2Vzc11dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUaGUgRWNsaXBzZSBEZXZlbG9wbWVudCBQcm9jZXNzIGhhcyBhIG5vdGlvbiBvZiBwaGFzZXMuIFR3byBvZiB0aG9zZSBwaGFzZXMgYXJlIEluY3ViYXRpb24gYW5kIE1hdHVyZS5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+RnJpLCAxNSBNYXIgMjAxOSAxNTozMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbVGhhdCdzIEEgV3JhcCwgRm9sa3MhIFRoYW5rIFlvdSBmb3IgUGFydGljaXBhdGluZyBpbiBPdXIgMjAxOSBJb1QgRGV2ZWxvcGVyIFN1cnZleSFdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L2phbWVrYS13b29kYmVycnkvdGhhdHMtd3JhcC1mb2xrcy10aGFuay15b3UtcGFydGljaXBhdGluZy1vdXItMjAxOS1pb3QtZGV2ZWxvcGVyLXN1cnZleV1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtXZSBhcmUgcHJvdWQgdG8gYW5ub3VuY2UgdGhhdCBvdXIgMjAxOSBJb1QgRGV2ZWxvcGVyIFN1cnZleSwgb3JnYW5pemVkIGJ5IHRoZSBFY2xpcHNlIElvVCBXb3JraW5nIEdyb3VwLCB3YXMgYSBodWdlIHN1Y2Nlc3Mgd2l0aCBvdmVyIDEsNzAwIHJlc3BvbnNlcyFdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+TW9uLCAxMSBNYXIgMjAxOSAxMzo0MDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBGb3VuZGF0aW9uIFNwZWNpZmljYXRpb24gUHJvY2VzcyBTdGVwLWJ5LVN0ZXBdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L3dheW5lLWJlYXRvbi9lY2xpcHNlLWZvdW5kYXRpb24tc3BlY2lmaWNhdGlvbi1wcm9jZXNzLXN0ZXAtc3RlcF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIFNwZWNpZmljYXRpb24gUHJvY2VzcyAoRUZTUCkgcHJvdmlkZXMgYSBmcmFtZXdvcmsgYW5kIGdvdmVybmFuY2UgbW9kZWwgZm9yIGRldmVsb3BlcnMgZW5nYWdlZCBpbiB0aGUgcHJvY2VzcyBvZiBkZXZlbG9waW5nIHNwZWNpZmljYXRpb25zLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5GcmksIDA4IE1hciAyMDE5IDEzOjMwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIEZvdW5kYXRpb24gQm9hcmQgRWxlY3Rpb24gUmVzdWx0c11dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvcHJlc3MtcmVsZWFzZS8yMDE5MDMwNS1ib2FyZGVsZWN0aW9uLnBocF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtTZWUgdGhlIHJlc3VsdHMgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBTdXN0YWluaW5nIE1lbWJlciBhbmQgQ29tbWl0dGVyIE1lbWJlciBlbGVjdGlvbnMgZm9yIHJlcHJlc2VudGF0aXZlcyB0byBvdXIgQm9hcmQgb2YgRGlyZWN0b3JzLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5XZWQsIDA2IE1hciAyMDE5IDEwOjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbVGhlIDIwMTkgSmFrYXJ0YSBFRSBEZXZlbG9wZXIgU3VydmV5IGlzIHVuZGVyd2F5IV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3QvcGF1bC1idWNrLzIwMTktamFrYXJ0YS1lZS1kZXZlbG9wZXItc3VydmV5LXVuZGVyd2F5XV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoZSBKYWthcnRhIEVFIFdvcmtpbmcgR3JvdXAgaXMgbGF1bmNoaW5nIHRoZSBKYWthcnRhIEVFIERldmVsb3BlciBTdXJ2ZXkgZm9yIDIwMTkhXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMDUgTWFyIDIwMTkgMTA6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0pha2FydGEgRUUgLSBXaGF0J3MgTmV3IGluIDIwMTk/XV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2NvbW11bml0eS9lY2xpcHNlX25ld3NsZXR0ZXIvMjAxOS9mZWJydWFyeS9dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbQ2hlY2sgb3V0IHdoYXQncyBuZXcgaW4gMjAxOSBmb3IgSmFrYXJ0YSBFRSFdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+TW9uLCAwNCBNYXIgMjAxOSAwODowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBJb1QgUmVhY2hlcyBOZXcgTWlsZXN0b25lcyBpbiBPcGVuIFNvdXJjZSBJb1QgTGVhZGVyc2hpcF1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2dsb2JlbmV3c3dpcmUuY29tL25ld3MtcmVsZWFzZS8yMDE5LzAyLzI2LzE3NDIyNzIvMC9lbi9FY2xpcHNlLUlvVC1SZWFjaGVzLU5ldy1NaWxlc3RvbmVzLWluLU9wZW4tU291cmNlLUlvVC1MZWFkZXJzaGlwLmh0bWxdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbRWNsaXBzZSBJb1QgcmVhY2hlcyB0aHJlZSBtaWxsaW9uIGxpbmVzIG9mIGNvZGUsIDQxIG1lbWJlciBjb21wYW5pZXMsIDM3IElvVCBwcm9qZWN0cywgYW5kIDM1MCBjb250cmlidXRvcnMgLSBicmluZ2luZyBJb1QgbGVhZGVycyB0b2dldGhlciB0byBzdGFuZGFyZGl6ZSBvcGVuIGFyY2hpdGVjdHVyZS5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAyNiBGZWIgMjAxOSAwODozMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbUGFydGljaXBhdGUgaW4gdGhlIDIwMTkgSW9UIERldmVsb3BlciBTdXJ2ZXkhXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC90aGFiYW5nLW1hc2hvbG9ndS9wYXJ0aWNpcGF0ZS0yMDE5LWlvdC1kZXZlbG9wZXItc3VydmV5XV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoZSBFY2xpcHNlIElvVCBXb3JraW5nIEdyb3VwIGlzIHBsZWFzZWQgdG8gbGF1bmNoIHRoZSAyMDE5IElvVCBEZXZlbG9wZXIgU3VydmV5IGFuZCB3ZSB3YW50IHRvIGhlYXIgZnJvbSB5b3UhXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPk1vbiwgMTEgRmViIDIwMTkgMTA6MTA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgTmV3c2xldHRlciAtIEVkaXRvcmlhbCBDYWxlbmRhciAyMDE5XV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC9qYW1la2Etd29vZGJlcnJ5L2VjbGlwc2UtbmV3c2xldHRlci0lRTIlODAlOTQtZWRpdG9yaWFsLWNhbGVuZGFyLTIwMTldXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbT3VyIGdvYWwgd2l0aCB0aGUgbmV3c2xldHRlciBpcyB0byBkZWxpdmVyIGdyZWF0IGNvbnRlbnQgdGhhdCBlZHVjYXRlcywgbW90aXZhdGVzLCBhbmQgaW5zcGlyZXMgb3VyIGNvbW11bml0eSFdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+TW9uLCAxMSBGZWIgMjAxOSAxMDoxMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbT3BlbiBTb3VyY2U6IENhbiB5b3UgYWZmb3JkIG5vdCB0byBnZXQgaW52b2x2ZWQ/XV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC90aGFiYW5nLW1hc2hvbG9ndS9vcGVuLXNvdXJjZS1jYW4teW91LWFmZm9yZC1ub3QtZ2V0LWludm9sdmVkXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RvIHNheSB0aGF0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgaXMgb24gYSByb2xsIHdvdWxkIGJlIGFuIHVuZGVyc3RhdGVtZW50Ll1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UaHUsIDA3IEZlYiAyMDE5IDA4OjMwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIEZvdW5kYXRpb246IDE1IFllYXJzIFlvdW5nXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC9taWtlLW1pbGlua292aWNoL2VjbGlwc2UtZm91bmRhdGlvbi0xNS15ZWFycy15b3VuZ11dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtTYXR1cmRheSwgRmVicnVhcnkgMiwgMjAxOSBtYXJrcyB0aGUgMTV0aCBiaXJ0aGRheSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLiBUaGF0IHdhcyB0aGUgZGF5IHRoYXQgaXQgd2FzIHB1YmxpY2x5IGFuZCBvZmZpY2lhbGx5IGFubm91bmNlZCwgYW5kIHRoZSBvcGVuaW5nIGRheSBvZiB0aGUgZmlyc3QgZXZlciBFY2xpcHNlQ29uIGNvbmZlcmVuY2UuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPkZyaSwgMDEgRmViIDIwMTkgMTA6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtKYWthcnRhYmxvZ3MuZWUgaXMgTGl2ZSEgUFM6IEJsb2dnZXJzLCBXZSBOZWVkIFlvdSFdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L3RoYWJhbmctbWFzaG9sb2d1L2pha2FydGFibG9nc2VlLWxpdmUtcHMtYmxvZ2dlcnMtd2UtbmVlZC15b3VdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbSmFrYXJ0YWJsb2dzLmVlIGlzIHRoZSBuZXcgYmxvZyBob21lIGZvciBvdXIgZ2xvYmFsIGNvbW11bml0eSB0byBzdGF5IHVwIHRvIGRhdGUgb24gdGhlIGxhdGVzdCBKYWthcnRhIEVFIG5ld3MsIHRlY2hub2xvZ2llcywgYmVzdCBwcmFjdGljZXMsIGFuZCBtb3JlLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UdWUsIDI5IEphbiAyMDE5IDE1OjIwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIFNwZWNpZmljYXRpb24gUHJvY2VzcyBJVjogVGhlIFNwZWNpZmljYXRpb24gQ29tbWl0dGVlIFZvdGVzXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC93YXluZS1iZWF0b24vZWNsaXBzZS1zcGVjaWZpY2F0aW9uLXByb2Nlc3MtaXYtc3BlY2lmaWNhdGlvbi1jb21taXR0ZWUtdm90ZXNdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbT25lIGtleSBkaWZmZXJlbmNlIGJldHdlZW4gRWNsaXBzZSBvcGVuIHNvdXJjZSBzb2Z0d2FyZSBwcm9qZWN0cyBhbmQgb3BlbiBzb3VyY2Ugc3BlY2lmaWNhdGlvbiBwcm9qZWN0cyBpcyB0aGF0IHNwZWNpZmljYXRpb24gcHJvamVjdHMgbXVzdCBiZSBhbGlnbmVkIHdpdGggZXhhY3RseSBvbmUgc3BlY2lmaWNhdGlvbiBjb21taXR0ZWVdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+TW9uLCAyMSBKYW4gMjAxOSAxNDowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbVHJhZGlzdGEgSm9pbnMgRWNsaXBzZSBGb3VuZGF0aW9uXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vZ2xvYmVuZXdzd2lyZS5jb20vbmV3cy1yZWxlYXNlLzIwMTkvMDEvMTAvMTY4NTk4OC8wL2VuL1RyYWRpc3RhLUpvaW5zLUVjbGlwc2UtRm91bmRhdGlvbi5odG1sXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RyYWRpc3RhIHdpbGwgY29udHJpYnV0ZSB0byB0aGUgSmFrYXJ0YSBFRSBwcm9qZWN0LCBicmluZ2luZyBpdHMgbG9uZyBleHBlcmllbmNlIGluIHRoZSBKYXZhIEVFIHBsYXRmb3JtIGFwcGxpZWQgdG8gdGhlIGZpbmFuY2lhbCBzZWN0b3IuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlRodSwgMTAgSmFuIDIwMTkgMDg6MzU6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgRGV2ZWxvcG1lbnQgUHJvY2VzcyAyMDE4XV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC93YXluZS1iZWF0b24vZWNsaXBzZS1kZXZlbG9wbWVudC1wcm9jZXNzLTIwMThdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbSW4gRGVjZW1iZXIgNy8yMDE4LCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uJ3MgQm9hcmQgb2YgRGlyZWN0b3JzIGFwcHJvdmVkIGEgbmV3IGVkaXRpb24gb2YgdGhlIEVjbGlwc2UgRGV2ZWxvcG1lbnQgUHJvY2VzcyAoRURQKSB3aGljaCBpbnRyb2R1Y2VzIG9uZSBwYXJ0aWN1bGFybHkgc2lnbmlmaWNhbnQgY2hhbmdlLCBhbG9uZyB3aXRoIGEgc21hbGwgbnVtYmVyIG9mIG90aGVyIHVzZWZ1bCBjaGFuZ2VzLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5XZWQsIDE5IERlYyAyMDE4IDA5OjM1OjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIEZvdW5kYXRpb24gRHJpdmVzICQ5IEJpbGxpb24gaW4gT3BlbiBTb3VyY2UgSW5ub3ZhdGlvbl1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2dsb2JlbmV3c3dpcmUuY29tL25ld3MtcmVsZWFzZS8yMDE4LzEyLzE4LzE2Njg1NzYvMC9lbi9FY2xpcHNlLUZvdW5kYXRpb24tRHJpdmVzLTktQmlsbGlvbi1pbi1PcGVuLVNvdXJjZS1Jbm5vdmF0aW9uLmh0bWxdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbR2xvYmFsIG9wZW4gc291cmNlIGZvdW5kYXRpb24gZmluaXNoZXMgMjAxOCB3aXRoIDM2MCsgb3BlbiBzb3VyY2UgcHJvamVjdHMsIDE2MisgbWlsbGlvbiBsaW5lcyBvZiBjb2RlIHdyaXR0ZW4gYW5kIG1vcmUgdGhhbiAyNzUgc3BvbnNvciBtZW1iZXJzXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPldlZCwgMTkgRGVjIDIwMTggMDk6MzU6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPiAgICAKKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtSZWFkIHRoZSBuZXdlc3QgSmFrYXJ0YSBFRSBOZXdzbGV0dGVyIV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlLm9yZy9jb21tdW5pdHkvZWNsaXBzZV9uZXdzbGV0dGVyLzIwMTgvbm92ZW1iZXIvXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoaXMgbW9udGggd2UgYnJpbmcgeW91IGEgZnVsbHkgbG9hZGVkIEpha2FydGEgRUUgbmV3c2xldHRlciB3aXRoIGEgbWl4IG9mIHRlY2huaWNhbCBjb250ZW50LCBjb21tdW5pdHkgbmV3cywgYW5kIGEgdHV0b3JpYWwhXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPkZyaSwgMzAgTm92IDIwMTggMDk6MTU6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgRm91bmRhdGlvbiBTcGVjaWZpY2F0aW9uIFByb2Nlc3MsIFBhcnQgSUlJOiBDcmVhdGlvbl1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3Qvd2F5bmUtYmVhdG9uL2VjbGlwc2UtZm91bmRhdGlvbi1zcGVjaWZpY2F0aW9uLXByb2Nlc3MtcGFydC1paWktY3JlYXRpb25dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbQ3JlYXRpb24nIGlzIGFuIGludGVncmFsIHBhcnQgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBTcGVjaWZpY2F0aW9uIFByb2Nlc3MuIFJlYWQgV2F5bmUgQmVhdG9uJ3MgbmV3ZXN0IGJsb2cgb24gdGhlIHRvcGljLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5GcmksIDMwIE5vdiAyMDE4IDA5OjE1OjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtIb3cgaXMgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBTcGVjaWZpY2F0aW9uIFByb2Nlc3MgKEVGU1ApIGRpZmZlcmVudCBmcm9tIEphdmEgQ29tbXVuaXR5IFByb2Nlc3MgKEpDUCk/XV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC90YW5qYS1vYnJhZG92aWMvaG93LWVjbGlwc2UtZm91bmRhdGlvbi1zcGVjaWZpY2F0aW9uLXByb2Nlc3MtZWZzcC1kaWZmZXJlbnQtamF2YS1jb21tdW5pdHldXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhlcmUgYXJlIG1hbnkgZGlmZmVyZW5jZXMgYmV0d2VlbiBFY2xpcHNlIEZvdW5kYXRpb24gU3BlY2lmaWNhdGlvbiBQcm9jZXNzIChFRlNQKSBhbmQgSmF2YSBDb21tdW5pdHkgUHJvY2VzcyAoSkNQKSwgbGV0J3MgZm9jdXMgb24gbXkgdG9wIDUhXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMjcgTm92IDIwMTggMTI6MTU6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgRm91bmRhdGlvbiBTcGVjaWZpY2F0aW9uIFByb2Nlc3MsIFBhcnQgSUk6IHRoZSBFRlNQXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC93YXluZS1iZWF0b24vZWNsaXBzZS1mb3VuZGF0aW9uLXNwZWNpZmljYXRpb24tcHJvY2Vzcy1wYXJ0LWlpLWVmc3BdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBTcGVjaWZpY2F0aW9uIFByb2Nlc3MgZGVmaW5lcyBhIGdlbmVyYWwgZnJhbWV3b3JrIGZvciBkZXZlbG9waW5nIHNwZWNpZmljYXRpb25zIGluIG9wZW4gc291cmNlIGF0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24uXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMjcgTm92IDIwMTggMTI6MTU6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgRm91bmRhdGlvbiBTcGVjaWZpY2F0aW9uIFByb2Nlc3MsIFBhcnQgSTogVGhlIEVEUF1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3Qvd2F5bmUtYmVhdG9uL2VjbGlwc2UtZm91bmRhdGlvbi1zcGVjaWZpY2F0aW9uLXByb2Nlc3MtcGFydC1pLWVkcF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtBIHF1aWNrIEVjbGlwc2UgRGV2ZWxvcG1lbnQgUHJvY2VzcyAoRURQKSBwcmltZXIuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlRodSwgMDggTm92IDIwMTggMTE6MTU6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgRm91bmRhdGlvbiBIb3N0ZWQgU2VydmljZXMgUHJpdmFjeSBhbmQgQWNjZXB0YWJsZSBVc2FnZSBQb2xpY3ldXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L2NocmlzdG9waGVyLWd1aW5kb24vZWNsaXBzZS1mb3VuZGF0aW9uLWhvc3RlZC1zZXJ2aWNlcy1wcml2YWN5LWFuZC1hY2NlcHRhYmxlLXVzYWdlLXBvbGljeV1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIHJlY2VudGx5IG1hZGUgYXZhaWxhYmxlIGEgbmV3IHBvbGljeSB0byBtYWtlIHN1cmUgdGhhdCBvdXIgcHJvamVjdHMgYW5kIGhvc3RlZCBzZXJ2aWNlcyBhcmUgY29tcGxpYW50IHdpdGggdGhlIEdlbmVyYWwgRGF0YSBQcm90ZWN0aW9uIFJlZ3VsYXRpb24gKEdEUFIpLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UaHUsIDA4IE5vdiAyMDE4IDExOjE1OjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIEZvdW5kYXRpb24gVXBkYXRpbmcgQ29udHJpYnV0b3IgYW5kIENvbW1pdHRlciBBZ3JlZW1lbnRzXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC9taWtlLW1pbGlua292aWNoL25ldy1lY2xpcHNlLWZvdW5kYXRpb24tY29tbWl0dGVyLWFuZC1jb250cmlidXRvci1hZ3JlZW1lbnRzXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1NlZSBNaWtlIE1pbGlua292aWNoJ3MgYmxvZyBleHBsYWluaW5nIHRoZSB1cGNvbWluZyBjaGFuZ2VzIHRvIHRoZXNlIGFncmVlbWVudHMgYW5kIHdoYXQgc3RlcHMgYXJlIGJlaW5nIHRha2VuIHRvIGltcGxlbWVudCB0aGUgdXBkYXRlXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPk1vbiwgMDUgTm92IDIwMTggMTQ6MTU6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgRm91bmRhdGlvbiBQdWJsaXNoZXMgTWljcm9Qcm9maWxlIGVCb29rXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHA6Ly9nbG9iZW5ld3N3aXJlLmNhL25ld3MtcmVsZWFzZS8yMDE4LzExLzA1LzE2NDQ5MTMvMC9lbi9FY2xpcHNlLUZvdW5kYXRpb24tUHVibGlzaGVzLU1pY3JvUHJvZmlsZS1lQm9vay5odG1sXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBWzE1IHBhZ2UgZXhlY3V0aXZlIGd1aWRlIHNldHMgY29udGV4dCBmb3IgZW50ZXJwcmlzZXMgZXZhbHVhdGluZyBNaWNyb1Byb2ZpbGUgJiBlbnRlcnByaXNlIEphdmEgbWljcm9zZXJ2aWNlcyBmb3IgZGlnaXRhbCB0cmFuc2Zvcm1hdGlvbl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5Nb24sIDA1IE5vdiAyMDE4IDExOjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtQYXJ0aWNpcGF0ZSBpbiB0aGUgMjAxOCBFY2xpcHNlIEZvdW5kYXRpb24gQnJhbmQgU3VydmV5XV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC90aGFiYW5nLW1hc2hvbG9ndS9wYXJ0aWNpcGF0ZS0yMDE4LWVjbGlwc2UtZm91bmRhdGlvbi1icmFuZC1zdXJ2ZXldXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbV2UgYXJlIGV4Y2l0ZWQgdG8gbGF1bmNoIHRoZSAyMDE4IGVkaXRpb24gb2Ygb3VyIGJyYW5kIHN1cnZleSFdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+TW9uLCAwNSBOb3YgMjAxOCAxMDo0NTowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0Nhc2UgU3R1ZHk6IEhvdyBCb3NjaCBJcyBTdWNjZWVkaW5nIHdpdGggT3BlbiBTb3VyY2UgYXQgRWNsaXBzZSBJb1RdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9tbWlsaW5rb3Yud29yZHByZXNzLmNvbS8yMDE4LzEwLzAyL2hvdy1ib3NjaC1pcy1zdWNjZWVkaW5nLXdpdGgtb3Blbi1zb3VyY2UvXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW0hvdyBpcyBpdCB0aGF0IGEgMTUwLXllYXItb2xkLCA0MDAsMDAwIGVtcGxveWVlIGluZHVzdHJpYWwgY29uZ2xvbWVyYXRlIGlzIGNvbXBldGluZyBhbmQgd2lubmluZyBpbiB0aGUgcmFwaWRseSBpbnZvbHZpbmcgSW9UIHNvZnR3YXJlIGluZHVzdHJ5P11dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UdWUsIDAyIE9jdCAyMDE4IDA5OjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIENCSSAtIENvbW1vbiBCdWlsZCBJbmZyYXN0cnVjdHVyZSBjaGFuZ2VzXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC9kZW5pcy1yb3kvZWNsaXBzZS1jYmktY29tbW9uLWJ1aWxkLWluZnJhc3RydWN0dXJlLWNoYW5nZXNdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhlIEVjbGlwc2UgQ0JJLCB3aGljaCB0cmFjZXMgaXRzIHJvb3RzIGJhY2sgdG8gMjAwNiwgaGFzIHVuZGVyZ29uZSBzb21lIGltcG9ydGFudCBjaGFuZ2VzIHJlY2VudGx5LCBpbmNsdWRpbmcgYSBuZXcgS3ViZXJuZXRlcytEb2NrZXItcG93ZXJlZCBlbnZpcm9ubWVudCBhdCBodHRwczovL2plbmtpbnMuZWNsaXBzZS5vcmcgdGhhdCByZSBhbm5vdW5jZWQgcHJldmlvdXNseS5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+RnJpLCAyOCBTZXAgMjAxOCAxNTowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIEZvdW5kYXRpb24gYW5kIENsb3VkIE5hdGl2ZSBDb21wdXRpbmcgRm91bmRhdGlvbiBDb2xsYWJvcmF0ZSB0byBHcm93IEt1YmVybmV0ZXMgVXNlIENhc2VzIGluIFRyaWxsaW9uIERvbGxhciBJb1QgTWFya2V0XV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vZ2xvYmVuZXdzd2lyZS5jb20vbmV3cy1yZWxlYXNlLzIwMTgvMDkvMjYvMTU3NjY1MS8wL2VuL0VjbGlwc2UtRm91bmRhdGlvbi1hbmQtQ2xvdWQtTmF0aXZlLUNvbXB1dGluZy1Gb3VuZGF0aW9uLUNvbGxhYm9yYXRlLXRvLUdyb3ctS3ViZXJuZXRlcy1Vc2UtQ2FzZXMtaW4tVHJpbGxpb24tRG9sbGFyLUlvVC1NYXJrZXQuaHRtbF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtSZWQgSGF0IGFuZCBvdGhlciBFY2xpcHNlIElvVCBtZW1iZXJzIHdpbGwgY29sbGFib3JhdGUgaW4gd29ya2luZyBncm91cCB0byBleHRlbmQgY2FwYWJpbGl0aWVzIG9mIEt1YmVybmV0ZXMgZm9yIElvVCBFZGdlIHVzZSBjYXNlcy5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VGh1LCAyNyBTZXAgMjAxOCAwOTowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgPHRpdGxlPjwhW0NEQVRBW0s4cyBhdCB0aGUgRWRnZSAtIFNvbWUgQ29udGV4dCBvbiB0aGUgTmV3IEt1YmVybmV0ZXMgSW9UIFdvcmtpbmcgR3JvdXBdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cDovL2JpdC5seS8yRHU5aTRwXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgZXhjaXRlZCB0byBiZSBwYXJ0IG9mIHRvZGF5J3MgYW5ub3VuY2VtZW50IG9mIGEgbmV3IEt1YmVybmV0ZXMgSW9UIEVkZ2UgV29ya2luZyBHcm91cC5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+V2VkLCAyNiBTZXAgMjAxOCAwODozMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgPHRpdGxlPjwhW0NEQVRBW1dlbGNvbWluZyBHbGFzc0Zpc2ggdG8gdGhlIEVjbGlwc2UgRm91bmRhdGlvbl1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3QvdGFuamEtb2JyYWRvdmljL3dlbGNvbWluZy1nbGFzc2Zpc2gtZWNsaXBzZS1mb3VuZGF0aW9uXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW0EgbWFqb3IgbWlsZXN0b25lIHdhcyBhY2hpZXZlZCB5ZXN0ZXJkYXkhIFRoZSBHbGFzc0Zpc2ggY29kZSBmcm9tIE9yYWNsZSBtYWRlIGl0cyBob21lIGluIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24ncyBHaXQgcmVwb3NpdG9yaWVzLCBzdGFydGluZyBhIG5ldyBlcmEgb2YgRWNsaXBzZSBHbGFzc0Zpc2guIF1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5XZWQsIDE5IFNlcCAyMDE4IDE0OjMwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICA8dGl0bGU+PCFbQ0RBVEFbQW4gJDguNyBCaWxsaW9uIFNoYXJlZCBJbnZlc3RtZW50OiBTaXppbmcgdGhlIEVjb25vbWljIFZhbHVlIG9mIEVjbGlwc2UgQ29tbXVuaXR5IENvbGxhYm9yYXRpb25dXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L3RoYWJhbmctbWFzaG9sb2d1Lzg3LWJpbGxpb24tc2hhcmVkLWludmVzdG1lbnQtc2l6aW5nLWVjb25vbWljLXZhbHVlLWVjbGlwc2UtY29tbXVuaXR5XV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1doYXQgaXMgdGhlIHZhbHVlIG9mIHRoZSBjb2RlIGNvbnRyaWJ1dGVkIGJ5IHRoZSBFY2xpcHNlIGNvbW11bml0eT8gV2UgZXN0aW1hdGUgdGhhdCB0aGUgcm91Z2hseSAxNjIgbWlsbGlvbiB0b3RhbCBwaHlzaWNhbCBzb3VyY2UgbGluZXMgb2YgY29kZSBpbiBFY2xpcHNlIHJlcG9zaXRvcmllcyByZXByZXNlbnQgYSAkOC43IGJpbGxpb24gVVNEIHNoYXJlZCB0ZWNobm9sb2d5IGludmVzdG1lbnQgYnkgb3VyIGNvbW11bml0eS5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VGh1LCAxMyBTZXAgMjAxOCAwOTozMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgPHRpdGxlPjwhW0NEQVRBW01penVobyBJbnRlcm5hdGlvbmFsIEpvaW5zIEVjbGlwc2UgRm91bmRhdGlvbl1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwOi8vd3d3Lmdsb2JlbmV3c3dpcmUuY29tL25ld3MtcmVsZWFzZS8yMDE4LzA5LzExLzE1NjkxNzUvMC9lbi9NaXp1aG8tSW50ZXJuYXRpb25hbC1Kb2lucy1FY2xpcHNlLUZvdW5kYXRpb24uaHRtbF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtNaXp1aG8gSW50ZXJuYXRpb25hbCwgdGhlIHNlY3VyaXRpZXMgJiBpbnZlc3RtZW50IGJhbmtpbmcgYXJtIG9mIHRoZSBNaXp1aG8gRmluYW5jaWFsIEdyb3VwLCBoYXMgam9pbmVkIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24uXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMTEgU2VwIDIwMTggMTQ6NTU6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgPGl0ZW0+CisgICAgPHRpdGxlPjwhW0NEQVRBW0hvdyBtYW55IGxpbmVzIG9mIE9wZW4gU291cmNlIGNvZGUgYXJlIGhvc3RlZCBhdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uP11dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2cuYmVuamFtaW4tY2FiZS5jb20vMjAxOC8wOS8wNC9ob3ctbWFueS1saW5lcy1vZi1vcGVuLXNvdXJjZS1jb2RlLWFyZS1ob3N0ZWQtYXQtdGhlLWVjbGlwc2UtZm91bmRhdGlvbl1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtBcyBvZiBBdWd1c3QgMXN0LCB0aGVyZSBhcmUgMzMwIGFjdGl2ZSBvcGVuLXNvdXJjZSBwcm9qZWN0cyBhbmQgMTEyMCBHaXQgcmVwb3NpdG9yaWVzLCBhcyBmb3IgbGluZXMgb2YgY29kZS4uLiBdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+V2VkLCAwNSBTZXAgMjAxOCAwOTozMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbVGFsayB3aXRoIHlvdXIgdGVhbSBhYm91dCBFY2xpcHNlQ29uIEV1cm9wZSAyMDE4XV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vZWNsaXBzZWNvbi5vcmcvZXVyb3BlMjAxOF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtSZXZpZXcgdGhlIHByb2dyYW0gLSB0YWxrcywga2V5bm90ZXMgYW5kIHNwZWNpYWwgZXZlbnRzIC0gYW5kIHJlZ2lzdGVyIGJ5IE9jdG9iZXIgMSBmb3IgdGhlIGJlc3QgcmF0ZXMhXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMDQgU2VwIDIwMTggMTA6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgRm91bmRhdGlvbiBXZWxjb21lcyAxNiBOZXcgTWVtYmVycyBBcyBKYWthcnRhIEVFIGFuZCBFY2xpcHNlIElvVCBEZXZlbG9wZXIgQ29tbXVuaXRpZXMgU3VyZ2VdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9nbG9iZW5ld3N3aXJlLmNvbS9uZXdzLXJlbGVhc2UvMjAxOC8wOC8yOS8xNTU4MzI1LzAvZW4vRWNsaXBzZS1Gb3VuZGF0aW9uLVdlbGNvbWVzLTE2LU5ldy1NZW1iZXJzLUFzLUpha2FydGEtRUUtYW5kLUVjbGlwc2UtSW9ULURldmVsb3Blci1Db21tdW5pdGllcy1TdXJnZS5odG1sXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RvZGF5LCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGFubm91bmNlZCB0aGUgYWRkaXRpb24gb2YgMTYgbmV3IG1lbWJlcnMuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPldlZCwgMjkgQXVnIDIwMTggMTU6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgRm91bmRhdGlvbiBhbmQgSUJNIFBhcnRuZXIgdG8gSGVscCBGaWdodCBOYXR1cmFsIERpc2FzdGVycyBpbiBOZXcgR2xvYmFsIE9wZW4gU291cmNlIFNvZnR3YXJlIEluaXRpYXRpdmVdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cDovL3d3dy5nbG9iZW5ld3N3aXJlLmNvbS9uZXdzLXJlbGVhc2UvMjAxOC8wOC8yMS8xNTU0NDYwLzAvZW4vRWNsaXBzZS1Gb3VuZGF0aW9uLWFuZC1JQk0tUGFydG5lci10by1IZWxwLUZpZ2h0LU5hdHVyYWwtRGlzYXN0ZXJzLWluLU5ldy1HbG9iYWwtT3Blbi1Tb3VyY2UtU29mdHdhcmUtSW5pdGlhdGl2ZS5odG1sXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW09TUyBkZXZlbG9wZXJzIGFyZSBlbmNvdXJhZ2VkIHRvIGNyZWF0ZSBzb2x1dGlvbnMgdGhhdCBoZWxwIGNvbW11bml0aWVzIGltcHJvdmUgZGlzYXN0ZXIgcHJlcGFyZWRuZXNzICYgcmVjb3ZlcnkuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMjEgQXVnIDIwMTggMTQ6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW1dlIEFyZSBPcGVuXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC90aGFiYW5nLW1hc2hvbG9ndS93ZS1hcmUtb3Blbl1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtXZSBBcmUgT3BlbiBjYW1wYWlnbiBwcm92aWRlcyBhIHBlZWsgaW50byBFY2xpcHNlIGNvbW11bml0eSdzIG9wZW5uZXNzLCBpbm5vdmF0aW9uLCBhbmQgY29sbGFib3JhdGlvbi5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VGh1LCAwMiBBdWcgMjAxOCAwODowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBGb3VuZGF0aW9uIEFubm91bmNlcyBKYWthcnRhIEVFIENvbW1pdHRlZSBFbGVjdGlvbiBSZXN1bHRzXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9wcmVzcy1yZWxlYXNlLzIwMTgwNzMxLWpha2FydGFFRV9jb21taXR0ZWVfZWxlY3Rpb24ucGhwXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoZSByZXN1bHRzIGFyZSBpbiBmb3IgUGFydGljaXBhbnQgYW5kIENvbW1pdHRlciBNZW1iZXIgZWxlY3Rpb25zIGZvciByZXByZXNlbnRhdGl2ZXMgdG8gdGhlIEpha2FydGEgRUUgV29ya2luZyBHcm91cCFdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAzMSBKdWwgMjAxOCAwOToxMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjE8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBOZXdzbGV0dGVyIHwgRW1iZWRkZWQgRGV2ZWxvcG1lbnRdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvY29tbXVuaXR5L2VjbGlwc2VfbmV3c2xldHRlci8yMDE4L2p1bHkvXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoaXMgbW9udGgncyBuZXdzbGV0dGVyIGZlYXR1cmVzIGZpdmUgYXJ0aWNsZXMgdGhhdCBmb2N1cyBvbiBFbWJlZGRlZCBEZXZlbG9wbWVudC4gUmVhZCBpdCBub3cuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlRodSwgMjYgSnVsIDIwMTggMDg6MzA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgSW9UIERheSBTaW5nYXBvcmUgQW5ub3VuY2VkXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vaW90LmVjbGlwc2Uub3JnL2VjbGlwc2UtaW90LWRheS1zaW5nYXBvcmUtMjAxOC9dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhlIHZlcnkgZmlyc3QgRWNsaXBzZSBJb1QgRGF5IFNpbmdhcG9yZSB3aWxsIHRha2UgcGxhY2UgU2VwdC4gMTggaW4gY28tbG9jYXRpb24gd2l0aCBJb1QgV29ybGQgQXNpYSAyMDE4Ll1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UdWUsIDI0IEp1bCAyMDE4IDA2OjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbTmV3IFdvcmtpbmcgR3JvdXAgYW5kIENoYXJ0ZXIgYXQgdGhlIEVjbGlwc2UgRm91bmRhdGlvbjogT3Blbk1vYmlsaXR5XV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy93b3JraW5nZ3JvdXBzL29wZW5tb2JpbGl0eV9jaGFydGVyLnBocF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtPcGVuTW9iaWxpdHkgd2lsbCBkcml2ZSB0aGUgZXZvbHV0aW9uIGFuZCBicm9hZCBhZG9wdGlvbiBvZiBtb2JpbGl0eSBtb2RlbGxpbmcgYW5kIHNpbXVsYXRpb24gdGVjaG5vbG9naWVzLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5GcmksIDIwIEp1bCAyMDE4IDEyOjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtDYWxsIGZvciBzdWJtaXNzaW9ucyBmb3IgRWNsaXBzZUNvbiBFdXJvcGUgMjAxOF1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlY29uLm9yZy9ldXJvcGUyMDE4XV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW0JlIHBhcnQgb2YgdGhlIEVjbGlwc2VDb24gRXVyb3BlIHByb2dyYW0uIFN1Ym1pdCB5b3VyIHRhbGtzIGJ5IEp1bHkgMTZ0aC5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+RnJpLCAwNiBKdWwgMjAxOCAxMDowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgRm91bmRhdGlvbiBBbm51YWwgQ29tbXVuaXR5IFJlcG9ydF1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZm91bmRhdGlvbi9yZXBvcnRzLzIwMThfYW5udWFsX3JlcG9ydC5waHBdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhlIEVjbGlwc2UgRm91bmRhdGlvbidzIDIwMTggQW5udWFsIENvbW11bml0eSBSZXBvcnQgaGFzIGJlZW4gcHVibGlzaGVkLCBhbmQgaXMgbm93IGF2YWlsYWJsZS5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAwMyBKdWwgMjAxOCAxNTowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBOZXdzbGV0dGVyIHwgRWNsaXBzZSBQaG90b25dXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvY29tbXVuaXR5L2VjbGlwc2VfbmV3c2xldHRlci8yMDE4L2p1bmUvXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW05hdHVyYWxseSwgdGhpcyBpc3N1ZSBvZiB0aGUgbmV3c2xldHRlciBmZWF0dXJlcyBzb21lIG9mIHRoZSB0aGluZ3MgdGhhdCBhcmUgbmV3IGluIEVjbGlwc2UgUGhvdG9uIV1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UdWUsIDAzIEp1bCAyMDE4IDEyOjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtUYWtlIFlvdXIgQ29kZSB0byB0aGUgTmV4dCBMZXZlbCBXaXRoIEVjbGlwc2UgUGhvdG9uXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC90aGFiYW5nLW1hc2hvbG9ndS90YWtlLXlvdXItY29kZS1uZXh0LWxldmVsLWVjbGlwc2UtcGhvdG9uXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW0pvaW4gb3ZlciA0IG1pbGxpb24gYWN0aXZlIHVzZXJzIG9mIHRoZSBFY2xpcHNlIElERSBhbmQgdGFrZSB5b3VyIGNvZGluZyB0byB0aGUgbmV4dCBsZXZlbCB3aXRoIEVjbGlwc2UgUGhvdG9uLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UaHUsIDI4IEp1bmUgMjAxOCAxMjowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbTmV3IFBob3RvbiBSZWxlYXNlIG9mIEVjbGlwc2UgSURFIFNoaXBzIFdpdGggRnVsbCBSdXN0IFN1cHBvcnRdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL3ByZXNzLXJlbGVhc2UvMjAxODA2MjdfbmV3LXBob3Rvbi1yZWxlYXNlLW9mLWVjbGlwc2UtaWRlLXNoaXBzLXdpdGgtZnVsbC1ydXN0LXN1cHBvcnQucGhwXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG9kYXkgYW5ub3VuY2VkIHRoZSBFY2xpcHNlIFBob3RvbiBzaW11bHRhbmVvdXMgcmVsZWFzZS5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+V2VkLCAyNyBKdW5lIDIwMTggMTA6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4xPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgTmV3c2xldHRlciAtIEEgRmlyc3QgTG9vayBhdCBKYWthcnRhIEVFXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2NvbW11bml0eS9lY2xpcHNlX25ld3NsZXR0ZXIvMjAxOC9tYXkvXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoaXMgbW9udGgsIHJlYWQgZWlnaHQgZ3JlYXQgcGllY2VzIHRvIGdldCBpbmZvcm1lZCBhYm91dCB2YXJpb3VzIHBhcnRzIG9mIEpha2FydGEgRUUuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPk1vbiwgMDQgSnVuZSAyMDE4IDA1OjQwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtSQzIgbm93IGF2YWlsYWJsZSBmb3IgRWNsaXBzZSBQaG90b25dXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvZG93bmxvYWRzL2luZGV4LWRldmVsb3Blci5waHBdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbRG93bmxvYWQgYW5kIHRlc3QgcmVsZWFzZSBjYW5kaWRhdGUgMiBmb3IgRWNsaXBzZSBQaG90b24hXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPkZyaSwgMDEgSnVuZSAyMDE4IDExOjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtVcGRhdGVzIHRvIG91ciBQcml2YWN5IFBvbGljeV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3QvdGhhYmFuZy1tYXNob2xvZ3UvdXBkYXRlcy1vdXItcHJpdmFjeS1wb2xpY3ldXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBoYXMgdXBkYXRlZCBpdCdzIHByaXZhY3kgcG9saWN5IGZvciB0aGUgcHJvdGVjdGlvbiBvZiB5b3VyIHBlcnNvbmFsIGRhdGEuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPkZyaSwgMjUgTWF5IDIwMTggMTA6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2VDb24gRXVyb3BlIDIwMTggQ2FsbCBmb3IgUGFwZXJzXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHA6Ly93d3cuZWNsaXBzZWNvbi5vcmcvZXVyb3BlMjAxOF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtSZXZpZXcgdGhlIENGUCwgdGFsayB3aXRoIHlvdXIgdGVhbSBhbmQgc3VibWl0IHlvdXIgdGFsa3MgdG9kYXkhXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPk1vbiwgMTQgTWF5IDIwMTggMTM6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW05ldyBQcm9wb3NlZCBDaGFydGVyIGZvciBPUy5iZWEgV29ya2luZyBHcm91cF1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2VjbGlwc2Uub3JnL29yZy93b3JraW5nZ3JvdXBzL29zYmVhX3dnX2NoYXJ0ZXIucGhwXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW05ldyBwcm9wb3NlZCBjaGFydGVyIGZvciBPUy5iZWEgV29ya2luZyBHcm91cCBpcyByZWFkeSBmb3IgcmV2aWV3LiBQYXRpY2lwYXRlIGJ5IGFkZGluZyBmZWVkYmFjayBvbiB0aGUgbWFpbGluZy1saXN0Ll1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5Nb24sIDE0IE1heSAyMDE4IDEzOjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBDb21tb24gQnVpbGQgSW5mcmFzdHJ1Y3R1cmU6IFVwY29taW5nIENoYW5nZXNdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1udnpxZFFtdzlnWSZmZWF0dXJlPXlvdXR1LmJlXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW0VjbGlwc2UgQ0JJIGlzIHVuZGVyZ29pbmcgaW1wb3J0YW50IGNoYW5nZXMsIGluY2x1ZGluZyBLdWJlcm5ldGVzLyBEb2NrZXIgdmlhIFJlZCBIYXQgT3BlblNoaWZ0ICYgQ2xvdWRCZWVzIEplbmtpbnMgRW50ZXJwcmlzZS5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VGh1LCAxMCBNYXkgMjAxOCAwOTowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBOZXdzbGV0dGVyIC0gSmF2YSBUb29scyBhbmQgUnVudGltZXNdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvY29tbXVuaXR5L2VjbGlwc2VfbmV3c2xldHRlci8yMDE4L2FwcmlsL11dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUaGlzIG1vbnRoLCByZWFkIGFsbCBhYm91dCBFY2xpcHNlIHByb2plY3RzOiBDb2xsZWN0aW9ucywgSk5vU1FMLCBNaWNyb1Byb2ZpbGUsIE9wZW5KOSwgYW5kIFZlcnQueF1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5GcmksIDA0IE1heSAyMDE4IDA1OjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlQ29uIEZyYW5jZSAyMDE4OiBSZWdpc3RlciBFYXJseSFdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZWNvbi5vcmcvZnJhbmNlMjAxOC9yZWdpc3RyYXRpb25dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbUHJpY2VzIGdvIHVwIGFmdGVyIEFwcmlsIDMwLCBzbyByZWdpc3RlciBub3cuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPldlZCwgMjUgQXByIDIwMTggMDg6MzA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtTdXJ2ZXkgb2YgMTgwMCsgZGV2ZWxvcGVycyBub3cgcmVsZWFzZWQgb24gbmV3IEpha2FydGEgRUUgd2Vic2l0ZV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2pha2FydGEuZWUvbmV3cy8yMDE4LzA0LzI0L2pha2FydGEtZWUtY29tbXVuaXR5LXN1cnZleS9dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbU3VydmV5IG9mIDEsODAwKyBKYXZhIGRldmVsb3BlcnMgcmV2ZWFscyAiY2xvdWQgbmF0aXZlIiB0b3AgcmVxdWlyZW1lbnQgaW4gcGxhdGZvcm0ncyBldm9sdXRpb24uXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMjQgQXByIDIwMTggMDk6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0lvVCBEZXZlbG9wZXIgU3VydmV5IDIwMTggfCBSZXN1bHRzIGFyZSBpbiFdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9nLmJlbmphbWluLWNhYmUuY29tLzIwMTgvMDQvMTcva2V5LXRyZW5kcy1pb3QtZGV2ZWxvcGVyLXN1cnZleS0yMDE4XV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1Jlc3VsdHMgZnJvbSB0aGUgSW9UIERldmVsb3BlciBTdXJ2ZXkgYXJlIGluISBSZWFkIGFib3V0IHRoZSBrZXkgZmluZGluZ3MgYWJvdXQgSW9UIGNsb3VkIHBsYXRmb3JtcywgZGF0YWJhc2VzLCBzZWN1cml0eSwgYW5kIG1vcmUuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMTcgQXByIDIwMTggMDk6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgT3h5Z2VuIDNBIGhhcyBiZWVuIHJlbGVhc2VkIV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlLm9yZy9kb3dubG9hZHMvcGFja2FnZXMvcmVsZWFzZS9veHlnZW4vM2FdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbRG93bmxvYWQgdGhlIE94eWdlbiAzQSBwYWNrYWdlcyB0b2RheS5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VGh1LCAxMiBBcHIgMjAxOCAwOTowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbV2lubmVycyBvZiBPcGVuIElvVCBDaGFsbGVuZ2UgNC4wIERlbW9uc3RyYXRlIEhvdyBPcGVuIFNvdXJjZSBBY2NlbGVyYXRlcyBJbm5vdmF0aW9uXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9wcmVzcy1yZWxlYXNlLzIwMTgwNDA0X2lvdGNoYWxsZW5nZV93aW5uZXJzMjAxOC5waHBdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbRWNsaXBzZSBJb1QgaXMgcGxlYXNlZCB0byBhbm5vdW5jZSB0aGUgd2lubmVycyBvZiB0aGUgZm91cnRoIGFubnVhbCBPcGVuIElvVCBDaGFsbGVuZ2UhXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPldlZCwgMDQgQXByIDIwMTggMDk6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4xPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2VDb24gRnJhbmNlIDIwMTggUHJvZ3JhbSBBbm5vdW5jZWRdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZWNvbi5vcmcvZnJhbmNlMjAxOC9wcm9ncmFtL3Nlc3Npb25zL2FjY2VwdGVkXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1NlZSB0aGUgbGlzdCBvZiBhY2NlcHRlZCBzZXNzaW9ucywgYW5kIHJlZ2lzdGVyIG5vdyBmb3IgdGhlIGxvd2VzdCBwcmljZS4gV2UnbGwgc2VlIHlvdSBKdW5lIDEzIC0gMTQgaW4gVG91bG91c2UuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMDMgQXByIDIwMTggMDk6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW1ZvdGluZyBmb3IgdGhlIEpha2FydGEgRUUgbG9nbyBpcyBub3cgb3BlbiFdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZm9ybXMvZC9lLzFGQUlwUUxTZFJjblFzMlBIUkZPc3gwa193R2d2dllnMXI4VnNzNDRlSXNnampXREdPZlE4ZTRBL3ZpZXdmb3JtXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1ZvdGluZyB3aWxsIGJlIGNvbmR1Y3RlZCB1c2luZyBhIHJhbmtlZCBwb2xsLiBUbyB2b3RlLCBzaW1wbHkgcmFuayB0aGUgZmluYWwgc2hvcnRsaXN0IG9mIGxvZ29zIGluIG9yZGVyIG9mIHByZWZlcmVuY2UuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlRodSwgMjkgTWFyIDIwMTggMTc6NDU6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW1RocmVlIGRheXMgbGVmdCB0byBjb21wbGV0ZSB0aGUgSmFrYXJ0YSBFRSBTdXJ2ZXkhXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LnN1cnZleW1vbmtleS5jb20vci9qYWthcnRhZWNdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbT25lIHdlZWsgbGVmdCB0byBzaGFyZSB5b3VyIGluc2lnaHRzIG9uIEphdmEgRUUgYW5kIGhlbHAgc2hhcGUgdGhlIGZ1dHVyZSBvZiBKYWthcnRhIEVFLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UdWUsIDI3IE1hciAyMDE4IDA3OjEwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIE5ld3NsZXR0ZXIgfCBDb2RlIGluIERpZmZlcmVudCBMYW5ndWFnZXNdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvY29tbXVuaXR5L2VjbGlwc2VfbmV3c2xldHRlci8yMDE4L21hcmNoL11dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtSZWFkIHdoYXQncyBuZXcgaW4gdGhlIEVjbGlwc2UgSkRUIExhbmd1YWdlIFNlcnZlciBhbmQgRWNsaXBzZSBQRFQgKFBIUCksIHRoZW4gbGVhcm4gYWJvdXQgRWNsaXBzZSBYdGV4dCBhbmQgRWNsaXBzZSBNaXRhIChJb1QpLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UaHUsIDIyIE1hciAyMDE4IDA0OjEzOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtDb21wbGV0ZSB0aGUgSmFrYXJ0YSBFRSBEZXZlbG9wZXIgU3VydmV5XV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LnN1cnZleW1vbmtleS5jb20vci9qYWthcnRhZWNdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbU2hhcmUgeW91ciBpbnNpZ2h0cyBvbiBKYXZhIEVFIGFuZCBoZWxwIHNoYXBlIHRoZSBmdXR1cmUgb2YgSmFrYXJ0YSBFRS5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VGh1LCAxNiBNYXIgMjAxOCAwNjo0NTowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgSW9UIERheSBTYW50YSBDbGFyYSB8IFNwZWFrZXJzIEFubm91bmNlZF1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2lvdC5lY2xpcHNlLm9yZy9lY2xpcHNlLWlvdC1kYXktc2FudGEtY2xhcmEtMjAxOC9dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbV2UncmUgcGxlYXNlZCB0byBhbm5vdW5jZSB0aGUgc3BlYWtlcnMgZm9yIHRoZSBFY2xpcHNlIElvVCBEYXkgU2FudGEgQ2xhcmEsIGNvLWxvY2F0ZWQgd2l0aCBJb1QgV29ybGQgMjAxOCBvbiBNYXkgMTQuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlRodSwgMTUgTWFyIDIwMTggMDc6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtMYXN0IGNhbGwgZm9yIEVjbGlwc2VDb24gRnJhbmNlIHN1Ym1pc3Npb25zXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Vjb24ub3JnL2ZyYW5jZTIwMTgvY2ZwXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW0RlYWRsaW5lIHRvIHByb3Bvc2UgYSB0YWxrIGlzIE1vbmRheSwgTWFyY2ggMTkuIEdldCB5b3VyIHRhbGsgaW4gbm93IGZvciB5b3VyIGNoYW5jZSB0byBiZSBwYXJ0IG9mIGEgZ3JlYXQgcHJvZ3JhbSFdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+TW9uLCAxMiBNYXIgMjAxOCAxNjowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgRm91bmRhdGlvbiBzdXBwb3J0cyBFVSBmdW5kZWQgQnJhaW4tSW9UIFByb2plY3RdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL3ByZXNzLXJlbGVhc2UvMjAxODAzMTItYnJhaW5pb3QucGhwXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW0VjbGlwc2UgRm91bmRhdGlvbiBFdXJvcGUgU2VsZWN0ZWQgdG8gUHJvdmlkZSBPcGVuIFNvdXJjZSBDb21tdW5pdHkgQnVpbGRpbmcgRXhwZXJ0aXNlIGZvciBFVSBmdW5kZWQgSW9UIFJlc2VhcmNoIFByb2plY3RdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+TW9uLCAxMiBNYXIgMjAxOCAwOTowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjE8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgRm91bmRhdGlvbiBBbm5vdW5jZXMgMjAxOCBCb2FyZCBNZW1iZXIgRWxlY3Rpb24gUmVzdWx0c11dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvcHJlc3MtcmVsZWFzZS8yMDE4MDMwNy1ib2FyZGVsZWN0aW9ucmVzdWx0czIwMTgucGhwXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RvZGF5IHdlIGFyZSBwbGVhc2UgdG8gYW5ub3VuY2UgdGhlIHJlc3VsdHMgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBTdXN0YWluaW5nIE1lbWJlciBhbmQgQ29tbWl0dGVyIE1lbWJlciBlbGVjdGlvbnMuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPldlZCwgMDcgTWFyIDIwMTggMTg6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4xPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtGcm9tIEphdmEgRUUgdG8gSmFrYXJ0YSBFRV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL21taWxpbmtvdi53b3JkcHJlc3MuY29tLzIwMTgvMDIvMjYvYW5kLXRoZS1uYW1lLWlzL11dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtXZSBhcmUgaGFwcHkgdG8gYW5ub3VuY2UgdGhhdCB0aGUgbmV3IG5hbWUgZm9yIHRoZSB0ZWNobm9sb2d5IGZvcm1lcmx5IGtub3duIGFzIEphdmEgRUUgaXMuLi4gSmFrYXJ0YSBFRSFdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+TW9uLCAyNiBGZWIgMjAxOCAxNDo1MDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBOZXdzbGV0dGVyIHwgQm9vdCAmIEJ1aWxkIEVjbGlwc2UgUHJvamVjdHNdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvY29tbXVuaXR5L2VjbGlwc2VfbmV3c2xldHRlci8yMDE4L2ZlYnJ1YXJ5L11dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtGZWF0dXJpbmcgYXJ0aWNsZXMgYWJvdXQgU3ByaW5nIFRvb2xzLCBHcmFkbGUgcGx1Z2luIChCdWlsZHNoaXApLCBEaXJpZ2libGUgY2xvdWQgcGxhdGZvcm0sIGFuZCBFTUYgUGFyc2xleS5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VGh1LCAyMiBGZWIgMjAxOCAzOjUxOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtDb3VudGRvd246IDIgd2Vla3MgfCBDb21wbGV0ZSBJb1QgRGV2ZWxvcGVyIFN1cnZleV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5zdXJ2ZXltb25rZXkuZGUvci9lY2xpcHNlb3JnXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1Rha2UgMTAgbWludXRlcyB0byBjb21wbGV0ZSB0aGUgZm91cnRoIGFubnVhbCBJb1QgRGV2ZWxvcGVyIHN1cnZleSFdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAyMCBGZWIgMjAxOCA0OjI3OjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZUNvbiBGcmFuY2UgMjAxOCB8IENhbGwgZm9yIFBhcGVyc11dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlY29uLm9yZy9mcmFuY2UyMDE4XV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW0NhbGwgZm9yIHBhcGVyIHN1Ym1pc3Npb25zIGFyZSBub3cgb3BlbiB1bnRpbCBNYXJjaCAxOS4gV2UnbGwgc2VlIHlvdSBKdW5lIDEzIC0gMTQgaW4gVG91bG91c2UhXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPk1vbiwgMTIgRmViIDIwMTggMDk6MTU6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFRS5uZXh0IHdvcmtpbmcgZ3JvdXAgfCBDb21tdW5pdHkgcmV2aWV3IHByb2Nlc3NdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL3dvcmtpbmdncm91cHMvXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW0Fubm91bmNpbmcgdGhlIEVFLm5leHQgd29ya2luZyBncm91cCB0byBzdXBwb3J0IHRoZSBFRTRKIHByb2plY3RzLiBKb2luIHRoZSByZXZpZXcgcHJvY2VzcyBvZiB0aGUgY2hhcnRlci5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+V2VkLCAwNiBGZWIgMjAxOCAwODowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbTGFzdCBXZWVrIHRvIFN1Ym1pdCBmb3IgRk9TUzRHIE5BIDIwMTghXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vMjAxOC5mb3NzNGctbmEub3JnL2NmcF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtTdWJtaXNzaW9ucyBjbG9zZSBGZWIgOCwgc28gcHJvcG9zZSB5b3VyIHRhbGsgbm93IGZvciBGT1NTNEcgTkEgMjAxOCwgTWF5IDE0LTE2IGluIFN0LiBMb3Vpc11dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5GcmksIDAyIEZlYiAyMDE4IDA4OjMwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBOZXdzbGV0dGVyIHwgQ29taW5nIGluIDIwMThdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvY29tbXVuaXR5L2VjbGlwc2VfbmV3c2xldHRlci8yMDE4L2phbnVhcnkvXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1doYXQncyBjb21pbmcgdG8gdGhlIEVjbGlwc2UgQ29tbXVuaXR5IGluIDIwMTg/IFJlYWQgdGhlIG5ld3NsZXR0ZXIgdG8gZmluZCBvdXQhXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPldlZCwgMjUgSmFuIDIwMTggMTA6MzA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0xhdW5jaGluZyBJb1QgRGV2ZWxvcGVyIFN1cnZleSAyMDE4XV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9wcmVzcy1yZWxlYXNlL2lvdGRldnN1cnZleTIwMTgucGhwXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1dlIGFyZSBwbGVhc2VkIHRvIGxhdW5jaCB0aGUgZm91cnRoIGFubnVhbCBJb1QgRGV2ZWxvcGVyIFN1cnZleSEgQ29tcGxldGUgdGhlIHN1cnZleSB0b2RheS5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+V2VkLCAyNCBKYW4gMjAxOCA0OjI3OjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MTwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIElvVCBEYXkgU2FudGEgQ2xhcmEgMjAxOCB8IENhbGwgZm9yIFBhcGVyc11dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2lvdC5lY2xpcHNlLm9yZy9lY2xpcHNlLWlvdC1kYXktc2FudGEtY2xhcmEtMjAxOC9dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbV2UncmUgaGFwcHkgdG8gYW5ub3VuY2UgdGhlIEVjbGlwc2UgSW9UIERheSBTYW50YSBDbGFyYSwgdGFraW5nIHBsYWNlIE1heSAxNCwgaW4gY28tbG9jYXRpb24gd2l0aCBJb1QgV29ybGQgMjAxOC5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+TW9uLCAxNSBKYW4gMjAxOCA5OjE1OjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIE5ld3NsZXR0ZXIgfCBDYXBlbGxhOiBvcGVuIHNvdXJjZSBNQlNFIHNvbHV0aW9uXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2NvbW11bml0eS9lY2xpcHNlX25ld3NsZXR0ZXIvMjAxNy9kZWNlbWJlci9dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbTGVhcm4gZXZlcnl0aGluZyBhYm91dCBDYXBlbGxhLCBhbiBvcGVuIHNvdXJjZSB3b3JrYmVuY2ggdGhhdCBhbGxvd3MgZW5naW5lZXJzIHRvIGRlc2lnbiBjb21wbGV4IHN5c3RlbXMuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlRodSwgMTQgRGVjIDIwMTcgMTA6MTA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtPcGVuIFNvdXJjZSBDb21tdW5pdHkgQWNjZWxlcmF0ZXMgQmlnIERhdGEgQW5hbHl0aWNzIGZvciBHZW9zcGF0aWFsIFNvbHV0aW9uc11dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2VjbGlwc2Uub3JnL29yZy9wcmVzcy1yZWxlYXNlLzIwMTcxMjE0X2xvY2F0aW9udGVjaG9wZW5zb3VyY2UucGhwXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW0xvY2F0aW9uVGVjaCBhbm5vdW5jZXMgbmV3IHByb2plY3QgcmVsZWFzZXMgdGhhdCBwcm92aWRlIGNvcmUgdGVjaG5vbG9neSBmb3IgZ2Vvc3BhdGlhbCBiaWcgZGF0YSBhbmFseXRpYyBzb2x1dGlvbnMuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlRodSwgMTQgRGVjIDIwMTcgMDg6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4xPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0Fubm91bmNpbmcgT3BlbiBJb1QgQ2hhbGxlbmdlIDQuMCBTY2hvbGFyc11dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL21lZGl1bS5jb20vQHJveGFubmUuaW90L29wZW4taW90LWNoYWxsZW5nZS00LTAtc2Nob2xhcnMtY2Y3NTBlYzNiMTRiXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW0NvbmdyYXR1bGF0aW9ucyB0byB0aGUgVG9wIDEyIHRlYW1zIHdobyBzdWJtaXR0ZWQgdGhlIGJlc3QgcHJvcG9zYWxzIGZvciB0aGUgZm91cnRoIE9wZW4gSW9UIENoYWxsZW5nZSFdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+V2VkLCAxMyBEZWMgMjAxNyAwOTo0NTowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBOZXdzbGV0dGVyIHwgTG9jYXRpb24gTWF0dGVyc11dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlLm9yZy9jb21tdW5pdHkvZWNsaXBzZV9uZXdzbGV0dGVyLzIwMTcvbm92ZW1iZXIvXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoaXMgbmV3c2xldHRlciBpcyBldmVyeXRoaW5nIGdlb3NwYWNpYWwgKExvY2F0aW9uVGVjaCkgKyBhIGZlYXR1cmVkIGFydGljbGUgYWJvdXQgY3JlYXRpbmcgdmlkZW8gZ2FtZXMuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPldlZCwgMjIgTm92IDIwMTcgMDY6MjM6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW09wZW4gSW9UIENoYWxsZW5nZSA0LjAgfCBFeHRlbmRlZCBEZWFkbGluZSBOb3YgMjBdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cDovL2lvdC5lY2xpcHNlLm9yZy9vcGVuLWlvdC1jaGFsbGVuZ2UvXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW09uZSBsYXN0IHdlZWsgdG8gc3VibWl0IHlvdXIgb3BlbiBJb1Qgc29sdXRpb24gaWRlYS4gWW91IGNhbiB0aGVuIHdvcmsgb24gaXQgdW50aWwgTWFyY2ggMTUuIFN1Ym1pdCBub3chXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPldlZCwgMTUgTm92IDIwMTcgMDU6MzA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2VDb24gKyBMdWR3aWdzYnVyZyA9IEdyZWF0IFBhcnRuZXJzXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Vjb24ub3JnL2V1cm9wZTIwMTcvbmV3cy9lY2xpcHNlY29uLWx1ZHdpZ3NidXJnLWdyZWF0LXBhcnRuZXJzXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1dlIGFyZSBwbGVhc2VkIHRvIGFubm91bmNlIGEgc3RyYXRlZ2ljIHBhcnRuZXJzaGlwIGJldHdlZW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBFdXJvcGUgYW5kIHRoZSBDaXR5IG9mIEx1ZHdpZ3NidXJnIHRoYXQga2VlcHMgRWNsaXBzZUNvbiBFdXJvcGUgYXQgdGhlIEZvcnVtIGFtIFNjaGxvc3NwYXJrIHRocm91Z2ggMjAxOS5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+U3VuLCAyMiBPY3QgMjAxNyAwODowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbTmV3IEluZHVzdHJ5IDQuMCBPcGVuIFRlc3RiZWQgQWRkcmVzc2VzIFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgYW5kIE1hbmFnZW1lbnQgaW4gTWFudWZhY3R1cmluZ11dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2VjbGlwc2Uub3JnL29yZy9wcmVzcy1yZWxlYXNlLzIwMTcxMDE5X2luZHVzdHJ5NDBfdGVzdGJlZC5waHBdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbQm9zY2ggU29mdHdhcmUgSW5ub3ZhdGlvbnMsIENPTlRBQ1QgU29mdHdhcmUsIEV1cm90ZWNoLCBmb3J0aXNzIEdtYkgsIGFuZCBJbmZsdXhEYXRhIGNvbGxhYm9yYXRlIHRvIGRlbW9uc3RyYXRlIFByb2R1Y3QgUGVyZm9ybWFuY2UgTWFuYWdlbWVudC5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VGh1LCAxOSBPY3QgMjAxNyAxMTowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjE8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBTY2llbmNlIEFkdmFuY2VzIE9wZW4gU291cmNlIFRlY2hub2xvZ3kgZm9yIFNjaWVudGlmaWMgUmVzZWFyY2hdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL3ByZXNzLXJlbGVhc2UvMjAxNzEwMThfc2NpZW5jZW9wZW5zb3VyY2UucGhwXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoZSBFY2xpcHNlIFNjaWVuY2UgV29ya2luZyBHcm91cCwgYSB3b3JraW5nIGdyb3VwIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRvZGF5IGFubm91bmNlZCB0aGUgbmV3IHJlbGVhc2VzIG9mIGZpdmUgb3BlbiBzb3VyY2UgcHJvamVjdHMgdXNlZCBieSB0aGUgc2NpZW50aWZpYyByZXNlYXJjaCBjb21tdW5pdHkuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPldlZCwgMTggT2N0IDIwMTcgMDk6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4xPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIE5ld3NsZXR0ZXIgfCBVdGlsaXR5IEJlbHQ6IFByb2plY3RzIGFuZCBUb29sc11dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlLm9yZy9jb21tdW5pdHkvZWNsaXBzZV9uZXdzbGV0dGVyLzIwMTcvb2N0b2Jlci9dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbTGVhcm4gYWJvdXQgSlVuaXQgNSwgZTQgb24gSmF2YUZYLCBzY3JpcHRpbmcgd2l0aCBFQVNFLCBlbWJlZGRlZCB0b29scyBhbmQgRWNsaXBzZSBDRFQsIEZlcnJldCBzZWFyY2ggdG9vbCwgYW5kIHNvZnR3YXJlIGV0aGljcy5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+V2VkLCAxOCBPY3QgMjAxNyAwNTowMjowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW09uIE5hbWluZyBFY2xpcHNlIEVudGVycHJpc2UgZm9yIEphdmEgKEVFNEopXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vbW1pbGlua292LndvcmRwcmVzcy5jb20vMjAxNy8wOS8zMC9vbi1uYW1pbmcvXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1doYXQgaXMgRUU0Sj8gV2lsbCBpdCBiZWNvbWUgdGhlIGJyYW5kIHRoYXQgcmVwbGFjZXMgSmF2YSBFRT8gUmVhZCB0aGUgYmxvZyBwb3N0IHRvIGZpbmQgb3V0Ll1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5XZWQsIDA0IE9jdCAyMDE3IDA4OjQ4OjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlQ29uIEV1cm9wZTogTGFzdCBDaGFuY2UgZm9yIHRoZSBFYXJseSBQcmljZV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlY29uLm9yZy9ldXJvcGUyMDE3L3JlZ2lzdHJhdGlvbl1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtPY3RvYmVyIDUgaXMgdGhlIGxhc3QgZGF5IHRvIHNhdmUgJmV1cm87MTAwIG9uIEVDRSByZWdpc3RyYXRpb24uXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMDMgT2N0IDIwMTcgMTE6MzA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0FubnVhbCBEb25hdGlvbiBDYW1wYWlnbjogRW5kIFVzZXIgU3VwcG9ydCBmb3IgdGhlIEVjbGlwc2UgRm91bmRhdGlvbl1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2lhbnNrZXJyZXR0LndvcmRwcmVzcy5jb20vMjAxNy8wOS8yOS9hbm51YWwtZG9uYXRpb24tY2FtcGFpZ24tZW5kLXVzZXItc3VwcG9ydC1mb3ItdGhlLWVjbGlwc2UtZm91bmRhdGlvbi9dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVG8gZW5jb3VyYWdlIGVuZC11c2VyIHN1cHBvcnQsICB3ZSBhcmUgbGF1bmNoaW5nIHRoZSBPY3RvYmVyIERvbmF0aW9uIENhbXBhaWduLiBUaGUgZ29hbCBpcyB0byBoYXZlIG92ZXIgMTAwMCBpbmRpdmlkdWFscyBkb25hdGUgdG8gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBhbmQgaGVscCBzdXBwb3J0IHRoZSBvdmVyYWxsIGNvbW11bml0eS5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+RnJpLCAyOSBTZXAgMjAxNyAxMTowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBJb1QgQW5ub3VuY2VzIEZvdXJ0aCBFZGl0aW9uIG9mIHRoZSBPcGVuIElvVCBDaGFsbGVuZ2VdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9lY2xpcHNlLm9yZy9vcmcvcHJlc3MtcmVsZWFzZS8yMDE3MDkyOF9vcGVuX2lvdF9jaGFsbGVuZ2VfNC5waHBdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbSW9UIGVudGh1c2lhc3Q/IFRoaXMgQ2hhbGxlbmdlIGlzIGZvciB5b3UhIFN1Ym1pdCB5b3VyIElvVCBzb2x1dGlvbiBwcm9wb3NhbCBieSBOb3ZlbWJlciAxMy5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VGh1LCAyOCBTZXAgMjAxNyAwOToxMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjE8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgSURFIE5vdyBTdXBwb3J0cyBKYXZhIDldXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93YXluZWJlYXRvbi53b3JkcHJlc3MuY29tLzIwMTcvMDkvMjIvamF2YS05LXN1cHBvcnQtZm9yLWVjbGlwc2UtaWRlLW94eWdlbi1lZGl0aW9uL11dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtKYXZhIDkgaGFzIGJlZW4gcmVsZWFzZWQgaW50byB0aGUgd29ybGQgYW5kIHN1cHBvcnQgdG8gbWFrZSB5b3VyIEVjbGlwc2UgSURFIHJlYWR5IHRvIGJ1aWxkLCBydW4sIGFuZCBkZWJ1ZyBKYXZhIDkgYXBwbGljYXRpb25zIGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBFY2xpcHNlIE1hcmtldHBsYWNlLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UdWUsIDI2IFNlcCAyMDE3IDE0OjMwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtTcGVjaWFsIE5vdGljZSBmb3IgRWNsaXBzZSBJREUgVXNlcnMgb24gbWFjT1MgMTAuMTMgaW4gbm9uLUVuZ2xpc2ggbW9kZV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvcHJlc3MtcmVsZWFzZS8yMDE3MDkyNWNyaXRpY2FsYnVnLnBocF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtXaGVuIEVjbGlwc2UgaXMgbGF1bmNoZWQgb24gbWFjT1MgMTAuMTMgYW5kIHVzZXIncyBwcmltYXJ5IGxhbmd1YWdlIGlzIG5vdCBzZXQgdG8gRW5nbGlzaCwgYWxsIHRoZSBtZW51IGl0ZW1zIGluIHRoZSBtYWluIG1lbnViYXIgYXJlIGRpc2FibGVkLiBIb3dldmVyLCBDb250ZXh0IG1lbnVzIGFyZSBub3QgZGlzYWJsZWRdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+TW9uLCAyNSBTZXAgMjAxNyAwODozMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0dldCB0aGUgRWFybHkgUHJpY2UgZm9yIEVjbGlwc2VDb24gRXVyb3BlXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Vjb24ub3JnL2V1cm9wZTIwMTcvcmVnaXN0cmF0aW9uXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1JlZ2lzdGVyIG5vdyBhbmQgc2F2ZSDigqwxMDAhIFByaWNlcyBnbyB1cCBhZnRlciBPY3RvYmVyIDUuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlRodSwgMjEgU2VwIDIwMTcgMDg6MzA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgTmV3c2xldHRlciB8IEVjbGlwc2UgTWljcm9Qcm9maWxlXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2NvbW11bml0eS9lY2xpcHNlX25ld3NsZXR0ZXIvMjAxNy9zZXB0ZW1iZXIvXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW0luIHRoZSBTZXB0ZW1iZXIgaXNzdWUgb2YgdGhlIEVjbGlwc2UgTmV3c2xldHRlciwgZGlzY292ZXIgZXZlcnl0aGluZyB5b3UgbmVlZCB0byBrbm93IGFib3V0IEVjbGlwc2UgTWljcm9Qcm9maWxlLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5XZWQsIDIwIFNlcCAyMDE3IDEwOjMwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtKYXZhIEVFIE1vdmVzIHRvIHRoZSBFY2xpcHNlIEZvdW5kYXRpb25dXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9tbWlsaW5rb3Yud29yZHByZXNzLmNvbS8yMDE3LzA5LzEyL2phdmEtZWUtbW92ZXMtdG8tdGhlLWVjbGlwc2UtZm91bmRhdGlvbi9dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbT3JhY2xlIGFubm91bmNlZCB0b2RheSB0aGF0IHRoZXksIGFsb25nIHdpdGggSUJNIGFuZCBSZWQgSGF0LCB3aWxsIGJlIG1vdmluZyBKYXZhIEVFIHRvIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24uXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMTIgU2VwIDIwMTcgMTc6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtGaXJzdCBSZWxlYXNlIG9mIEVjbGlwc2UgUGFweXJ1cyBmb3IgUmVhbCBUaW1lOiBNb2RlbGluZyBUb29sIGZvciBVTUwtUlRdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL3ByZXNzLXJlbGVhc2UvMjAxNzA5MDdwYXB5cnVzLnBocF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUaGUgUGFweXJ1cyBJbmR1c3RyeSBDb25zb3J0aXVtLCBhbiBFY2xpcHNlIEZvdW5kYXRpb24gV29ya2luZyBHcm91cCwgaXMgcGxlYXNlZCB0byBhbm5vdW5jZSB0aGUgcmVsZWFzZSBvZiBFY2xpcHNlIFBhcHlydXMgZm9yIFJlYWwgVGltZSB2MS4wIChQYXB5cnVzLVJUKSBhIGZ1bGx5IG9wZW4gc291cmNlIG1vZGVsaW5nIHRvb2wgaW50ZW5kZWQgZm9yIHRlYW1zIHdvcmtpbmcgb24gdGhlIGRlc2lnbiBhbmQgaW1wbGVtZW50YXRpb24gb2YgZW1iZWRkZWQgcmVhY3RpdmUgc3lzdGVtcy5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VGh1LCAwNyBTZXAgMjAxNyAwOTowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjE8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjAgQXBwcm92ZWQgQnkgT1NJIGFuZCBFY2xpcHNlIEZvdW5kYXRpb24gQm9hcmQgb2YgRGlyZWN0b3JzXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9wcmVzcy1yZWxlYXNlLzIwMTcwODI5ZXBsdjIucGhwXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgcGxlYXNlZCB0byBhbm5vdW5jZSBhIG5ldyB2ZXJzaW9uIDIgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgKEVQTCB2MikgaGFzIGJlZW4gYXBwcm92ZWQgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBCb2FyZCBvZiBEaXJlY3RvcnMgYW5kIHRoZSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlIChPU0kpLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UdWUsIDI5IEF1ZyAyMDE3IDE0OjIwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIE5ld3NsZXR0ZXIgfCBFeGNpdGluZyBOZXcgRWNsaXBzZSBQcm9qZWN0c11dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlLm9yZy9jb21tdW5pdHkvZWNsaXBzZV9uZXdzbGV0dGVyLzIwMTcvYXVndXN0L11dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUaGUgbGF0ZXN0IG5ld3NsZXR0ZXIgaXMgYWxsIGFib3V0IG5ldyBhbmQgZXhjaXRpbmcgcHJvamVjdHMhXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMjIgQXVnIDIwMTcgMDk6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2VDb24gRXVyb3BlOiBTY2hlZHVsZSBhbmQgS2V5bm90ZXNdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZWNvbi5vcmcvZXVyb3BlMjAxN11dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUaGUga2V5bm90ZXMgYXJlIGFubm91bmNlZCwgYW5kIHRoZSBzY2hlZHVsZSBpcyBvbiBsaW5lIGZvciBFQ0UgMjAxNy4gUmVnaXN0ZXIgbm93IV1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5Nb24sIDIxIEF1ZyAyMDE3IDEwOjEwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4gICAgIAorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0xhdW5jaGluZyBFY2xpcHNlIElvVCBOZXdzbGV0dGVyXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHA6Ly9lZXB1cmwuY29tL2NZbjQtbl1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtXZSdyZSBsYXVjaGluZyBhIHF1YXJ0ZXJseSBFY2xpcHNlIElvVCBOZXdzbGV0dGVyLiBTdWJzY3JpYmUgdG8gcmVjZWl2ZSB0aGUgZmlyc3QgaXNzdWUgdGhpcyBTZXB0ZW1iZXIuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPkZyaSwgMTggQXVnIDIwMTcgMDU6NDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPiAKKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIElvVCBEYXkgQCBUaGluZ01vbmtdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cDovL3RoaW5nbW9uay5jb20vZWNsaXBzZS1kYXktdGFsa3MuaHRtbF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtSZWdpc3RlciBmb3IgdGhlIEVjbGlwc2UgSW9UIERheSBjby1sb2NhdGVkIHdpdGggVGhpbmdNb25rIG9uIFNlcHRlbWJlciAxMSBpbiBMb25kb24sIFVLLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UaHUsIDE3IEF1ZyAyMDE3IDA4OjU1OjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4gCisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbUG90ZW50aWFsIGFkd2FyZSBwbHVnaW4gb24gRWNsaXBzZSBNYXJrZXRwbGFjZSAtIEVjbGlwc2UgQ2xhc3MgRGVjb21waWxlcl1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2VjbGlwc2Uub3JnL29yZy9wcmVzcy1yZWxlYXNlLzIwMTcwODE0X3NlY3VyaXR5X2J1bGxldGluLnBocF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtBIGxpc3Rpbmcgb24gRWNsaXBzZSBNYXJrZXRwbGFjZSwgY2FsbGVkIEVjbGlwc2UgQ2xhc3MgRGVjb21waWxlciwgY29udGFpbnMgYmluYXJ5IGNvZGUgdGhhdCBjb3VsZCBiZSB1c2VkIGZvciBhZHdhcmUgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGRvd25sb2FkIGZpbGVzIHRvIEVjbGlwc2Ugd29ya3NwYWNlcy5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+TW9uLCAxNCBBdWcgMjAxNyAxMDo0MDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+IAorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgTmV3c2xldHRlciB8IFN1bW1lciBJc3N1ZV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlLm9yZy9jb21tdW5pdHkvZWNsaXBzZV9uZXdzbGV0dGVyLzIwMTcvanVseS9dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhlIGxhdGVzdCBFY2xpcHNlIE5ld3NsZXR0ZXIgaXMgbm93IGF2YWlsYWJsZS4gUmVhZCBpdCBhbmQgbGVhcm4gaG93IHRvIHRyeSBvdXQgSmF2YSA5IFN1cHBvcnQgZm9yIEVjbGlwc2UgT3h5Z2VuIV1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UdWUsIDI1IEp1bCAyMDE3IDEwOjA1OjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4gCisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZUNvbiBFdXJvcGUgMjAxNyB8IFN1Ym1pc3Npb25zIENsb3NlIGluIE9uZSBXZWVrXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Vjb24ub3JnL2V1cm9wZTIwMTcvXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoZXJl4oCZcyBzdGlsbCB0aW1lIHVudGlsIEp1bHkgMTd0aCwgdG8gZ2V0IHlvdXIgc3VibWlzc2lvbiBpbiBmb3IgdGhpcyB5ZWFy4oCZcyBFY2xpcHNlQ29uIEV1cm9wZSBpbiBMdWR3aWdzYnVyZyBHZXJtYW55Ll1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5Nb24sIDEwIEp1bCAyMDE3IDA5OjA1OjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4gCisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBPeHlnZW4gTm93IEF2YWlsYWJsZV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlLm9yZy9veHlnZW5dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbV2UncmUgcHJvdWQgdG8gYW5ub3VuY2UgdGhlIGFycml2YWwgb2YgRWNsaXBzZSBPeHlnZW4sIHRoZSAxMnRoIGFubnVhbCBzaW11bHRhbmVvdXMgcmVsZWFzZSBmcm9tIHRoZSBFY2xpcHNlIENvbW11bml0eS4gRE9XTkxPQUQgTk9XIV1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5XZWQsIDI4IEp1biAyMDE3IDEwOjA1OjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4gCisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBOZXdzbGV0dGVyIHwgRWNsaXBzZSBPeHlnZW5dXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvY29tbXVuaXR5L2VjbGlwc2VfbmV3c2xldHRlci8yMDE3L2p1bmUvXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW0ZpbmQgb3V0IG1vcmUgYWJvdXQgdGhlIGxhdGVzdCBFY2xpcHNlIFNpbXVsdGFuZW91cyBSZWxlYXNlIGluIHRoZSBKdW5lIGlzc3VlIG9mIHRoZSBFY2xpcHNlIE5ld3NsZXR0ZXIhXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPldlZCwgMjggSnVuIDIwMTcgMTA6MjY6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPiAKKyAgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0Vhcmx5IFN1Ym1pc3Npb24gRGVhZGxpbmUgZm9yIEVjbGlwc2VDb24gRXVyb3BlIDIwMTddXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZWNvbi5vcmcvZXVyb3BlMjAxNy9jZnBdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbU3VibWl0IHlvdXIgdGFsa3MgYnkgSnVuZSAzMCB0byBiZSBzZWxlY3RlZCBmb3IgZmVhdHVyaW5nIGluIHRoZSBlYXJseSBwcm9tb3Rpb24uIE9jdG9iZXIgMjQtMjYgaW4gTHVkd2lnc2J1cmcgR2VybWFueS5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+TW9uLCAyNiBKdW4gMjAxNyAyMjowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+IAorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0NhcGVsbGEgSW5kdXN0cnkgQ29uc29ydGl1bSAoSUMpIEFubm91bmNlZCBhdCBQb2xhclN5c11dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5wb2xhcnN5cy5vcmcvY2FwZWxsYS1pYy1hbm5vdW5jZWRdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbQ2FwZWxsYSBJQyB0byBob3N0IHRoZSBDYXBlbGxhIEVjb3N5c3RlbSBzdGFrZWhvbGRlcnMgaW4gYSB2ZW5kb3IgbmV1dHJhbCB3YXksIG9yZ2FuaXplZCBieSBhbiBvcGVuIGdvdmVybmFuY2UgbW9kZWwuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMjAgSnVuIDIwMTcgMDQ6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPiAKKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtSQzMgQXZhaWxhYmxlIGZvciBFY2xpcHNlIE94eWdlbiB8IERvd25sb2FkIE5vd11dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlLm9yZy9kb3dubG9hZHMvaW5kZXgtZGV2ZWxvcGVyLnBocF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtEb3dubG9hZCBhbmQgdGVzdCByZWxlYXNlIGNhbmRpZGF0ZSAzIGZvciBFY2xpcHNlIE94eWdlbiFdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+TW9uLCAxMiBKdW4gMjAxNyAxNTo0NTowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+IAorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0xhc3QgQ2hhbmNlIHRvIFJlZ2lzdGVyIGZvciBFY2xpcHNlQ29uIEZyYW5jZSAyMDE3XV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Vjb24ub3JnL2ZyYW5jZTIwMTcvcmVnaXN0cmF0aW9uXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1NpZ24gdXAgZm9yIGxlYXJuaW5nIGF0IEVjbGlwc2VDb24gRnJhbmNlLCBKdW5lIDIxLTIyLiBYVGV4dCwgQ2FwZWxsYSwgU2NpZW5jZSwgRG9ja2VyLCBMU1AgYW5kIG11Y2ggbW9yZSFdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VGh1LCAwOCBKdW4gMjAxNyAxMDo0NTowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+IAorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgTmV3c2xldHRlciAtIExhbmd1YWdlIFNlcnZlciBQcm90b2NvbCAxMDFdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvY29tbXVuaXR5L2VjbGlwc2VfbmV3c2xldHRlci8yMDE3L21heS9dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbRXZlcnl0aGluZyB5b3UgbmVlZCB0byBrbm93IGFib3V0IHRoZSBMYW5ndWFnZSBTZXJ2ZXIgUHJvY290b2wgKGFrYSBMU1ApIGlzIGluIHRoaXMgbW9udGgncyBuZXdzbGV0dGVyIV1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5XZWQsIDI0IE1heSAyMDE3IDA1OjM1OjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4gCisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbSXTigJlzIHRpbWUgdG8gb3JnYW5pc2UgRWNsaXBzZSBPeHlnZW4gRGVtb0NhbXBzXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHA6Ly9ibG9nLnR0b2luZS5uZXQvZW4vMjAxNy8wNS8yMy9pdHMtdGltZS10by1vcmdhbmlzZS1lY2xpcHNlLW94eWdlbi1kZW1vY2FtcHMvXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1doYXQgaXMgYW4gRWNsaXBzZSBEZW1vQ2FtcCBhbmQgd2h5IHNob3VsZCBJIG9yZ2FuaXNlIG9uZT9dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAyMyBNYXkgMjAxNyAwNDozNTowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+IAorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0Nhc2UgU3R1ZHk6IERlcGxveWluZyBFY2xpcHNlIElvVCBvbiBHZXJtYW55J3MgREIgUmFpbHdheSBTeXN0ZW1dXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9pb3QuZWNsaXBzZS5vcmcvcmVzb3VyY2VzL2Nhc2Utc3R1ZGllcy9FY2xpcHNlJTIwSW9UJTIwU3VjY2VzcyUyMFN0b3J5JTIwLSUyMERCLnBkZl1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtXZSB3b3JrZWQgd2l0aCBEZXV0c2NoZSBCYWhuIChEQikgdG8gZmluZCBvdXQgaG93IHRoZXkgdXNlIEVjbGlwc2UgSW9UIHRlY2hub2xvZ3kgb24gdGhlaXIgcmFpbHdheSBzeXN0ZW0hXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlRodSwgMTggTWF5IDIwMTcgMDQ6NTU6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPiAKKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlQ29uIEV1cm9wZSAyMDE3IHwgQ2FsbCBmb3IgUGFwZXJzIE9wZW5dXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZWNvbi5vcmcvZXVyb3BlMjAxNy9uZXdzL2l0cy10aW1lLXN1Ym1pdF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtTdWJtaXNzaW9ucyBhcmUgbm93IG9wZW4gZm9yIEVjbGlwc2VDb24gRXVyb3BlIDIwMTcsIE9jdG9iZXIgMjQgLSAyNiwgaW4gTHVkd2lnc2J1cmcsIEdlcm1hbnkuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPldlZCwgMTcgTWF5IDIwMTcgMDk6Mjk6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPiAKKyAgICAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtQcm9ncmFtIFJlYWR5IGZvciBFY2xpcHNlQ29uIEZyYW5jZSAyMDE3XV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Vjb24ub3JnL2ZyYW5jZTIwMTcvY29uZmVyZW5jZS9zY2hlZHVsZS9zZXNzaW9uLzIwMTctMDYtMjFdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbU2VlIHRoZSBwcm9ncmFtLCBhbmQgcmVnaXN0ZXIgYnkgTWF5IDEyIGZvciB0aGUgYmVzdCBwcmljZS5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VGh1LCAyNyBBcHIgMjAxNyAxNzoxMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+IAorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW05ldyBFY2xpcHNlIElvVCBPcGVuIFRlc3RiZWRzXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9wcmVzcy1yZWxlYXNlLzIwMTcwNDI2X2lvdHRlc3RiZWRzLnBocF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtBbm5vdW5jaW5nIHRoZSBjcmVhdGlvbiBvZiB0aGUgRWNsaXBzZSBJb1QgT3BlbiBUZXN0YmVkcywgYW4gaW5pdGlhdGl2ZSB0byBkcml2ZSBhZG9wdGlvbiBvZiBJb1Qgb3BlbiBzb3VyY2UgYW5kIG9wZW4gc3RhbmRhcmRzLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UaHUsIDI3IEFwciAyMDE3IDA5OjA1OjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MTwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4gCisgIDwvY2hhbm5lbD4KKzwvcnNzPgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubmV3cy5pbXBsL2Rvd25sb2Fkcy9odHRwJTNBJTJGJTJGd3d3LmVjbGlwc2Uub3JnJTJGcmVjb21tZW5kZXJzJTJGZmVlZHMlMkZpZGUucnNzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubmV3cy5pbXBsL2Rvd25sb2Fkcy9odHRwJTNBJTJGJTJGd3d3LmVjbGlwc2Uub3JnJTJGcmVjb21tZW5kZXJzJTJGZmVlZHMlMkZpZGUucnNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZjI5OWIKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5uZXdzLmltcGwvZG93bmxvYWRzL2h0dHAlM0ElMkYlMkZ3d3cuZWNsaXBzZS5vcmclMkZyZWNvbW1lbmRlcnMlMkZmZWVkcyUyRmlkZS5yc3MKQEAgLTAsMCArMSwzMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWwgbGFuZz0iZW4iPgorICA8aGVhZD4KKyAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlIj4KKyAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgorICAgIDwhLS0gR29vZ2xlIFRhZyBNYW5hZ2VyIC0tPgorPHNjcmlwdD4oZnVuY3Rpb24odyxkLHMsbCxpKXt3W2xdPXdbbF18fFtdO3dbbF0ucHVzaCh7J2d0bS5zdGFydCc6CituZXcgRGF0ZSgpLmdldFRpbWUoKSxldmVudDonZ3RtLmpzJ30pO3ZhciBmPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUocylbMF0sCitqPWQuY3JlYXRlRWxlbWVudChzKSxkbD1sIT0nZGF0YUxheWVyJz8nJmw9JytsOicnO2ouYXN5bmM9dHJ1ZTtqLnNyYz0KKydodHRwczovL3d3dy5nb29nbGV0YWdtYW5hZ2VyLmNvbS9ndG0uanM/aWQ9JytpK2RsO2YucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaixmKTsKK30pKHdpbmRvdyxkb2N1bWVudCwnc2NyaXB0JywnZGF0YUxheWVyJywnR1RNLTVXTENaWEMnKTs8L3NjcmlwdD4KKzwhLS0gRW5kIEdvb2dsZSBUYWcgTWFuYWdlciAtLT4gICAgPG1ldGEgbmFtZT0iYXV0aG9yIiBjb250ZW50PSJXZWJtYXN0ZXIiLz4KKyAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0iQXJjaGl2ZWQsIG9sZCwgY2xvc2VkLCBzdXNwZW5kZWQsIHNodXRkb3duLCBjbG9zZWQiLz4KKyAgICA8bGluayByZWw9InNob3J0Y3V0IGljb24iIGhyZWY9Ii9lY2xpcHNlLm9yZy1jb21tb24vdGhlbWVzL3NvbHN0aWNlL3B1YmxpYy9pbWFnZXMvZmF2aWNvbi5pY28iLz4KKyAgICA8dGl0bGU+QXJjaGl2ZWQgUHJvamVjdHMgfCBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uPC90aXRsZT4KKyAgICA8bGluayByZWw9InByZWNvbm5lY3Qgc3R5bGVzaGVldCIgaHJlZj0iL2VjbGlwc2Uub3JnLWNvbW1vbi90aGVtZXMvc29sc3RpY2UvcHVibGljL3N0eWxlc2hlZXRzL3F1aWNrc2lsdmVyLm1pbi5jc3M/djAuMTcyIi8+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEVjbGlwc2UgRm91bmRhdGlvbiAtIGhvbWUgdG8gYSBnbG9iYWwgY29tbXVuaXR5LCB0aGUgRWNsaXBzZSBJREUsIEpha2FydGEgRUUgYW5kIG92ZXIgMzc1IG9wZW4gc291cmNlIHByb2plY3RzLCBpbmNsdWRpbmcgcnVudGltZXMsIHRvb2xzIGFuZCBmcmFtZXdvcmtzLiIvPgorPG1ldGEgcHJvcGVydHk9Im9nOmRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIC0gaG9tZSB0byBhIGdsb2JhbCBjb21tdW5pdHksIHRoZSBFY2xpcHNlIElERSwgSmFrYXJ0YSBFRSBhbmQgb3ZlciAzNzUgb3BlbiBzb3VyY2UgcHJvamVjdHMsIGluY2x1ZGluZyBydW50aW1lcywgdG9vbHMgYW5kIGZyYW1ld29ya3MuIi8+Cis8bWV0YSBwcm9wZXJ0eT0ib2c6aW1hZ2UiIGNvbnRlbnQ9Imh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2VjbGlwc2Uub3JnLWNvbW1vbi90aGVtZXMvc29sc3RpY2UvcHVibGljL2ltYWdlcy9sb2dvL2VjbGlwc2UtZm91bmRhdGlvbi0yMDB4MjAwLnBuZyIvPgorPG1ldGEgcHJvcGVydHk9Im9nOnRpdGxlIiBjb250ZW50PSJBcmNoaXZlZCBQcm9qZWN0cyB8IFRoZSBFY2xpcHNlIEZvdW5kYXRpb24iLz4KKzxtZXRhIHByb3BlcnR5PSJvZzppbWFnZTp3aWR0aCIgY29udGVudD0iMjAwIi8+Cis8bWV0YSBwcm9wZXJ0eT0ib2c6aW1hZ2U6aGVpZ2h0IiBjb250ZW50PSIyMDAiLz4KKzxtZXRhIGl0ZW1wcm9wPSJuYW1lIiBjb250ZW50PSJBcmNoaXZlZCBQcm9qZWN0cyB8IFRoZSBFY2xpcHNlIEZvdW5kYXRpb24iLz4KKzxtZXRhIGl0ZW1wcm9wPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEVjbGlwc2UgRm91bmRhdGlvbiAtIGhvbWUgdG8gYSBnbG9iYWwgY29tbXVuaXR5LCB0aGUgRWNsaXBzZSBJREUsIEpha2FydGEgRUUgYW5kIG92ZXIgMzc1IG9wZW4gc291cmNlIHByb2plY3RzLCBpbmNsdWRpbmcgcnVudGltZXMsIHRvb2xzIGFuZCBmcmFtZXdvcmtzLiIvPgorPG1ldGEgaXRlbXByb3A9ImltYWdlIiBjb250ZW50PSJodHRwczovL3d3dy5lY2xpcHNlLm9yZy9lY2xpcHNlLm9yZy1jb21tb24vdGhlbWVzL3NvbHN0aWNlL3B1YmxpYy9pbWFnZXMvbG9nby9lY2xpcHNlLWZvdW5kYXRpb24tNDAweDQwMC5wbmciLz4KKzxtZXRhIG5hbWU9InR3aXR0ZXI6c2l0ZSIgY29udGVudD0iQEVjbGlwc2VGZG4iLz4KKzxtZXRhIG5hbWU9InR3aXR0ZXI6Y2FyZCIgY29udGVudD0ic3VtbWFyeSIvPgorPG1ldGEgbmFtZT0idHdpdHRlcjp0aXRsZSIgY29udGVudD0iQXJjaGl2ZWQgUHJvamVjdHMgfCBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIi8+Cis8bWV0YSBuYW1lPSJ0d2l0dGVyOnVybCIgY29udGVudD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wcm9qZWN0cy9hcmNoaXZlcy5waHAiLz4KKzxtZXRhIG5hbWU9InR3aXR0ZXI6ZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gLSBob21lIHRvIGEgZ2xvYmFsIGNvbW11bml0eSwgdGhlIEVjbGlwc2UgSURFLCBKYWthcnRhIEVFIGFuZCBvdmVyIDM3NSBvcGVuIHNvdXJjZSBwcm9qZWN0cywgaW5jbHVkaW5nIHJ1bnRpbWVzLCB0b29scyBhbmQgZnJhbWV3b3Jrcy4iLz4KKzxtZXRhIG5hbWU9InR3aXR0ZXI6aW1hZ2UiIGNvbnRlbnQ9Imh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2VjbGlwc2Uub3JnLWNvbW1vbi90aGVtZXMvc29sc3RpY2UvcHVibGljL2ltYWdlcy9sb2dvL2VjbGlwc2UtZm91bmRhdGlvbi00MDB4NDAwLnBuZyIvPgorPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1MaWJyZStGcmFua2xpbjppdGFsLHdnaHRAMCwxMDA7MCwyMDA7MCwzMDA7MCw0MDA7MCw1MDA7MCw2MDA7MCw3MDA7MCw4MDA7MCw5MDA7MSwxMDA7MSwyMDA7MSwzMDA7MSw0MDA7MSw1MDA7MSw2MDA7MSw3MDA7MSw4MDA7MSw5MDAmZmFtaWx5PVJvYm90bzppdGFsLHdnaHRAMCwxMDA7MCwzMDA7MCw0MDA7MCw1MDA7MCw3MDA7MCw5MDA7MSwxMDA7MSwzMDA7MSw0MDA7MSw1MDA7MSw3MDA7MSw5MDAmZGlzcGxheT1zd2FwIiByZWw9InByZWNvbm5lY3Qgc3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4KKyAgICA8c2NyaXB0PiB2YXIgZWNsaXBzZV9vcmdfY29tbW9uID0geyJzZXR0aW5ncyI6eyJjb29raWVzX2NsYXNzIjp7Im5hbWUiOiJlY2xpcHNlX3NldHRpbmdzIiwiZW5hYmxlZCI6MX19fTwvc2NyaXB0PiAgPC9oZWFkPgorICA8Ym9keSBpZD0iYm9keV9zb2xzdGljZSI+CisgICAgPCEtLSBHb29nbGUgVGFnIE1hbmFnZXIgKG5vc2NyaXB0KSAtLT4KKzxub3NjcmlwdD48aWZyYW1lIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xldGFnbWFuYWdlci5jb20vbnMuaHRtbD9pZD1HVE0tNVdMQ1pYQyIKK2hlaWdodD0iMCIgd2lkdGg9IjAiIHN0eWxlPSJkaXNwbGF5Om5vbmU7dmlzaWJpbGl0eTpoaWRkZW4iPjwvaWZyYW1lPjwvbm9zY3JpcHQ+Cis8IS0tIEVuZCBHb29nbGUgVGFnIE1hbmFnZXIgKG5vc2NyaXB0KSAtLT4gICAgPGEgY2xhc3M9InNyLW9ubHkiIGhyZWY9IiNjb250ZW50Ij5Ta2lwIHRvIG1haW4gY29udGVudDwvYT4KKyAgICA8aGVhZGVyIGNsYXNzPSJoZWFkZXItd3JhcHBlciIgaWQ9ImhlYWRlci13cmFwcGVyIj4KKyAgICAgIDxkaXYgY2xhc3M9ImNsZWFyZml4IHRvb2xiYXItY29udGFpbmVyLXdyYXBwZXIiPgorICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KKyAgICAgICAgPGRpdiBjbGFzcz0idGV4dC1yaWdodCB0b29sYmFyLXJvdyByb3cgaGlkZGVuLXByaW50Ij4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtMjQgcm93LXRvb2xiYXItY29sIj4KKyAgICAgICAgICAgIDx1bCBjbGFzcz0ibGlzdC1pbmxpbmUiPgorICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9InRvb2xiYXItbGluayIgaHJlZj0iaHR0cHM6Ly9hY2NvdW50cy5lY2xpcHNlLm9yZy91c2VyL2xvZ2luLz90YWtlbWViYWNrPWh0dHAlM0ElMkYlMkZ3d3cuZWNsaXBzZS5vcmclMkZwcm9qZWN0cyUyRmFyY2hpdmVzLnBocCI+PGkgY2xhc3M9ImZhIGZhLXNpZ24taW4iPjwvaT4gTG9nIGluPC9hPjwvbGk+CisgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz0idG9vbGJhci1saW5rIHRvb2xiYXItbWFuYWdlLWNvb2tpZXMgZHJvcGRvd24tdG9nZ2xlIj48aSBjbGFzcz0iZmEgZmEtd3JlbmNoIj48L2k+IE1hbmFnZSBDb29raWVzPC9hPjwvbGk+CisgICAgICAgICAgICA8L3VsPgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIAorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PiAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KKyAgICA8ZGl2IGNsYXNzPSJyb3ciIGlkPSJoZWFkZXItcm93Ij4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1zbS01IGNvbC1tZC00IiBpZD0iaGVhZGVyLWxlZnQiPgorICAgICAgICA8ZGl2IGNsYXNzPSJ3cmFwcGVyLWxvZ28tZGVmYXVsdCI+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPjxpbWcgY2xhc3M9ImxvZ28tZWNsaXBzZS1kZWZhdWx0IGhpZGRlbi14cyIgYWx0PSJFY2xpcHNlLm9yZyBsb2dvIiB3aWR0aD0iMTYwIiBzcmM9Ii8vd3d3LmVjbGlwc2Uub3JnL2VjbGlwc2Uub3JnLWNvbW1vbi90aGVtZXMvc29sc3RpY2UvcHVibGljL2ltYWdlcy9sb2dvL2VjbGlwc2UtZm91bmRhdGlvbi13aGl0ZS1vcmFuZ2Uuc3ZnIi8+PC9hPjwvZGl2PgorICAgICAgPC9kaXY+ICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLXNtLTE5IGNvbC1tZC0yMCBtYXJnaW4tdG9wLTEwIiBpZD0ibWFpbi1tZW51LXdyYXBwZXIiPgorICAgICAgPGRpdiBjbGFzcz0iZmxvYXQtcmlnaHQgaGlkZGVuLXhzIiBpZD0iYnRuLWNhbGwtZm9yLWFjdGlvbiI+PGEgaHJlZj0iL2Rvd25sb2Fkcy8iIGNsYXNzPSJidG4gYnRuLWh1Z2UgYnRuLXdhcm5pbmciPjxpIGNsYXNzPSJmYSBmYS1kb3dubG9hZCI+PC9pPiBEb3dubG9hZDwvYT48L2Rpdj4gICAgPGRpdiBjbGFzcz0ibmF2YmFyIHlhbW0gZmxvYXQtc20tcmlnaHQiIGlkPSJtYWluLW1lbnUiPgorICAgIDxkaXYgY2xhc3M9Im5hdmJhci1jb2xsYXBzZSBjb2xsYXBzZSIgaWQ9Im5hdmJhci1tYWluLW1lbnUiPgorICAgICAgPHVsIGNsYXNzPSJuYXYgbmF2YmFyLW5hdiI+CisgICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3Byb2plY3RzLyIgdGFyZ2V0PSJfc2VsZiI+UHJvamVjdHM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvd29ya2luZ2dyb3Vwcy8iIHRhcmdldD0iX3NlbGYiPldvcmtpbmcgR3JvdXBzPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbWVtYmVyc2hpcC8iIHRhcmdldD0iX3NlbGYiPk1lbWJlcnM8L2E+PC9saT4gICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIHZpc2libGUteHMiPjxhIGhyZWY9IiMiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSI+Q29tbXVuaXR5IDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT48dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPjxsaT48YSBocmVmPSJodHRwOi8vbWFya2V0cGxhY2UuZWNsaXBzZS5vcmciPk1hcmtldHBsYWNlPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly9ldmVudHMuZWNsaXBzZS5vcmciPkV2ZW50czwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LnBsYW5ldGVjbGlwc2Uub3JnLyI+UGxhbmV0IEVjbGlwc2U8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9jb21tdW5pdHkvZWNsaXBzZV9uZXdzbGV0dGVyLyI+TmV3c2xldHRlcjwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwczovL3d3dy55b3V0dWJlLmNvbS91c2VyL0VjbGlwc2VGZG4iPlZpZGVvczwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnIj5CbG9nczwvYT48L2xpPjwvdWw+PC9saT48bGkgY2xhc3M9ImRyb3Bkb3duIHZpc2libGUteHMiPjxhIGhyZWY9IiMiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSI+UGFydGljaXBhdGUgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPjx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+PGxpPjxhIGhyZWY9Imh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzLyI+UmVwb3J0IGEgQnVnPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZm9ydW1zLyI+Rm9ydW1zPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbWFpbC8iPk1haWxpbmcgTGlzdHM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly93aWtpLmVjbGlwc2Uub3JnLyI+V2lraTwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwczovL3dpa2kuZWNsaXBzZS5vcmcvSVJDIj5JUkM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL3Jlc2VhcmNoLyI+UmVzZWFyY2g8L2E+PC9saT48L3VsPjwvbGk+PGxpIGNsYXNzPSJkcm9wZG93biB2aXNpYmxlLXhzIj48YSBocmVmPSIjIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiPkVjbGlwc2UgSURFIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT48dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2Rvd25sb2FkcyI+RG93bmxvYWQ8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lY2xpcHNlaWRlIj5MZWFybiBNb3JlPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHBzOi8vaGVscC5lY2xpcHNlLm9yZyI+RG9jdW1lbnRhdGlvbjwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2dldHRpbmdfc3RhcnRlZCI+R2V0dGluZyBTdGFydGVkIC8gU3VwcG9ydDwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2NvbnRyaWJ1dGUvIj5Ib3cgdG8gQ29udHJpYnV0ZTwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2lkZS8iPklERSBhbmQgVG9vbHM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvZm9ydW1zL2luZGV4LnBocC9mLzg5LyI+TmV3Y29tZXIgRm9ydW08L2E+PC9saT48L3VsPjwvbGk+ICAgICAgICAgIDwhLS0gTW9yZSAtLT4KKyAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIGVjbGlwc2UtbW9yZSBoaWRkZW4teHMiPgorICAgICAgICAgICAgPGEgZGF0YS10b2dnbGU9ImRyb3Bkb3duIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiByb2xlPSJidXR0b24iPk1vcmU8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgICAgPCEtLSBDb250ZW50IGNvbnRhaW5lciB0byBhZGQgcGFkZGluZyAtLT4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ5YW1tLWNvbnRlbnQiPgorICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4KKyAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJjb2wtc20tOCBsaXN0LXVuc3R5bGVkIj48bGk+PHA+PHN0cm9uZz5Db21tdW5pdHk8L3N0cm9uZz48L3A+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL21hcmtldHBsYWNlLmVjbGlwc2Uub3JnIj5NYXJrZXRwbGFjZTwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vZXZlbnRzLmVjbGlwc2Uub3JnIj5FdmVudHM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5wbGFuZXRlY2xpcHNlLm9yZy8iPlBsYW5ldCBFY2xpcHNlPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvY29tbXVuaXR5L2VjbGlwc2VfbmV3c2xldHRlci8iPk5ld3NsZXR0ZXI8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cueW91dHViZS5jb20vdXNlci9FY2xpcHNlRmRuIj5WaWRlb3M8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZyI+QmxvZ3M8L2E+PC9saT48L3VsPjx1bCBjbGFzcz0iY29sLXNtLTggbGlzdC11bnN0eWxlZCI+PGxpPjxwPjxzdHJvbmc+UGFydGljaXBhdGU8L3N0cm9uZz48L3A+PC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3MvIj5SZXBvcnQgYSBCdWc8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9mb3J1bXMvIj5Gb3J1bXM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9tYWlsLyI+TWFpbGluZyBMaXN0czwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwczovL3dpa2kuZWNsaXBzZS5vcmcvIj5XaWtpPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHBzOi8vd2lraS5lY2xpcHNlLm9yZy9JUkMiPklSQzwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvcmVzZWFyY2gvIj5SZXNlYXJjaDwvYT48L2xpPjwvdWw+PHVsIGNsYXNzPSJjb2wtc20tOCBsaXN0LXVuc3R5bGVkIj48bGk+PHA+PHN0cm9uZz5FY2xpcHNlIElERTwvc3Ryb25nPjwvcD48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2Rvd25sb2FkcyI+RG93bmxvYWQ8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lY2xpcHNlaWRlIj5MZWFybiBNb3JlPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHBzOi8vaGVscC5lY2xpcHNlLm9yZyI+RG9jdW1lbnRhdGlvbjwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2dldHRpbmdfc3RhcnRlZCI+R2V0dGluZyBTdGFydGVkIC8gU3VwcG9ydDwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2NvbnRyaWJ1dGUvIj5Ib3cgdG8gQ29udHJpYnV0ZTwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2lkZS8iPklERSBhbmQgVG9vbHM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvZm9ydW1zL2luZGV4LnBocC9mLzg5LyI+TmV3Y29tZXIgRm9ydW08L2E+PC9saT48L3VsPiAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIAorICAgICAgPC91bD4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJuYXZiYXItaGVhZGVyIj4KKyAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0ibmF2YmFyLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImNvbGxhcHNlIiBkYXRhLXRhcmdldD0iI25hdmJhci1tYWluLW1lbnUiPgorICAgICAgPHNwYW4gY2xhc3M9InNyLW9ubHkiPlRvZ2dsZSBuYXZpZ2F0aW9uPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9Imljb24tYmFyIj48L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0iaWNvbi1iYXIiPjwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJpY29uLWJhciI+PC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9Imljb24tYmFyIj48L3NwYW4+CisgICAgICA8L2J1dHRvbj4KKyAgICAgIDxkaXYgY2xhc3M9IndyYXBwZXItbG9nby1tb2JpbGUiPjxhIGNsYXNzPSJuYXZiYXItYnJhbmQgdmlzaWJsZS14cyIgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPjxpbWcgY2xhc3M9ImxvZ28tZWNsaXBzZS1kZWZhdWx0LW1vYmlsZSBpbWctcmVzcG9uc2l2ZSIgYWx0PSJFY2xpcHNlLm9yZyBsb2dvIiB3aWR0aD0iMTYwIiBzcmM9Ii8vd3d3LmVjbGlwc2Uub3JnL2VjbGlwc2Uub3JnLWNvbW1vbi90aGVtZXMvc29sc3RpY2UvcHVibGljL2ltYWdlcy9sb2dvL2VjbGlwc2UtZm91bmRhdGlvbi13aGl0ZS1vcmFuZ2Uuc3ZnIi8+PC9hPjwvZGl2PiAgICA8L2Rpdj4KKyAgPC9kaXY+Cis8L2Rpdj4KKyAgICA8L2Rpdj4KKyAgPC9kaXY+CisgIDwvaGVhZGVyPgorICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJkZWZhdWx0LWJyZWFkY3J1bWJzIGhpZGRlbi1wcmludCBicmVhZGNydW1icy1kZWZhdWx0LW1hcmdpbiIgaWQ9ImJyZWFkY3J1bWIiPgorICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KKyAgICAgICAgPGgzIGNsYXNzPSJzci1vbmx5Ij5CcmVhZGNydW1iczwvaDM+CisgICAgICAgIDxkaXYgY2xhc3M9InJvdyI+CisgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLXNtLTI0Ij48b2wgY2xhc3M9ImJyZWFkY3J1bWIiPjxsaT48YSBocmVmPSIvIj5Ib21lPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcHJvamVjdHMiPlByb2plY3RzPC9hPjwvbGk+PGxpIGNsYXNzPSJhY3RpdmUiPkFyY2hpdmVkIFByb2plY3RzPC9saT48L29sPjwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgIDwvc2VjdGlvbj4gPCEtLSAvI2JyZWFkY3J1bWIgLS0+CisgICAgICA8bWFpbiBpZD0iY29udGVudCI+CisgICAgICAgIDxkaXYgY2xhc3M9Im5vdmFDb250ZW50IGNvbnRhaW5lciIgaWQ9Im5vdmFDb250ZW50Ij4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3ciPjxkaXYgY2xhc3M9ImNvbC1tZC0xOCBtYWluLWNvbC1jb250ZW50Ij4JIAorCisgICAgPGRpdiBpZD0ibWlkY29sdW1uIj4KKwkgIDxoMj5BcmNoaXZlZCBFY2xpcHNlIFByb2plY3RzPC9oMj4KKyAgICAgIDxwPiBZb3UgYXJlIHNlZWluZyB0aGlzIGJlY2F1c2UgdGhlIHByb2plY3QgeW91IHdlcmUgbG9va2luZyBmb3IgaGFzIGJlZW4gYXJjaGl2ZWQuICBXaGVuIHByb2plY3RzIGFyZSBhcmNoaXZlZCB0aGVpciBkYXRhKGRvd25sb2Fkcyxzb3VyY2UgYW5kIHdlYnNpdGUpLCBpcyBjb2xsZWN0ZWQgaW50byBhIHNpbmdsZSB0YXIuZ3ogZmlsZS48L3A+ICAKKyAgICAgIDxwPjxoND5QbGVhc2Ugbm90ZTogU29tZSBwcm9qZWN0cyBkaWQgbm90IGhhdmUgYWxsIG9mIHRoZSBhYm92ZSBkYXRhLjwvaDQ+PC9wPgorICAgICAgPHA+PGg0PlBsZWFzZSBub3RlOiBUaGUgc291cmNlIGZpbGVzIChpZiBhdmFpbGFibGUpIGluY2x1ZGVkIGluIHRoZXNlIGZpbGVzIGFyZSBkaXJlY3QgY29waWVzIG9mIHRoZSBhdmFpbGFibGUgQ1ZTL1NWTiBkYXRhLiAgWW91IHdpbGwgbmVlZCB0byBsb2FkIHRoZW0gaW50byBhIGxvY2FsIENWUy9TVk4gcmVwb3NpdG9yeSB0byBhY2Nlc3MgdGhlIGhpc3RvcnkuPC9oND48L3A+CisgICAgICA8cD48aDQ+UGxlYXNlIG5vdGU6IFNvbWUgb2YgdGhlc2UgYXJjaGl2ZXMgYXJlIGxhcmdlciB0aGFuIDNHQjwvaDQ+PC9wPgorICAgICAgCisgICAgICA8ZGl2IGlkPSJob21laXRlbSI+CisgICAgICAgIDwvYnI+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2FsZi50Z3oiPkFMRjwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBKYW51YXJ5IDIwMDk8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2FsYmlyZW8udGd6Ij5BbGJpcmVvPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEphbnVhcnkgMjAxMTwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvYW0zLnRneiI+QU0zPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IE5vdmVtYmVyIDIwMTI8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2FudGVubmEudGd6Ij5BbnRlbm5hPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEZlYnJ1YXJ5IDIwMjE8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2Fwcmljb3QudGd6Ij5BcHJpY290PC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEF1Z3VzdCAyMDE5PC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9hcG9nZWUudGd6Ij5BcG9nZWU8L2E+IHByb2plY3QuICBBcmNoaXZlZDogSmFudWFyeSAyMDExPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9hdGYudGd6Ij5BVEY8L2E+IHByb2plY3QuICBBcmNoaXZlZDogTWF5IDIwMjA8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2F0aGVuYS50Z3oiPkF0aGVuYTwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBKYW51YXJ5IDIwMTI8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2Ftdy50Z3oiPkFNVzwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBNYXJjaCAyMDE1PC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9ibGlua2kudGd6IiBhbHQ9IkRTRFAgQmxpbmtpIEFyY2hpdmUiID5EU0RQIEJsaW5raTwvYT4gcHJvamVjdC4gQXJjaGl2ZWQ6IE9jdG9iZXIgMjAxMC48L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2JwbW4udGd6Ij5CUE1OPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEphbnVhcnkgMjAxMjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvYnVja21pbnN0ZXIudGd6Ij5CdWNrbWluc3RlcjwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBGZWJydWFyeSAyMDE5PC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9jZHRrLnRneiI+Q0RUSzwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBKYW51YXJ5IDIwMTI8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2NtZS1wcm9qZWN0LnRhci5neiI+Q01FPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEphbnVhcnkgMjAwNjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvY29yb25hLnRneiI+Q29yb25hPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEFwcmlsIDIwMTA8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2Nvc21vcy50Z3oiPkNvc21vczwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBKYW51YXJ5IDIwMTI8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2NvYm9sLnRneiI+Q29ib2w8L2E+IHByb2plY3QuICBBcmNoaXZlZDogRmVicnVhcnkgMjAxMDwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvZGFtb3MudGd6Ij5EYW1vczwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBGZWJydWFyeSAyMDE5PC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9kZC50Z3oiIGFsdD0iRFNEUCBERCBBcmNoaXZlIiA+RFNEUCBERDwvYT4gcHJvamVjdC4gQXJjaGl2ZWQ6IE9jdG9iZXIgMjAxMC48L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2RzZHAudGd6IiBhbHQ9IkRTRFAgQXJjaGl2ZSIgPkRTRFA8L2E+IHByb2plY3QuIEFyY2hpdmVkOiBTZXB0ZW1iZXIgMjAxMS48L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2RvYzJtb2RlbC50Z3oiIGFsdD0iRG9jMk1vZGVsIEFyY2hpdmUiID5Eb2MyTW9kZWw8L2E+IHByb2plY3QuIEFyY2hpdmVkOiBKYW51YXJ5IDIwMTUuPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9lYXRvcC50Z3oiPk1vZGVsaW5nIEVBVG9wPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IE1hcmNoIDIwMjE8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2VkamUudGd6Ij5JT1QgRWRqZTwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBOb3ZlbWJlciAyMDE4PC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9lc2wudGd6Ij5FU0w8L2E+IHByb2plY3QuICBBcmNoaXZlZDogSmFudWFyeSAyMDEyPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9lbWZpbmRleC50Z3oiPkVNRmluZGV4PC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEp1bHkgMjAxMjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvZXJjcC50Z3oiPkVSQ1A8L2E+IHByb2plY3QuICBBcmNoaXZlZDogRGVjZW1iZXIgMjAxMjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvZXhhbXBsZXMudGd6Ij5FeGFtcGxlczwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBKYW51YXJ5IDIwMTQ8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2VtZi1mYWNldC50Z3oiPkVNRiBGYWNldDwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBNYXkgMjAyMDwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvZmVhdHVyZW1vZGVsLnRneiI+RmVhdHVyZW1vZGVsPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IE1hcmNoIDIwMTU8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2ZsdXgudGd6Ij5GbHV4PC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEZlYnJ1YXJ5IDIwMTk8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2Zwcm9qLnRneiI+RnByb2o8L2E+IHByb2plY3QuICBBcmNoaXZlZDogSmFudWFyeSAyMDEyPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9nYW5vbWF0aWMudGd6Ij5HYW5vbWF0aWM8L2E+IHByb2plY3QuICBBcmNoaXZlZDogSmFudWFyeSAyMDEyPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9nZW1zLnRneiI+R2VtczwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBKYW51YXJ5IDIwMTU8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2dlb2JlbmNoLnRneiI+R2VvQmVuY2g8L2E+IHByb2plY3QuICBBcmNoaXZlZDogTWFyY2ggMjAyMTwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUubG9jYXRpb250ZWNoLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9nZW9mZi50Z3oiPkdlb2ZmPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IE1heSAyMDE3PC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9nbGltbWVyLnRneiI+R2xpbW1lcjwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBKYW51YXJ5IDIwMTE8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2ctZWNsaXBzZS50Z3oiPmctRWNsaXBzZTwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBKYW51YXJ5IDIwMTQ8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2dlZjNkLnRneiI+R0VGIDNEPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IE1hcmNoIDIwMjE8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2d5cmV4LnRneiI+Z3lyZXg8L2E+IHByb2plY3QuICBBcmNoaXZlZDogTWFyY2ggMjAxODwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvaGliYWNoaS50Z3oiPkhpYmFjaGk8L2E+IHByb2plY3QuICBBcmNoaXZlZDogSmFudWFyeSAyMDExPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9oaXAudGd6Ij5IaXA8L2E+IHByb2plY3QuICBBcmNoaXZlZDogQXVndXN0IDIwMTk8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2h1ZHNvbi50Z3oiPkh1ZHNvbjwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBGZWJydWFyeSAyMDIxPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9pYW0udGd6Ij5JYW08L2E+IHByb2plY3QuICBBcmNoaXZlZDogSmFudWFyeSAyMDEyPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9pbmNxdWVyeS50Z3oiPkluY3F1ZXJ5PC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEZlYnJ1YXJ5IDIwMTY8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2ltbS50Z3oiPklNTTwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBKYW51YXJ5IDIwMTU8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2lkZTRlZHUudGd6Ij5JREU0RURVPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEphbnVhcnkgMjAxNDwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvaW1wLnRneiI+SW1wPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEphbnVhcnkgMjAxNDwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvamF2YS1lZS1jb25maWcudGd6Ij5KYXZhLWVlLWNvbmZpZzwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBKdWx5IDIwMTg8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2pjcm0udGd6IiBhbHQ9IkpDUk0gYXJjaGl2ZSIgPkpDUk08L2E+IHByb2plY3QuIEFyY2hpdmVkOiBKdWx5IDIwMTMuPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9qZXQudGd6IiBhbHQ9IkpFVCBhcmNoaXZlIiA+SkVUPC9hPiBwcm9qZWN0LiBBcmNoaXZlZDogTWF5IDIwMjAuPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9qczRlbWYudGd6IiBhbHQ9IkpzNGVtZiBhcmNoaXZlIiA+SnM0ZW1mPC9hPiBwcm9qZWN0LiBBcmNoaXZlZDogSmFudWFyeSAyMDE1LjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMva2lzby1wcm9qZWN0LnRhci5neiI+S29pPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEp1bHkgMjAyMTwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMva29pLXByb2plY3QudGFyLmd6Ij5Lb2k8L2E+IHByb2plY3QuICBBcmNoaXZlZDogQXByaWwgMjAwNjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMva29uZWtpLnRneiI+S29uZWtpPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IFNlcHRlbWJlciAyMDE1PC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9rZXBsZXIudGd6Ij5LZXBsZXI8L2E+IHByb2plY3QuICBBcmNoaXZlZDogSnVseSAyMDA4PC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9rcmlra2l0LnRneiI+S3Jpa2tpdDwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBPY3RvYmVyIDIwMTc8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2xhc3psby1wcm9qZWN0LnRhci5neiI+TGFzemxvPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IERlY2VtYmVyIDIwMDY8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2xlcGlkby1wcm9qZWN0LnRhci5neiI+TGVwaWRvPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEp1bmUgMjAwNjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvbWF5bnN0YWxsLnRneiI+TWF5bnN0YWxsPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEphbnVhcnkgMjAxMTwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvbWRkaS1hcmNoaXZlLnRhci5neiIgYWx0PSJNRERpIEFyY2hpdmUiID5NRERpPC9hPiBwcm9qZWN0LiBBcmNoaXZlZDogQXVndXN0IDIwMDguPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9taWhpbmkudGd6Ij5NaWhpbmk8L2E+IHByb2plY3QuICBBcmNoaXZlZDogU2VwdGVtYmVyIDIwMTU8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL21pbnQudGd6IiBhbHQ9Ik1pbnQgYXJjaGl2ZSIgPk1pbnQ8L2E+IHByb2plY3QuIEFyY2hpdmVkOiBOb3ZlbWJlciAyMDEyLjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvbW9kZWxpbmcubWR0LmVvZG0udGd6IiBhbHQ9Ik1EVC5FT0RNIEFyY2hpdmUiID5NRFQgRU9ETTwvYT4gcHJvamVjdC4gQXJjaGl2ZWQ6IE9jdG9iZXIgMjAwOC48L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL21vZGVsaW5nLnBtZi50Z3oiIGFsdD0ibW9kZWxpbmcgUE1GIEFyY2hpdmUiID5Nb2RlbGluZyBQTUY8L2E+IHByb2plY3QuIEFyY2hpdmVkOiBTZXB0ZW1iZXIgMjAxOS48L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL21vZnNjcmlwdC50Z3oiIGFsdD0iTW9mc2NyaXB0IGFyY2hpdmUiID5Nb2ZzY3JpcHQ8L2E+IHByb2plY3QuIEFyY2hpdmVkOiBOb3ZlbWJlciAyMDEyLjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvbXN0LnRneiIgYWx0PSJNU1QgYXJjaGl2ZSIgPk1EVCBNU1Q8L2E+IHByb2plY3QuIEFyY2hpdmVkOiBOb3ZlbWJlciAyMDEyLjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvbXRmLnRneiIgYWx0PSJNVEYgYXJjaGl2ZSIgPk1URjwvYT4gcHJvamVjdC4gQXJjaGl2ZWQ6IE5vdmVtYmVyIDIwMTIuPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9teGYudGd6IiBhbHQ9Ik1YRiBhcmNoaXZlIiA+TVhGPC9hPiBwcm9qZWN0LiBBcmNoaXZlZDogTm92ZW1iZXIgMjAxMi48L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL25hYi50Z3oiIGFsdD0iRFNEUCBOYWIgQXJjaGl2ZSIgPkRTRFAgTmFiPC9hPiBwcm9qZWN0LiBBcmNoaXZlZDogT2N0b2JlciAyMDEwLjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvZW1mNG5ldC50Z3oiIGFsdD0iRU1GNE5ldCBhcmNoaXZlIiA+RU1GNE5ldDwvYT4gcHJvamVjdC4gQXJjaGl2ZWQ6IEphbnVhcnkgMjAxNS48L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL25ldDRqLnRneiIgYWx0PSJOZXQ0SiBhcmNoaXZlIiA+TmV0NEo8L2E+IHByb2plY3QuIEFyY2hpdmVkOiBKdW5lIDIwMTAuPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9vaGYudGd6Ij5PSEY8L2E+IHByb2plY3QuICBBcmNoaXZlZDogSmFudWFyeSAyMDEyPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9vZm1wLnRneiI+T0ZNUDwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBKYW51YXJ5IDIwMTI8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL29tZWxldC1wcm9qZWN0LnRhci5neiI+T01FTEVUPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEF1Z3VzdCAyMDA1PC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9vcm1mLnRneiI+T3JtZjwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBKYW51YXJ5IDIwMTE8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL3BhY2thZ2UtZHJvbmUudGd6Ij5QYWNrYWdlLWRyb25lPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IE1hcmNoIDIwMjE8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL3BhcHlydXMteHR1bWwudGd6Ij5QYXB5cnVzLXh0dW1sPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IFNlcHRlbWJlciAyMDE5PC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9wYXZlLnRneiI+UGF2ZTwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBEZWNlbWJlciAyMDEyPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9waG9lbml4LnRneiI+UGhvZW5peDwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBGZWJydWFyeSAyMDEzIDwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvcGljYXNzby50Z3oiPlBpY2Fzc288L2E+IHByb2plY3QuICBBcmNoaXZlZDogTWF5IDIwMTkgPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9wbWYudGd6IiBhbHQ9IlBNRiBhcmNoaXZlIiA+UE1GPC9hPiBwcm9qZWN0LiBBcmNoaXZlZDogSmFudWFyeSAyMDEzLjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvcG9sbGluYXRlLXByb2plY3QudGFyLmd6Ij5Qb2xpbmF0ZTwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBEZWNlbWJlciAyMDA1PC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9wb250ZS50Z3oiPlBvbnRlPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IE1hcmNoIDIwMjE8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL3F1ZXJ5Mi50Z3oiIGFsdD0iUXVlcnkyIGFyY2hpdmUiID5FTUYgUXVlcnkyPC9hPiBwcm9qZWN0LiBBcmNoaXZlZDogTWF5IDIwMTMuPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5sb2NhdGlvbnRlY2gub3JnL2FyY2hpdmVkX3Byb2plY3RzL3Jhc3Rlci50Z3oiPlJhc3RlcjwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBKYW51YXJ5IDIwMTg8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL3JhdC50Z3oiPlJhdDwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBNYXkgMjAxMjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvcmVjb21tZW5kZXJzLnRneiI+UmVjb21tZW5kZXJzPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEp1bHkgMjAxOTwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvcmVjb21tZW5kZXJzLmluY3ViYXRvci50Z3oiPlJlY29tbWVuZGVycyBpbmN1YmF0b3I8L2E+IHByb2plY3QuICBBcmNoaXZlZDogT2N0b2JlciAyMDE5IDwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvcmVtdXMudGd6Ij5SZW11czwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBNYXkgMjAyMDwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvcmlzZXYyZy50Z3oiPlJpc2V2Mmc8L2E+IHByb2plY3QuICBBcmNoaXZlZDogSmFudWFyeSAyMDE5PC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9ydHAudGd6Ij5QYWNrYWdpbmcgUlRQPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IE1hcmNoIDIwMjE8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL3NidnIudGd6IiBhbHQ9IlNCVlIgYXJjaGl2ZSIgPlNCVlI8L2E+IHByb2plY3QuIEFyY2hpdmVkOiBKdWx5IDIwMTMuPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9zY2FkYS50Z3oiIGFsdD0iU0NBREEgYXJjaGl2ZSIgPlNDQURBPC9hPiBwcm9qZWN0LiBBcmNoaXZlZDogTWFyY2ggMjAyMS48L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL3Nkby50Z3oiIGFsdD0iRU1GVCBTRE8gYXJjaGl2ZSIgPlNETzwvYT4gcHJvamVjdC4gQXJjaGl2ZWQ6IEp1bHkgMjAxMy48L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL3NlcnZ1cy50Z3oiIGFsdD0iU2VydnVzIGFyY2hpdmUiID5TZXJ2dXM8L2E+IHByb2plY3QuIEFyY2hpdmVkOiBOb3ZlbWJlciAyMDEyLjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvc2VhcmNoLnRneiIgYWx0PSJFTUZUIFNlYXJjaCBhcmNoaXZlIiA+U2VhcmNoPC9hPiBwcm9qZWN0LiBBcmNoaXZlZDogSnVseSAyMDEzLjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvc2tldGNoLnRneiIgYWx0PSJTa2V0Y2ggYXJjaGl2ZSIgPlNrZXRjaDwvYT4gcHJvamVjdC4gQXJjaGl2ZWQ6IEphbnVhcnkgMjAxNC48L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL3NvYy50Z3oiPlNPQzwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBKYW51YXJ5IDIwMTE8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL3NwYWNlcy50Z3oiPlNwYWNlczwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBKYW51YXJ5IDIwMTE8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL3NjYWxhbW9kdWxlcy50Z3oiPlNjYWxhbW9kdWxlczwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBKdWx5IDIwMTA8L3A+IAorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9zbWFydGhvbWUudGd6Ij5TbWFydGhvbWU8L2E+IHByb2plY3QuICBBcmNoaXZlZDogTWF5IDIwMjA8L3A+IAorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9zdGVsbGF0aW9uLXByb2plY3QudGFyLmd6Ij5TdGVsbGF0aW9uPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEp1bmUgMjAwNSA8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL3N0YXJkdXN0LnRneiI+U3RhcmR1c3Q8L2E+IHByb2plY3QuICBBcmNoaXZlZDogTm92ZW1iZXIgMjAxNyA8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL3N0cC50Z3oiPlNUUDwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBTZXB0ZW1iZXIgMjAxMiA8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL3N3b3JkZmlzaC50Z3oiPlN3b3JkZmlzaDwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBKYW51YXJ5IDIwMTQgPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy90Y3MudGd6IiBhbHQ9IlRDUyBhcmNoaXZlIiA+VENTPC9hPiBwcm9qZWN0LiBBcmNoaXZlZDogTm92ZW1iZXIgMjAxMi48L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL3RlbXBvcmFsaXR5LnRneiIgYWx0PSJUZW1wb3JhbGl0eSBhcmNoaXZlIiA+VGVtcG9yYWxpdHk8L2E+IHByb2plY3QuIEFyY2hpdmVkOiBOb3ZlbWJlciAyMDEyLjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvdG13LnRneiI+VE1XPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IE1hcmNoIDIwMTIgPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy90cHRwLm1vbml0b3JpbmcudGd6Ij5UUFRQIE1vbml0b3Jpbmc8L2E+IHByb2plY3QuICBBcmNoaXZlZDogSnVuZSAyMDEwIDwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvdHB0cC50Z3oiPlRQVFA8L2E+IHByb2plY3QuICBBcmNoaXZlZDogTWF5IDIwMTYgIDwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvdHJpcXVldHJ1bS50Z3oiPlRyaXF1ZXRydW08L2E+IHByb2plY3QuICBBcmNoaXZlZDogT2N0IDIwMjEgIDwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvdW1sZ2VuLnRneiI+VU1MR2VuPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IE1hcmNoIDIwMjEgPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy91bWx4LnRneiI+VW1seDwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBEZWNlbWJlciAyMDEyIDwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvdWZhY2VraXQudGd6Ij5VRmFjZWtpdDwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBNYXJjaCAyMDE0IDwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvdmUudGd6Ij5WaXN1YWwgZWRpdG9yPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEp1bmUgMjAxMSA8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL3Z0cC50Z3oiPlZvaWNlIFRvb2xzPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IE1heSAyMDE2IDwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvd2hpc2tlcnMudGd6Ij5XaGlza2VyczwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBKYW51YXJ5IDIwMTkgPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy93b29sc2V5LnRneiI+V29vbHNleTwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBEZWNlbWJlciAyMDEyIDwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvd3RwLmRhdGF0b29scy50Z3oiPldUUCBEYXRhdG9vbHM8L2E+IHByb2plY3QuICBBcmNoaXZlZDogRmVicnVhcnkgMjAxMyA8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL3h0ZW5kLnRneiI+WHRlbmQ8L2E+IHByb2plY3QuICBBcmNoaXZlZDogSnVuZSAyMDEzIDwvcD4gICAgICAgICAgCSAgCisJICA8L2Rpdj4KKwk8L2Rpdj4KKwkKKzwvZGl2PjxkaXYgY2xhc3M9ImNvbC1tZC02IG1haW4tY29sLXNpZGViYXItbmF2Ij4gIDwhLS0gbmF2IC0tPgorICA8YXNpZGUgY2xhc3M9Im1haW4tc2lkZWJhci1kZWZhdWx0LW1hcmdpbiIgaWQ9Im1haW4tc2lkZWJhciI+CisgICAgCisgICAgPHVsIGNsYXNzPSJ1bC1sZWZ0LW5hdiBmYS11bCBoaWRkZW4tcHJpbnQiIGlkPSJsZWZ0bmF2IiByb2xlPSJ0YWJsaXN0IiBhcmlhLW11bHRpc2VsZWN0YWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtY2FyZXQtcmlnaHQgZmEtZnciPjwvaT4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnIj5Ib21lPC9hPgorICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtY2FyZXQtcmlnaHQgZmEtZnciPjwvaT4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd2lraS5lY2xpcHNlLm9yZyI+V2lraTwvYT4KKyAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2FzaWRlPgorICA8L2Rpdj48L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICA8L21haW4+PHAgaWQ9ImJhY2stdG8tdG9wIj4KKyAgPGEgY2xhc3M9InZpc2libGUteHMiIGhyZWY9IiN0b3AiPkJhY2sgdG8gdGhlIHRvcDwvYT4KKzwvcD4KKyAgPGRpdiBjbGFzcz0iZWNsaXBzZWZkbi1mZWF0dXJlZC1zdG9yeSBmZWF0dXJlZC1mb290ZXIiIGRhdGEtcHVibGlzaC10YXJnZXQ9ImVjbGlwc2Vfb3JnIj48ZGl2IGNsYXNzPSJjb250YWluZXIgZmVhdHVyZWQtY29udGFpbmVyIj48L2Rpdj48L2Rpdj48Zm9vdGVyIGlkPSJzb2xzdGljZS1mb290ZXIiPgorICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CisgICAgPGRpdiBjbGFzcz0icm93Ij4KKyAgICAgIDxzZWN0aW9uIGNsYXNzPSJjb2wtc20tNiBoaWRkZW4tcHJpbnQiIGlkPSJmb290ZXItZWNsaXBzZS1mb3VuZGF0aW9uIj4KKyAgICAgICAgICAgIDxoMiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+RWNsaXBzZSBGb3VuZGF0aW9uPC9oMj4KKyAgICA8dWwgY2xhc3M9Im5hdiI+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnLyI+QWJvdXQgVXM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZm91bmRhdGlvbi9jb250YWN0LnBocCI+Q29udGFjdCBVczwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2RvbmF0ZSI+RG9uYXRlPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbWVtYmVyc2hpcC8iPk1lbWJlcnM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzLyI+R292ZXJuYW5jZTwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvQ29tbXVuaXR5X0NvZGVfb2ZfQ29uZHVjdC5waHAiPkNvZGUgb2YgQ29uZHVjdDwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2FydHdvcmsvIj5Mb2dvIGFuZCBBcnR3b3JrPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2ZvdW5kYXRpb24vZGlyZWN0b3JzLnBocCI+Qm9hcmQgb2YgRGlyZWN0b3JzPC9hPjwvbGk+PC91bD4gICAgICA8L3NlY3Rpb24+CisgICAgICA8c2VjdGlvbiBjbGFzcz0iY29sLXNtLTYgaGlkZGVuLXByaW50IiBpZD0iZm9vdGVyLWxlZ2FsIj4KKyAgICAgICAgICAgIDxoMiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+TGVnYWw8L2gyPgorICAgIDx1bCBjbGFzcz0ibmF2Ij48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9wcml2YWN5LnBocCI+UHJpdmFjeSBQb2xpY3k8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC90ZXJtc29mdXNlLnBocCI+VGVybXMgb2YgVXNlPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY29weXJpZ2h0LnBocCI+Q29weXJpZ2h0IEFnZW50PC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8iPkVjbGlwc2UgUHVibGljIExpY2Vuc2U8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC8iPkxlZ2FsIFJlc291cmNlczwvYT48L2xpPjwvdWw+ICAgICAgPC9zZWN0aW9uPgorICAgICAgPHNlY3Rpb24gY2xhc3M9ImNvbC1zbS02IGhpZGRlbi1wcmludCIgaWQ9ImZvb3Rlci11c2VmdWwtbGlua3MiPgorICAgICAgICAgICAgPGgyIGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5Vc2VmdWwgTGlua3M8L2gyPgorICAgIDx1bCBjbGFzcz0ibmF2Ij48bGk+PGEgaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3MvIj5SZXBvcnQgYSBCdWc8L2E+PC9saT48bGk+PGEgaHJlZj0iLy9oZWxwLmVjbGlwc2Uub3JnLyI+RG9jdW1lbnRhdGlvbjwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2NvbnRyaWJ1dGUvIj5Ib3cgdG8gQ29udHJpYnV0ZTwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL21haWwvIj5NYWlsaW5nIExpc3RzPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZm9ydW1zLyI+Rm9ydW1zPC9hPjwvbGk+PGxpPjxhIGhyZWY9Ii8vbWFya2V0cGxhY2UuZWNsaXBzZS5vcmciPk1hcmtldHBsYWNlPC9hPjwvbGk+PC91bD4gICAgICA8L3NlY3Rpb24+CisgICAgICA8c2VjdGlvbiBjbGFzcz0iY29sLXNtLTYgaGlkZGVuLXByaW50IiBpZD0iZm9vdGVyLW90aGVyIj4KKyAgICAgICAgICAgIDxoMiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+T3RoZXI8L2gyPgorICAgIDx1bCBjbGFzcz0ibmF2Ij48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9pZGUvIj5JREUgYW5kIFRvb2xzPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcHJvamVjdHMiPlByb2plY3RzPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL3dvcmtpbmdncm91cHMvIj5Xb3JraW5nIEdyb3VwczwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9yZXNlYXJjaC8iPlJlc2VhcmNoQEVjbGlwc2U8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9zZWN1cml0eS8iPlJlcG9ydCBhIFZ1bG5lcmFiaWxpdHk8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly9zdGF0dXMuZWNsaXBzZS5vcmciPlNlcnZpY2UgU3RhdHVzPC9hPjwvbGk+PC91bD4gICAgICA8L3NlY3Rpb24+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtc20tMjQgbWFyZ2luLXRvcC0yMCI+CisgICAgICAgIDxkaXYgY2xhc3M9InJvdyI+CisgICAgICAgICAgPGRpdiBpZD0iY29weXJpZ2h0IiBjbGFzcz0iY29sLW1kLTE2Ij4KKyAgICAgICAgICAgIDxwIGlkPSJjb3B5cmlnaHQtdGV4dCI+Q29weXJpZ2h0ICZjb3B5OyBFY2xpcHNlIEZvdW5kYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuPC9wPgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC04IHNvY2lhbC1tZWRpYSI+CisgICAgICAgICAgICA8dWwgY2xhc3M9Imxpc3QtaW5saW5lIj4KKyAgICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzb2NpYWwtbWVkaWEtbGluayBmYS1zdGFjayBmYS1sZyIgaHJlZj0iaHR0cHM6Ly90d2l0dGVyLmNvbS9FY2xpcHNlRmRuIiBhcmlhLWxhYmVsPSJFY2xpcHNlIEZvdW5kYXRpb24gVHdpdHRlciBwcm9maWxlIj4KKyAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1jaXJjbGUtdGhpbiBmYS1zdGFjay0yeCI+PC9pPgorICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXR3aXR0ZXIgZmEtc3RhY2stMXgiPjwvaT4KKyAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic29jaWFsLW1lZGlhLWxpbmsgZmEtc3RhY2sgZmEtbGciIGhyZWY9Imh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9lY2xpcHNlLm9yZyIgYXJpYS1sYWJlbD0iRWNsaXBzZSBGb3VuZGF0aW9uIEZhY2Vib29rIHBhZ2UiPgorICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWNpcmNsZS10aGluIGZhLXN0YWNrLTJ4Ij48L2k+CisgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtZmFjZWJvb2sgZmEtc3RhY2stMXgiPjwvaT4KKyAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic29jaWFsLW1lZGlhLWxpbmsgZmEtc3RhY2sgZmEtbGciIGhyZWY9Imh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3VzZXIvRWNsaXBzZUZkbiIgYXJpYS1sYWJlbD0iRWNsaXBzZSBGb3VuZGF0aW9uIFlvdVR1YmUgY2hhbm5lbCI+CisgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtY2lyY2xlLXRoaW4gZmEtc3RhY2stMngiPjwvaT4KKyAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS15b3V0dWJlIGZhLXN0YWNrLTF4Ij48L2k+CisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNvY2lhbC1tZWRpYS1saW5rIGZhLXN0YWNrIGZhLWxnIiBocmVmPSJodHRwczovL3d3dy5saW5rZWRpbi5jb20vY29tcGFueS9lY2xpcHNlLWZvdW5kYXRpb24iIGFyaWEtbGFiZWw9IkVjbGlwc2UgRm91bmRhdGlvbiBMaW5rZWRpbiBwcm9maWxlIj4KKyAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1jaXJjbGUtdGhpbiBmYS1zdGFjay0yeCI+PC9pPgorICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWxpbmtlZGluIGZhLXN0YWNrLTF4Ij48L2k+CisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4gICAgICA8YSBocmVmPSIjIiBjbGFzcz0ic2Nyb2xsdXAiPkJhY2sgdG8gdGhlIHRvcDwvYT4KKyAgICA8L2Rpdj4KKyAgPC9kaXY+Cis8L2Zvb3Rlcj4KKzwhLS0gUGxhY2VkIGF0IHRoZSBlbmQgb2YgdGhlIGRvY3VtZW50IHNvIHRoZSBwYWdlcyBsb2FkIGZhc3RlciAtLT4KKzxzY3JpcHQgc3JjPSIvZWNsaXBzZS5vcmctY29tbW9uL3RoZW1lcy9zb2xzdGljZS9wdWJsaWMvamF2YXNjcmlwdC9tYWluLm1pbi5qcz92YXI9MC4wLjE3MiI+PC9zY3JpcHQ+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UucnNlLmNvcmUvLmxvZyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UucnNlLmNvcmUvLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5yc2UuY29yZS8ubG9nCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLnJzZS5jb3JlL2luaXRpYWxpemVyTWFya3Mvb3JnLmVjbGlwc2UucnNlLmludGVybmFsLmNvcmUuUlNFTG9jYWxDb25uZWN0aW9uSW5pdGlhbGl6ZXIubWFyayBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UucnNlLmNvcmUvaW5pdGlhbGl6ZXJNYXJrcy9vcmcuZWNsaXBzZS5yc2UuaW50ZXJuYWwuY29yZS5SU0VMb2NhbENvbm5lY3Rpb25Jbml0aWFsaXplci5tYXJrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLnJzZS5jb3JlL2luaXRpYWxpemVyTWFya3Mvb3JnLmVjbGlwc2UucnNlLmludGVybmFsLmNvcmUuUlNFTG9jYWxDb25uZWN0aW9uSW5pdGlhbGl6ZXIubWFyawpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5zZWFyY2gvZGlhbG9nX3NldHRpbmdzLnhtbCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uuc2VhcmNoL2RpYWxvZ19zZXR0aW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDczOTk0ZQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uuc2VhcmNoL2RpYWxvZ19zZXR0aW5ncy54bWwKQEAgLTAsMCArMSwyMDAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8c2VjdGlvbiBuYW1lPSJXb3JrYmVuY2giPgorCTxzZWN0aW9uIG5hbWU9IlNlYXJjaERpYWxvZy5TY29wZVBhcnQiPgorCQk8aXRlbSB2YWx1ZT0iMCIga2V5PSJzY29wZSIvPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBuYW1lPSIiPgorCQk8aXRlbSB2YWx1ZT0iMTAwMCIga2V5PSJvcmcuZWNsaXBzZS5zZWFyY2gucmVzdWx0cGFnZS5saW1pdCIvPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBuYW1lPSIiPgorCQk8aXRlbSB2YWx1ZT0iMTAwMCIga2V5PSJvcmcuZWNsaXBzZS5zZWFyY2gucmVzdWx0cGFnZS5saW1pdCIvPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBuYW1lPSJUZXh0U2VhcmNoUGFnZSI+CisJCTxpdGVtIHZhbHVlPSIxMiIga2V5PSJISVNUT1JZX1NJWkUiLz4KKwkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9IkNBU0VfU0VOU0lUSVZFIi8+CisJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJSRUdfRVhfU0VBUkNIIi8+CisJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJXSE9MRV9XT1JEIi8+CisJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJTRUFSQ0hfREVSSVZFRCIvPgorCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iU0VBUkNIX0lOX0JJTkFSSUVTIi8+CisJCTxzZWN0aW9uIG5hbWU9IkhJU1RPUlk2Ij4KKwkJCTxpdGVtIHZhbHVlPSJ0cnVlIiBrZXk9Imlnbm9yZUNhc2UiLz4KKwkJCTxpdGVtIHZhbHVlPSIwIiBrZXk9InNjb3BlIi8+CisJCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iaXNXaG9sZVdvcmQiLz4KKwkJCTxpdGVtIHZhbHVlPSJTeXN0ZW0ub3V0IiBrZXk9InRleHRQYXR0ZXJuIi8+CisJCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iaXNSZWdFeFNlYXJjaCIvPgorCQkJPGxpc3Qga2V5PSJmaWxlTmFtZVBhdHRlcm5zIj4KKwkJCQk8aXRlbSB2YWx1ZT0iKi5qYXZhIi8+CisJCQk8L2xpc3Q+CisJCQk8bGlzdCBrZXk9IndvcmtpbmdTZXRzIj4KKwkJCTwvbGlzdD4KKwkJPC9zZWN0aW9uPgorCQk8c2VjdGlvbiBuYW1lPSJISVNUT1JZNyI+CisJCQk8aXRlbSB2YWx1ZT0idHJ1ZSIga2V5PSJpZ25vcmVDYXNlIi8+CisJCQk8aXRlbSB2YWx1ZT0iMCIga2V5PSJzY29wZSIvPgorCQkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9ImlzV2hvbGVXb3JkIi8+CisJCQk8aXRlbSB2YWx1ZT0iY2hlY2tQYXRoIiBrZXk9InRleHRQYXR0ZXJuIi8+CisJCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iaXNSZWdFeFNlYXJjaCIvPgorCQkJPGxpc3Qga2V5PSJmaWxlTmFtZVBhdHRlcm5zIj4KKwkJCQk8aXRlbSB2YWx1ZT0iKi5qYXZhIi8+CisJCQk8L2xpc3Q+CisJCQk8bGlzdCBrZXk9IndvcmtpbmdTZXRzIj4KKwkJCTwvbGlzdD4KKwkJPC9zZWN0aW9uPgorCQk8c2VjdGlvbiBuYW1lPSJISVNUT1JZNCI+CisJCQk8aXRlbSB2YWx1ZT0idHJ1ZSIga2V5PSJpZ25vcmVDYXNlIi8+CisJCQk8aXRlbSB2YWx1ZT0iMCIga2V5PSJzY29wZSIvPgorCQkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9ImlzV2hvbGVXb3JkIi8+CisJCQk8aXRlbSB2YWx1ZT0icmV3cml0ZVN1YlF1ZXJ5IiBrZXk9InRleHRQYXR0ZXJuIi8+CisJCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iaXNSZWdFeFNlYXJjaCIvPgorCQkJPGxpc3Qga2V5PSJmaWxlTmFtZVBhdHRlcm5zIj4KKwkJCQk8aXRlbSB2YWx1ZT0iKi5qYXZhIi8+CisJCQk8L2xpc3Q+CisJCQk8bGlzdCBrZXk9IndvcmtpbmdTZXRzIj4KKwkJCTwvbGlzdD4KKwkJPC9zZWN0aW9uPgorCQk8c2VjdGlvbiBuYW1lPSJISVNUT1JZMTAiPgorCQkJPGl0ZW0gdmFsdWU9InRydWUiIGtleT0iaWdub3JlQ2FzZSIvPgorCQkJPGl0ZW0gdmFsdWU9IjAiIGtleT0ic2NvcGUiLz4KKwkJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJpc1dob2xlV29yZCIvPgorCQkJPGl0ZW0gdmFsdWU9InRyYXZlcnNlX2FuZF9yZXdyaXRlX0tvcmFsUXVlcnkiIGtleT0idGV4dFBhdHRlcm4iLz4KKwkJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJpc1JlZ0V4U2VhcmNoIi8+CisJCQk8bGlzdCBrZXk9ImZpbGVOYW1lUGF0dGVybnMiPgorCQkJCTxpdGVtIHZhbHVlPSIqLmphdmEiLz4KKwkJCTwvbGlzdD4KKwkJCTxsaXN0IGtleT0id29ya2luZ1NldHMiPgorCQkJPC9saXN0PgorCQk8L3NlY3Rpb24+CisJCTxzZWN0aW9uIG5hbWU9IkhJU1RPUlk1Ij4KKwkJCTxpdGVtIHZhbHVlPSJ0cnVlIiBrZXk9Imlnbm9yZUNhc2UiLz4KKwkJCTxpdGVtIHZhbHVlPSIwIiBrZXk9InNjb3BlIi8+CisJCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iaXNXaG9sZVdvcmQiLz4KKwkJCTxpdGVtIHZhbHVlPSJyZXdyaXRlT2JqTm9kZSIga2V5PSJ0ZXh0UGF0dGVybiIvPgorCQkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9ImlzUmVnRXhTZWFyY2giLz4KKwkJCTxsaXN0IGtleT0iZmlsZU5hbWVQYXR0ZXJucyI+CisJCQkJPGl0ZW0gdmFsdWU9IiouamF2YSIvPgorCQkJPC9saXN0PgorCQkJPGxpc3Qga2V5PSJ3b3JraW5nU2V0cyI+CisJCQk8L2xpc3Q+CisJCTwvc2VjdGlvbj4KKwkJPHNlY3Rpb24gbmFtZT0iRVhURU5TSU9OUyI+CisJCQk8aXRlbSB2YWx1ZT0iKi5qYXZhIiBrZXk9IjAiLz4KKwkJPC9zZWN0aW9uPgorCQk8c2VjdGlvbiBuYW1lPSJISVNUT1JZMTEiPgorCQkJPGl0ZW0gdmFsdWU9InRydWUiIGtleT0iaWdub3JlQ2FzZSIvPgorCQkJPGl0ZW0gdmFsdWU9IjAiIGtleT0ic2NvcGUiLz4KKwkJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJpc1dob2xlV29yZCIvPgorCQkJPGl0ZW0gdmFsdWU9InRyYXZlcnNlSnNvblRyZWUiIGtleT0idGV4dFBhdHRlcm4iLz4KKwkJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJpc1JlZ0V4U2VhcmNoIi8+CisJCQk8bGlzdCBrZXk9ImZpbGVOYW1lUGF0dGVybnMiPgorCQkJCTxpdGVtIHZhbHVlPSIqLmphdmEiLz4KKwkJCTwvbGlzdD4KKwkJCTxsaXN0IGtleT0id29ya2luZ1NldHMiPgorCQkJPC9saXN0PgorCQk8L3NlY3Rpb24+CisJCTxzZWN0aW9uIG5hbWU9IkhJU1RPUlk4Ij4KKwkJCTxpdGVtIHZhbHVlPSJ0cnVlIiBrZXk9Imlnbm9yZUNhc2UiLz4KKwkJCTxpdGVtIHZhbHVlPSIwIiBrZXk9InNjb3BlIi8+CisJCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iaXNXaG9sZVdvcmQiLz4KKwkJCTxpdGVtIHZhbHVlPSJpbml0X0NvbnN0YW50RnJvbVByb3BlcnRpZXMiIGtleT0idGV4dFBhdHRlcm4iLz4KKwkJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJpc1JlZ0V4U2VhcmNoIi8+CisJCQk8bGlzdCBrZXk9ImZpbGVOYW1lUGF0dGVybnMiPgorCQkJCTxpdGVtIHZhbHVlPSIqLmphdmEiLz4KKwkJCTwvbGlzdD4KKwkJCTxsaXN0IGtleT0id29ya2luZ1NldHMiPgorCQkJPC9saXN0PgorCQk8L3NlY3Rpb24+CisJCTxzZWN0aW9uIG5hbWU9IkhJU1RPUlk5Ij4KKwkJCTxpdGVtIHZhbHVlPSJ0cnVlIiBrZXk9Imlnbm9yZUNhc2UiLz4KKwkJCTxpdGVtIHZhbHVlPSIwIiBrZXk9InNjb3BlIi8+CisJCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iaXNXaG9sZVdvcmQiLz4KKwkJCTxpdGVtIHZhbHVlPSJXZm9ybW0iIGtleT0idGV4dFBhdHRlcm4iLz4KKwkJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJpc1JlZ0V4U2VhcmNoIi8+CisJCQk8bGlzdCBrZXk9ImZpbGVOYW1lUGF0dGVybnMiPgorCQkJCTxpdGVtIHZhbHVlPSIqLmphdmEiLz4KKwkJCTwvbGlzdD4KKwkJCTxsaXN0IGtleT0id29ya2luZ1NldHMiPgorCQkJPC9saXN0PgorCQk8L3NlY3Rpb24+CisJCTxzZWN0aW9uIG5hbWU9IkhJU1RPUlkyIj4KKwkJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJpZ25vcmVDYXNlIi8+CisJCQk8aXRlbSB2YWx1ZT0iMCIga2V5PSJzY29wZSIvPgorCQkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9ImlzV2hvbGVXb3JkIi8+CisJCQk8aXRlbSB2YWx1ZT0iSU5TRVJUIiBrZXk9InRleHRQYXR0ZXJuIi8+CisJCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iaXNSZWdFeFNlYXJjaCIvPgorCQkJPGxpc3Qga2V5PSJmaWxlTmFtZVBhdHRlcm5zIj4KKwkJCQk8aXRlbSB2YWx1ZT0iKi5qYXZhIi8+CisJCQk8L2xpc3Q+CisJCQk8bGlzdCBrZXk9IndvcmtpbmdTZXRzIj4KKwkJCTwvbGlzdD4KKwkJPC9zZWN0aW9uPgorCQk8c2VjdGlvbiBuYW1lPSJISVNUT1JZMyI+CisJCQk8aXRlbSB2YWx1ZT0idHJ1ZSIga2V5PSJpZ25vcmVDYXNlIi8+CisJCQk8aXRlbSB2YWx1ZT0iMCIga2V5PSJzY29wZSIvPgorCQkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9ImlzV2hvbGVXb3JkIi8+CisJCQk8aXRlbSB2YWx1ZT0icmVpbiBhdXMiIGtleT0idGV4dFBhdHRlcm4iLz4KKwkJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJpc1JlZ0V4U2VhcmNoIi8+CisJCQk8bGlzdCBrZXk9ImZpbGVOYW1lUGF0dGVybnMiPgorCQkJCTxpdGVtIHZhbHVlPSIqLmphdmEiLz4KKwkJCTwvbGlzdD4KKwkJCTxsaXN0IGtleT0id29ya2luZ1NldHMiPgorCQkJPC9saXN0PgorCQk8L3NlY3Rpb24+CisJCTxzZWN0aW9uIG5hbWU9IkhJU1RPUlkwIj4KKwkJCTxpdGVtIHZhbHVlPSJ0cnVlIiBrZXk9Imlnbm9yZUNhc2UiLz4KKwkJCTxpdGVtIHZhbHVlPSIwIiBrZXk9InNjb3BlIi8+CisJCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iaXNXaG9sZVdvcmQiLz4KKwkJCTxpdGVtIHZhbHVlPSJzZXRBdXRvQ29tbWl0IiBrZXk9InRleHRQYXR0ZXJuIi8+CisJCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iaXNSZWdFeFNlYXJjaCIvPgorCQkJPGxpc3Qga2V5PSJmaWxlTmFtZVBhdHRlcm5zIj4KKwkJCQk8aXRlbSB2YWx1ZT0iKi5qYXZhIi8+CisJCQk8L2xpc3Q+CisJCQk8bGlzdCBrZXk9IndvcmtpbmdTZXRzIj4KKwkJCTwvbGlzdD4KKwkJPC9zZWN0aW9uPgorCQk8c2VjdGlvbiBuYW1lPSJISVNUT1JZMSI+CisJCQk8aXRlbSB2YWx1ZT0idHJ1ZSIga2V5PSJpZ25vcmVDYXNlIi8+CisJCQk8aXRlbSB2YWx1ZT0iMCIga2V5PSJzY29wZSIvPgorCQkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9ImlzV2hvbGVXb3JkIi8+CisJCQk8aXRlbSB2YWx1ZT0iYXV0b2NvbW1pdCIga2V5PSJ0ZXh0UGF0dGVybiIvPgorCQkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9ImlzUmVnRXhTZWFyY2giLz4KKwkJCTxsaXN0IGtleT0iZmlsZU5hbWVQYXR0ZXJucyI+CisJCQkJPGl0ZW0gdmFsdWU9IiouamF2YSIvPgorCQkJPC9saXN0PgorCQkJPGxpc3Qga2V5PSJ3b3JraW5nU2V0cyI+CisJCQk8L2xpc3Q+CisJCTwvc2VjdGlvbj4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0ib3JnLmVjbGlwc2Uuc2VhcmNoLnRleHQuRmlsZVNlYXJjaFJlc3VsdFBhZ2UiPgorCQk8aXRlbSB2YWx1ZT0iMTAwMCIga2V5PSJvcmcuZWNsaXBzZS5zZWFyY2gucmVzdWx0cGFnZS5saW1pdCIvPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBuYW1lPSJTZWFyY2giPgorCQk8bGlzdCBrZXk9IlNlYXJjaC5wcm9jZXNzZWRQYWdlSWRzIj4KKwkJCTxpdGVtIHZhbHVlPSJvcmcuZWNsaXBzZS5zZWFyY2guaW50ZXJuYWwudWkudGV4dC5UZXh0U2VhcmNoUGFnZSIvPgorCQkJPGl0ZW0gdmFsdWU9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnNlYXJjaC5wYWdlIi8+CisJCQk8aXRlbSB2YWx1ZT0ib3JnLmVjbGlwc2UuZWdpdC51aS5jb21taXRTZWFyY2hQYWdlIi8+CisJCQk8aXRlbSB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LnVpLkphdmFTZWFyY2hQYWdlIi8+CisJCQk8aXRlbSB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuSmF2YVNlYXJjaFBhZ2UiLz4KKwkJPC9saXN0PgorCQk8bGlzdCBrZXk9IlNlYXJjaC5lbmFibGVkUGFnZUlkcyI+CisJCQk8aXRlbSB2YWx1ZT0ib3JnLmVjbGlwc2Uuc2VhcmNoLmludGVybmFsLnVpLnRleHQuVGV4dFNlYXJjaFBhZ2UiLz4KKwkJCTxpdGVtIHZhbHVlPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5zZWFyY2gucGFnZSIvPgorCQkJPGl0ZW0gdmFsdWU9Im9yZy5lY2xpcHNlLmVnaXQudWkuY29tbWl0U2VhcmNoUGFnZSIvPgorCQkJPGl0ZW0gdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC51aS5KYXZhU2VhcmNoUGFnZSIvPgorCQkJPGl0ZW0gdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLkphdmFTZWFyY2hQYWdlIi8+CisJCTwvbGlzdD4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0iU2VhcmNoRGlhbG9nIj4KKwkJPGl0ZW0gdmFsdWU9Im9yZy5lY2xpcHNlLnNlYXJjaC5pbnRlcm5hbC51aS50ZXh0LlRleHRTZWFyY2hQYWdlIiBrZXk9IlBSRVZJT1VTX1BBR0UiLz4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0ib3JnLmVjbGlwc2UuamR0LnVpLkphdmFTZWFyY2hSZXN1bHRQYWdlIj4KKwkJPGl0ZW0gdmFsdWU9IjEwMDAiIGtleT0ib3JnLmVjbGlwc2UuamR0LnNlYXJjaC5yZXN1bHRwYWdlLmxpbWl0Ii8+CisJCTxpdGVtIHZhbHVlPSJUUlVFIiBrZXk9Im9yZy5lY2xpcHNlLmpkdC5zZWFyY2gucmVzdWx0cGFnZS5saW1pdF9lbmFibGVkIi8+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9IkRpYWxvZ0JvdW5kc19TZWFyY2hEaWFsb2ciPgorCQk8aXRlbSB2YWx1ZT0iNTEzIiBrZXk9IkRJQUxPR19XSURUSCIvPgorCQk8aXRlbSB2YWx1ZT0iMXxTZWdvZSBVSXw5LjB8MHxXSU5ET1dTfDF8LTEyfDB8MHwwfDQwMHwwfDB8MHwxfDB8MHwwfDB8U2Vnb2UgVUkiIGtleT0iRElBTE9HX0ZPTlRfTkFNRSIvPgorCQk8aXRlbSB2YWx1ZT0iNDYyIiBrZXk9IkRJQUxPR19IRUlHSFQiLz4KKwkJPGl0ZW0gdmFsdWU9IjcxNSIga2V5PSJESUFMT0dfWF9PUklHSU4iLz4KKwkJPGl0ZW0gdmFsdWU9IjIyMCIga2V5PSJESUFMT0dfWV9PUklHSU4iLz4KKwk8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLnRpcHMuaWRlL2RpYWxvZ19zZXR0aW5ncy54bWwgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLnRpcHMuaWRlL2RpYWxvZ19zZXR0aW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNhMGI3NwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UudGlwcy5pZGUvZGlhbG9nX3NldHRpbmdzLnhtbApAQCAtMCwwICsxLDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8c2VjdGlvbiBuYW1lPSJXb3JrYmVuY2giPgorPC9zZWN0aW9uPgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS51aS5pZGUvZGlhbG9nX3NldHRpbmdzLnhtbCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UudWkuaWRlL2RpYWxvZ19zZXR0aW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNhMWVlOAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UudWkuaWRlL2RpYWxvZ19zZXR0aW5ncy54bWwKQEAgLTAsMCArMSw1MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzZWN0aW9uIG5hbWU9IldvcmtiZW5jaCI+CisJPGxpc3Qga2V5PSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC53aXphcmRzLmRhdGF0cmFuc2Zlci5TbWFydEltcG9ydFJvb3RXaXphcmRQYWdlLmtub3duU291cmNlcyI+CisJCTxpdGVtIHZhbHVlPSJDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzIi8+CisJCTxpdGVtIHZhbHVlPSJDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzIi8+CisJCTxpdGVtIHZhbHVlPSJGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1wuc2V0dGluZ3MiLz4KKwk8L2xpc3Q+CisJPHNlY3Rpb24gbmFtZT0iQ2xlYW5EaWFsb2dTZXR0aW5ncyI+CisJCTxpdGVtIHZhbHVlPSI1MDAiIGtleT0iRElBTE9HX1dJRFRIIi8+CisJCTxpdGVtIHZhbHVlPSJ0cnVlIiBrZXk9IkJVSUxEX0FMTCIvPgorCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iVE9HR0xFX1NFTEVDVEVEIi8+CisJCTxpdGVtIHZhbHVlPSI0NjUiIGtleT0iRElBTE9HX0hFSUdIVCIvPgorCQk8aXRlbSB2YWx1ZT0iNjk0IiBrZXk9IkRJQUxPR19YX09SSUdJTiIvPgorCQk8aXRlbSB2YWx1ZT0iMjEwIiBrZXk9IkRJQUxPR19ZX09SSUdJTiIvPgorCQk8aXRlbSB2YWx1ZT0idHJ1ZSIga2V5PSJCVUlMRF9OT1ciLz4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0iRXh0ZXJuYWxQcm9qZWN0SW1wb3J0V2l6YXJkIj4KKwkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9IldpemFyZFByb2plY3RzSW1wb3J0UGFnZS5TVE9SRV9ORVNURURfUFJPSkVDVFMiLz4KKwkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9IldpemFyZFByb2plY3RzSW1wb3J0UGFnZS5TVE9SRV9DT1BZX1BST0pFQ1RfSUQiLz4KKwkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9IldpemFyZFByb2plY3RzSW1wb3J0UGFnZS5TVE9SRV9BUkNISVZFX1NFTEVDVEVEIi8+CisJCTxsaXN0IGtleT0iV2l6YXJkUHJvamVjdHNJbXBvcnRQYWdlLlNUT1JFX0RJUkVDVE9SSUVTIj4KKwkJCTxpdGVtIHZhbHVlPSJDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudCIvPgorCQkJPGl0ZW0gdmFsdWU9IkM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMiLz4KKwkJCTxpdGVtIHZhbHVlPSJDOlxteUlEU1xEYXRlblxLb3JBUFxHbGVtbVNlcnZpY2VzIi8+CisJCQk8aXRlbSB2YWx1ZT0iRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXGdsZW1tIi8+CisJCTwvbGlzdD4KKwkJPGxpc3Qga2V5PSJXaXphcmRQcm9qZWN0c0ltcG9ydFBhZ2UuU1RPUkVfQVJDSElWRVMiPgorCQkJPGl0ZW0gdmFsdWU9IiIvPgorCQk8L2xpc3Q+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9IlJlc291cmNlTmF2aWdhdG9yIj4KKwkJPGl0ZW0gdmFsdWU9IkFnZ3JlZ2F0ZSBmb3Igd2luZG93IDE1NzM1NTgwMDgzNjciIGtleT0iUmVzb3VyY2VXb3JraW5nU2V0RmlsdGVyLlNUT1JFX1dPUktJTkdfU0VUIi8+CisJCTxpdGVtIHZhbHVlPSIxIiBrZXk9IlJlc291cmNlVmlld2VyLlNUT1JFX1NPUlRfVFlQRSIvPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBuYW1lPSJXT1JLQkVOQ0hfU0VUVElOR1MiPgorCQk8bGlzdCBrZXk9IkVOQUJMRURfVFJBTlNGRVJTIj4KKwkJPC9saXN0PgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBuYW1lPSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuZGlhbG9ncy5Qcm9qZWN0Q29udGVudHNMb2NhdGlvbkFyZWEiPgorCQk8aXRlbSB2YWx1ZT0iQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xIiBrZXk9Ik9VVFNJREVfTE9DQVRJT04iLz4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0iTmV3V2l6YXJkQWN0aW9uIj4KKwkJPGl0ZW0gdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC51aS53aXphcmRzLkphdmFQcm9qZWN0V2l6YXJkIiBrZXk9Ik5ld1dpemFyZFNlbGVjdGlvblBhZ2UuU1RPUkVfU0VMRUNURURfSUQiLz4KKwkJPGxpc3Qga2V5PSJOZXdXaXphcmRTZWxlY3Rpb25QYWdlLlNUT1JFX0VYUEFOREVEX0NBVEVHT1JJRVNfSUQiPgorCQkJPGl0ZW0gdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC51aS5qYXZhIi8+CisJCTwvbGlzdD4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0iQ2hvb3NlV29ya3NwYWNlRGlhbG9nU2V0dGluZ3MiPgorCQk8aXRlbSB2YWx1ZT0iNjU4IiBrZXk9IkRJQUxPR19YX09SSUdJTiIvPgorCQk8aXRlbSB2YWx1ZT0iMjc5IiBrZXk9IkRJQUxPR19ZX09SSUdJTiIvPgorCTwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UudWkuaW50cm8vZGlhbG9nX3NldHRpbmdzLnhtbCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UudWkuaW50cm8vZGlhbG9nX3NldHRpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTE4ZjAyCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS51aS5pbnRyby9kaWFsb2dfc2V0dGluZ3MueG1sCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzZWN0aW9uIG5hbWU9IldvcmtiZW5jaCI+CisJPGl0ZW0gdmFsdWU9IjEwMjQiIGtleT0iaW50cm9MYXVuY2hCYXIubG9jYXRpb24iLz4KKzwvc2VjdGlvbj4KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UudWkuaW50cm8vaW50cm9zdGF0ZSBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UudWkuaW50cm8vaW50cm9zdGF0ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzZkNTZjCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS51aS5pbnRyby9pbnRyb3N0YXRlCkBAIC0wLDAgKzEsMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzdGF0ZSByZW9wZW49InRydWUiLz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC50ZXh0ZWRpdG9yL2RpYWxvZ19zZXR0aW5ncy54bWwgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC50ZXh0ZWRpdG9yL2RpYWxvZ19zZXR0aW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY2ODcwMgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UudWkud29ya2JlbmNoLnRleHRlZGl0b3IvZGlhbG9nX3NldHRpbmdzLnhtbApAQCAtMCwwICsxLDQxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHNlY3Rpb24gbmFtZT0iV29ya2JlbmNoIj4KKwk8c2VjdGlvbiBuYW1lPSJvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLkZpbmRSZXBsYWNlRGlhbG9nIj4KKwkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9ImlzUmVnRXgiLz4KKwkJPGl0ZW0gdmFsdWU9InJldHVybiIga2V5PSJzZWxlY3Rpb24iLz4KKwkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9ImNhc2VzZW5zaXRpdmUiLz4KKwkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9ImluY3JlbWVudGFsIi8+CisJCTxpdGVtIHZhbHVlPSJ0cnVlIiBrZXk9IndyYXAiLz4KKwkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9Indob2xld29yZCIvPgorCQk8bGlzdCBrZXk9ImZpbmRoaXN0b3J5Ij4KKwkJCTxpdGVtIHZhbHVlPSJyZXR1cm4iLz4KKwkJCTxpdGVtIHZhbHVlPSJNYXhMZW1tYVNpemUiLz4KKwkJCTxpdGVtIHZhbHVlPSJmbmFtZVNjcmlwdCIvPgorCQkJPGl0ZW0gdmFsdWU9ImRvR2xlbSIvPgorCQkJPGl0ZW0gdmFsdWU9IklOU0VSVCIvPgorCQkJPGl0ZW0gdmFsdWU9ImRlcmJ5REJVUkwiLz4KKwkJCTxpdGVtIHZhbHVlPSJmbmFtZURCIi8+CisJCQk8aXRlbSB2YWx1ZT0ibGlzdCIvPgorCQkJPGl0ZW0gdmFsdWU9ImxpbHN0Ii8+CisJCQk8aXRlbSB2YWx1ZT0iZm9ybWF0RGJOYW1lIi8+CisJCQk8aXRlbSB2YWx1ZT0icmVzcG9uc2VDb250ZW50TGF0MSIvPgorCQkJPGl0ZW0gdmFsdWU9Im5ldyBTdHJpbmciLz4KKwkJCTxpdGVtIHZhbHVlPSJjaGVja1BhdGgiLz4KKwkJCTxpdGVtIHZhbHVlPSJoaWRlIi8+CisJCQk8aXRlbSB2YWx1ZT0icmV3cml0ZVN1YlF1ZXJ5Ii8+CisJCTwvbGlzdD4KKwkJPGxpc3Qga2V5PSJyZXBsYWNlaGlzdG9yeSI+CisJCQk8aXRlbSB2YWx1ZT0iZm91dCIvPgorCQkJPGl0ZW0gdmFsdWU9IldvcmRmb3JtU2VydmljZXMuZiIvPgorCQkJPGl0ZW0gdmFsdWU9Ildmb3JtU2VydmljZXMuZiIvPgorCQkJPGl0ZW0gdmFsdWU9IkdsZW1tU2VydmljZXMuZiIvPgorCQk8L2xpc3Q+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9Im9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuRmluZFJlcGxhY2VEaWFsb2dfZGlhbG9nQm91bmRzIj4KKwkJPGl0ZW0gdmFsdWU9IjI4NCIga2V5PSJESUFMT0dfV0lEVEgiLz4KKwkJPGl0ZW0gdmFsdWU9IjF8U2Vnb2UgVUl8OS4wfDB8V0lORE9XU3wxfC0xMnwwfDB8MHw0MDB8MHwwfDB8MXwwfDB8MHwwfFNlZ29lIFVJIiBrZXk9IkRJQUxPR19GT05UX05BTUUiLz4KKwkJPGl0ZW0gdmFsdWU9IjM5MSIga2V5PSJESUFMT0dfSEVJR0hUIi8+CisJCTxpdGVtIHZhbHVlPSIxMTIwIiBrZXk9IkRJQUxPR19YX09SSUdJTiIvPgorCQk8aXRlbSB2YWx1ZT0iMzMyIiBrZXk9IkRJQUxPR19ZX09SSUdJTiIvPgorCTwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL2RpYWxvZ19zZXR0aW5ncy54bWwgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9kaWFsb2dfc2V0dGluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNDVmN2UKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9kaWFsb2dfc2V0dGluZ3MueG1sCkBAIC0wLDAgKzEsMzUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8c2VjdGlvbiBuYW1lPSJXb3JrYmVuY2giPgorCTxzZWN0aW9uIG5hbWU9IldvcmtiZW5jaFByZWZlcmVuY2VEaWFsb2dTZXR0aW5ncyI+CisJCTxpdGVtIHZhbHVlPSI0OTgiIGtleT0iRElBTE9HX1hfT1JJR0lOIi8+CisJCTxpdGVtIHZhbHVlPSIxMjkiIGtleT0iRElBTE9HX1lfT1JJR0lOIi8+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLlF1aWNrQWNjZXNzIj4KKwkJPGl0ZW0gdmFsdWU9Ii0xIiBrZXk9ImRpYWxvZ0hlaWdodCIvPgorCQk8aXRlbSB2YWx1ZT0iLTEiIGtleT0iZGlhbG9nV2lkdGgiLz4KKwkJPGxpc3Qga2V5PSJ0ZXh0RW50cmllcyI+CisJCTwvbGlzdD4KKwkJPGxpc3Qga2V5PSJvcmRlcmVkRWxlbWVudHMiPgorCQk8L2xpc3Q+CisJCTxsaXN0IGtleT0ib3JkZXJlZFByb3ZpZGVycyI+CisJCTwvbGlzdD4KKwkJPGxpc3Qga2V5PSJ0ZXh0QXJyYXkiPgorCQk8L2xpc3Q+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9Ik5ld1dpemFyZEFjdGlvbiI+CisJCTxpdGVtIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Quc2VydmxldC51aS5wcm9qZWN0LmZhY2V0LldlYlByb2plY3RXaXphcmQiIGtleT0iTmV3V2l6YXJkU2VsZWN0aW9uUGFnZS5TVE9SRV9TRUxFQ1RFRF9JRCIvPgorCQk8bGlzdCBrZXk9Ik5ld1dpemFyZFNlbGVjdGlvblBhZ2UuU1RPUkVfRVhQQU5ERURfQ0FURUdPUklFU19JRCI+CisJCQk8aXRlbSB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LnVpLmphdmEiLz4KKwkJCTxpdGVtIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud2ViLnVpIi8+CisJCTwvbGlzdD4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0iSW1wb3J0RXhwb3J0QWN0aW9uIj4KKwkJPGl0ZW0gdmFsdWU9Im9yZy5lY2xpcHNlLm0yZS5jb3JlLndpemFyZHMuTWF2ZW4ySW1wb3J0V2l6YXJkIiBrZXk9IkltcG9ydEV4cG9ydFBhZ2UuU1RPUkVfU0VMRUNURURfSU1QT1JUX1dJWkFSRF9JRCIvPgorCQk8bGlzdCBrZXk9IkltcG9ydEV4cG9ydFBhZ2UuU1RPUkVfRVhQQU5ERURfSU1QT1JUX0NBVEVHT1JJRVMiPgorCQkJPGl0ZW0gdmFsdWU9Im9yZy5lY2xpcHNlLnVpLkJhc2ljIi8+CisJCQk8aXRlbSB2YWx1ZT0ib3JnLmVjbGlwc2UubTJlIi8+CisJCTwvbGlzdD4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0iRmlsZVN5c3RlbUltcG9ydFdpemFyZCI+CisJPC9zZWN0aW9uPgorPC9zZWN0aW9uPgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvd29ya2luZ3NldHMueG1sIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvd29ya2luZ3NldHMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZTJhOTkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC93b3JraW5nc2V0cy54bWwKQEAgLTAsMCArMSw5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHdvcmtpbmdTZXRNYW5hZ2VyPgorPHdvcmtpbmdTZXQgZWRpdFBhZ2VJZD0ib3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLkR5bmFtaWNTb3VyY2VzV29ya2luZ1NldCIgZmFjdG9yeUlEPSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JraW5nU2V0RmFjdG9yeSIgaWQ9IjE1NzM1NTc5OTcyODVfMCIgbGFiZWw9IkphdmEgTWFpbiBTb3VyY2VzIiBuYW1lPSJtYWluIj4KKzxpdGVtIGVsZW1lbnRJRD0iPUdMRU1NLVNlcnZpY2VzL3NyYyIgZmFjdG9yeUlEPSJvcmcuZWNsaXBzZS5qZHQudWkuUGVyc2lzdGFibGVKYXZhRWxlbWVudEZhY3RvcnkiLz4KKzxpdGVtIGVsZW1lbnRJRD0iPUd1ZXN0L3NyYyIgZmFjdG9yeUlEPSJvcmcuZWNsaXBzZS5qZHQudWkuUGVyc2lzdGFibGVKYXZhRWxlbWVudEZhY3RvcnkiLz4KKzwvd29ya2luZ1NldD4KKzx3b3JraW5nU2V0IGVkaXRQYWdlSWQ9Im9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5EeW5hbWljU291cmNlc1dvcmtpbmdTZXQiIGZhY3RvcnlJRD0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2luZ1NldEZhY3RvcnkiIGlkPSIxNTczNTU3OTk3MzAxXzEiIGxhYmVsPSJKYXZhIFRlc3QgU291cmNlcyIgbmFtZT0idGVzdCIvPgorPHdvcmtpbmdTZXQgYWdncmVnYXRlPSJ0cnVlIiBmYWN0b3J5SUQ9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtpbmdTZXRGYWN0b3J5IiBpZD0iMTU3MzU1ODAwODM2N18yIiBsYWJlbD0iV2luZG93IFdvcmtpbmcgU2V0IiBuYW1lPSJBZ2dyZWdhdGUgZm9yIHdpbmRvdyAxNTczNTU4MDA4MzY3Ii8+Cis8L3dvcmtpbmdTZXRNYW5hZ2VyPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5tb2R1bGVjb3JlL2RlcGVuZGVuY3lDYWNoZS5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5tb2R1bGVjb3JlL2RlcGVuZGVuY3lDYWNoZS5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTRlMjRhCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLm1vZHVsZWNvcmUvZGVwZW5kZW5jeUNhY2hlLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUvcHJlZnMueG1sIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS9wcmVmcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE2YjkxYQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUvcHJlZnMueG1sCkBAIC0wLDAgKzEsOSBAQAorPHJvb3Q+CisgIDxmYWNldCBpZD0ianN0LmpheHJzIj4KKyAgICA8bm9kZSBuYW1lPSJsaWJwcm92Ij4KKyAgICAgIDxub2RlIG5hbWU9Imxhc3QtcHJvdmlkZXItdXNlZCI+CisgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iMi4xIiB2YWx1ZT0iamF4cnMtbm8tb3AtbGlicmFyeS1wcm92aWRlciIvPgorICAgICAgPC9ub2RlPgorICAgIDwvbm9kZT4KKyAgPC9mYWNldD4KKzwvcm9vdD4KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0LmNhY2hlL2NhY2hlLnhtbCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmludGVybmV0LmNhY2hlL2NhY2hlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTc0MDMzCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQuY2FjaGUvY2FjaGUueG1sCkBAIC0wLDAgKzEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PjxjYWNoZS8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2V4dGVybmFsTGlic1RpbWVTdGFtcHMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUvZXh0ZXJuYWxMaWJzVGltZVN0YW1wcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTg4NWUyCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2V4dGVybmFsTGlic1RpbWVTdGFtcHMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2luZGV4ZXMvMTQ0NjAzNzcwNy5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS9pbmRleGVzLzE0NDYwMzc3MDcuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFmNDFiZAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS9pbmRleGVzLzE0NDYwMzc3MDcuaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2luZGV4ZXMvMTUwNTE1MTI5MS5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS9pbmRleGVzLzE1MDUxNTEyOTEuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJmOGM3MQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS9pbmRleGVzLzE1MDUxNTEyOTEuaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2luZGV4ZXMvMTk4MzA2MDQ5OC5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS9pbmRleGVzLzE5ODMwNjA0OTguaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIwMTczYQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS9pbmRleGVzLzE5ODMwNjA0OTguaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2luZGV4ZXMvMjI5MTIyMjUyMC5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS9pbmRleGVzLzIyOTEyMjI1MjAuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNmZDBjNwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS9pbmRleGVzLzIyOTEyMjI1MjAuaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2luZGV4ZXMvMjY2NDI4MjI0Mi5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS9pbmRleGVzLzI2NjQyODIyNDIuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIxNGRkOAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS9pbmRleGVzLzI2NjQyODIyNDIuaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2luZGV4ZXMvMjk0Mzg1MTk2NS5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS9pbmRleGVzLzI5NDM4NTE5NjUuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIwMTczYQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS9pbmRleGVzLzI5NDM4NTE5NjUuaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2luZGV4ZXMvNjE4NDkwNjg4LmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2luZGV4ZXMvNjE4NDkwNjg4LmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MGZiZjYKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUvaW5kZXhlcy82MTg0OTA2ODguaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2luZGV4ZXMvc2F2ZWRJbmRleE5hbWVzLnR4dCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS9pbmRleGVzL3NhdmVkSW5kZXhOYW1lcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZmMDhjNQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS9pbmRleGVzL3NhdmVkSW5kZXhOYW1lcy50eHQKQEAgLTAsMCArMSw4IEBACitJTkRFWCBWRVJTSU9OIDEuNCtDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcd3NwLUtvckFQLVNlcnZpY2VzXC5tZXRhZGF0YVwucGx1Z2luc1xvcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlXGluZGV4ZXMKKzI2NjQyODIyNDIuaW5kZXgKKzE1MDUxNTEyOTEuaW5kZXgKKzIyOTEyMjI1MjAuaW5kZXgKKzYxODQ5MDY4OC5pbmRleAorMTk4MzA2MDQ5OC5pbmRleAorMTQ0NjAzNzcwNy5pbmRleAorMjk0Mzg1MTk2NS5pbmRleApkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2xpYnJhcmllcy9iYXNlQnJvd3NlckxpYnJhcnkuanMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUvbGlicmFyaWVzL2Jhc2VCcm93c2VyTGlicmFyeS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmM5OWVhCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2xpYnJhcmllcy9iYXNlQnJvd3NlckxpYnJhcnkuanMKQEAgLTAsMCArMSw1MzkzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDEzIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBPYmplY3QgRE9NRXhjZXB0aW9uKCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBPYmplY3QKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgT2JqZWN0CisgKi8KK2Z1bmN0aW9uIERPTUV4Y2VwdGlvbigpe307CitET01FeGNlcHRpb24ucHJvdG90eXBlID0gbmV3IE9iamVjdCgpOworLyoqCisgKiBDb25zdGFudCBET01FeGNlcHRpb24uSU5ERVhfU0laRV9FUlI9MQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQGNvbnN0YW50CisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgICAgICAgIAorICovCitET01FeGNlcHRpb24uSU5ERVhfU0laRV9FUlI9MTsKKy8qKgorICogQ29uc3RhbnQgRE9NRXhjZXB0aW9uLkRPTVNUUklOR19TSVpFX0VSUj0yCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAY29uc3RhbnQKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgICAgICAgCisgKi8KK0RPTUV4Y2VwdGlvbi5ET01TVFJJTkdfU0laRV9FUlI9MjsKKy8qKgorICogQ29uc3RhbnQgRE9NRXhjZXB0aW9uLkhJRVJBUkNIWV9SRVFVRVNUX0VSUj0zCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAY29uc3RhbnQKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgICAgICAgICAKKyAqLworRE9NRXhjZXB0aW9uLkhJRVJBUkNIWV9SRVFVRVNUX0VSUj0zOworLyoqCisgKiBDb25zdGFudCBET01FeGNlcHRpb24uV1JPTkdfRE9DVU1FTlRfRVJSPTQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBjb25zdGFudAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgICAgICAKKyAqLworRE9NRXhjZXB0aW9uLldST05HX0RPQ1VNRU5UX0VSUj00OworLyoqCisgKiBDb25zdGFudCBET01FeGNlcHRpb24uSU5WQUxJRF9DSEFSQUNURVJfRVJSPTUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBjb25zdGFudAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgICAgICAgCisgKi8KK0RPTUV4Y2VwdGlvbi5JTlZBTElEX0NIQVJBQ1RFUl9FUlI9NTsKKy8qKgorICogQ29uc3RhbnQgRE9NRXhjZXB0aW9uLk5PX0RBVEFfQUxMT1dFRF9FUj02CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAY29uc3RhbnQKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgICAgICAgCisgKi8KK0RPTUV4Y2VwdGlvbi5OT19EQVRBX0FMTE9XRURfRVI9NjsKKy8qKgorICogQ29uc3RhbnQgRE9NRXhjZXB0aW9uLk5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUj03CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAY29uc3RhbnQKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgICAgICAgCisgKi8KK0RPTUV4Y2VwdGlvbi5OT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI9NzsKKy8qKgorICogQ29uc3RhbnQgRE9NRXhjZXB0aW9uLk5PVF9GT1VORF9FUlI9OAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQGNvbnN0YW50CisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAgICAgICAKKyAqLworRE9NRXhjZXB0aW9uLk5PVF9GT1VORF9FUlI9ODsKKy8qKgorICogQ29uc3RhbnQgRE9NRXhjZXB0aW9uLk5PVF9TVVBQT1JURURfRVJSPTkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBjb25zdGFudAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgICAgIAorICovCitET01FeGNlcHRpb24uTk9UX1NVUFBPUlRFRF9FUlI9OTsKKy8qKgorICogQ29uc3RhbnQgRE9NRXhjZXB0aW9uLklOVVNFX0FUVFJJQlVURV9FUlI9MTAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBjb25zdGFudAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgICAgICAKKyAqLworRE9NRXhjZXB0aW9uLklOVVNFX0FUVFJJQlVURV9FUlI9MTA7CisvKioKKyAqIENvbnN0YW50IERPTUV4Y2VwdGlvbi5JTlZBTElEX1NUQVRFX0VSUj0xMQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQGNvbnN0YW50CisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAgICAgIAorICovCitET01FeGNlcHRpb24uSU5WQUxJRF9TVEFURV9FUlI9MTE7CisvKioKKyAqIENvbnN0YW50IERPTUV4Y2VwdGlvbi5TWU5UQVhfRVJSPTEyCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAY29uc3RhbnQKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgICAgICAKKyAqLworRE9NRXhjZXB0aW9uLlNZTlRBWF9FUlI9MTI7CisvKioKKyAqIENvbnN0YW50IERPTUV4Y2VwdGlvbi5JTlZBTElEX01PRElGSUNBVElPTl9FUj0xMworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQGNvbnN0YW50CisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAgICAgICAgCisgKi8KK0RPTUV4Y2VwdGlvbi5JTlZBTElEX01PRElGSUNBVElPTl9FUj0xMzsKKy8qKgorICogQ29uc3RhbnQgRE9NRXhjZXB0aW9uLk5BTUVTUEFDRV9FUlI9MTQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBjb25zdGFudAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgICAgICAgCisgKi8KK0RPTUV4Y2VwdGlvbi5OQU1FU1BBQ0VfRVJSPTE0OworLyoqCisgKiBDb25zdGFudCBET01FeGNlcHRpb24uTlZBTElEX0FDQ0VTU19FUlI9MTUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBjb25zdGFudAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgICAgICAKKyAqLworRE9NRXhjZXB0aW9uLklOVkFMSURfQUNDRVNTX0VSUj0xNTsKKy8qKgorICAqIFByb3BlcnR5IGNvZGUKKyAgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICAqIAorICAqIEB0eXBlIE51bWJlcgorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAKKyAgKi8KK0RPTUV4Y2VwdGlvbi5wcm90b3R5cGUuY29kZT0wOworCisvKioKKyAqIE9iamVjdCBET01JbXBsZW1lbnRhdGlvbigpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbCAKKyAqIAorICogQGF1Z21lbnRzIE9iamVjdAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICogQHNlZSAgIE9iamVjdCAgICAgCisgKi8KK2Z1bmN0aW9uIERPTUltcGxlbWVudGF0aW9uKCl7fTsKK0RPTUltcGxlbWVudGF0aW9uLnByb3RvdHlwZSA9IG5ldyBPYmplY3QoKTsKKy8qKgorICogZnVuY3Rpb24gaGFzRmVhdHVyZShmZWF0dXJlLCB2ZXJzaW9uKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQHBhcmFtIHtTdHJpbmd9IGZlYXR1cmUKKyAqIEBwYXJhbSB7U3RyaW5nfSB2ZXJzaW9uCisgKiBAcmV0dXJucyB7Qm9vbGVhbn0KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uIAorICovIAorRE9NSW1wbGVtZW50YXRpb24ucHJvdG90eXBlLmhhc0ZlYXR1cmUgPSBmdW5jdGlvbihmZWF0dXJlLCB2ZXJzaW9uKXtyZXR1cm4gZmFsc2U7fTsKKy8qKgorICogZnVuY3Rpb24gY3JlYXRlRG9jdW1lbnRUeXBlKHF1YWxpZmllZE5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBwYXJhbSB7U3RyaW5nfSBxdWFsaWZpZWROYW1lCisgKiBAcGFyYW0ge1N0cmluZ30gcHVibGljSWQKKyAqIEBwYXJhbSB7U3RyaW5nfSBzeXN0ZW1JZAorICogQHJldHVybnMge0RvY3VtZW50VHlwZX0KKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICogQHNlZSBEb2N1bWVudFR5cGUKKyAqLyAKK0RPTUltcGxlbWVudGF0aW9uLnByb3RvdHlwZS5jcmVhdGVEb2N1bWVudFR5cGUgPSBmdW5jdGlvbihxdWFsaWZpZWROYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpe3JldHVybiBuZXcgRG9jdW1lbnRUeXBlKCk7fTsKKy8qKgorICogZnVuY3Rpb24gY3JlYXRlRG9jdW1lbnQobmFtZXNwYWNlVVJJLCBxdWFsaWZpZWROYW1lLCBkb2N0eXBlKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZVVSSQorICogQHBhcmFtIHtTdHJpbmd9IHF1YWxpZmllZE5hbWUKKyAqIEBwYXJhbSB7RG9jdW1lbnRUeXBlfSBkb2N0eXBlCisgKiBAcmV0dXJucyB7RG9jdW1lbnR9CisgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgRG9jdW1lbnQKKyAqLyAKK0RPTUltcGxlbWVudGF0aW9uLnByb3RvdHlwZS5jcmVhdGVEb2N1bWVudCA9IGZ1bmN0aW9uKG5hbWVzcGFjZVVSSSwgcXVhbGlmaWVkTmFtZSwgZG9jdHlwZSl7cmV0dXJuIG5ldyBIVE1MRG9jdW1lbnQoKTt9OyAKKworLyoqCisgKiBPYmplY3QgRG9jdW1lbnRGcmFnbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAYXVnbWVudHMgTm9kZQorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICogQHNlZSAgIE5vZGUgICAgCisgKi8KK2Z1bmN0aW9uIERvY3VtZW50RnJhZ21lbnQoKXt9OworRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGU9bmV3IE5vZGUoKTsgCisKKy8qKgorICogT2JqZWN0IERvY3VtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBOb2RlCisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIE5vZGUgIAorICovIAorZnVuY3Rpb24gRG9jdW1lbnQoKXt9OworRG9jdW1lbnQucHJvdG90eXBlID0gbmV3IE5vZGUoKTsKKy8qKgorICogUHJvcGVydHkgZGVmYXVsdFZpZXcKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEB0eXBlICBXaW5kb3cKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIFdpbmRvdyAgCisgKi8gCitEb2N1bWVudC5wcm90b3R5cGUuZGVmYXVsdFZpZXcgPSBuZXcgV2luZG93KCk7IAorLyoqCisgKiBQcm9wZXJ0eSBkb2N0eXBlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAdHlwZSAgRG9jdW1lbnRUeXBlCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICogQHNlZSBEb2N1bWVudFR5cGUgICAKKyAqLyAKK0RvY3VtZW50LnByb3RvdHlwZS5kb2N0eXBlID0gbmV3IERvY3VtZW50VHlwZSgpOyAKKy8qKgorICogUHJvcGVydHkgaW1wbGVtZW50YXRpb24KKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAgCisgKiBAdHlwZSAgIERPTUltcGxlbWVudGF0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICogQHNlZSBET01JbXBsZW1lbnRhdGlvbgorICovIAorRG9jdW1lbnQucHJvdG90eXBlLmltcGxlbWVudGF0aW9uID0gbmV3IERPTUltcGxlbWVudGF0aW9uKCk7CisvKioKKyAqIFByb3BlcnR5IGRvY3VtZW50RWxlbWVudCAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sIAorICogCisgKiBAdHlwZSAgIEVsZW1lbnQKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICogQHNlZSBFbGVtZW50CisgKi8gCitEb2N1bWVudC5wcm90b3R5cGUuZG9jdW1lbnRFbGVtZW50PSBuZXcgSFRNTEVsZW1lbnQoKTsgCisvKioKKyAqIFByb3BlcnR5IHN0eWxlU2hlZXRzCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbCAKKyAqIAorICogQHR5cGUgICBBcnJheQorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8gCitEb2N1bWVudC5wcm90b3R5cGUuc3R5bGVTaGVldHM9IG5ldyBBcnJheSgpOyAKKy8qKgorICogZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0YWdOYW1lKSAgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAcGFyYW0ge1N0cmluZ30gdGFnTmFtZQorICogQHJldHVybnMge0VsZW1lbnR9CisgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAKKyAqIEBzZWUgRWxlbWVudCAgCisgKi8gIAorRG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24odGFnTmFtZSl7cmV0dXJuIG5ldyBIVE1MRWxlbWVudCgpO307IAorLyoqCisgKiBmdW5jdGlvbiBjcmVhdGVEb2N1bWVudEZyYWdtZW50KCkgIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwgCisgKiAKKyAqIEByZXR1cm5zIHtEb2N1bWVudEZyYWdtZW50fQorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uIAorICogQHNlZSBEb2N1bWVudEZyYWdtZW50IAorICovIAorRG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERvY3VtZW50RnJhZ21lbnQoKTt9OyAKKy8qKgorICogZnVuY3Rpb24gY3JlYXRlVGV4dE5vZGUoZGF0YSkgIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQHBhcmFtIHtTdHJpbmd9IGRhdGEKKyAqIEByZXR1cm5zIHtUZXh0fQorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAKKyAqIEBzZWUgVGV4dCAKKyAqLyAKK0RvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVUZXh0Tm9kZT1mdW5jdGlvbihkYXRhKXtyZXR1cm4gbmV3IFRleHQoKTt9OyAKKy8qKgorICogZnVuY3Rpb24gY3JlYXRlQ29tbWVudChkYXRhKSAgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAcGFyYW0ge1N0cmluZ30gZGF0YQorICogQHJldHVybnMge0NvbW1lbnR9CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gCisgKiBAc2VlIENvbW1lbnQgICAKKyAqLyAKK0RvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVDb21tZW50PWZ1bmN0aW9uKGRhdGEpe3JldHVybiBuZXcgQ29tbWVudCgpO307IAorLyoqCisgKiBmdW5jdGlvbiBjcmVhdGVDREFUQVNlY3Rpb24oZGF0YSkgIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwgCisgKiAKKyAqIEBwYXJhbSB7U3RyaW5nfSBkYXRhCisgKiBAcmV0dXJucyB7Q0RBVEFTZWN0aW9ufQorICogQHRocm93cyBET01FeGNlcHRpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICogQHNlZSBDREFUQVNlY3Rpb24gICAgIAorICovCitEb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlQ0RBVEFTZWN0aW9uPWZ1bmN0aW9uKGRhdGEpe307IAorLyoqCisgKiBmdW5jdGlvbiBjcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24odGFyZ2V0LCBkYXRhKSAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEB0eXBlIFByb2Nlc3NpbmdJbnN0cnVjdGlvbgorICogQHBhcmFtIHtTdHJpbmd9IHRhcmdldAorICogQHBhcmFtIHtTdHJpbmd9IGRhdGEKKyAqIEByZXR1cm5zIHtQcm9jZXNzaW5nSW5zdHJ1Y3Rpb259CisgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIFByb2Nlc3NpbmdJbnN0cnVjdGlvbiAgICAgIAorKi8KK0RvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb249ZnVuY3Rpb24odGFyZ2V0LCBkYXRhKXtyZXR1cm4gbmV3IFByb2Nlc3NpbmdJbnN0cnVjdGlvbigpO307IAorLyoqCisgKiBmdW5jdGlvbiBjcmVhdGVBdHRyaWJ1dGUobmFtZSkgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogIAorICogQHBhcmFtIHtTdHJpbmd9IG5hbWUKKyAqIEByZXR1cm5zIHtBdHRyfQorICogQHRocm93cyBET01FeGNlcHRpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICogQHNlZSBBdHRyICAgCisgKi8KK0RvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVBdHRyaWJ1dGU9ZnVuY3Rpb24obmFtZSl7cmV0dXJuIG5ldyBBdHRyKCk7fTsgCisvKioKKyAqIGZ1bmN0aW9uIGNyZWF0ZUVudGl0eVJlZmVyZW5jZShuYW1lKSAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAgIAorICogQHBhcmFtIHtTdHJpbmd9IG5hbWUKKyAqIEByZXR1cm5zIHtFbnRpdHlSZWZlcmVuY2V9CisgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIEVudGl0eVJlZmVyZW5jZSAgICAgCisgKi8KK0RvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVFbnRpdHlSZWZlcmVuY2U9ZnVuY3Rpb24obmFtZSl7cmV0dXJuIG5ldyBFbnRpdHlSZWZlcmVuY2UoKTt9OyAKKy8qKgorICogZnVuY3Rpb24gZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnbmFtZSkgIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQHBhcmFtIHtTdHJpbmd9IHRhZ25hbWUKKyAqIEByZXR1cm5zIHtOb2RlTGlzdH0KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICogQHNlZSBOb2RlTGlzdCAgICAgCisgKi8KK0RvY3VtZW50LnByb3RvdHlwZS5nZXRFbGVtZW50c0J5VGFnTmFtZT1mdW5jdGlvbih0YWduYW1lKXtyZXR1cm4gbmV3IE5vZGVMaXN0KCk7fTsgCisvKioKKyAqIGZ1bmN0aW9uIGltcG9ydE5vZGUoaW1wb3J0ZWROb2RlLCBkZWVwKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqICAKKyAqIEBwYXJhbSB7Tm9kZX0gaW1wb3J0ZWROb2RlCisgKiBAcGFyYW0ge0Jvb2xlYW59IGRlZXAKKyAqIEByZXR1cm5zIHtOb2RlfQorICogQHRocm93cyBET01FeGNlcHRpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICogQHNlZSBOb2RlICAgICAgICAKKyAqLworRG9jdW1lbnQucHJvdG90eXBlLmltcG9ydE5vZGU9ZnVuY3Rpb24oaW1wb3J0ZWROb2RlLCBkZWVwKXtyZXR1cm4gbmV3IE5vZGUoKTt9OyAKKy8qKgorICogZnVuY3Rpb24gY3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZVVSSSwgcXVhbGlmaWVkTmFtZSkgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlVVJJCisgKiBAcGFyYW0ge1N0cmluZ30gcXVhbGlmaWVkTmFtZQorICogQHJldHVybnMge0VsZW1lbnR9CisgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIEVsZW1lbnQgICAgICAgIAorICovCitEb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudE5TPWZ1bmN0aW9uKG5hbWVzcGFjZVVSSSwgcXVhbGlmaWVkTmFtZSl7cmV0dXJuIG5ldyBIVE1MRWxlbWVudCgpO307IAorLyoqCisgKiBmdW5jdGlvbiBjcmVhdGVFdmVudChTdHJpbmcgZXZlbnRUeXBlKSAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFR5cGUKKyAqIEByZXR1cm5zIHtPYmplY3R9CisgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIEVsZW1lbnQgICAgICAgIAorICovCitEb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlRXZlbnQ9ZnVuY3Rpb24oZXZlbnRUeXBlKXtyZXR1cm4gbmV3IE9iamVjdCgpO307IAorLyoqCisgKiBmdW5jdGlvbiBjcmVhdGVBdHRyaWJ1dGVOUyhuYW1lc3BhY2VVUkksIHF1YWxpZmllZE5hbWUpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlVVJJCisgKiBAcGFyYW0ge1N0cmluZ30gcXVhbGlmaWVkTmFtZQorICogQHJldHVybnMge0F0dHJ9CisgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlICBBdHRyICAgICAgIAorICovCitEb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlQXR0cmlidXRlTlM9ZnVuY3Rpb24obmFtZXNwYWNlVVJJLCBxdWFsaWZpZWROYW1lKXtyZXR1cm4gbmV3IEF0dHIoKTt9OyAKKy8qKgorICogZnVuY3Rpb24gZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VVUkkKKyAqIEBwYXJhbSB7U3RyaW5nfSBsb2NhbE5hbWUKKyAqIEByZXR1cm5zIHtOb2RlTGlzdH0KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICogQHNlZSAgTm9kZUxpc3QgICAgICAgCisgKi8KK0RvY3VtZW50LnByb3RvdHlwZS5nZXRFbGVtZW50c0J5VGFnTmFtZU5TPWZ1bmN0aW9uKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKXtyZXR1cm4gbmV3IE5vZGVMaXN0KCk7fTsgCisvKioKKyAqIGZ1bmN0aW9uIGdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBwYXJhbSB7U3RyaW5nfSBlbGVtZW50SWQKKyAqIEByZXR1cm5zIHtFbGVtZW50fQorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIEVsZW1lbnQgICAgICAgICAKKyAqLyAKK0RvY3VtZW50LnByb3RvdHlwZS5nZXRFbGVtZW50QnlJZD1mdW5jdGlvbihlbGVtZW50SWQpe3JldHVybiBuZXcgSFRNTEVsZW1lbnQoKTt9OworCisvKioKKyAqIE9iamVjdCBOb2RlKCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBPYmplY3QKKyAqIEBjb25zdHJ1Y3RvcgorICogQG1lbWJlck9mIE5vZGUKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIEV2ZW50VGFyZ2V0ICAgIAorICovCitmdW5jdGlvbiBOb2RlKCl7fTsKK05vZGUucHJvdG90eXBlPW5ldyBFdmVudFRhcmdldCgpOyAKKy8qKgorICogQ29uc3RhbnQgTm9kZS5FTEVNRU5UX05PREU9MQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQGNvbnN0YW50CisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgIAorICovCitOb2RlLkVMRU1FTlRfTk9ERT0xOyAKKy8qKgorICogQ29uc3RhbnQgTm9kZS5BVFRSSUJVVEVfTk9ERT0yCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAY29uc3RhbnQKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgCisgKi8KK05vZGUuQVRUUklCVVRFX05PREU9MjsKKy8qKgorICogQ29uc3RhbnQgTm9kZS5URVhUX05PREU9MworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQGNvbnN0YW50CisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgIAorICovCitOb2RlLlRFWFRfTk9ERT0zOworLyoqCisgKiBDb25zdGFudCBOb2RlLkNEQVRBX1NFQ1RJT05fTk9ERT00CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAY29uc3RhbnQKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgCisgKi8KK05vZGUuQ0RBVEFfU0VDVElPTl9OT0RFPTQ7IAorLyoqCisgKiBDb25zdGFudCBOb2RlLkVOVElUWV9SRUZFUkVOQ0VfTk9ERT01CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAY29uc3RhbnQKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgCisgKi8KK05vZGUuRU5USVRZX1JFRkVSRU5DRV9OT0RFPTU7IAorLyoqCisgKiBDb25zdGFudCBOb2RlLkVOVElUWV9OT0RFPTYKKyAqIEB0eXBlIE51bWJlcgorICogQG1lbWJlck9mIE5vZGUKKyAqIEBzZWUgTm9kZSAKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorCisgKiBAc2VlICAgIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sICAgICAKKyovCitOb2RlLkVOVElUWV9OT0RFPTY7CisvKioKKyAqIENvbnN0YW50IE5vZGUuUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFPTcKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBjb25zdGFudAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAKKyAqLworTm9kZS5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU9NzsgCisvKioKKyAqIENvbnN0YW50IE5vZGUuQ09NTUVOVF9OT0RFPTgKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBjb25zdGFudAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAKKyAqLworTm9kZS5DT01NRU5UX05PREU9ODsKKy8qKgorICogQ29uc3RhbnQgTm9kZS5ET0NVTUVOVF9OT0RFPTkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBjb25zdGFudAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAKKyAqLworTm9kZS5ET0NVTUVOVF9OT0RFPTk7CisvKioKKyAqIENvbnN0YW50IE5vZGUuRE9DVU1FTlRfVFlQRV9OT0RFPTEwCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAY29uc3RhbnQKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgCisgKi8KK05vZGUuRE9DVU1FTlRfVFlQRV9OT0RFPTEwOyAKKy8qKgorICogQ29uc3RhbnQgTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFPTExCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAY29uc3RhbnQKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgCisgKi8KK05vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERT0xMTsgCisvKioKKyAqIENvbnN0YW50IE5vZGUuTk9UQVRJT05fTk9ERT0xMgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQGNvbnN0YW50CisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgIAorICovCitOb2RlLk5PVEFUSU9OX05PREU9MTI7CisvKioKKyAqIFByb3BlcnR5IG5vZGVOYW1lCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgCisgKi8gCitOb2RlLnByb3RvdHlwZS5ub2RlTmFtZSA9ICIiOyAKKy8qKgorICogUHJvcGVydHkgbm9kZVZhbHVlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8gCitOb2RlLnByb3RvdHlwZS5ub2RlVmFsdWUgPSAiIjsgCisvKioKKyAqIFByb3BlcnR5IG5vZGVUeXBlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyAqLyAgCitOb2RlLnByb3RvdHlwZS5ub2RlVHlwZSA9IDA7IAorLyoqCisgKiBQcm9wZXJ0eSBwYXJlbnROb2RlIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQHR5cGUgTm9kZQorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIE5vZGUgICAgCisgKi8gIAorTm9kZS5wcm90b3R5cGUucGFyZW50Tm9kZT1uZXcgTm9kZSgpOyAKKy8qKgorICogUHJvcGVydHkgY2hpbGROb2RlcyAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sICAKKyAqICAKKyAqIEB0eXBlIE5vZGVMaXN0CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgTm9kZUxpc3QgICAgCisqLyAKK05vZGUucHJvdG90eXBlLmNoaWxkTm9kZXM9bmV3IE5vZGVMaXN0KCk7IAorLyoqCisgKiBQcm9wZXJ0eSBmaXJzdENoaWxkIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQHR5cGUgTm9kZQorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIE5vZGUgICAgCisgKi8gIAorTm9kZS5wcm90b3R5cGUuZmlyc3RDaGlsZD1uZXcgTm9kZSgpOyAKKy8qKgorICogUHJvcGVydHkgbGFzdENoaWxkIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQHR5cGUgTm9kZQorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIE5vZGUgICAgCisgKi8gIAorTm9kZS5wcm90b3R5cGUubGFzdENoaWxkPW5ldyBOb2RlKCk7ICAKKy8qKgorICogUHJvcGVydHkgcHJldmlvdXNTaWJsaW5nIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQHR5cGUgTm9kZQorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIE5vZGUgICAgCisgKi8gIAorTm9kZS5wcm90b3R5cGUucHJldmlvdXNTaWJsaW5nPW5ldyBOb2RlKCk7IAorLyoqCisgKiBQcm9wZXJ0eSBuZXh0U2libGluZyAgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAdHlwZSBOb2RlCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgTm9kZSAgICAKKyAqLyAgCitOb2RlLnByb3RvdHlwZS5uZXh0U2libGluZz1uZXcgTm9kZSgpOyAKKy8qKgorICogUHJvcGVydHkgYXR0cmlidXRlcyAgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAdHlwZSBOYW1lZE5vZGVNYXAKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgIAorICogQHNlZSBOYW1lZE5vZGVNYXAKKyAqLyAKK05vZGUucHJvdG90eXBlLmF0dHJpYnV0ZXM9bmV3IE5hbWVkTm9kZU1hcCgpOworLyoqCisgKiBQcm9wZXJ0eSBvd25lckRvY3VtZW50ICAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAgCisgKiBAdHlwZSBEb2N1bWVudAorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIERvY3VtZW50ICAgIAorICovIAorTm9kZS5wcm90b3R5cGUub3duZXJEb2N1bWVudCA9IG5ldyBIVE1MRG9jdW1lbnQoKTsgCisvKioKKyAqIFByb3BlcnR5IG5hbWVzcGFjZVVSSSAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sICAKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAKKyAqLyAKK05vZGUucHJvdG90eXBlLm5hbWVzcGFjZVVSST0iIjsgCisvKioKKyAqIFByb3BlcnR5IHByZWZpeCAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAgIAorICogQHR5cGUgU3RyaW5nCisgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgICAKKyAqLyAKK05vZGUucHJvdG90eXBlLnByZWZpeCA9ICIiOyAKKy8qKgorICogUHJvcGVydHkgbG9jYWxOYW1lICAgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogICAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgICAKKyAqLyAKK05vZGUucHJvdG90eXBlLmxvY2FsTmFtZT0gIiI7CisvKioKKyAqIGZ1bmN0aW9uIGluc2VydEJlZm9yZShuZXdDaGlsZCwgcmVmQ2hpbGQpIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqICAgCisgKiBAcGFyYW0ge05vZGV9IG5ld0NoaWxkCisgKiBAcGFyYW0ge05vZGV9IHJlZkNoaWxkCisgKiBAcmV0dXJucyB7Tm9kZX0KKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgTm9kZSAgCisgKi8gIAorTm9kZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlID0gZnVuY3Rpb24obmV3Q2hpbGQsIHJlZkNoaWxkKXtyZXR1cm4gbmV3IE5vZGUoKTt9OyAKKy8qKgorICogZnVuY3Rpb24gcmVwbGFjZUNoaWxkKG5ld0NoaWxkLCBvbGRDaGlsZCkgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogICAKKyAqIEBwYXJhbSB7Tm9kZX0gbmV3Q2hpbGQKKyAqIEBwYXJhbSB7Tm9kZX0gb2xkQ2hpbGQKKyAqIEByZXR1cm5zIHtOb2RlfQorICogQHRocm93cyBET01FeGNlcHRpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICogQHNlZSBOb2RlICAKKyAqLyAKK05vZGUucHJvdG90eXBlLnJlcGxhY2VDaGlsZCA9IGZ1bmN0aW9uKG5ld0NoaWxkLCBvbGRDaGlsZCl7cmV0dXJuIG5ldyBOb2RlKCk7fTsgCisvKioKKyAqIGZ1bmN0aW9uIHJlbW92ZUNoaWxkKG9sZENoaWxkKSAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAgIAorICogQHBhcmFtIHtOb2RlfSBvbGRDaGlsZAorICogQHJldHVybnMge05vZGV9CisgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIE5vZGUgIAorICovIAorTm9kZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbihvbGRDaGlsZCl7cmV0dXJuIG5ldyBOb2RlKCk7fTsgCisvKioKKyAqIGZ1bmN0aW9uIGFwcGVuZENoaWxkKG5ld0NoaWxkKSAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAgIAorICogQHBhcmFtIHtOb2RlfSBuZXdDaGlsZAorICogQHJldHVybnMge05vZGV9CisgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIE5vZGUgIAorICovICAKK05vZGUucHJvdG90eXBlLmFwcGVuZENoaWxkID0gZnVuY3Rpb24obmV3Q2hpbGQpe3JldHVybiBuZXcgTm9kZSgpO307IAorLyoqCisgKiBmdW5jdGlvbiBoYXNDaGlsZE5vZGVzKCkgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAcmV0dXJucyB7Qm9vbGVhbn0KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgCisgKi8gCitOb2RlLnByb3RvdHlwZS5oYXNDaGlsZE5vZGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGZhbHNlO307IAorLyoqCisgKiBmdW5jdGlvbiBjbG9uZU5vZGUoZGVlcCkgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogICAKKyAqIEBwYXJhbSB7Qm9vbGVhbn0gZGVlcAorICogQHJldHVybnMge05vZGV9CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgTm9kZSAgCisgKi8gCitOb2RlLnByb3RvdHlwZS5jbG9uZU5vZGU9ZnVuY3Rpb24oZGVlcCl7cmV0dXJuIG5ldyBOb2RlKCk7fTsgCisvKioKKyAqIGZ1bmN0aW9uIG5vcm1hbGl6ZSgpIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqICAgCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLyAKK05vZGUucHJvdG90eXBlLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKCl7fTsgCisvKioKKyAqIGZ1bmN0aW9uIGlzU3VwcG9ydGVkKGZlYXR1cmUsIHZlcnNpb24pICAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAgIAorICogQHBhcmFtIHtTdHJpbmd9IGZlYXR1cmUKKyAqIEBwYXJhbSB7U3RyaW5nfSB2ZXJzaW9uCisgKiBAcmV0dXJucyB7Qm9vbGVhbn0KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAKKyAqLyAKK05vZGUucHJvdG90eXBlLmlzU3VwcG9ydGVkPWZ1bmN0aW9uKGZlYXR1cmUsIHZlcnNpb24pe3JldHVybiBmYWxzZTt9OyAKKy8qKgorICogZnVuY3Rpb24gaGFzQXR0cmlidXRlcygpICAgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogICAKKyAqIEByZXR1cm5zIHtCb29sZWFufQorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uIAorICovIAorTm9kZS5wcm90b3R5cGUuaGFzQXR0cmlidXRlcz1mdW5jdGlvbigpe3JldHVybiBmYWxzZTt9OworCisvKioKKyAqIE9iamVjdCBOb2RlTGlzdCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAYXVnbWVudHMgT2JqZWN0CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIE9iamVjdAorICovCitmdW5jdGlvbiBOb2RlTGlzdCgpe307CitOb2RlTGlzdC5wcm90b3R5cGUgPSBuZXcgT2JqZWN0KCk7CisvKioKKyAqIFByb3BlcnR5IGxlbmd0aCAgIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwgCisgKiAKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAKKyAqLyAKK05vZGVMaXN0LnByb3RvdHlwZS5sZW5ndGg9MDsgCisvKioKKyAqIGZ1bmN0aW9uIGl0ZW0oaW5kZXgpIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwgCisgKiAgICAgTm90ZTogVGhpcyBvYmplY3QgY2FuIGFsc28gYmUgZGVyZWZlcmVuY2VkIHVzaW5nIHNxdWFyZSBicmFja2V0IG5vdGF0aW9uIChlLmcuIG9ialsxXSkuIERlcmVmZXJlbmNpbmcgd2l0aCBhbiBpbnRlZ2VyIGluZGV4IGlzIGVxdWl2YWxlbnQgdG8gaW52b2tpbmcgdGhlIGl0ZW0gbWV0aG9kIHdpdGggdGhhdCBpbmRleCAKKyAqIAorICogQHBhcmFtIHtOdW1iZXJ9IGluZGV4CisgKiBAcmV0dXJucyB7Tm9kZX0KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICogQHNlZSBOb2RlICAgICAKKyovIAorTm9kZUxpc3QucHJvdG90eXBlLml0ZW0gPSBmdW5jdGlvbihpbmRleCl7cmV0dXJuIG5ldyBOb2RlKCk7fTsgCisKKy8qKgorICogT2JqZWN0IE5hbWVkTm9kZU1hcCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAYXVnbWVudHMgT2JqZWN0CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIE9iamVjdAorICovCitmdW5jdGlvbiBOYW1lZE5vZGVNYXAoKXt9OworTmFtZWROb2RlTWFwLnByb3RvdHlwZSA9IG5ldyBPYmplY3QoKTsKKy8qKgorICogUHJvcGVydHkgbGVuZ3RoIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQHR5cGUgICBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgCisgKi8KK05hbWVkTm9kZU1hcC5wcm90b3R5cGUubGVuZ3RoPTA7IAorLyoqCisgKiBmdW5jdGlvbiBnZXROYW1lZEl0ZW0obmFtZSkgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAcGFyYW0ge1N0cmluZ30gbmFtZQorICogQHJldHVybnMge05vZGV9CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgTm9kZSAgICAKKyAqLyAgCitOYW1lZE5vZGVNYXAucHJvdG90eXBlLmdldE5hbWVkSXRlbT1mdW5jdGlvbihuYW1lKXtyZXR1cm4gbmV3IE5vZGUoKTt9OyAKKy8qKgorICogZnVuY3Rpb24gc2V0TmFtZWRJdGVtKGFyZykgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAcGFyYW0ge05vZGV9IGFyZworICogQHJldHVybnMge05vZGV9CisgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIE5vZGUgICAgCisgKi8gCitOYW1lZE5vZGVNYXAucHJvdG90eXBlLnNldE5hbWVkSXRlbT1mdW5jdGlvbihhcmcpe3JldHVybiBuZXcgTm9kZSgpO307IAorLyoqCisgKiBmdW5jdGlvbiByZW1vdmVOYW1lZEl0ZW0obmFtZSkgIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQHBhcmFtIHtTdHJpbmd9IG5hbWUKKyAqIEByZXR1cm5zIHtOb2RlfQorICogQHRocm93cyBET01FeGNlcHRpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICogQHNlZSBOb2RlICAgIAorICovIAorTmFtZWROb2RlTWFwLnByb3RvdHlwZS5yZW1vdmVOYW1lZEl0ZW09ZnVuY3Rpb24obmFtZSl7cmV0dXJuIG5ldyBOb2RlKCk7fTsgCisvKioKKyAqIGZ1bmN0aW9uIGl0ZW0oaW5kZXgpCisgKiBOb3RlOiBUaGlzIG9iamVjdCBjYW4gYWxzbyBiZSBkZXJlZmVyZW5jZWQgdXNpbmcgc3F1YXJlIGJyYWNrZXQgbm90YXRpb24gKGUuZy4gb2JqWzFdKS4gRGVyZWZlcmVuY2luZyB3aXRoIGFuIGludGVnZXIgaW5kZXggaXMgZXF1aXZhbGVudCB0byBpbnZva2luZyB0aGUgaXRlbSBtZXRob2Qgd2l0aCB0aGF0IGluZGV4LgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQHBhcmFtIHtOdW1iZXJ9IGluZGV4CisgKiBAcmV0dXJucyB7Tm9kZX0KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICogQHNlZSBOb2RlICAgIAorICovIAorTmFtZWROb2RlTWFwLnByb3RvdHlwZS5pdGVtPWZ1bmN0aW9uKGluZGV4KXtyZXR1cm4gbmV3IE5vZGUoKTt9OyAKKy8qKgorICogZnVuY3Rpb24gZ2V0TmFtZWRJdGVtTlMobmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZVVSSQorICogQHBhcmFtIHtTdHJpbmd9IGxvY2FsTmFtZQorICogQHJldHVybnMge05vZGV9CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgTm9kZSAgICAKKyAqLyAKK05hbWVkTm9kZU1hcC5wcm90b3R5cGUuZ2V0TmFtZWRJdGVtTlM9ZnVuY3Rpb24obmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpe3JldHVybiBuZXcgTm9kZSgpO307IAorLyoqCisgKiBmdW5jdGlvbiBzZXROYW1lZEl0ZW1OUyhhcmcpIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQHBhcmFtIHtOb2RlfSBhcmcKKyAqIEByZXR1cm5zIHtOb2RlfQorICogQHRocm93cyBET01FeGNlcHRpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICogQHNlZSBOb2RlICAgIAorICovIAorTmFtZWROb2RlTWFwLnByb3RvdHlwZS5zZXROYW1lZEl0ZW1OUz1mdW5jdGlvbihhcmcpe3JldHVybiBuZXcgTm9kZSgpO307IAorLyoqCisgKiBmdW5jdGlvbiByZW1vdmVOYW1lZEl0ZW1OUyhuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSkgIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZVVSSQorICogQHBhcmFtIHtTdHJpbmd9IGxvY2FsTmFtZQorICogQHJldHVybnMge05vZGV9CisgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIE5vZGUgICAgCisgKi8gCitOYW1lZE5vZGVNYXAucHJvdG90eXBlLnJlbW92ZU5hbWVkSXRlbU5TPWZ1bmN0aW9uKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKXtyZXR1cm4gbmV3IE5vZGUoKTt9OyAKKworLyoqCisgKiBPYmplY3QgQ2hhcmFjdGVyRGF0YSgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAYXVnbWVudHMgTm9kZQorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICogQHNlZSBOb2RlCisgKi8gCitmdW5jdGlvbiBDaGFyYWN0ZXJEYXRhKCl7fTsKK0NoYXJhY3RlckRhdGEucHJvdG90eXBlPW5ldyBOb2RlKCk7CisvKioKKyAqIFByb3BlcnR5IGRhdGEKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEB0eXBlICAgU3RyaW5nCisgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8KK0NoYXJhY3RlckRhdGEucHJvdG90eXBlLmRhdGE9IiI7IAorLyoqCisgKiBQcm9wZXJ0eSBsZW5ndGgKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEB0eXBlICAgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyAqLworQ2hhcmFjdGVyRGF0YS5wcm90b3R5cGUubGVuZ3RoPTA7IAorLyoqCisgKiBmdW5jdGlvbiBzdWJzdHJpbmdEYXRhKG9mZnNldCwgY291bnQpICAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sICAKKyAqICAKKyAqIEBwYXJhbSB7TnVtYmVyfSBvZmZzZXQKKyAqIEBwYXJhbSB7TnVtYmVyfSBjb3VudAorICogQHJldHVybnMge1N0cmluZ30KKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8gCitDaGFyYWN0ZXJEYXRhLnByb3RvdHlwZS5zdWJzdHJpbmdEYXRhPWZ1bmN0aW9uKG9mZnNldCwgY291bnQpe3JldHVybiAiIjt9OyAKKy8qKgorICogZnVuY3Rpb24gYXBwZW5kRGF0YShhcmcpICAgIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwgIAorICogIAorICogQHBhcmFtIHtTdHJpbmd9IGFyZworICogQHRocm93cyBET01FeGNlcHRpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyAqLyAgCitDaGFyYWN0ZXJEYXRhLnByb3RvdHlwZS5hcHBlbmREYXRhPWZ1bmN0aW9uKGFyZyl7fTsgCisvKioKKyAqIGZ1bmN0aW9uIGluc2VydERhdGEob2Zmc2V0LCBhcmcpICAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sICAKKyAqICAKKyAqIEBwYXJhbSB7TnVtYmVyfSBvZmZzZXQKKyAqIEBwYXJhbSB7U3RyaW5nfSBhcmcKKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8gCitDaGFyYWN0ZXJEYXRhLnByb3RvdHlwZS5pbnNlcnREYXRhPWZ1bmN0aW9uKG9mZnNldCwgYXJnKXt9OyAgCisvKioKKyAqIGZ1bmN0aW9uIGRlbGV0ZURhdGEob2Zmc2V0LCBjb3VudCkgIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwgIAorICogIAorICogQHBhcmFtIHtOdW1iZXJ9IG9mZnNldAorICogQHBhcmFtIHtOdW1iZXJ9IGNvdW50CisgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovIAorQ2hhcmFjdGVyRGF0YS5wcm90b3R5cGUuZGVsZXRlRGF0YT1mdW5jdGlvbihvZmZzZXQsIGNvdW50KXt9OyAKKy8qKgorICogZnVuY3Rpb24gcmVwbGFjZURhdGEob2Zmc2V0LCBjb3VudCwgYXJnKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwgIAorICogIAorICogQHBhcmFtIHtOdW1iZXJ9IG9mZnNldAorICogQHBhcmFtIHtOdW1iZXJ9IGNvdW50CisgKiBAcGFyYW0ge1N0cmluZ30gYXJnCisgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovIAorQ2hhcmFjdGVyRGF0YS5wcm90b3R5cGUucmVwbGFjZURhdGE9ZnVuY3Rpb24ob2Zmc2V0LCBjb3VudCwgYXJnKXt9OyAKKworLyoqCisgKiBPYmplY3QgQXR0cigpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAYXVnbWVudHMgTm9kZQorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICogQHNlZSBOb2RlCisgKi8KK2Z1bmN0aW9uIEF0dHIoKXt9OworQXR0ci5wcm90b3R5cGUgPSBuZXcgTm9kZSgpOworLyoqCisgKiBQcm9wZXJ0eSBuYW1lCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAdHlwZSAgIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8gCitBdHRyLnByb3RvdHlwZS5uYW1lID0gIiI7IAorLyoqCisgKiBQcm9wZXJ0eSBzcGVjaWZpZWQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEB0eXBlICAgQm9vbGVhbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8gCitBdHRyLnByb3RvdHlwZS5zcGVjaWZpZWQgPSBmYWxzZTsgCisvKioKKyAqIFByb3BlcnR5IHZhbHVlIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQHR5cGUgICBTdHJpbmcKKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyAqLyAKK0F0dHIucHJvdG90eXBlLnZhbHVlID0gIiI7CisvKioKKyAqIFByb3BlcnR5IG93bmVyRWxlbWVudCAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEB0eXBlICAgRWxlbWVudAorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgRWxlbWVudCAgCisgKi8gCitBdHRyLnByb3RvdHlwZS5vd25lckVsZW1lbnQgPSBuZXcgRWxlbWVudCgpOworCisvKioKKyAqIE9iamVjdCBFbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBOb2RlCisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIE5vZGUKKyAqLworZnVuY3Rpb24gRWxlbWVudCgpe307CitFbGVtZW50LnByb3RvdHlwZT1uZXcgTm9kZSgpOyAKKy8qKgorICogUHJvcGVydHkgdGFnTmFtZSAgCisgKiBAdHlwZSAgIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgIAorICovCitFbGVtZW50LnByb3RvdHlwZS50YWdOYW1lPSIiOworLyoqCisgKiBmdW5jdGlvbiBhZGRFdmVudExpc3RlbmVyKFN0aXJuZyB0eXBlLCBGdW5jdGlvbiBsaXN0ZW5lciwgQm9vbGVhbiB1c2VDYXB0dXJlKSAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sIAorICogCisgKiBAcGFyYW0ge1N0cmluZ30gdHlwZQorICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIKKyAqIEBwYXJhbSB7Qm9vbGVhbn0gdXNlQ2FwdHVyZQorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovCitFbGVtZW50LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKXt9OyAKKy8qKgorICogZnVuY3Rpb24gYXR0YWNoRXZlbnQoU3RyaW5nIHR5cGUsIEZ1bmN0aW9uIGxpc3RlbmVyKSAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sIAorICogCisgKiBAcGFyYW0ge1N0cmluZ30gdHlwZQorICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyAqLworRWxlbWVudC5wcm90b3R5cGUuYXR0YWNoRXZlbnQ9ZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIpe307IAorLyoqCisgKiBmdW5jdGlvbiBkZXRhY2hFdmVudChTdHJpbmcgdHlwZSwgRnVuY3Rpb24gbGlzdGVuZXIpIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwgCisgKiAKKyAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovCitFbGVtZW50LnByb3RvdHlwZS5kZXRhY2hFdmVudD1mdW5jdGlvbih0eXBlLCBsaXN0ZW5lcil7fTsgCisvKioKKyAqIGZ1bmN0aW9uIGRpc3BhdGNoRXZlbnQoT2JqZWN0IGV2ZW50KSAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sIAorICogCisgKiBAcGFyYW0ge09iamVjdH0gZXZlbnQKKyAqIEByZXR1cm5zIHtCb29sZWFufQorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovCitFbGVtZW50LnByb3RvdHlwZS5kaXNwYXRjaEV2ZW50PWZ1bmN0aW9uKGV2ZW50KXtyZXR1cm4gZmFsc2U7fTsgCisvKioKKyAqIGZ1bmN0aW9uIGdldEF0dHJpYnV0ZShuYW1lKSAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sIAorICogIAorICogQHBhcmFtIHtTdHJpbmd9IG5hbWUKKyAqIEByZXR1cm5zIHtTdHJpbmd9CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8KK0VsZW1lbnQucHJvdG90eXBlLmdldEF0dHJpYnV0ZT1mdW5jdGlvbihuYW1lKXtyZXR1cm4gIiI7fTsgCisvKioKKyAqIGZ1bmN0aW9uIHNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbCAKKyAqICAKKyAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lCisgKiBAcGFyYW0ge1N0cmluZ30gdmFsdWUKKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8KK0VsZW1lbnQucHJvdG90eXBlLnNldEF0dHJpYnV0ZT1mdW5jdGlvbihuYW1lLCB2YWx1ZSl7fTsgCisvKioKKyAqIGZ1bmN0aW9uIHJlbW92ZUF0dHJpYnV0ZShuYW1lKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwgCisgKiAgCisgKiBAcGFyYW0ge1N0cmluZ30gbmFtZQorICogQHRocm93cyBET01FeGNlcHRpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyAqLworRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKG5hbWUpe307IAorLyoqCisgKiBmdW5jdGlvbiBnZXRBdHRyaWJ1dGVOb2RlKG5hbWUpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbCAKKyAqICAKKyAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lCisgKiBAcmV0dXJucyB7QXR0cn0KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyAqLworRWxlbWVudC5wcm90b3R5cGUuZ2V0QXR0cmlidXRlTm9kZT1mdW5jdGlvbihuYW1lKXtyZXR1cm4gbmV3IEF0dHIoKTt9OyAKKy8qKgorICogZnVuY3Rpb24gc2V0QXR0cmlidXRlTm9kZShuZXdBdHRyKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwgCisgKiAgCisgKiBAcGFyYW0ge0F0dHJ9IG5ld0F0dHIKKyAqIEByZXR1cm5zIHtBdHRyfQorICogQHRocm93cyBET01FeGNlcHRpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyAqLworRWxlbWVudC5wcm90b3R5cGUuc2V0QXR0cmlidXRlTm9kZT1mdW5jdGlvbihuZXdBdHRyKXtyZXR1cm4gbmV3IEF0dHIoKTt9OyAKKy8qKgorICogZnVuY3Rpb24gcmVtb3ZlQXR0cmlidXRlTm9kZShvbGRBdHRyKSAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sIAorICogIAorICogQHBhcmFtIHtBdHRyfSBvbGRBdHRyCisgKiBAcmV0dXJucyB7QXR0cn0KKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8gCitFbGVtZW50LnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGVOb2RlPWZ1bmN0aW9uKG9sZEF0dHIpe3JldHVybiBuZXcgQXR0cigpO307IAorLyoqCisgKiBmdW5jdGlvbiBnZXRFbGVtZW50c0J5VGFnTmFtZShuYW1lKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwgCisgKiAgCisgKiBAcGFyYW0ge1N0cmluZ30gbmFtZQorICogQHJldHVybnMge05vZGVMaXN0fQorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovCitFbGVtZW50LnByb3RvdHlwZS5nZXRFbGVtZW50c0J5VGFnTmFtZT1mdW5jdGlvbihuYW1lKXtyZXR1cm4gbmV3IE5vZGVMaXN0KCk7fTsgCisvKioKKyAqIGZ1bmN0aW9uIGdldEF0dHJpYnV0ZU5TKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKSAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sIAorICogIAorICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZVVSSQorICogQHBhcmFtIHtTdHJpbmd9IGxvY2FsTmFtZQorICogQHJldHVybnMge1N0cmluZ30KKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8KK0VsZW1lbnQucHJvdG90eXBlLmdldEF0dHJpYnV0ZU5TPWZ1bmN0aW9uKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKXtyZXR1cm4gIiI7fTsgCisvKioKKyAqIGZ1bmN0aW9uIHNldEF0dHJpYnV0ZU5TKG5hbWVzcGFjZVVSSSwgcXVhbGlmaWVkTmFtZSwgdmFsdWUpICAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sIAorICogIAorICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZVVSSQorICogQHBhcmFtIHtTdHJpbmd9IHF1YWxpZmllZE5hbWUKKyAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZQorICogQHRocm93cyBET01FeGNlcHRpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyAqLworRWxlbWVudC5wcm90b3R5cGUuc2V0QXR0cmlidXRlTlM9ZnVuY3Rpb24obmFtZXNwYWNlVVJJLCBxdWFsaWZpZWROYW1lLCB2YWx1ZSl7fTsgCisvKioKKyAqIGZ1bmN0aW9uIHJlbW92ZUF0dHJpYnV0ZU5TKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKSAgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbCAKKyAqICAKKyAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VVUkkKKyAqIEBwYXJhbSB7U3RyaW5nfSBsb2NhbE5hbWUKKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8gCitFbGVtZW50LnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGVOUz1mdW5jdGlvbihuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSl7fTsgCisvKioKKyAqIGZ1bmN0aW9uIGdldEF0dHJpYnV0ZU5vZGVOUyhuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSkgICAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sIAorICogIAorICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZVVSSQorICogQHBhcmFtIHtTdHJpbmd9IGxvY2FsTmFtZQorICogQHJldHVybnMge0F0dHJ9CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8KK0VsZW1lbnQucHJvdG90eXBlLmdldEF0dHJpYnV0ZU5vZGVOUz1mdW5jdGlvbihuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSl7cmV0dXJuIG5ldyBBdHRyKCk7fTsgCisvKioKKyAqIGZ1bmN0aW9uIHNldEF0dHJpYnV0ZU5vZGVOUyhuZXdBdHRyKSAgICAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sIAorICogIAorICogQHBhcmFtIHtBdHRyfSBuZXdBdHRyCisgKiBAcmV0dXJucyB7QXR0cn0KKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8KK0VsZW1lbnQucHJvdG90eXBlLnNldEF0dHJpYnV0ZU5vZGVOUz1mdW5jdGlvbihuZXdBdHRyKXtyZXR1cm4gbmV3IEF0dHIoKTt9OyAKKy8qKgorICogZnVuY3Rpb24gZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSkgICAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sIAorICogIAorICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZVVSSQorICogQHBhcmFtIHtTdHJpbmd9IGxvY2FsTmFtZQorICogQHJldHVybnMge05vZGVMaXN0fQorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovCitFbGVtZW50LnByb3RvdHlwZS5nZXRFbGVtZW50c0J5VGFnTmFtZU5TPWZ1bmN0aW9uKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKXtyZXR1cm4gbmV3IE5vZGVMaXN0KCk7fTsgCisvKioKKyAqIGZ1bmN0aW9uIGhhc0F0dHJpYnV0ZShuYW1lKSAgIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwgCisgKiAgCisgKiBAcGFyYW0ge1N0cmluZ30gbmFtZQorICogQHJldHVybnMge0Jvb2xlYW59CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8gCitFbGVtZW50LnByb3RvdHlwZS5oYXNBdHRyaWJ1dGU9ZnVuY3Rpb24obmFtZSl7cmV0dXJuIGZhbHNlO307IAorLyoqCisgKiBmdW5jdGlvbiBoYXNBdHRyaWJ1dGVOUyhuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSkgICAgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbCAKKyAqICAKKyAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VVUkkKKyAqIEBwYXJhbSB7U3RyaW5nfSBsb2NhbE5hbWUKKyAqIEByZXR1cm5zIHtCb29sZWFufQorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovCitFbGVtZW50LnByb3RvdHlwZS5oYXNBdHRyaWJ1dGVOUz1mdW5jdGlvbihuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSl7cmV0dXJuIGZhbHNlO307IAorCisvKioKKyAqIE9iamVjdCBUZXh0KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBDaGFyYWN0ZXJEYXRhCisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIENoYXJhY3RlckRhdGEKKyAqLworZnVuY3Rpb24gVGV4dCgpe307CitUZXh0LnByb3RvdHlwZSA9IG5ldyBDaGFyYWN0ZXJEYXRhKCk7CisvKioKKyAqIGZ1bmN0aW9uIHNwbGl0VGV4dChvZmZzZXQpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAcGFyYW0ge051bWJlcn0gb2Zmc2V0CisgKiBAcmV0dXJucyB7VGV4dH0KKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICogQHNlZSBUZXh0CisgKi8KK1RleHQucHJvdG90eXBlLnNwbGl0VGV4dCA9IGZ1bmN0aW9uKG9mZnNldCkge3JldHVybiBuZXcgVGV4dCgpO307CisKKy8qKgorICogT2JqZWN0IENvbW1lbnQoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIENoYXJhY3RlckRhdGEKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgQ2hhcmFjdGVyRGF0YQorICovCitmdW5jdGlvbiBDb21tZW50KCl7fTsKK0NvbW1lbnQucHJvdG90eXBlID0gbmV3IENoYXJhY3RlckRhdGEoKTsKKworLyoqCisgKiBPYmplY3QgQ0RBVEFTZWN0aW9uKCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBUZXh0CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIFRleHQKKyAqLworZnVuY3Rpb24gQ0RBVEFTZWN0aW9uKCl7fTsKK0NEQVRBU2VjdGlvbi5wcm90b3R5cGUgPSBuZXcgVGV4dCgpOworCisvKioKKyAqIE9iamVjdCBEb2N1bWVudFR5cGUoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIE5vZGUKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgTm9kZQorICovCitmdW5jdGlvbiBEb2N1bWVudFR5cGUoKXt9OworRG9jdW1lbnRUeXBlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7CisvKioKKyAqIFByb3BlcnR5IG5hbWUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZyAKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyAqLworRG9jdW1lbnRUeXBlLnByb3RvdHlwZS5uYW1lPSIiOyAKKy8qKgorICogUHJvcGVydHkgZW50aXRpZXMKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEB0eXBlIE5hbWVkTm9kZU1hcCAKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyAqLworRG9jdW1lbnRUeXBlLnByb3RvdHlwZS5lbnRpdGllcyA9IG5ldyBOYW1lZE5vZGVNYXAoKTsKKy8qKgorICogUHJvcGVydHkgbm90YXRpb25zIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQHR5cGUgTmFtZWROb2RlTWFwIAorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovCitEb2N1bWVudFR5cGUucHJvdG90eXBlLm5vdGF0aW9ucz1uZXcgTmFtZWROb2RlTWFwKCk7IAorLyoqCisgKiBQcm9wZXJ0eSBwdWJsaWNJZCAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZyAKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyAqLworRG9jdW1lbnRUeXBlLnByb3RvdHlwZS5wdWJsaWNJZD0iIjsgCisvKioKKyAqIFByb3BlcnR5IHN5c3RlbUlkICAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZyAKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyAqLworRG9jdW1lbnRUeXBlLnByb3RvdHlwZS5zeXN0ZW1JZD0iIjsgCisvKioKKyAqIFByb3BlcnR5IGludGVybmFsU3Vic2V0IAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nIAorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovCitEb2N1bWVudFR5cGUucHJvdG90eXBlLmludGVybmFsU3Vic2V0PSIiOworCisvKioKKyAqIE9iamVjdCBOb3RhdGlvbigpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAYXVnbWVudHMgTm9kZQorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICogQHNlZSBOb2RlCisgKi8KK2Z1bmN0aW9uIE5vdGF0aW9uKCl7fTsKK05vdGF0aW9uLnByb3RvdHlwZT1uZXcgTm9kZSgpOyAKKy8qKgorICogUHJvcGVydHkgcHVibGljSWQgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbCAKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgIAorICovICAKK05vdGF0aW9uLnByb3RvdHlwZS5wdWJsaWNJZD0iIjsgCisvKioKKyAqIFByb3BlcnR5IHN5c3RlbUlkIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwgCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgICAKKyAqLyAKK05vdGF0aW9uLnByb3RvdHlwZS5zeXN0ZW1JZD0iIjsKKworLyoqCisgKiBPYmplY3QgRW50aXR5KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBOb2RlCisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIE5vZGUKKyAqLyAKK2Z1bmN0aW9uIEVudGl0eSgpe307IAorRW50aXR5LnByb3RvdHlwZT1uZXcgTm9kZSgpOworLyoqCisgKiBQcm9wZXJ0eSBwdWJsaWNJZCAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sIAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAgCisgKi8gIAorRW50aXR5LnByb3RvdHlwZS5wdWJsaWNJZD0iIjsKKy8qKgorICogUHJvcGVydHkgc3lzdGVtSWQgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbCAKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgIAorICovICAKK0VudGl0eS5wcm90b3R5cGUuc3lzdGVtSWQ9IiI7IAorLyoqCisgKiBQcm9wZXJ0eSBub3RhdGlvbk5hbWUgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbCAKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgIAorICovICAKK0VudGl0eS5wcm90b3R5cGUubm90YXRpb25OYW1lPSIiOyAKKworLyoqCisgKiBPYmplY3QgRW50aXR5UmVmZXJlbmNlKCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBOb2RlCisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIE5vZGUKKyAqLyAKK2Z1bmN0aW9uIEVudGl0eVJlZmVyZW5jZSgpe307CitFbnRpdHlSZWZlcmVuY2UucHJvdG90eXBlPW5ldyBOb2RlKCk7CisKKy8qKgorICogT2JqZWN0IFByb2Nlc3NpbmdJbnN0cnVjdGlvbigpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAYXVnbWVudHMgTm9kZQorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICogQHNlZSBOb2RlCisgKi8gCitmdW5jdGlvbiBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oKXt9OyAKK1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5wcm90b3R5cGU9bmV3IE5vZGUoKTsKKy8qKgorICogUHJvcGVydHkgdGFyZ2V0ICAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sIAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAgCisgKi8gCitQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ucHJvdG90eXBlLnRhcmdldD0iIjsKKy8qKgorICogUHJvcGVydHkgdGFyZ2V0ICAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sIAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgIAorICovIAorUHJvY2Vzc2luZ0luc3RydWN0aW9uLnByb3RvdHlwZS5kYXRhPSIiOyAKKworCisvKkhUTUwgRE9NIEJlbG93IHRoaXMgbGluZSovCisKKy8qKgorICogT2JqZWN0IEhUTUxDb2xsZWN0aW9uKCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBPYmplY3QKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLyAKK2Z1bmN0aW9uIEhUTUxDb2xsZWN0aW9uKCl7fTsKK0hUTUxDb2xsZWN0aW9uLnByb3RvdHlwZSA9IG5ldyBPYmplY3QoKTsKKy8qKgorICogUHJvcGVydHkgbGVuZ3RoCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxDb2xsZWN0aW9uLnByb3RvdHlwZS5sZW5ndGg9MDsKKy8qKgorICogZnVuY3Rpb24gaXRlbShpbmRleCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBwYXJhbSB7TnVtYmVyfSBpbmRleAorICogQHJldHVybnMge05vZGV9CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MQ29sbGVjdGlvbi5wcm90b3R5cGUuaXRlbSA9IGZ1bmN0aW9uKGluZGV4KXtyZXR1cm4gbmV3IE5vZGUoKTt9OworLyoqCisgKiBmdW5jdGlvbiBuYW1lZEl0ZW0obmFtZSkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lCisgKiBAcmV0dXJucyB7Tm9kZX0KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxDb2xsZWN0aW9uLnByb3RvdHlwZS5uYW1lZEl0ZW0gPSBmdW5jdGlvbihpbmRleCl7cmV0dXJuIG5ldyBOb2RlKCk7fTsKKworLyoqCisgKiBPYmplY3QgSFRNTE9wdGlvbnNDb2xsZWN0aW9uKCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBPYmplY3QKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLyAKK2Z1bmN0aW9uIEhUTUxPcHRpb25zQ29sbGVjdGlvbigpe307CitIVE1MT3B0aW9uc0NvbGxlY3Rpb24ucHJvdG90eXBlID0gbmV3IE9iamVjdCgpOworLyoqCisgKiBQcm9wZXJ0eSBsZW5ndGgKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIE51bWJlcgorICogQHRocm93cyBET01FeGNlcHRpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxPcHRpb25zQ29sbGVjdGlvbi5wcm90b3R5cGUubGVuZ3RoPTA7CisvKioKKyAqIGZ1bmN0aW9uIGl0ZW0oaW5kZXgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAcGFyYW0ge051bWJlcn0gaW5kZXgKKyAqIEByZXR1cm5zIHtOb2RlfQorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTE9wdGlvbnNDb2xsZWN0aW9uLnByb3RvdHlwZS5pdGVtID0gZnVuY3Rpb24oaW5kZXgpe3JldHVybiBuZXcgTm9kZSgpO307CisvKioKKyAqIGZ1bmN0aW9uIG5hbWVkSXRlbShuYW1lKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHBhcmFtIHtTdHJpbmd9IG5hbWUKKyAqIEByZXR1cm5zIHtOb2RlfQorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTE9wdGlvbnNDb2xsZWN0aW9uLnByb3RvdHlwZS5uYW1lZEl0ZW0gPSBmdW5jdGlvbihpbmRleCl7cmV0dXJuIG5ldyBOb2RlKCk7fTsKKworLyoqCisgKiBPYmplY3QgSFRNTERvY3VtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBEb2N1bWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBEb2N1bWVudAorICovIAorZnVuY3Rpb24gSFRNTERvY3VtZW50KCl7fTsKK0hUTUxEb2N1bWVudC5wcm90b3R5cGUgPSBuZXcgRG9jdW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgdGl0bGUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTERvY3VtZW50LnByb3RvdHlwZS50aXRsZT0iIjsKKy8qKgorICogUHJvcGVydHkgcmVmZXJyZXIKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTERvY3VtZW50LnByb3RvdHlwZS5yZWZlcnJlcj0iIjsKKy8qKgorICogUHJvcGVydHkgZG9tYWluCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxEb2N1bWVudC5wcm90b3R5cGUuZG9tYWluPSIiOworLyoqCisgKiBQcm9wZXJ0eSBVUkwKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTERvY3VtZW50LnByb3RvdHlwZS5VUkw9IiI7CisvKioKKyAqIFByb3BlcnR5IGJvZHkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIEhUTUxFbGVtZW50CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MRG9jdW1lbnQucHJvdG90eXBlLmJvZHk9bmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGltYWdlcworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgSFRNTENvbGxlY3Rpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxEb2N1bWVudC5wcm90b3R5cGUuaW1hZ2VzPW5ldyBIVE1MQ29sbGVjdGlvbigpOworLyoqCisgKiBQcm9wZXJ0eSBhcHBsZXRzCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBIVE1MQ29sbGVjdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTERvY3VtZW50LnByb3RvdHlwZS5hcHBsZXRzPW5ldyBIVE1MQ29sbGVjdGlvbigpOworLyoqCisgKiBQcm9wZXJ0eSBsaW5rcworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgSFRNTENvbGxlY3Rpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxEb2N1bWVudC5wcm90b3R5cGUubGlua3M9bmV3IEhUTUxDb2xsZWN0aW9uKCk7CisvKioKKyAqIFByb3BlcnR5IGZvcm1zCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBIVE1MQ29sbGVjdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTERvY3VtZW50LnByb3RvdHlwZS5mb3Jtcz1uZXcgSFRNTENvbGxlY3Rpb24oKTsKKy8qKgorICogUHJvcGVydHkgYW5jaG9ycworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgSFRNTENvbGxlY3Rpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxEb2N1bWVudC5wcm90b3R5cGUuYW5jaG9ycz1uZXcgSFRNTENvbGxlY3Rpb24oKTsKKy8qKgorICogUHJvcGVydHkgY29va2llCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MRG9jdW1lbnQucHJvdG90eXBlLmNvb2tpZT0iIjsKKy8qKgorICogUHJvcGVydHkgbGFzdE1vZGlmaWVkCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxEb2N1bWVudC5wcm90b3R5cGUubGFzdE1vZGlmaWVkPSIiOworLyoqCisgKiBmdW5jdGlvbiBvcGVuKCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxEb2N1bWVudC5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKCl7fTsKKy8qKgorICogZnVuY3Rpb24gY2xvc2UoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTERvY3VtZW50LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCl7fTsKKy8qKgorICogZnVuY3Rpb24gd3JpdGUodGV4dCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MRG9jdW1lbnQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24odGV4dCl7fTsKKy8qKgorICogZnVuY3Rpb24gd3JpdGVsbih0ZXh0KQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHBhcmFtIHtTdHJpbmd9IHRleHQKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxEb2N1bWVudC5wcm90b3R5cGUud3JpdGVsbiA9IGZ1bmN0aW9uKHRleHQpe307CisvKioKKyAqIGZ1bmN0aW9uIGdldEVsZW1lbnRzQnlOYW1lKGVsZW1lbnROYW1lKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHBhcmFtIHtTdHJpbmd9IGVsZW1lbnROYW1lCisgKiBAcmV0dXJucyB7Tm9kZUxpc3R9CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MRG9jdW1lbnQucHJvdG90eXBlLmdldEVsZW1lbnRzQnlOYW1lID0gZnVuY3Rpb24oZWxlbWVudE5hbWUpe3JldHVybiBuZXcgTm9kZUxpc3QoKTt9OworCisvKioKKyAqIE9iamVjdCBIVE1MRWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBFbGVtZW50CisgKi8gCitmdW5jdGlvbiBIVE1MRWxlbWVudCgpe307CitIVE1MRWxlbWVudC5wcm90b3R5cGUgPSBuZXcgRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBpZAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MRWxlbWVudC5wcm90b3R5cGUuaWQ9IiI7CisvKioKKyAqIFByb3BlcnR5IHRpdGxlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxFbGVtZW50LnByb3RvdHlwZS50aXRsZT0iIjsKKy8qKgorICogUHJvcGVydHkgbGFuZworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MRWxlbWVudC5wcm90b3R5cGUubGFuZz0iIjsKKy8qKgorICogUHJvcGVydHkgZGlyCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxFbGVtZW50LnByb3RvdHlwZS5kaXI9IiI7CisvKioKKyAqIFByb3BlcnR5IGNsYXNzTmFtZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MRWxlbWVudC5wcm90b3R5cGUuY2xhc3NOYW1lPSIiOworLyoqCisgKiBQcm9wZXJ0eSBpbm5lckhUTUwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKi8KK0hUTUxFbGVtZW50LnByb3RvdHlwZS5pbm5lckhUTUw9IiI7CisvKioKKyAqIFByb3BlcnR5IG9mZnNldEhlaWdodAorICogCisgKiBAdHlwZSBOdW1iZXIKKyAqLworSFRNTEVsZW1lbnQucHJvdG90eXBlLm9mZnNldEhlaWdodD0wOworLyoqCisgKiBQcm9wZXJ0eSBvZmZzZXRXaWR0aAorICogCisgKiBAdHlwZSBOdW1iZXIKKyAqLworSFRNTEVsZW1lbnQucHJvdG90eXBlLm9mZnNldFdpZHRoPTA7CisvKioKKyAqIFByb3BlcnR5IG9mZnNldExlZnQKKyAqIAorICogQHR5cGUgTnVtYmVyCisgKi8KK0hUTUxFbGVtZW50LnByb3RvdHlwZS5vZmZzZXRMZWZ0PTA7CisvKioKKyAqIFByb3BlcnR5IG9mZnNldFRvcAorICogCisgKiBAdHlwZSBOdW1iZXIKKyAqLworSFRNTEVsZW1lbnQucHJvdG90eXBlLm9mZnNldFRvcD0wOworLyoqCisgKiBQcm9wZXJ0eSBvZmZzZXRQYXJlbnQKKyAqIAorICogQHR5cGUgSFRNTEVsZW1lbnQKKyAqLworSFRNTEVsZW1lbnQucHJvdG90eXBlLm9mZnNldFBhcmVudCA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBzY3JvbGxIZWlnaHQKKyAqIAorICogQHR5cGUgTnVtYmVyCisgKi8KK0hUTUxFbGVtZW50LnByb3RvdHlwZS5zY3JvbGxIZWlnaHQ9MDsKKy8qKgorICogUHJvcGVydHkgc2Nyb2xsV2lkdGgKKyAqIAorICogQHR5cGUgTnVtYmVyCisgKi8KK0hUTUxFbGVtZW50LnByb3RvdHlwZS5zY3JvbGxXaWR0aD0wOworLyoqCisgKiBQcm9wZXJ0eSBzY3JvbGxMZWZ0CisgKiAKKyAqIEB0eXBlIE51bWJlcgorICovCitIVE1MRWxlbWVudC5wcm90b3R5cGUuc2Nyb2xsTGVmdD0wOworLyoqCisgKiBQcm9wZXJ0eSBzY3JvbGxUb3AKKyAqIAorICogQHR5cGUgTnVtYmVyCisgKi8KK0hUTUxFbGVtZW50LnByb3RvdHlwZS5zY3JvbGxUb3A9MDsKKy8qKgorICogUHJvcGVydHkgc3R5bGUKKyAqIAorICogQHR5cGUgQ1NTMlByb3BlcnRpZXMKKyAqLworSFRNTEVsZW1lbnQucHJvdG90eXBlLnN0eWxlID0gbmV3IENTUzJQcm9wZXJ0aWVzKCk7CisKKy8qKgorICogT2JqZWN0IEhUTUxIdG1sRWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTEh0bWxFbGVtZW50KCl7fTsKK0hUTUxIdG1sRWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTEVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgdmVyc2lvbgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSHRtbEVsZW1lbnQucHJvdG90eXBlLnZlcnNpb249IiI7CisKKy8qKgorICogT2JqZWN0IEhUTUxIZWFkRWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTEhlYWRFbGVtZW50KCl7fTsKK0hUTUxIZWFkRWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTEVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgcHJvZmlsZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSGVhZEVsZW1lbnQucHJvdG90eXBlLnByb2ZpbGU9IiI7CisKKy8qKgorICogT2JqZWN0IEhUTUxMaW5rRWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTExpbmtFbGVtZW50KCl7fTsKK0hUTUxMaW5rRWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTEVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgZGlzYWJsZWQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIEJvb2xlYW4KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxMaW5rRWxlbWVudC5wcm90b3R5cGUuZGlzYWJsZWQ9ZmFsc2U7CisvKioKKyAqIFByb3BlcnR5IGNoYXJzZXQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTExpbmtFbGVtZW50LnByb3RvdHlwZS5jaGFyc2V0PSIiOworLyoqCisgKiBQcm9wZXJ0eSBocmVmCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxMaW5rRWxlbWVudC5wcm90b3R5cGUuaHJlZj0iIjsKKy8qKgorICogUHJvcGVydHkgaHJlZmxhbmcKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTExpbmtFbGVtZW50LnByb3RvdHlwZS5ocmVmbGFuZz0iIjsKKy8qKgorICogUHJvcGVydHkgbWVkaWEKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTExpbmtFbGVtZW50LnByb3RvdHlwZS5tZWRpYT0iIjsKKy8qKgorICogUHJvcGVydHkgcmVsCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxMaW5rRWxlbWVudC5wcm90b3R5cGUucmVsPSIiOworLyoqCisgKiBQcm9wZXJ0eSByZXYKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTExpbmtFbGVtZW50LnByb3RvdHlwZS5yZXY9IiI7CisvKioKKyAqIFByb3BlcnR5IHRhcmdldAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MTGlua0VsZW1lbnQucHJvdG90eXBlLnRhcmdldD0iIjsKKy8qKgorICogUHJvcGVydHkgdHlwZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MTGlua0VsZW1lbnQucHJvdG90eXBlLnR5cGU9IiI7CisKKy8qKgorICogT2JqZWN0IEhUTUxUaXRsZUVsZW1lbnQoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIEhUTUxFbGVtZW50CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKiBAc2VlIEhUTUxFbGVtZW50CisgKi8KK2Z1bmN0aW9uIEhUTUxUaXRsZUVsZW1lbnQoKXt9OworSFRNTFRpdGxlRWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTEVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgdGV4dAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGl0bGVFbGVtZW50LnByb3RvdHlwZS50ZXh0PSIiOworCisvKioKKyAqIE9iamVjdCBIVE1MTWV0YUVsZW1lbnQoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIEhUTUxFbGVtZW50CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKiBAc2VlIEhUTUxFbGVtZW50CisgKi8KK2Z1bmN0aW9uIEhUTUxNZXRhRWxlbWVudCgpe307CitIVE1MTWV0YUVsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGNvbnRlbnQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTE1ldGFFbGVtZW50LnByb3RvdHlwZS5jb250ZW50PSIiOworLyoqCisgKiBQcm9wZXJ0eSBodHRwRXF1aXYKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTE1ldGFFbGVtZW50LnByb3RvdHlwZS5odHRwRXF1aXY9IiI7CisvKioKKyAqIFByb3BlcnR5IG5hbWUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTE1ldGFFbGVtZW50LnByb3RvdHlwZS5uYW1lPSIiOworLyoqCisgKiBQcm9wZXJ0eSBzY2hlbWUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTE1ldGFFbGVtZW50LnByb3RvdHlwZS5zY2hlbWU9IiI7CisKKy8qKgorICogT2JqZWN0IEhUTUxCYXNlRWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTEJhc2VFbGVtZW50KCl7fTsKK0hUTUxCYXNlRWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTEVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgaHJlZgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MQmFzZUVsZW1lbnQucHJvdG90eXBlLmhyZWY9IiI7CisvKioKKyAqIFByb3BlcnR5IHRhcmdldAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MQmFzZUVsZW1lbnQucHJvdG90eXBlLnRhcmdldD0iIjsKKworLyoqCisgKiBPYmplY3QgSFRNTElzSW5kZXhFbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MSXNJbmRleEVsZW1lbnQoKXt9OworSFRNTElzSW5kZXhFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBmb3JtCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxJc0luZGV4RWxlbWVudC5wcm90b3R5cGUuZm9ybT1uZXcgSFRNTEZvcm1FbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IHByb21wdAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSXNJbmRleEVsZW1lbnQucHJvdG90eXBlLnByb21wdD0iIjsKKworLyoqCisgKiBPYmplY3QgSFRNTFN0eWxlRWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTFN0eWxlRWxlbWVudCgpe307CitIVE1MU3R5bGVFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBkaXNhYmxlZAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgQm9vbGVhbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFN0eWxlRWxlbWVudC5wcm90b3R5cGUuZGlzYWJsZWQ9ZmFsc2U7CisvKioKKyAqIFByb3BlcnR5IG1lZGlhCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxTdHlsZUVsZW1lbnQucHJvdG90eXBlLm1lZGlhPSIiOworLyoqCisgKiBQcm9wZXJ0eSB0eXBlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxTdHlsZUVsZW1lbnQucHJvdG90eXBlLnR5cGU9IiI7CisKKy8qKgorICogT2JqZWN0IEhUTUxCb2R5RWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTEJvZHlFbGVtZW50KCl7fTsKK0hUTUxCb2R5RWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTEVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgYUxpbmsKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEJvZHlFbGVtZW50LnByb3RvdHlwZS5hTGluaz0iIjsKKy8qKgorICogUHJvcGVydHkgYmFja2dyb3VuZAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MQm9keUVsZW1lbnQucHJvdG90eXBlLmJhY2tncm91bmQ9IiI7CisvKioKKyAqIFByb3BlcnR5IGJnQ29sb3IKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEJvZHlFbGVtZW50LnByb3RvdHlwZS5iZ0NvbG9yPSIiOworLyoqCisgKiBQcm9wZXJ0eSBsaW5rCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxCb2R5RWxlbWVudC5wcm90b3R5cGUubGluaz0iIjsKKy8qKgorICogUHJvcGVydHkgdGV4dAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MQm9keUVsZW1lbnQucHJvdG90eXBlLnRleHQ9IiI7CisvKioKKyAqIFByb3BlcnR5IHZMaW5rCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxCb2R5RWxlbWVudC5wcm90b3R5cGUudkxpbms9IiI7CisKKy8qKgorICogT2JqZWN0IEhUTUxGb3JtRWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTEZvcm1FbGVtZW50KCl7fTsKK0hUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTEVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgZWxlbWVudHMKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIEhUTUxDb2xsZWN0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLmVsZW1lbnRzPW5ldyBIVE1MQ29sbGVjdGlvbigpOworLyoqCisgKiBQcm9wZXJ0eSBsZW5ndGgKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZS5sZW5ndGg9MDsKKy8qKgorICogUHJvcGVydHkgbmFtZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLm5hbWU9IiI7CisvKioKKyAqIFByb3BlcnR5IGFjY2VwdENoYXJzZXQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZS5hY2NlcHRDaGFyc2V0PSIiOworLyoqCisgKiBQcm9wZXJ0eSBhY3Rpb24KKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZS5hY3Rpb249IiI7CisvKioKKyAqIFByb3BlcnR5IGVuY3R5cGUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZS5lbmN0eXBlPSIiOworLyoqCisgKiBQcm9wZXJ0eSBtZXRob2QKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZS5tZXRob2Q9IiI7CisvKioKKyAqIFByb3BlcnR5IHRhcmdldAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLnRhcmdldD0iIjsKKy8qKgorICogZnVuY3Rpb24gc3VibWl0KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUuc3VibWl0ID0gZnVuY3Rpb24oKXt9OworLyoqCisgKiBmdW5jdGlvbiByZXNldCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKXt9OworCisvKioKKyAqIE9iamVjdCBIVE1MU2VsZWN0RWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTFNlbGVjdEVsZW1lbnQoKXt9OworSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IHR5cGUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlLnR5cGU9IiI7CisvKioKKyAqIFByb3BlcnR5IHNlbGVjdGVkSW5kZXgKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlLnNlbGVjdGVkSW5kZXg9MDsKKy8qKgorICogUHJvcGVydHkgdmFsdWUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlLnZhbHVlPSIiOworLyoqCisgKiBQcm9wZXJ0eSBsZW5ndGgKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIE51bWJlcgorICogQHRocm93cyBET01FeGNlcHRpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxTZWxlY3RFbGVtZW50LnByb3RvdHlwZS5sZW5ndGg9MDsKKy8qKgorICogUHJvcGVydHkgZm9ybQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgSFRNTEZvcm1FbGVtZW50CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MU2VsZWN0RWxlbWVudC5wcm90b3R5cGUuZm9ybSA9IG5ldyBIVE1MRm9ybUVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgb3B0aW9ucworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgSFRNTE9wdGlvbnNDb2xsZWN0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MU2VsZWN0RWxlbWVudC5wcm90b3R5cGUub3B0aW9ucz0gbmV3IEhUTUxPcHRpb25zQ29sbGVjdGlvbigpOworLyoqCisgKiBQcm9wZXJ0eSBkaXNhYmxlZAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgQm9vbGVhbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlLmRpc2FibGVkPWZhbHNlOworLyoqCisgKiBQcm9wZXJ0eSBtdWx0aXBsZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgQm9vbGVhbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlLm11bHRpcGxlPWZhbHNlOworLyoqCisgKiBQcm9wZXJ0eSBuYW1lCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxTZWxlY3RFbGVtZW50LnByb3RvdHlwZS5uYW1lPSIiOworLyoqCisgKiBQcm9wZXJ0eSBzaXplCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxTZWxlY3RFbGVtZW50LnByb3RvdHlwZS5zaXplPTA7CisvKioKKyAqIFByb3BlcnR5IHRhYkluZGV4CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxTZWxlY3RFbGVtZW50LnByb3RvdHlwZS50YWJJbmRleD0wOworLyoqCisgKiBmdW5jdGlvbiBhZGQoZWxlbWVudCwgYmVmb3JlKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudAorICogQHBhcmFtIHtIVE1MRWxlbWVudH0gYmVmb3JlCisgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGJlZm9yZSl7fTsKKy8qKgorICogZnVuY3Rpb24gcmVtb3ZlKGluZGV4KQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHBhcmFtIHtOdW1iZXJ9IGluZGV4CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MU2VsZWN0RWxlbWVudC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24oaW5kZXgpe307CisvKioKKyAqIGZ1bmN0aW9uIGJsdXIoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlLmJsdXIgPSBmdW5jdGlvbigpe307CisvKioKKyAqIGZ1bmN0aW9uIGZvY3VzKCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxTZWxlY3RFbGVtZW50LnByb3RvdHlwZS5mb2N1cyA9IGZ1bmN0aW9uKCl7fTsKKworLyoqCisgKiBPYmplY3QgSFRNTE9wdEdyb3VwRWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTE9wdEdyb3VwRWxlbWVudCgpe307CitIVE1MT3B0R3JvdXBFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBkaXNhYmxlZAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgQm9vbGVhbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTE9wdEdyb3VwRWxlbWVudC5wcm90b3R5cGUuZGlzYWJsZWQ9ZmFsc2U7CisvKioKKyAqIFByb3BlcnR5IGxhYmVsCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxPcHRHcm91cEVsZW1lbnQucHJvdG90eXBlLmxhYmVsPSIiOworCisvKioKKyAqIE9iamVjdCBPcHRpb24oKQorICogQGNvbnN0cnVjdG9yCisgKiBAcGFyYW0ge1N0cmluZ30gdGV4dAorICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlCisgKiBAcGFyYW0ge0Jvb2xlYW59IGRlZmF1bHRTZWxlY3RlZAorICogQHBhcmFtIHtCb29sZWFufSBzZWxlY3RlZAorICovCitmdW5jdGlvbiBPcHRpb24odGV4dCwgdmFsdWUsIGRlZmF1bHRTZWxlY3RlZCwgc2VsZWN0ZWQpe307CitPcHRpb24ucHJvdG90eXBlID0gbmV3IEhUTUxPcHRpb25FbGVtZW50KCk7CisvKioKKyAqIE9iamVjdCBIVE1MT3B0aW9uRWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTE9wdGlvbkVsZW1lbnQoKXt9OworSFRNTE9wdGlvbkVsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGZvcm0KKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIEhUTUxGb3JtRWxlbWVudAorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTE9wdGlvbkVsZW1lbnQucHJvdG90eXBlLmZvcm0gPSBuZXcgSFRNTEZvcm1FbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGRlZmF1bHRTZWxlY3RlZAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgQm9vbGVhbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTE9wdGlvbkVsZW1lbnQucHJvdG90eXBlLmRlZmF1bHRTZWxlY3RlZD1mYWxzZTsKKy8qKgorICogUHJvcGVydHkgdGV4dAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MT3B0aW9uRWxlbWVudC5wcm90b3R5cGUudGV4dD0iIjsKKy8qKgorICogUHJvcGVydHkgaW5kZXgKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTE9wdGlvbkVsZW1lbnQucHJvdG90eXBlLmluZGV4PTA7CisvKioKKyAqIFByb3BlcnR5IGRpc2FibGVkCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBCb29sZWFuCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MT3B0aW9uRWxlbWVudC5wcm90b3R5cGUuZGlzYWJsZWQ9ZmFsc2U7CisvKioKKyAqIFByb3BlcnR5IGxhYmVsCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxPcHRpb25FbGVtZW50LnByb3RvdHlwZS5sYWJlbD0iIjsKKy8qKgorICogUHJvcGVydHkgc2VsZWN0ZWQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIEJvb2xlYW4KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxPcHRpb25FbGVtZW50LnByb3RvdHlwZS5zZWxlY3RlZD1mYWxzZTsKKy8qKgorICogUHJvcGVydHkgdmFsdWUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTE9wdGlvbkVsZW1lbnQucHJvdG90eXBlLnZhbHVlPSIiOworCisvKioKKyAqIE9iamVjdCBIVE1MSW5wdXRFbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MSW5wdXRFbGVtZW50KCl7fTsKK0hUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGRlZmF1bHRWYWx1ZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZS5kZWZhdWx0VmFsdWU9IiI7CisvKioKKyAqIFByb3BlcnR5IGRlZmF1bHRDaGVja2VkCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBCb29sZWFuCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZS5kZWZhdWx0Q2hlY2tlZD1mYWxzZTsKKy8qKgorICogUHJvcGVydHkgZm9ybQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgSFRNTEZvcm1FbGVtZW50CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZS5mb3JtID0gbmV3IEhUTUxGb3JtRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBhY2NlcHQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUuYWNjZXB0PSIiOworLyoqCisgKiBQcm9wZXJ0eSBhY2Nlc3NLZXkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUuYWNjZXNzS2V5PSIiOworLyoqCisgKiBQcm9wZXJ0eSBhbGlnbgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZS5hbGlnbj0iIjsKKy8qKgorICogUHJvcGVydHkgYWx0CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLmFsdD0iIjsKKy8qKgorICogUHJvcGVydHkgY2hlY2tlZAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgQm9vbGVhbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUuY2hlY2tlZD1mYWxzZTsKKy8qKgorICogUHJvcGVydHkgZGlzYWJsZWQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIEJvb2xlYW4KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLmRpc2FibGVkPWZhbHNlOworLyoqCisgKiBQcm9wZXJ0eSBtYXNMZW5ndGgKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUubWF4TGVuZ2h0PTA7CisvKioKKyAqIFByb3BlcnR5IG5hbWUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUubmFtZT0iIjsKKy8qKgorICogUHJvcGVydHkgcmVhZE9ubHkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIEJvb2xlYW4KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLnJlYWRPbmx5PWZhbHNlOworLyoqCisgKiBQcm9wZXJ0eSBzaXplCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLnNpemU9MDsKKy8qKgorICogUHJvcGVydHkgc3JjCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLnNyYz0iIjsKKy8qKgorICogUHJvcGVydHkgdGFiSW5kZXgKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUudGFiSW5kZXg9MDsKKy8qKgorICogUHJvcGVydHkgdHlwZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZS50eXBlPSIiOworLyoqCisgKiBQcm9wZXJ0eSB1c2VNYXAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUudXNlTWFwPSIiOworLyoqCisgKiBQcm9wZXJ0eSB2YWx1ZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZS52YWx1ZT0iIjsKKy8qKgorICogZnVuY3Rpb24gYmx1cigpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZS5ibHVyID0gZnVuY3Rpb24oKXt9OworLyoqCisgKiBmdW5jdGlvbiBmb2N1cygpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZS5mb2N1cyA9IGZ1bmN0aW9uKCl7fTsKKy8qKgorICogZnVuY3Rpb24gc2VsZWN0KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLnNlbGVjdCA9IGZ1bmN0aW9uKCl7fTsKKy8qKgorICogZnVuY3Rpb24gY2xpY2soKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUuY2xpY2sgPSBmdW5jdGlvbigpe307CisKKy8qKgorICogT2JqZWN0IEhUTUxUZXh0QXJlYUVsZW1lbnQoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIEhUTUxFbGVtZW50CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKiBAc2VlIEhUTUxFbGVtZW50CisgKi8KK2Z1bmN0aW9uIEhUTUxUZXh0QXJlYUVsZW1lbnQoKXt9OworSFRNTFRleHRBcmVhRWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTEVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgZGVmYXVsdFZhbHVlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUZXh0QXJlYUVsZW1lbnQucHJvdG90eXBlLmRlZmF1bHRWYWx1ZT0iIjsKKy8qKgorICogUHJvcGVydHkgZm9ybQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgSFRNTEZvcm1FbGVtZW50CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZS5mb3JtPSBuZXcgSFRNTEZvcm1FbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGFjY2Vzc0tleQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZS5hY2Nlc3NLZXk9IiI7CisvKioKKyAqIFByb3BlcnR5IGNvbHMKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRleHRBcmVhRWxlbWVudC5wcm90b3R5cGUuY29scz0wOworLyoqCisgKiBQcm9wZXJ0eSBkaXNhYmxlZAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgQm9vbGVhbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRleHRBcmVhRWxlbWVudC5wcm90b3R5cGUuZGlzYWJsZWQ9ZmFsc2U7CisvKioKKyAqIFByb3BlcnR5IG5hbWUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRleHRBcmVhRWxlbWVudC5wcm90b3R5cGUubmFtZT0iIjsKKy8qKgorICogUHJvcGVydHkgcmVhZE9ubHkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIEJvb2xlYW4KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUZXh0QXJlYUVsZW1lbnQucHJvdG90eXBlLnJlYWRPbmx5PWZhbHNlOworLyoqCisgKiBQcm9wZXJ0eSByb3dzCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUZXh0QXJlYUVsZW1lbnQucHJvdG90eXBlLnJvd3M9MDsKKy8qKgorICogUHJvcGVydHkgdGFiSW5kZXgKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRleHRBcmVhRWxlbWVudC5wcm90b3R5cGUudGFiSW5kZXg9MDsKKy8qKgorICogUHJvcGVydHkgdHlwZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZS50eXBlPSIiOworLyoqCisgKiBQcm9wZXJ0eSB2YWx1ZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZS52YWx1ZT0iIjsKKy8qKgorICogZnVuY3Rpb24gYmx1cigpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZS5ibHVyID0gZnVuY3Rpb24oKXt9OworLyoqCisgKiBmdW5jdGlvbiBmb2N1cygpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZS5mb2N1cyA9IGZ1bmN0aW9uKCl7fTsKKy8qKgorICogZnVuY3Rpb24gc2VsZWN0KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUZXh0QXJlYUVsZW1lbnQucHJvdG90eXBlLnNlbGVjdCA9IGZ1bmN0aW9uKCl7fTsKKworLyoqCisgKiBPYmplY3QgSFRNTEJ1dHRvbkVsZW1lbnQoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIEhUTUxFbGVtZW50CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKiBAc2VlIEhUTUxFbGVtZW50CisgKi8KK2Z1bmN0aW9uIEhUTUxCdXR0b25FbGVtZW50KCl7fTsKK0hUTUxCdXR0b25FbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBmb3JtCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxCdXR0b25FbGVtZW50LnByb3RvdHlwZS5mb3JtID0gbmV3IEhUTUxGb3JtRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBhY2Nlc3NLZXkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEJ1dHRvbkVsZW1lbnQucHJvdG90eXBlLmFjY2Vzc0tleSA9ICIiOworLyoqCisgKiBQcm9wZXJ0eSBkaXNhYmxlZAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgQm9vbGVhbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEJ1dHRvbkVsZW1lbnQucHJvdG90eXBlLmRpc2FibGVkPWZhbHNlOworLyoqCisgKiBQcm9wZXJ0eSBuYW1lCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxCdXR0b25FbGVtZW50LnByb3RvdHlwZS5uYW1lPSIiOworLyoqCisgKiBQcm9wZXJ0eSB0YWJJbmRleAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MQnV0dG9uRWxlbWVudC5wcm90b3R5cGUudGFiSW5kZXg9MDsKKy8qKgorICogUHJvcGVydHkgdHlwZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MQnV0dG9uRWxlbWVudC5wcm90b3R5cGUudHlwZT0iIjsKKy8qKgorICogUHJvcGVydHkgdmFsdWUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEJ1dHRvbkVsZW1lbnQucHJvdG90eXBlLnZhbHVlPSIiOworCisvKioKKyAqIE9iamVjdCBIVE1MTGFiZWxFbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MTGFiZWxFbGVtZW50KCl7fTsKK0hUTUxMYWJlbEVsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGZvcm0KKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIEhUTUxGb3JtRWxlbWVudAorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTExhYmVsRWxlbWVudC5wcm90b3R5cGUuZm9ybSA9IG5ldyBIVE1MRm9ybUVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgYWNjZXNzS2V5CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxMYWJlbEVsZW1lbnQucHJvdG90eXBlLmFjY2Vzc0tleT0iIjsKKy8qKgorICogUHJvcGVydHkgaHRtbEZvcgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MTGFiZWxFbGVtZW50LnByb3RvdHlwZS5odG1sRm9yPSIiOworCisvKioKKyAqIE9iamVjdCBIVE1MRmllbGRTZXRFbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MRmllbGRTZXRFbGVtZW50KCl7fTsKK0hUTUxGaWVsZFNldEVsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGZvcm0KKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIEhUTUxGb3JtRWxlbWVudAorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEZpZWxkU2V0RWxlbWVudC5wcm90b3R5cGUuZm9ybSA9IG5ldyBIVE1MRm9ybUVsZW1lbnQoKTsKKworLyoqCisgKiBPYmplY3QgSFRNTExlZ2VuZEVsZW1lbnQoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIEhUTUxFbGVtZW50CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKiBAc2VlIEhUTUxFbGVtZW50CisgKi8KK2Z1bmN0aW9uIEhUTUxMZWdlbmRFbGVtZW50KCl7fTsKK0hUTUxMZWdlbmRFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBmb3JtCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxMZWdlbmRFbGVtZW50LnByb3RvdHlwZS5mb3JtID0gbmV3IEhUTUxGb3JtRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBhY2Nlc3NLZXkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTExlZ2VuZEVsZW1lbnQucHJvdG90eXBlLmFjY2Vzc0tleT0iIjsKKy8qKgorICogUHJvcGVydHkgYWxpZ24KKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTExlZ2VuZEVsZW1lbnQucHJvdG90eXBlLmFsaWduPSIiOworCisvKioKKyAqIE9iamVjdCBIVE1MVUxpc3RFbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MVUxpc3RFbGVtZW50KCl7fTsKK0hUTUxVTGlzdEVsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGNvbXBhY3QKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIEJvb2xlYW4KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxVTGlzdEVsZW1lbnQucHJvdG90eXBlLmNvbXBhY3Q9ZmFsc2U7CisvKioKKyAqIFByb3BlcnR5IHR5cGUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFVMaXN0RWxlbWVudC5wcm90b3R5cGUudHlwZT0iIjsKKworLyoqCisgKiBPYmplY3QgSFRNTE9MaXN0RWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTE9MaXN0RWxlbWVudCgpe307CitIVE1MT0xpc3RFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBjb21wYWN0CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBCb29sZWFuCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MT0xpc3RFbGVtZW50LnByb3RvdHlwZS5jb21wYWN0PWZhbHNlOworLyoqCisgKiBQcm9wZXJ0eSBzdGFydAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MT0xpc3RFbGVtZW50LnByb3RvdHlwZS5zdGFydD0wOworLyoqCisgKiBQcm9wZXJ0eSB0eXBlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxPTGlzdEVsZW1lbnQucHJvdG90eXBlLnR5cGU9IiI7CisKKy8qKgorICogT2JqZWN0IEhUTUxETGlzdEVsZW1lbnQoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIEhUTUxFbGVtZW50CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKiBAc2VlIEhUTUxFbGVtZW50CisgKi8KK2Z1bmN0aW9uIEhUTUxETGlzdEVsZW1lbnQoKXt9OworSFRNTERMaXN0RWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTEVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgY29tcGFjdAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgQm9vbGVhbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTERMaXN0RWxlbWVudC5wcm90b3R5cGUuY29tcGFjdD1mYWxzZTsKKworLyoqCisgKiBPYmplY3QgSFRNTERpcmVjdG9yeUVsZW1lbnQoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIEhUTUxFbGVtZW50CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKiBAc2VlIEhUTUxFbGVtZW50CisgKi8KK2Z1bmN0aW9uIEhUTUxEaXJlY3RvcnlFbGVtZW50KCl7fTsKK0hUTUxEaXJlY3RvcnlFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBjb21wYWN0CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBCb29sZWFuCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MRGlyZWN0b3J5RWxlbWVudC5wcm90b3R5cGUuY29tcGFjdD1mYWxzZTsKKworLyoqCisgKiBPYmplY3QgSFRNTE1lbnVFbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MTWVudUVsZW1lbnQoKXt9OworSFRNTE1lbnVFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBjb21wYWN0CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBCb29sZWFuCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MTWVudUVsZW1lbnQucHJvdG90eXBlLmNvbXBhY3Q9ZmFsc2U7CisKKy8qKgorICogT2JqZWN0IEhUTUxMSUVsZW1lbnQoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIEhUTUxFbGVtZW50CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKiBAc2VlIEhUTUxFbGVtZW50CisgKi8KK2Z1bmN0aW9uIEhUTUxMSUVsZW1lbnQoKXt9OworSFRNTExJRWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTEVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgdHlwZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MTElFbGVtZW50LnByb3RvdHlwZS50eXBlPSIiOworLyoqCisgKiBQcm9wZXJ0eSB2YWx1ZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MTElFbGVtZW50LnByb3RvdHlwZS52YWx1ZT0wOworCisvKioKKyAqIE9iamVjdCBIVE1MRGl2RWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTERpdkVsZW1lbnQoKXt9OworSFRNTERpdkVsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGFsaWduCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxEaXZFbGVtZW50LnByb3RvdHlwZS5hbGlnbj0iIjsKKworLyoqCisgKiBPYmplY3QgSFRNTFBhcmFncmFwaEVsZW1lbnQoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIEhUTUxFbGVtZW50CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKiBAc2VlIEhUTUxFbGVtZW50CisgKi8KK2Z1bmN0aW9uIEhUTUxQYXJhZ3JhcGhFbGVtZW50KCl7fTsKK0hUTUxQYXJhZ3JhcGhFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBhbGlnbgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MUGFyYWdyYXBoRWxlbWVudC5wcm90b3R5cGUuYWxpZ249IiI7CisKKy8qKgorICogT2JqZWN0IEhUTUxIZWFkaW5nRWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTEhlYWRpbmdFbGVtZW50KCl7fTsKK0hUTUxIZWFkaW5nRWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTEVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgYWxpZ24KKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEhlYWRpbmdFbGVtZW50LnByb3RvdHlwZS5hbGlnbj0iIjsKKworLyoqCisgKiBPYmplY3QgSFRNTFF1b3RlRWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTFF1b3RlRWxlbWVudCgpe307CitIVE1MUXVvdGVFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBhbGlnbgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MUXVvdGVFbGVtZW50LnByb3RvdHlwZS5hbGlnbj0iIjsKKworLyoqCisgKiBPYmplY3QgSFRNTFByZUVsZW1lbnQoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIEhUTUxFbGVtZW50CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKiBAc2VlIEhUTUxFbGVtZW50CisgKi8KK2Z1bmN0aW9uIEhUTUxQcmVFbGVtZW50KCl7fTsKK0hUTUxQcmVFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSB3aWR0aAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MUHJlRWxlbWVudC5wcm90b3R5cGUud2lkdGg9MDsKKworLyoqCisgKiBPYmplY3QgSFRNTEJSRWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTEJSRWxlbWVudCgpe307CitIVE1MQlJFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBjbGVhcgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MQlJFbGVtZW50LnByb3RvdHlwZS5jbGVhcj0iIjsKKworLyoqCisgKiBPYmplY3QgSFRNTEJhc2VGb250RWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTEJhc2VGb250RWxlbWVudCgpe307CitIVE1MQmFzZUZvbnRFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBjb2xvcgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MQmFzZUZvbnRFbGVtZW50LnByb3RvdHlwZS5jb2xvcj0iIjsKKy8qKgorICogUHJvcGVydHkgZmFjZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MQmFzZUZvbnRFbGVtZW50LnByb3RvdHlwZS5mYWNlPSIiOworLyoqCisgKiBQcm9wZXJ0eSBzaXplCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxCYXNlRm9udEVsZW1lbnQucHJvdG90eXBlLnNpemU9MDsKKworLyoqCisgKiBPYmplY3QgSFRNTEJhc2VGb250RWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTEZvbnRFbGVtZW50KCl7fTsKK0hUTUxGb250RWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTEVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgY29sb3IKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEZvbnRFbGVtZW50LnByb3RvdHlwZS5jb2xvcj0iIjsKKy8qKgorICogUHJvcGVydHkgZmFjZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MRm9udEVsZW1lbnQucHJvdG90eXBlLmZhY2U9IiI7CisvKioKKyAqIFByb3BlcnR5IHNpemUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEZvbnRFbGVtZW50LnByb3RvdHlwZS5zaXplPTA7CisKKy8qKgorICogT2JqZWN0IEhUTUxIUkVsZW1lbnQoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIEhUTUxFbGVtZW50CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKiBAc2VlIEhUTUxFbGVtZW50CisgKi8KK2Z1bmN0aW9uIEhUTUxIUkVsZW1lbnQoKXt9OworSFRNTEhSRWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTEVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgYWxpZ24KKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEhSRWxlbWVudC5wcm90b3R5cGUuYWxpZ249IiI7CisvKioKKyAqIFByb3BlcnR5IG5vU2hhZGUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIEJvb2xlYW4KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxIUkVsZW1lbnQucHJvdG90eXBlLm5vU2hhZGU9ZmFsc2U7CisvKioKKyAqIFByb3BlcnR5IHNpemUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEhSRWxlbWVudC5wcm90b3R5cGUuc2l6ZT0iIjsKKy8qKgorICogUHJvcGVydHkgd2lkdGgKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEhSRWxlbWVudC5wcm90b3R5cGUud2lkdGg9IiI7CisKKy8qKgorICogT2JqZWN0IEhUTUxNb2RFbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MTW9kRWxlbWVudCgpe307CitIVE1MTW9kRWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTEVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgY2l0ZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MTW9kRWxlbWVudC5wcm90b3R5cGUuY2l0ZT0iIjsKKy8qKgorICogUHJvcGVydHkgZGF0ZVRpbWUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTE1vZEVsZW1lbnQucHJvdG90eXBlLmRhdGVUaW1lPSIiOworCisvKioKKyAqIE9iamVjdCBIVE1MQW5jaG9yRWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTEFuY2hvckVsZW1lbnQoKXt9OworSFRNTEFuY2hvckVsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGFjY2Vzc0tleQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MQW5jaG9yRWxlbWVudC5wcm90b3R5cGUuYWNjZXNzS2V5PSIiOworLyoqCisgKiBQcm9wZXJ0eSBjaGFyc2V0CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxBbmNob3JFbGVtZW50LnByb3RvdHlwZS5jaGFyc2V0PSIiOworLyoqCisgKiBQcm9wZXJ0eSBjb29yZHMKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEFuY2hvckVsZW1lbnQucHJvdG90eXBlLmNvb3Jkcz0iIjsKKy8qKgorICogUHJvcGVydHkgaHJlZgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MQW5jaG9yRWxlbWVudC5wcm90b3R5cGUuaHJlZj0iIjsKKy8qKgorICogUHJvcGVydHkgaHJlZmxhbmcKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEFuY2hvckVsZW1lbnQucHJvdG90eXBlLmhyZWZsYW5nPSIiOworLyoqCisgKiBQcm9wZXJ0eSBuYW1lCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxBbmNob3JFbGVtZW50LnByb3RvdHlwZS5uYW1lPSIiOworLyoqCisgKiBQcm9wZXJ0eSByZWwKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEFuY2hvckVsZW1lbnQucHJvdG90eXBlLnJlbD0iIjsKKy8qKgorICogUHJvcGVydHkgcmV2CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxBbmNob3JFbGVtZW50LnByb3RvdHlwZS5yZXY9IiI7CisvKioKKyAqIFByb3BlcnR5IHNoYXBlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxBbmNob3JFbGVtZW50LnByb3RvdHlwZS5zaGFwZT0iIjsKKy8qKgorICogUHJvcGVydHkgdGFiSW5kZXgKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEFuY2hvckVsZW1lbnQucHJvdG90eXBlLnRhYkluZGV4PTA7CisvKioKKyAqIFByb3BlcnR5IHRhcmdldAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MQW5jaG9yRWxlbWVudC5wcm90b3R5cGUudGFyZ2V0PSIiOworLyoqCisgKiBQcm9wZXJ0eSB0eXBlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxBbmNob3JFbGVtZW50LnByb3RvdHlwZS50eXBlPSIiOworLyoqCisgKiBmdW5jdGlvbiBibHVyKCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxBbmNob3JFbGVtZW50LnByb3RvdHlwZS5ibHVyID0gZnVuY3Rpb24oKXt9OworLyoqCisgKiBmdW5jdGlvbiBmb2N1cygpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MQW5jaG9yRWxlbWVudC5wcm90b3R5cGUuZm9jdXMgPSBmdW5jdGlvbigpe307CisKKy8qKgorICogT2JqZWN0IEltYWdlKCkKKyAqIEBjb25zdHJ1Y3RvcgorICogQHBhcmFtIHtOdW1iZXJ9IHdpZHRoCisgKiBAcGFyYW0ge051bWJlcn0gaGVpZ2h0CisgKi8KK2Z1bmN0aW9uIEltYWdlKHdpZHRoLCBoZWlnaHQpe307CitJbWFnZS5wcm90b3R5cGUgPSBuZXcgSFRNTEltYWdlRWxlbWVudCgpOworLyoqCisgKiBPYmplY3QgSFRNTEltYWdlRWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTEltYWdlRWxlbWVudCgpe307CitIVE1MSW1hZ2VFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBuYW1lCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxJbWFnZUVsZW1lbnQucHJvdG90eXBlLm5hbWU9IiI7CisvKioKKyAqIFByb3BlcnR5IGFsaWduCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxJbWFnZUVsZW1lbnQucHJvdG90eXBlLmFsaWduPSIiOworLyoqCisgKiBQcm9wZXJ0eSBhbHQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUuYWx0PSIiOworLyoqCisgKiBQcm9wZXJ0eSBib3JkZXIKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUuYm9yZGVyPSIiOworLyoqCisgKiBQcm9wZXJ0eSBoZWlnaHQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUuaGVpZ2h0PTA7CisvKioKKyAqIFByb3BlcnR5IGhzcGFjZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSW1hZ2VFbGVtZW50LnByb3RvdHlwZS5oc3BhY2U9MDsKKy8qKgorICogUHJvcGVydHkgaXNNYXAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIEJvb2xlYW4KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxJbWFnZUVsZW1lbnQucHJvdG90eXBlLmlzTWFwPWZhbHNlOworLyoqCisgKiBQcm9wZXJ0eSBsb25nRGVzYworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSW1hZ2VFbGVtZW50LnByb3RvdHlwZS5sb25nRGVzYz0iIjsKKy8qKgorICogUHJvcGVydHkgc3JjCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxJbWFnZUVsZW1lbnQucHJvdG90eXBlLnNyYz0iIjsKKy8qKgorICogUHJvcGVydHkgdXNlTWFwCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxJbWFnZUVsZW1lbnQucHJvdG90eXBlLnVzZU1hcD0iIjsKKy8qKgorICogUHJvcGVydHkgdnNwYWNlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxJbWFnZUVsZW1lbnQucHJvdG90eXBlLnZzcGFjZT0wOworLyoqCisgKiBQcm9wZXJ0eSB3aWR0aAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSW1hZ2VFbGVtZW50LnByb3RvdHlwZS53aWR0aD0wOworCisvKioKKyAqIE9iamVjdCBIVE1MT2JqZWN0RWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTE9iamVjdEVsZW1lbnQoKXt9OworSFRNTE9iamVjdEVsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGZvcm0KKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIEhUTUxGb3JtRWxlbWVudAorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTE9iamVjdEVsZW1lbnQucHJvdG90eXBlLmZvcm0gPSBuZXcgSFRNTEZvcm1FbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGNvZGUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTE9iamVjdEVsZW1lbnQucHJvdG90eXBlLmNvZGU9IiI7CisvKioKKyAqIFByb3BlcnR5IGFsaWduCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxPYmplY3RFbGVtZW50LnByb3RvdHlwZS5hbGlnbj0iIjsKKy8qKgorICogUHJvcGVydHkgYXJjaGl2ZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MT2JqZWN0RWxlbWVudC5wcm90b3R5cGUuYXJjaGl2ZT0iIjsKKy8qKgorICogUHJvcGVydHkgYm9yZGVyCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxPYmplY3RFbGVtZW50LnByb3RvdHlwZS5ib3JkZXI9IiI7CisvKioKKyAqIFByb3BlcnR5IGNvZGVCYXNlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxPYmplY3RFbGVtZW50LnByb3RvdHlwZS5jb2RlQmFzZT0iIjsKKy8qKgorICogUHJvcGVydHkgY29kZVR5cGUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTE9iamVjdEVsZW1lbnQucHJvdG90eXBlLmNvZGVUeXBlPSIiOworLyoqCisgKiBQcm9wZXJ0eSBkYXRhCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxPYmplY3RFbGVtZW50LnByb3RvdHlwZS5kYXRhPSIiOworLyoqCisgKiBQcm9wZXJ0eSBkZWNsYXJlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBCb29sZWFuCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MT2JqZWN0RWxlbWVudC5wcm90b3R5cGUuZGVjbGFyZT1mYWxzZTsKKy8qKgorICogUHJvcGVydHkgaGVpZ2h0CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxPYmplY3RFbGVtZW50LnByb3RvdHlwZS5oZWlnaHQ9IiI7CisvKioKKyAqIFByb3BlcnR5IGhzcGFjZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MT2JqZWN0RWxlbWVudC5wcm90b3R5cGUuaHNwYWNlPTA7CisvKioKKyAqIFByb3BlcnR5IG5hbWUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTE9iamVjdEVsZW1lbnQucHJvdG90eXBlLm5hbWU9IiI7CisvKioKKyAqIFByb3BlcnR5IHN0YW5kYnkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTE9iamVjdEVsZW1lbnQucHJvdG90eXBlLnN0YW5kYnk9IiI7CisvKioKKyAqIFByb3BlcnR5IHRhYkluZGV4CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxPYmplY3RFbGVtZW50LnByb3RvdHlwZS50YWJJbmRleD0wOworLyoqCisgKiBQcm9wZXJ0eSB0eXBlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxPYmplY3RFbGVtZW50LnByb3RvdHlwZS50eXBlPSIiOworLyoqCisgKiBQcm9wZXJ0eSB1c2VNYXAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTE9iamVjdEVsZW1lbnQucHJvdG90eXBlLnVzZU1hcD0iIjsKKy8qKgorICogUHJvcGVydHkgdnNwYWNlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxPYmplY3RFbGVtZW50LnByb3RvdHlwZS52c3BhY2U9MDsKKy8qKgorICogUHJvcGVydHkgd2lkdGgKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTE9iamVjdEVsZW1lbnQucHJvdG90eXBlLndpZHRoPSIiOworLyoqCisgKiBQcm9wZXJ0eSBjb250ZW50RG9jdW1lbnQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIERvY3VtZW50CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MT2JqZWN0RWxlbWVudC5wcm90b3R5cGUuY29udGVudERvY3VtZW50PSBuZXcgSFRNTERvY3VtZW50KCk7CisKKy8qKgorICogT2JqZWN0IEhUTUxQYXJhbUVsZW1lbnQoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIEhUTUxFbGVtZW50CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKiBAc2VlIEhUTUxFbGVtZW50CisgKi8KK2Z1bmN0aW9uIEhUTUxQYXJhbUVsZW1lbnQoKXt9OworSFRNTFBhcmFtRWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTEVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgbmFtZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MUGFyYW1FbGVtZW50LnByb3RvdHlwZS5uYW1lPSIiOworLyoqCisgKiBQcm9wZXJ0eSB0eXBlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxQYXJhbUVsZW1lbnQucHJvdG90eXBlLnR5cGU9IiI7CisvKioKKyAqIFByb3BlcnR5IHZhbHVlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxQYXJhbUVsZW1lbnQucHJvdG90eXBlLnZhbHVlPSIiOworLyoqCisgKiBQcm9wZXJ0eSB2YWx1ZVR5cGUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFBhcmFtRWxlbWVudC5wcm90b3R5cGUudmFsdWVUeXBlPSIiOworCisvKioKKyAqIE9iamVjdCBIVE1MQXBwbGV0RWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTEFwcGxldEVsZW1lbnQoKXt9OworSFRNTEFwcGxldEVsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGFsaWduCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxBcHBsZXRFbGVtZW50LnByb3RvdHlwZS5hbGlnbj0iIjsKKy8qKgorICogUHJvcGVydHkgYWx0CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxBcHBsZXRFbGVtZW50LnByb3RvdHlwZS5hbHQ9IiI7CisvKioKKyAqIFByb3BlcnR5IGFyY2hpdmUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEFwcGxldEVsZW1lbnQucHJvdG90eXBlLmFyY2hpdmU9IiI7CisvKioKKyAqIFByb3BlcnR5IGNvZGUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEFwcGxldEVsZW1lbnQucHJvdG90eXBlLmNvZGU9IiI7CisvKioKKyAqIFByb3BlcnR5IGNvZGVCYXNlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxBcHBsZXRFbGVtZW50LnByb3RvdHlwZS5jb2RlQmFzZT0iIjsKKy8qKgorICogUHJvcGVydHkgaGVpZ2h0CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxBcHBsZXRFbGVtZW50LnByb3RvdHlwZS5oaWdodD0iIjsKKy8qKgorICogUHJvcGVydHkgaHNwYWNlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxBcHBsZXRFbGVtZW50LnByb3RvdHlwZS5oc3BhY2U9MDsKKy8qKgorICogUHJvcGVydHkgbmFtZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MQXBwbGV0RWxlbWVudC5wcm90b3R5cGUubmFtZT0iIjsKKy8qKgorICogUHJvcGVydHkgb2JqZWN0CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxBcHBsZXRFbGVtZW50LnByb3RvdHlwZS5vYmplY3Q9IiI7CisvKioKKyAqIFByb3BlcnR5IHZzcGFjZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MQXBwbGV0RWxlbWVudC5wcm90b3R5cGUudnNwYWNlPTA7CisvKioKKyAqIFByb3BlcnR5IHdpZHRoCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxBcHBsZXRFbGVtZW50LnByb3RvdHlwZS53aWR0aD0iIjsKKworLyoqCisgKiBPYmplY3QgSFRNTE1hcEVsZW1lbnQoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIEhUTUxFbGVtZW50CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKiBAc2VlIEhUTUxFbGVtZW50CisgKi8KK2Z1bmN0aW9uIEhUTUxNYXBFbGVtZW50KCl7fTsKK0hUTUxNYXBFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBhcmVhcworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgSFRNTENvbGxlY3Rpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxNYXBFbGVtZW50LnByb3RvdHlwZS5hcmVhcyA9IG5ldyBIVE1MQ29sbGVjdGlvbigpOworLyoqCisgKiBQcm9wZXJ0eSBuYW1lCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxNYXBFbGVtZW50LnByb3RvdHlwZS5uYW1lPSIiOworCisvKioKKyAqIE9iamVjdCBIVE1MQXJlYUVsZW1lbnQoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIEhUTUxFbGVtZW50CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKiBAc2VlIEhUTUxFbGVtZW50CisgKi8KK2Z1bmN0aW9uIEhUTUxBcmVhRWxlbWVudCgpe307CitIVE1MQXJlYUVsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGFjY2Vzc0tleQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MQXJlYUVsZW1lbnQucHJvdG90eXBlLmFjY2Vzc0tleT0iIjsKKy8qKgorICogUHJvcGVydHkgYWx0CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxBcmVhRWxlbWVudC5wcm90b3R5cGUuYWx0PSIiOworLyoqCisgKiBQcm9wZXJ0eSBjb29yZHMKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEFyZWFFbGVtZW50LnByb3RvdHlwZS5jb29yZHM9IiI7CisvKioKKyAqIFByb3BlcnR5IGhyZWYKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEFyZWFFbGVtZW50LnByb3RvdHlwZS5ocmVmPSIiOworLyoqCisgKiBQcm9wZXJ0eSBub0hyZWYKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIEJvb2xlYW4KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxBcmVhRWxlbWVudC5wcm90b3R5cGUubm9IcmVmPWZhbHNlOworLyoqCisgKiBQcm9wZXJ0eSBzaGFwZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MQXJlYUVsZW1lbnQucHJvdG90eXBlLnNoYXBlPSIiOworLyoqCisgKiBQcm9wZXJ0eSB0YWJJbmRleAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MQXJlYUVsZW1lbnQucHJvdG90eXBlLnRhYkluZGV4PTA7CisvKioKKyAqIFByb3BlcnR5IHRhcmdldAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MQXJlYUVsZW1lbnQucHJvdG90eXBlLnRhcmdldD0iIjsKKworLyoqCisgKiBPYmplY3QgSFRNTFNjcmlwdEVsZW1lbnQoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIEhUTUxFbGVtZW50CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKiBAc2VlIEhUTUxFbGVtZW50CisgKi8KK2Z1bmN0aW9uIEhUTUxTY3JpcHRFbGVtZW50KCl7fTsKK0hUTUxTY3JpcHRFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSB0ZXh0CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxTY3JpcHRFbGVtZW50LnByb3RvdHlwZS50ZXh0PSIiOworLyoqCisgKiBQcm9wZXJ0eSBodG1sRm9yCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxTY3JpcHRFbGVtZW50LnByb3RvdHlwZS5odG1sRm9yPSIiOworLyoqCisgKiBQcm9wZXJ0eSBldmVudAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MU2NyaXB0RWxlbWVudC5wcm90b3R5cGUuZXZlbnQ9IiI7CisvKioKKyAqIFByb3BlcnR5IGNoYXJzZXQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFNjcmlwdEVsZW1lbnQucHJvdG90eXBlLmNoYXJzZXQ9IiI7CisvKioKKyAqIFByb3BlcnR5IGRlZmVyCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxTY3JpcHRFbGVtZW50LnByb3RvdHlwZS5kZWZlcj0iIjsKKy8qKgorICogUHJvcGVydHkgc3JjCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxTY3JpcHRFbGVtZW50LnByb3RvdHlwZS5zcmM9IiI7CisvKioKKyAqIFByb3BlcnR5IHR5cGUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFNjcmlwdEVsZW1lbnQucHJvdG90eXBlLnR5cGU9IiI7CisKKy8qKgorICogT2JqZWN0IEhUTUxUYWJsZUVsZW1lbnQoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIEhUTUxFbGVtZW50CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKiBAc2VlIEhUTUxFbGVtZW50CisgKi8KK2Z1bmN0aW9uIEhUTUxUYWJsZUVsZW1lbnQoKXt9OworSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTEVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgY2FwdGlvbgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQKKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVFbGVtZW50LnByb3RvdHlwZS5jYXB0aW9uID0gbmV3IEhUTUxUYWJsZUNhcHRpb25FbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IHRIZWFkCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBIVE1MVGFibGVTZWN0aW9uRWxlbWVudAorICogQHRocm93cyBET01FeGNlcHRpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZUVsZW1lbnQucHJvdG90eXBlLnRIZWFkID0gbmV3IEhUTUxUYWJsZVNlbGVjdGlvbkVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgdEZvb3QKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50CisgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUudEZvb3QgPSBuZXcgSFRNTFRhYmxlU2VsZWN0aW9uRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSByb3dzCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBIVE1MQ29sbGVjdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUucm93cyA9IG5ldyBIVE1MQ29sbGVjdGlvbigpOworLyoqCisgKiBQcm9wZXJ0eSB0Qm9kaWVzCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBIVE1MQ29sbGVjdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUudEJvZGllcyA9IG5ldyBIVE1MQ29sbGVjdGlvbigpOworLyoqCisgKiBQcm9wZXJ0eSBhbGlnbgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVFbGVtZW50LnByb3RvdHlwZS5hbGlnbj0iIjsKKy8qKgorICogUHJvcGVydHkgYmdDb2xvcgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVFbGVtZW50LnByb3RvdHlwZS5iZ0NvbG9yPSIiOworLyoqCisgKiBQcm9wZXJ0eSBib3JkZXIKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUuYm9yZGVyPSIiOworLyoqCisgKiBQcm9wZXJ0eSBjZWxsUGFkZGluZworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVFbGVtZW50LnByb3RvdHlwZS5jZWxsUGFkZGluZz0iIjsKKy8qKgorICogUHJvcGVydHkgY2VsbFNwYWNpbmcKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUuY2VsbFNwYWNpbmc9IiI7CisvKioKKyAqIFByb3BlcnR5IGZyYW1lCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZUVsZW1lbnQucHJvdG90eXBlLmZyYW1lPSIiOworLyoqCisgKiBQcm9wZXJ0eSBydWxlcworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVFbGVtZW50LnByb3RvdHlwZS5ydWxlcz0iIjsKKy8qKgorICogUHJvcGVydHkgc3VtbWFyeQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVFbGVtZW50LnByb3RvdHlwZS5zdW1tYXJ5PSIiOworLyoqCisgKiBQcm9wZXJ0eSB3aWR0aAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVFbGVtZW50LnByb3RvdHlwZS53aWR0aD0iIjsKKy8qKgorICogZnVuY3Rpb24gY3JlYXRlVEhlYWQoKTsKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH0KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZUVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZVRIZWFkID0gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEhUTUxFbGVtZW50KCk7fTsKKy8qKgorICogZnVuY3Rpb24gZGVsZXRlVEhlYWQoKTsKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZUVsZW1lbnQucHJvdG90eXBlLmRlbGV0ZVRIZWFkID0gZnVuY3Rpb24oKXt9OworLyoqCisgKiBmdW5jdGlvbiBjcmVhdGVURm9vdCgpOworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHJldHVybnMge0hUTUxFbGVtZW50fQorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlVEZvb3QgPSBmdW5jdGlvbigpe3JldHVybiBuZXcgSFRNTEVsZW1lbnQoKTt9OworLyoqCisgKiBmdW5jdGlvbiBkZWxldGVURm9vdCgpOworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUuZGVsZXRlVEZvb3QgPSBmdW5jdGlvbigpe307CisvKioKKyAqIGZ1bmN0aW9uIGNyZWF0ZUNhcHRpb24oKTsKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH0KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZUVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZUNhcHRpb24gPSBmdW5jdGlvbigpe3JldHVybiBuZXcgSFRNTEVsZW1lbnQoKTt9OworLyoqCisgKiBmdW5jdGlvbiBkZWxldGVDYXB0aW9uKCk7CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVFbGVtZW50LnByb3RvdHlwZS5kZWxldGVDYXB0aW9uID0gZnVuY3Rpb24oKXt9OworLyoqCisgKiBmdW5jdGlvbiBpbnNlcnRSb3coaW5kZXgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAcGFyYW0ge051bWJlcn0gaW5kZXgKKyAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH0KKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVFbGVtZW50LnByb3RvdHlwZS5pbnNlcnRSb3cgPSBmdW5jdGlvbihpbmRleCl7cmV0dXJuIG5ldyBIVE1MRWxlbWVudCgpO307CisvKioKKyAqIGZ1bmN0aW9uIGRlbGV0ZVJvdyhpbmRleCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBwYXJhbSB7TnVtYmVyfSBpbmRleAorICogQHRocm93cyBET01FeGNlcHRpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZUVsZW1lbnQucHJvdG90eXBlLmRlbGV0ZVJvdyA9IGZ1bmN0aW9uKGluZGV4KXt9OworCisvKioKKyAqIE9iamVjdCBIVE1MVGFibGVDYXB0aW9uRWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQoKXt9OworSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGFsaWduCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZUNhcHRpb25FbGVtZW50LnByb3RvdHlwZS5hbGlnbj0iIjsKKworLyoqCisgKiBPYmplY3QgSFRNTFRhYmxlQ29sRWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTFRhYmxlQ29sRWxlbWVudCgpe307CitIVE1MVGFibGVDb2xFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBhbGlnbgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVDb2xFbGVtZW50LnByb3RvdHlwZS5hbGlnbj0iIjsKKy8qKgorICogUHJvcGVydHkgY2gKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlQ29sRWxlbWVudC5wcm90b3R5cGUuY2g9IiI7CisvKioKKyAqIFByb3BlcnR5IGNoT2ZmCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZUNvbEVsZW1lbnQucHJvdG90eXBlLmNoT2ZmPSIiOworLyoqCisgKiBQcm9wZXJ0eSBzcGFuCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZUNvbEVsZW1lbnQucHJvdG90eXBlLnNwYW49MDsKKy8qKgorICogUHJvcGVydHkgdkFsaWduCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZUNvbEVsZW1lbnQucHJvdG90eXBlLnZBbGlnbj0iIjsKKy8qKgorICogUHJvcGVydHkgd2lkdGgKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlQ29sRWxlbWVudC5wcm90b3R5cGUud2lkdGg9IiI7CisKKy8qKgorICogT2JqZWN0IEhUTUxUYWJsZVNlbGVjdGlvbkVsZW1lbnQoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIEhUTUxFbGVtZW50CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKiBAc2VlIEhUTUxFbGVtZW50CisgKi8KK2Z1bmN0aW9uIEhUTUxUYWJsZVNlbGVjdGlvbkVsZW1lbnQoKXt9OworSFRNTFRhYmxlU2VsZWN0aW9uRWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTEVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgYWxpZ24KKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlU2VsZWN0aW9uRWxlbWVudC5wcm90b3R5cGUuYWxpZ249IiI7CisvKioKKyAqIFByb3BlcnR5IGNoCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZVNlbGVjdGlvbkVsZW1lbnQucHJvdG90eXBlLmNoPSIiOworLyoqCisgKiBQcm9wZXJ0eSBjaE9mZgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVTZWxlY3Rpb25FbGVtZW50LnByb3RvdHlwZS5jaE9mZj0iIjsKKy8qKgorICogUHJvcGVydHkgdkFsaWduCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZVNlbGVjdGlvbkVsZW1lbnQucHJvdG90eXBlLnZBbGlnbj0iIjsKKy8qKgorICogUHJvcGVydHkgcm93cworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVTZWxlY3Rpb25FbGVtZW50LnByb3RvdHlwZS5yb3dzPSIiOworLyoqCisgKiBmdW5jdGlvbiBpbnNlcnRSb3coaW5kZXgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAcGFyYW0ge051bWJlcn0gaW5kZXgKKyAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH0KKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVTZWxlY3Rpb25FbGVtZW50LnByb3RvdHlwZS5pbnNlcnRSb3cgPSBmdW5jdGlvbihpbmRleCl7cmV0dXJuIG5ldyBIVE1MRWxlbWVudCgpO307CisvKioKKyAqIGZ1bmN0aW9uIGRlbGV0ZVJvdyhpbmRleCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBwYXJhbSB7TnVtYmVyfSBpbmRleAorICogQHRocm93cyBET01FeGNlcHRpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZVNlbGVjdGlvbkVsZW1lbnQucHJvdG90eXBlLmRlbGV0ZVJvdyA9IGZ1bmN0aW9uKGluZGV4KXt9OworCisvKioKKyAqIE9iamVjdCBIVE1MVGFibGVSb3dFbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MVGFibGVSb3dFbGVtZW50KCl7fTsKK0hUTUxUYWJsZVJvd0VsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IHJvd0luZGV4CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZVJvd0VsZW1lbnQucHJvdG90eXBlLnJvd0luZGV4PTA7CisvKioKKyAqIFByb3BlcnR5IHNlY3Rpb25Sb3dJbmRleAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVSb3dFbGVtZW50LnByb3RvdHlwZS5zZWN0aW9uUm93SW5kZXg9MDsKKy8qKgorICogUHJvcGVydHkgY2VsbHMKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIEhUTUxDb2xsZWN0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVSb3dFbGVtZW50LnByb3RvdHlwZS5jZWxscyA9IG5ldyBIVE1MQ29sbGVjdGlvbigpOworLyoqCisgKiBQcm9wZXJ0eSBhbGlnbgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVSb3dFbGVtZW50LnByb3RvdHlwZS5hbGlnbj0iIjsKKy8qKgorICogUHJvcGVydHkgYmdDb2xvcgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVSb3dFbGVtZW50LnByb3RvdHlwZS5iZ0NvbG9yPSIiOworLyoqCisgKiBQcm9wZXJ0eSBjaAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVSb3dFbGVtZW50LnByb3RvdHlwZS5jaD0iIjsKKy8qKgorICogUHJvcGVydHkgY2hPZmYKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlUm93RWxlbWVudC5wcm90b3R5cGUuY2hPZmY9IiI7CisvKioKKyAqIFByb3BlcnR5IHZBbGlnbgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVSb3dFbGVtZW50LnByb3RvdHlwZS52QWxpZ249IiI7CisvKioKKyAqIGZ1bmN0aW9uIGluc2VydENlbGwoaW5kZXgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAcGFyYW0ge051bWJlcn0gaW5kZXgKKyAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH0KKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVSb3dFbGVtZW50LnByb3RvdHlwZS5pbnNlcnRDZWxsID0gZnVuY3Rpb24oaW5kZXgpe3JldHVybiBuZXcgSFRNTEVsZW1lbnQoKTt9OworLyoqCisgKiBmdW5jdGlvbiBpbnNlcnRDZWxsKGluZGV4KQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHBhcmFtIHtOdW1iZXJ9IGluZGV4CisgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlUm93RWxlbWVudC5wcm90b3R5cGUuZGVsZXRlQ2VsbCA9IGZ1bmN0aW9uKGluZGV4KXt9OworCisvKioKKyAqIE9iamVjdCBIVE1MVGFibGVSb3dFbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MVGFibGVDZWxsRWxlbWVudCgpe307CitIVE1MVGFibGVDZWxsRWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTEVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgY2VsbEluZGV4CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZUNlbGxFbGVtZW50LnByb3RvdHlwZS5jZWxsSW5kZXg9MDsKKy8qKgorICogUHJvcGVydHkgYWJicgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVDZWxsRWxlbWVudC5wcm90b3R5cGUuYWJicj0iIjsKKy8qKgorICogUHJvcGVydHkgYWxpZ24KKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlQ2VsbEVsZW1lbnQucHJvdG90eXBlLmFsaWduPSIiOworLyoqCisgKiBQcm9wZXJ0eSBheGlzCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZUNlbGxFbGVtZW50LnByb3RvdHlwZS5heGlzPSIiOworLyoqCisgKiBQcm9wZXJ0eSBiZ0NvbG9yCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZUNlbGxFbGVtZW50LnByb3RvdHlwZS5iZ0NvbG9yPSIiOworLyoqCisgKiBQcm9wZXJ0eSBjaAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVDZWxsRWxlbWVudC5wcm90b3R5cGUuY2g9IiI7CisvKioKKyAqIFByb3BlcnR5IGNoT2ZmCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZUNlbGxFbGVtZW50LnByb3RvdHlwZS5jaE9mZj0iIjsKKy8qKgorICogUHJvcGVydHkgY29sU3BhbgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVDZWxsRWxlbWVudC5wcm90b3R5cGUuY29sU3Bhbj0wOworLyoqCisgKiBQcm9wZXJ0eSBoZWFkZXJzCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZUNlbGxFbGVtZW50LnByb3RvdHlwZS5oZWFkZXJzPSIiOworLyoqCisgKiBQcm9wZXJ0eSBoZWlnaHQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlQ2VsbEVsZW1lbnQucHJvdG90eXBlLmhlaWdodD0iIjsKKy8qKgorICogUHJvcGVydHkgbm9XcmFwCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBCb29sZWFuCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVDZWxsRWxlbWVudC5wcm90b3R5cGUubm9XcmFwPWZhbHNlOworLyoqCisgKiBQcm9wZXJ0eSByb3dTcGFuCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZUNlbGxFbGVtZW50LnByb3RvdHlwZS5yb3dTcGFuPTA7CisvKioKKyAqIFByb3BlcnR5IHNjb3BlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZUNlbGxFbGVtZW50LnByb3RvdHlwZS5zY29wZT0iIjsKKy8qKgorICogUHJvcGVydHkgdkFsaWduCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZUNlbGxFbGVtZW50LnByb3RvdHlwZS52QWxpZ249IiI7CisvKioKKyAqIFByb3BlcnR5IHdpZHRoCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZUNlbGxFbGVtZW50LnByb3RvdHlwZS53aWR0aD0iIjsKKworLyoqCisgKiBPYmplY3QgSFRNTEZyYW1lU2V0RWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTEZyYW1lU2V0RWxlbWVudCgpe307CitIVE1MRnJhbWVTZXRFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBjb2xzCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxGcmFtZVNldEVsZW1lbnQucHJvdG90eXBlLmNvbHM9IiI7CisvKioKKyAqIFByb3BlcnR5IHJvd3MKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEZyYW1lU2V0RWxlbWVudC5wcm90b3R5cGUucm93cz0iIjsKKworLyoqCisgKiBPYmplY3QgSFRNTEZyYW1lRWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTEZyYW1lRWxlbWVudCgpe307CitIVE1MRnJhbWVFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBmcmFtZUJvcmRlcgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MRnJhbWVFbGVtZW50LnByb3RvdHlwZS5mcmFtZUJvcmRlcj0iIjsKKy8qKgorICogUHJvcGVydHkgbG9uZ0Rlc2MKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEZyYW1lRWxlbWVudC5wcm90b3R5cGUubG9uZ0Rlc2M9IiI7CisvKioKKyAqIFByb3BlcnR5IG1hcmdpbkhlaWdodAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MRnJhbWVFbGVtZW50LnByb3RvdHlwZS5tYXJnaW5IZWlnaHQ9IiI7CisvKioKKyAqIFByb3BlcnR5IG1hcmdpbldpZHRoCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxGcmFtZUVsZW1lbnQucHJvdG90eXBlLm1hcmdpbldpZHRoPSIiOworLyoqCisgKiBQcm9wZXJ0eSBuYW1lCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxGcmFtZUVsZW1lbnQucHJvdG90eXBlLm5hbWU9IiI7CisvKioKKyAqIFByb3BlcnR5IG5vUmVzaXplCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBCb29sZWFuCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MRnJhbWVFbGVtZW50LnByb3RvdHlwZS5ub1Jlc2l6ZT1mYWxzZTsKKy8qKgorICogUHJvcGVydHkgc2Nyb2xsaW5nCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxGcmFtZUVsZW1lbnQucHJvdG90eXBlLnNjcm9sbGluZz0iIjsKKy8qKgorICogUHJvcGVydHkgc3JjCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxGcmFtZUVsZW1lbnQucHJvdG90eXBlLnNyYz0iIjsKKy8qKgorICogUHJvcGVydHkgY29udGVudERvY3VtZW50CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBEb2N1bWVudAorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEZyYW1lRWxlbWVudC5wcm90b3R5cGUuY29udGVudERvY3VtZW50PSBuZXcgSFRNTERvY3VtZW50KCk7CisKKy8qKgorICogT2JqZWN0IEhUTUxJRnJhbWVFbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MSUZyYW1lRWxlbWVudCgpe307CitIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTEVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgYWxpZ24KKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlLmFsaWduPSIiOworLyoqCisgKiBQcm9wZXJ0eSBmcmFtZUJvcmRlcgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUuZnJhbWVCb3JkZXI9IiI7CisvKioKKyAqIFByb3BlcnR5IGhlaWdodAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUuaGVpZ2h0PSIiOworLyoqCisgKiBQcm9wZXJ0eSBsb25nRGVzYworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUubG9uZ0Rlc2M9IiI7CisvKioKKyAqIFByb3BlcnR5IG1hcmdpbkhlaWdodAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUubWFyZ2luSGVpZ2h0PSIiOworLyoqCisgKiBQcm9wZXJ0eSBtYXJnaW5XaWR0aAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUubWFyZ2luV2lkdGg9IiI7CisvKioKKyAqIFByb3BlcnR5IG5hbWUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlLm5hbWU9IiI7CisvKioKKyAqIFByb3BlcnR5IHNjcm9sbGluZworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUuc2Nyb2xsaW5nPSIiOworLyoqCisgKiBQcm9wZXJ0eSBzcmMKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlLnNyYz0iIjsKKy8qKgorICogUHJvcGVydHkgd2lkdGgKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlLndpZHRoPSIiOworLyoqCisgKiBQcm9wZXJ0eSBjb250ZW50RG9jdW1lbnQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIERvY3VtZW50CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUuY29udGVudERvY3VtZW50PSBuZXcgSFRNTERvY3VtZW50KCk7CisKKy8qIFN0eWxlc2hlZXRzICovCisvKioKKyAqIE9iamVjdCBDU1MyUHJvcGVydGllcygpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1TdHlsZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIE9iamVjdAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgU3R5bGUgU3BlY2lmaWNhdGlvbi4KKyAqLworZnVuY3Rpb24gQ1NTMlByb3BlcnRpZXMoKXt9OworQ1NTMlByb3BlcnRpZXMucHJvdG90eXBlID0gbmV3IE9iamVjdCgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS9saWJyYXJpZXMvYnJvd3NlcldpbmRvdy5qcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS9saWJyYXJpZXMvYnJvd3NlcldpbmRvdy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmJmNDUyCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2xpYnJhcmllcy9icm93c2VyV2luZG93LmpzCkBAIC0wLDAgKzEsNjE4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDEzIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2Z1bmN0aW9uIEJhclByb3AoKXt9OworQmFyUHJvcC5wcm90b3R5cGUgPSBuZXcgQXJyYXkoKTsKKworLyoqCisgKiBPYmplY3QgV2luZG93KCkKKyAqIEBzdXBlciBHbG9iYWwKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIENvbW1vbiBVc2FnZSwgbm8gc3RhbmRhcmQKKyovCitmdW5jdGlvbiBXaW5kb3coKXt9OworV2luZG93LnByb3RvdHlwZSA9IG5ldyBFdmVudFRhcmdldCgpOworV2luZG93LnByb3RvdHlwZS5zZWxmID0gbmV3IFdpbmRvdygpOworV2luZG93LnByb3RvdHlwZS53aW5kb3cgPSBuZXcgV2luZG93KCk7CitXaW5kb3cucHJvdG90eXBlLmZyYW1lcyA9IG5ldyBBcnJheSgpOworLyoqCisgKiBQcm9wZXJ0eSBjbG9zZWQKKyAqIEB0eXBlIEJvb2xlYW4KKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqLworV2luZG93LnByb3RvdHlwZS5jbG9zZWQgPSBuZXcgQm9vbGVhbigpOworLyoqCisgKiBQcm9wZXJ0eSBkZWZhdWx0U3RhdHVzCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqLworV2luZG93LnByb3RvdHlwZS5kZWZhdWx0U3RhdHVzID0gIiI7CisvKioKKyAqIFByb3BlcnR5IGRvY3VtZW50CisgKiBAdHlwZSBEb2N1bWVudAorICogQG1lbWJlck9mIFdpbmRvdworICovCitXaW5kb3cucHJvdG90eXBlLmRvY3VtZW50PSBuZXcgSFRNTERvY3VtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGhpc3RvcnkKKyAqIEB0eXBlIEhpc3RvcnkKKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqLworV2luZG93LnByb3RvdHlwZS5oaXN0b3J5PSBuZXcgSGlzdG9yeSgpOworLyoqCisgKiBQcm9wZXJ0eSBsb2NhdGlvbgorICogQHR5cGUgTG9jYXRpb24KKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqLworV2luZG93LnByb3RvdHlwZS5sb2NhdGlvbj1uZXcgTG9jYXRpb24oKTsKKy8qKgorICogUHJvcGVydHkgbmFtZQorICogQHR5cGUgU3RyaW5nCisgKiBAbWVtYmVyT2YgV2luZG93CisgKi8KK1dpbmRvdy5wcm90b3R5cGUubmFtZSA9ICIiOworLyoqCisgKiBQcm9wZXJ0eSBuYXZpZ2F0b3IKKyAqIEB0eXBlIE5hdmlnYXRvcgorICogQG1lbWJlck9mIFdpbmRvdworICovCitXaW5kb3cucHJvdG90eXBlLm5hdmlnYXRvciA9IG5ldyBOYXZpZ2F0b3IoKTsKKy8qKgorICogUHJvcGVydHkgb3BlbmVyCisgKiBAdHlwZSBXaW5kb3cKKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqLworV2luZG93LnByb3RvdHlwZS5vcGVuZXIgPSBuZXcgV2luZG93KCk7CisvKioKKyAqIFByb3BlcnR5IG91dGVyV2lkdGgKKyAqIEB0eXBlIE51bWJlcgorICogQG1lbWJlck9mIFdpbmRvdworICovCitXaW5kb3cucHJvdG90eXBlLm91dGVyV2lkdGggPSAwOworLyoqCisgKiBQcm9wZXJ0eSBvdXRlckhlaWdodAorICogQHR5cGUgTnVtYmVyCisgKiBAbWVtYmVyT2YgV2luZG93CisgKi8KK1dpbmRvdy5wcm90b3R5cGUub3V0ZXJIZWlnaHQgPSAwOworLyoqCisgKiBQcm9wZXJ0eSBwYWdlWE9mZnNldAorICogQHR5cGUgTnVtYmVyCisgKiBAbWVtYmVyT2YgV2luZG93CisgKi8KK1dpbmRvdy5wcm90b3R5cGUucGFnZVhPZmZzZXQgPSAwOworLyoqCisgKiBQcm9wZXJ0eSBwYWdlWU9mZnNldAorICogQHR5cGUgTnVtYmVyCisgKiBAbWVtYmVyT2YgV2luZG93CisgKi8KK1dpbmRvdy5wcm90b3R5cGUucGFnZVlPZmZzZXQgPSAwOworLyoqCisgKiBQcm9wZXJ0eSBwYXJlbnQKKyAqIEB0eXBlIFdpbmRvdworICogQG1lbWJlck9mIFdpbmRvdworICovCitXaW5kb3cucHJvdG90eXBlLnBhcmVudCA9IG5ldyBXaW5kb3coKTsKKy8qKgorICogUHJvcGVydHkgc2NyZWVuCisgKiBAdHlwZSBTY3JlZW4KKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqLworV2luZG93LnByb3RvdHlwZS5zY3JlZW4gPSBuZXcgU2NyZWVuKCk7CisvKioKKyAqIFByb3BlcnR5IHN0YXR1cworICogQHR5cGUgU3RyaW5nCisgKiBAbWVtYmVyT2YgV2luZG93CisgKi8KK1dpbmRvdy5wcm90b3R5cGUuc3RhdHVzID0gIiI7CisvKioKKyAqIFByb3BlcnR5IHRvcAorICogQHR5cGUgV2luZG93CisgKiBAbWVtYmVyT2YgV2luZG93CisgKi8KK1dpbmRvdy5wcm90b3R5cGUudG9wID0gbmV3IFdpbmRvdygpOworCisKKy8qCisgKiBUaGVzZSBwcm9wZXJ0aWVzIG1heSBuZWVkIHRvIGJlIG1vdmVkIGludG8gYSBicm93c3dlciBzcGVjaWZpYyBsaWJyYXJ5LgorICovCisKKyAvKioKKyAqIFByb3BlcnR5IGlubmVyV2lkdGgKKyAqIEB0eXBlIE51bWJlcgorICogQG1lbWJlck9mIFdpbmRvdworICovCitXaW5kb3cucHJvdG90eXBlLmlubmVyV2lkdGggPSAwOworLyoqCisgKiBQcm9wZXJ0eSBpbm5lckhlaWdodAorICogQHR5cGUgTnVtYmVyCisgKiBAbWVtYmVyT2YgV2luZG93CisgKi8KK1dpbmRvdy5wcm90b3R5cGUuaW5uZXJIZWlnaHQgPSAwOworLyoqCisgKiBQcm9wZXJ0eSBzY3JlZW5YCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqLworV2luZG93LnByb3RvdHlwZS5zY3JlZW5YID0gMDsKKy8qKgorICogUHJvcGVydHkgc2NyZWVuWQorICogQHR5cGUgTnVtYmVyCisgKiBAbWVtYmVyT2YgV2luZG93CisgKi8KK1dpbmRvdy5wcm90b3R5cGUuc2NyZWVuWSA9IDA7CisvKioKKyAqIFByb3BlcnR5IHNjcmVlbkxlZnQKKyAqIEB0eXBlIE51bWJlcgorICogQG1lbWJlck9mIFdpbmRvdworICovCitXaW5kb3cucHJvdG90eXBlLnNjcmVlbkxlZnQgPSAwOworLyoqCisgKiBQcm9wZXJ0eSBzY3JlZW5Ub3AKKyAqIEB0eXBlIE51bWJlcgorICogQG1lbWJlck9mIFdpbmRvdworICovCitXaW5kb3cucHJvdG90eXBlLnNjcmVlblRvcCA9IDA7CisvL1dpbmRvdy5wcm90b3R5cGUuZXZlbnQgPSBuZXcgRXZlbnQoKTsKK1dpbmRvdy5wcm90b3R5cGUubGVuZ3RoID0gMDsKK1dpbmRvdy5wcm90b3R5cGUuc2Nyb2xsYmFycz0gbmV3IEJhclByb3AoKTsKK1dpbmRvdy5wcm90b3R5cGUuc2Nyb2xsWD0wOworV2luZG93LnByb3RvdHlwZS5zY3JvbGxZPTA7CitXaW5kb3cucHJvdG90eXBlLmNvbnRlbnQ9IG5ldyBXaW5kb3coKTsKK1dpbmRvdy5wcm90b3R5cGUubWVudWJhcj0gbmV3IEJhclByb3AoKTsKK1dpbmRvdy5wcm90b3R5cGUudG9vbGJhcj0gbmV3IEJhclByb3AoKTsKK1dpbmRvdy5wcm90b3R5cGUubG9jYXRpb25iYXI9IG5ldyBCYXJQcm9wKCk7CitXaW5kb3cucHJvdG90eXBlLnBlcnNvbmFsYmFyPSBuZXcgQmFyUHJvcCgpOworV2luZG93LnByb3RvdHlwZS5zdGF0dXNiYXI9IG5ldyBCYXJQcm9wKCk7CitXaW5kb3cucHJvdG90eXBlLmRpcmVjdG9yaWVzPSBuZXcgQmFyUHJvcCgpOworV2luZG93LnByb3RvdHlwZS5zY3JvbGxNYXhYPTA7CitXaW5kb3cucHJvdG90eXBlLnNjcm9sbE1heFk9MDsKK1dpbmRvdy5wcm90b3R5cGUuZnVsbFNjcmVlbj0iIjsKK1dpbmRvdy5wcm90b3R5cGUuZnJhbWVFbGVtZW50PSIiOworLyogRW5kIHByb3Blcml0ZXMgKi8KKworLyoqCisgKiBmdW5jdGlvbiBhbGVydCgpIAorICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UKKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqLworV2luZG93LnByb3RvdHlwZS5hbGVydCA9IGZ1bmN0aW9uKG1lc3NhZ2Upe307CisvKioKKyAqIGZ1bmN0aW9uIGJsdXIoKSAKKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqLworV2luZG93LnByb3RvdHlwZS5ibHVyID0gZnVuY3Rpb24oKXt9OworLyoqCisgKiBmdW5jdGlvbiBjbGVhckludGVydmFsKGludGVydmFsSUQpIAorICogQHBhcmFtIGludGVydmFsSUQKKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqLworV2luZG93LnByb3RvdHlwZS5jbGVhckludGVydmFsID0gZnVuY3Rpb24oaW50ZXJ2YWxJRCl7fTsKKy8qKgorICogZnVuY3Rpb24gY2xlYXJUaW1lb3V0KGludGVydmFsSUQpIAorICogQHBhcmFtIGludGVydmFsSUQKKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqLworV2luZG93LnByb3RvdHlwZS5jbGVhclRpbWVvdXQgPSBmdW5jdGlvbihpbnRlcnZhbElEKXt9OworLyoqCisgKiBmdW5jdGlvbiBjbG9zZSgpIAorICogQG1lbWJlck9mIFdpbmRvdworICovCitXaW5kb3cucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKXt9OworLyoqCisgKiBmdW5jdGlvbiBjb25maXJtKCkgCisgKiBAcGFyYW0ge1N0cmluZ30gYXJnCisgKiBAbWVtYmVyT2YgV2luZG93CisgKiBAcmV0dXJucyB7Qm9vbGVhbn0KKyAqLworV2luZG93LnByb3RvdHlwZS5jb25maXJtID0gZnVuY3Rpb24oYXJnKXtyZXR1cm4gZmFsc2U7fTsKKy8qKgorICogZnVuY3Rpb24gZm9jdXMoKSAKKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqLworV2luZG93LnByb3RvdHlwZS5mb2N1cyA9IGZ1bmN0aW9uKCl7fTsKKy8qKgorICogZnVuY3Rpb24gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50LCBwc2V1ZG9FbHQgKSAKKyAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudAorICogQHBhcmFtIHtTdHJpbmd9IHBzZXVkb0VsdCAKKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqIEByZXR1cm5zIHtPYmplY3R9CisgKi8KK1dpbmRvdy5wcm90b3R5cGUuZ2V0Q29tcHV0ZWRTdHlsZSA9IGZ1bmN0aW9uKGVsZW1lbnQscHNldWRvRWx0ICl7cmV0dXJuIG5ldyBPYmplY3QoKTt9OworLyoqCisgKiBmdW5jdGlvbiBtb3ZlVG8oeCwgeSkgCisgKiBAcGFyYW0ge051bWJlcn0geAorICogQHBhcmFtIHtOdW1iZXJ9IHkKKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqLworV2luZG93LnByb3RvdHlwZS5tb3ZlVG8gPSBmdW5jdGlvbih4LHkpe307CisvKioKKyAqIGZ1bmN0aW9uIG1vdmVCeShkZWx0YVgsIGRlbHRhWSkgCisgKiBAcGFyYW0ge051bWJlcn0gZGVsdGFYCisgKiBAcGFyYW0ge051bWJlcn0gZGVsdGFZCisgKiBAbWVtYmVyT2YgV2luZG93CisgKi8KK1dpbmRvdy5wcm90b3R5cGUubW92ZUJ5ID0gZnVuY3Rpb24oZGVsdGFYLGRlbHRhWSl7fTsKKy8qKgorICogZnVuY3Rpb24gb3BlbihvcHRpb25hbEFyZzEsIG9wdGlvbmFsQXJnMiwgb3B0aW9uYWxBcmczLCBvcHRpb25hbEFyZzQpIAorICogQHBhcmFtIHtTdHJpbmd9IHVybAorICogQHBhcmFtIHtTdHJpbmd9IHdpbmRvd05hbWUKKyAqIEBwYXJhbSB7U3RyaW5nfSB3aW5kb3dGZWF0dXJlcworICogQHBhcmFtIHtCb29sZWFufSBvcHRpb25hbEFyZzQKKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqIEByZXR1cm5zIHtXaW5kb3d9CisgKi8KK1dpbmRvdy5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKHVybCwgd2luZG93TmFtZSwgd2luZG93RmVhdHVyZXMsIG9wdGlvbmFsQXJnNCl7cmV0dXJuIG5ldyBXaW5kb3coKTt9OworLyoqCisgKiBmdW5jdGlvbiBwcmludCgpIAorICogQG1lbWJlck9mIFdpbmRvdworICovCitXaW5kb3cucHJvdG90eXBlLnByaW50ID0gZnVuY3Rpb24oKXt9OworLyoqCisgKiBmdW5jdGlvbiBwcm9tcHQodGV4dCwgdmFsdWUpIAorICogQHBhcmFtIHtTdHJpbmd9IHRleHQKKyAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZQorICogQG1lbWJlck9mIFdpbmRvdworICogQHJldHVybnMge1N0cmluZ30KKyAqLworV2luZG93LnByb3RvdHlwZS5wcm9tcHQgPSBmdW5jdGlvbih0ZXh0LCB2YWx1ZSl7cmV0dXJuICIiO307CisvKioKKyAqIGZ1bmN0aW9uIHJlc2l6ZVRvKG5ld091dGVyV2lkdGgsbmV3T3V0ZXJIZWlnaHQpIAorICogQHBhcmFtIHtOdW1iZXJ9IG5ld091dGVyV2lkdGgKKyAqIEBwYXJhbSB7TnVtYmVyfSBuZXdPdXRlckhlaWdocgorICogQG1lbWJlck9mIFdpbmRvdworICovCitXaW5kb3cucHJvdG90eXBlLnJlc2l6ZVRvPWZ1bmN0aW9uKG5ld091dGVyV2lkdGgsbmV3T3V0ZXJIZWlnaHQpe307CisvKioKKyAqIGZ1bmN0aW9uIHJlc2l6ZUJ5KGRlbHRhWCwgZGVsdGFZKSAKKyAqIEBwYXJhbSB7TnVtYmVyfSBkZWx0YVgKKyAqIEBwYXJhbSB7TnVtYmVyfSBkZWx0YVkKKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqLworV2luZG93LnByb3RvdHlwZS5yZXNpemVCeT1mdW5jdGlvbihkZWx0YVgsZGVsdGFZKXt9OworLyoqCisgKiBmdW5jdGlvbiBzY3JvbGxUbyh4LHkpIAorICogQHBhcmFtIHtOdW1iZXJ9IHgKKyAqIEBwYXJhbSB7TnVtYmVyfSB5CisgKiBAbWVtYmVyT2YgV2luZG93CisgKi8KK1dpbmRvdy5wcm90b3R5cGUuc2Nyb2xsVG89ZnVuY3Rpb24oeCx5KXt9OworLyoqCisgKiBmdW5jdGlvbiBzY3JvbGxCeShwaXhlbFgscGl4ZWxZKSAKKyAqIEBwYXJhbSB7TnVtYmVyfSBwaXhlbFgKKyAqIEBwYXJhbSB7TnVtYmVyfSBwaXhlbFkKKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqLworV2luZG93LnByb3RvdHlwZS5zY3JvbGxCeT1mdW5jdGlvbihwaXhlbFgscGl4ZWxZKXt9OworLyoqCisgKiBmdW5jdGlvbiBzZXRJbnRlcnZhbChhcmcxLCBhcmcyKSAKKyAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrCisgKiBAcGFyYW0ge051bWJlcn0gZGVsYXkKKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqIEByZXR1cm5zIHtOdW1iZXJ9CisgKi8KK1dpbmRvdy5wcm90b3R5cGUuc2V0SW50ZXJ2YWw9ZnVuY3Rpb24oY2FsbGJhY2ssIGRlbGF5KXtyZXR1cm4gMDt9OworLyoqCisgKiBmdW5jdGlvbiBzZXRUaW1lb3V0KGNhbGxiYWNrLCBkZWxheSkgCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjaworICogQHBhcmFtIHtOdW1iZXJ9IGRlbGF5CisgKiBAbWVtYmVyT2YgV2luZG93CisgKiBAcmV0dXJucyB7TnVtYmVyfQorICovCitXaW5kb3cucHJvdG90eXBlLnNldFRpbWVvdXQ9ZnVuY3Rpb24oY2FsbGJhY2ssIGRlbGF5KXsgcmV0dXJuIDA7fTsKKy8qKgorICogZnVuY3Rpb24gYXRvYihlbmNvZGVkRGF0YSkgCisgKiBAcGFyYW0ge1N0cmluZ30gZW5jb2RlZERhdGEKKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqIEByZXR1cm5zIHtTdHJpbmd9CisgKi8KK1dpbmRvdy5wcm90b3R5cGUuYXRvYj1mdW5jdGlvbihlbmNvZGVkRGF0YSl7cmV0dXJuICIiO307CisvKioKKyAqIGZ1bmN0aW9uIGJ0b2EoYXJnKSAKKyAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmdUb0VuY29kZQorICogQG1lbWJlck9mIFdpbmRvdworICogQHJldHVybnMge1N0cmluZ30KKyAqLworV2luZG93LnByb3RvdHlwZS5idG9hPWZ1bmN0aW9uKHN0cmluZ1RvRW5jb2RlKXtyZXR1cm4gIiI7fTsKKy8qKgorICogZnVuY3Rpb24gc2V0UmVzaXphYmxlKHJlc2l6YWJsZSkgCisgKiBAcGFyYW0ge0Jvb2xlYW59IHJlc2l6YWJsZQorICogQG1lbWJlck9mIFdpbmRvdworICovCitXaW5kb3cucHJvdG90eXBlLnNldFJlc2l6YWJsZT1mdW5jdGlvbihyZXNpemFibGUpe307CisKK1dpbmRvdy5wcm90b3R5cGUuY2FwdHVyZUV2ZW50cz1mdW5jdGlvbihldmVudFR5cGUpe307CitXaW5kb3cucHJvdG90eXBlLnJlbGVhc2VFdmVudHM9ZnVuY3Rpb24oZXZlbnRUeXBlKXt9OworV2luZG93LnByb3RvdHlwZS5yb3V0ZUV2ZW50PWZ1bmN0aW9uKGV2ZW50VHlwZSl7fTsKK1dpbmRvdy5wcm90b3R5cGUuZW5hYmxlRXh0ZXJuYWxDYXB0dXJlPWZ1bmN0aW9uKCl7fTsKK1dpbmRvdy5wcm90b3R5cGUuZGlzYWJsZUV4dGVybmFsQ2FwdHVyZT1mdW5jdGlvbigpe307CitXaW5kb3cucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24oKXt9OworV2luZG93LnByb3RvdHlwZS5iYWNrPWZ1bmN0aW9uKCl7fTsKK1dpbmRvdy5wcm90b3R5cGUuZm9yd2FyZD1mdW5jdGlvbigpe307CitXaW5kb3cucHJvdG90eXBlLmhvbWU9ZnVuY3Rpb24oKXt9OworV2luZG93LnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7fTsKKy8qKgorICogQHBhcmFtIHtOdW1iZXJ9IHBpeGVsWAorICogQHBhcmFtIHtOdW1iZXJ9IHBpeGVsWQorICovCitXaW5kb3cucHJvdG90eXBlLnNjcm9sbD1mdW5jdGlvbihwaXhlbFgscGl4ZWxZKXt9OworLyogRW5kIGZ1bmN0aW9ucyAqLworCisvKioKKyAgKiBPYmplY3QgSGlzdG9yeSgpCisgICogQHN1cGVyIE9iamVjdAorICAqIEBjb25zdHJ1Y3RvcgorICAqIEBzaW5jZSBDb21tb24gVXNhZ2UsIG5vIHN0YW5kYXJkCisgKi8KK2Z1bmN0aW9uIEhpc3RvcnkoKXt9OworSGlzdG9yeS5wcm90b3R5cGU9bmV3IE9iamVjdCgpOworSGlzdG9yeS5wcm90b3R5cGUuaGlzdG9yeSA9IG5ldyBIaXN0b3J5KCk7CisvKioKKyAqIFByb3BlcnR5IGxlbmd0aAorICogQHR5cGUgTnVtYmVyCisgKiBAbWVtYmVyT2YgSGlzdG9yeQorICovCitIaXN0b3J5LnByb3RvdHlwZS5sZW5ndGggPSAwOworLyoqCisgKiBmdW5jdGlvbiBiYWNrKCkKKyAqIEBtZW1iZXJPZiBIaXN0b3J5CisgKi8KK0hpc3RvcnkucHJvdG90eXBlLmJhY2sgPSBmdW5jdGlvbigpe307CisvKioKKyAqIGZ1bmN0aW9uIGZvcndhcmQoKQorICogQG1lbWJlck9mIEhpc3RvcnkKKyAqLworSGlzdG9yeS5wcm90b3R5cGUuZm9yd2FyZCA9IGZ1bmN0aW9uKCl7fTsKKy8qKgorICogZnVuY3Rpb24gYmFjaygpCisgKiBAcGFyYW0gYXJnCisgKiBAbWVtYmVyT2YgSGlzdG9yeQorICovCitIaXN0b3J5LnByb3RvdHlwZS5nbyA9IGZ1bmN0aW9uKGFyZyl7fTsKKworLyoqCisgICogT2JqZWN0IExvY2F0aW9uKCkKKyAgKiBAc3VwZXIgT2JqZWN0CisgICogQGNvbnN0cnVjdG9yCisgICogQHNpbmNlIENvbW1vbiBVc2FnZSwgbm8gc3RhbmRhcmQKKyAqLworZnVuY3Rpb24gTG9jYXRpb24oKXt9OworTG9jYXRpb24ucHJvdG90eXBlID0gbmV3IE9iamVjdCgpOworTG9jYXRpb24ucHJvdG90eXBlLmxvY2F0aW9uID0gbmV3IExvY2F0aW9uKCk7CisvKioKKyAqIFByb3BlcnR5IGhhc2gKKyAqIEB0eXBlIFN0cmluZworICogQG1lbWJlck9mIExvY2F0aW9uCisgKi8KK0xvY2F0aW9uLnByb3RvdHlwZS5oYXNoID0gIiI7CisvKioKKyAqIFByb3BlcnR5IGhvc3QKKyAqIEB0eXBlIFN0cmluZworICogQG1lbWJlck9mIExvY2F0aW9uCisgKi8KK0xvY2F0aW9uLnByb3RvdHlwZS5ob3N0ID0gIiI7CisvKioKKyAqIFByb3BlcnR5IGhvc3RuYW1lCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBtZW1iZXJPZiBMb2NhdGlvbgorICovCitMb2NhdGlvbi5wcm90b3R5cGUuaG9zdG5hbWUgPSAiIjsKKy8qKgorICogUHJvcGVydHkgaHJlZgorICogQHR5cGUgU3RyaW5nCisgKiBAbWVtYmVyT2YgTG9jYXRpb24KKyAqLworTG9jYXRpb24ucHJvdG90eXBlLmhyZWYgPSAiIjsKKy8qKgorICogUHJvcGVydHkgcGF0aG5hbWUKKyAqIEB0eXBlIFN0cmluZworICogQG1lbWJlck9mIExvY2F0aW9uCisgKi8KK0xvY2F0aW9uLnByb3RvdHlwZS5wYXRobmFtZSA9ICIiOworLyoqCisgKiBQcm9wZXJ0eSBwb3J0CisgKiBAdHlwZSBTdHJpbmcKKyAqIEBtZW1iZXJPZiBMb2NhdGlvbgorICovCitMb2NhdGlvbi5wcm90b3R5cGUucG9ydCA9ICIiOworLyoqCisgKiBQcm9wZXJ0eSBwcm90b2NvbAorICogQHR5cGUgU3RyaW5nCisgKiBAbWVtYmVyT2YgTG9jYXRpb24KKyAqLworTG9jYXRpb24ucHJvdG90eXBlLnByb3RvY29sID0gIiI7CisvKioKKyAqIFByb3BlcnR5IHNlYXJjaAorICogQHR5cGUgU3RyaW5nCisgKiBAbWVtYmVyT2YgTG9jYXRpb24KKyAqLworTG9jYXRpb24ucHJvdG90eXBlLnNlYXJjaCA9ICIiOworLyoqCisgKiBmdW5jdGlvbiBhc3NpZ24oYXJnKQorICogQHBhcmFtIHtTdHJpbmd9IGFyZworICogQG1lbWJlck9mIExvY2F0aW9uCisgKi8KK0xvY2F0aW9uLnByb3RvdHlwZS5hc3NpZ24gPSBmdW5jdGlvbihhcmcpe307CisvKioKKyAqIGZ1bmN0aW9uIHJlbG9hZChvcHRpb25hbEFyZykKKyAqIEBwYXJhbSB7Qm9vbGVhbn0gb3B0aW9uYWxBcmcKKyAqIEBtZW1iZXJPZiBMb2NhdGlvbgorICovCitMb2NhdGlvbi5wcm90b3R5cGUucmVsb2FkID0gZnVuY3Rpb24ob3B0aW9uYWxBcmcpe307CisvKioKKyAqIGZ1bmN0aW9uIHJlcGxhY2UoYXJnKQorICogQHBhcmFtIHtTdHJpbmd9IGFyZworICogQG1lbWJlck9mIExvY2F0aW9uCisgKi8KK0xvY2F0aW9uLnByb3RvdHlwZS5yZXBsYWNlID0gZnVuY3Rpb24oYXJnKXt9OworCisvKioKKyAqIE9iamVjdCBOYXZpZ2F0b3IoKQorICogQHN1cGVyIE9iamVjdAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgQ29tbW9uIFVzYWdlLCBubyBzdGFuZGFyZAorKi8KK2Z1bmN0aW9uIE5hdmlnYXRvcigpe307CitOYXZpZ2F0b3IucHJvdG90eXBlID0gbmV3IE9iamVjdCgpOworTmF2aWdhdG9yLnByb3RvdHlwZS5uYXZpZ2F0b3IgPSBuZXcgTmF2aWdhdG9yKCk7CisvKioKKyAqIFByb3BlcnR5IGFwcENvZGVOYW1lCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBtZW1iZXJPZiBOYXZpZ2F0b3IKKyAqLworTmF2aWdhdG9yLnByb3RvdHlwZS5hcHBDb2RlTmFtZSA9ICIiOworLyoqCisgKiBQcm9wZXJ0eSBhcHBOYW1lCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBtZW1iZXJPZiBOYXZpZ2F0b3IKKyAqLworTmF2aWdhdG9yLnByb3RvdHlwZS5hcHBOYW1lID0gIiI7CisvKioKKyAqIFByb3BlcnR5IGFwcFZlcnNpb24KKyAqIEB0eXBlIFN0cmluZworICogQG1lbWJlck9mIE5hdmlnYXRvcgorICovCitOYXZpZ2F0b3IucHJvdG90eXBlLmFwcFZlcnNpb24gPSAiIjsKKy8qKgorICogUHJvcGVydHkgY29va2llRW5hYmxlZAorICogQHR5cGUgQm9vbGVhbgorICogQG1lbWJlck9mIE5hdmlnYXRvcgorICovCitOYXZpZ2F0b3IucHJvdG90eXBlLmNvb2tpZUVuYWJsZWQgPSBuZXcgQm9vbGVhbigpOworLyoqCisgKiBQcm9wZXJ0eSBtaW1lVHlwZXMKKyAqIEB0eXBlIEFycmF5CisgKiBAbWVtYmVyT2YgTmF2aWdhdG9yCisgKi8KK05hdmlnYXRvci5wcm90b3R5cGUubWltZVR5cGVzID0gbmV3IEFycmF5KCk7CisvKioKKyAqIFByb3BlcnR5IHBsYXRmb3JtCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBtZW1iZXJPZiBOYXZpZ2F0b3IKKyAqLworTmF2aWdhdG9yLnByb3RvdHlwZS5wbGF0Zm9ybSA9ICIiOworLyoqCisgKiBQcm9wZXJ0eSBwbHVnaW5zCisgKiBAdHlwZSBBcnJheQorICogQG1lbWJlck9mIE5hdmlnYXRvcgorICovCitOYXZpZ2F0b3IucHJvdG90eXBlLnBsdWdpbnMgPSBuZXcgQXJyYXkoKTsKKy8qKgorICogUHJvcGVydHkgdXNlckFnZW50CisgKiBAdHlwZSBTdHJpbmcKKyAqIEBtZW1iZXJPZiBOYXZpZ2F0b3IKKyAqLworTmF2aWdhdG9yLnByb3RvdHlwZS51c2VyQWdlbnQgPSAiIjsKKy8qKgorICogZnVuY3Rpb24gamF2YUVuYWJsZWQoKQorICogQHJldHVybnMge0Jvb2xlYW59CisgKiBAbWVtYmVyT2YgTmF2aWdhdG9yCisgKi8KK05hdmlnYXRvci5wcm90b3R5cGUuamF2YUVuYWJsZWQgPSBmdW5jdGlvbigpe3JldHVybiBmYWxzZTt9OworCisvKioKKyAqIE9iamVjdCBTY3JlZW4oKQorICogQHN1cGVyIE9iamVjdAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgQ29tbW9uIFVzYWdlLCBubyBzdGFuZGFyZAorKi8KK2Z1bmN0aW9uIFNjcmVlbigpe307CitTY3JlZW4ucHJvdG90eXBlID0gbmV3IE9iamVjdCgpOworU2NyZWVuLnByb3RvdHlwZS5zY3JlZW4gPSBuZXcgU2NyZWVuKCk7CisvKioKKyAqIFByb3BlcnR5IGF2YWlsSGVpZ2h0CisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBTY3JlZW4KKyAqLworTmF2aWdhdG9yLnByb3RvdHlwZS5hdmFpbEhlaWdodCA9IDA7CisvKioKKyAqIFByb3BlcnR5IGF2YWlsV2lkdGgKKyAqIEB0eXBlIE51bWJlcgorICogQG1lbWJlck9mIFNjcmVlbgorICovCitOYXZpZ2F0b3IucHJvdG90eXBlLmF2YWlsV2lkdGggPSAwOworLyoqCisgKiBQcm9wZXJ0eSBjb2xvckRlcHRoCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBTY3JlZW4KKyAqLworTmF2aWdhdG9yLnByb3RvdHlwZS5jb2xvckRlcHRoID0gMDsKKy8qKgorICogUHJvcGVydHkgaGVpZ2h0CisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBTY3JlZW4KKyAqLworTmF2aWdhdG9yLnByb3RvdHlwZS5oZWlnaHQgPSAwOworLyoqCisgKiBQcm9wZXJ0eSB3aWR0aAorICogQHR5cGUgTnVtYmVyCisgKiBAbWVtYmVyT2YgU2NyZWVuCisgKi8KK05hdmlnYXRvci5wcm90b3R5cGUud2lkdGggPSAwOworCitFdmVudC5wcm90b3R5cGU9bmV3IE9iamVjdCgpOworLy8gUGhhc2VUeXBlCitFdmVudC5wcm90b3R5cGUuQ0FQVFVSSU5HX1BIQVNFID0gMTsKK0V2ZW50LnByb3RvdHlwZS5BVF9UQVJHRVQgPSAyOworRXZlbnQucHJvdG90eXBlLkJVQkJMSU5HX1BIQVNFID0gMzsKKworRXZlbnQucHJvdG90eXBlLnR5cGU9IiI7CitFdmVudC5wcm90b3R5cGUudGFyZ2V0PW5ldyBFdmVudFRhcmdldCgpOworRXZlbnQucHJvdG90eXBlLmN1cnJlbnRUYXJnZXQ9bmV3IEV2ZW50VGFyZ2V0KCk7CitFdmVudC5wcm90b3R5cGUuZXZlbnRQaGFzZT0wOworRXZlbnQucHJvdG90eXBlLmJ1YmJsZXM9ZmFsc2U7CitFdmVudC5wcm90b3R5cGUuY2FuY2VsYWJsZT1mYWxzZTsKK0V2ZW50LnByb3RvdHlwZS50aW1lU3RhbXA9MDsKK0V2ZW50LnByb3RvdHlwZS5zdG9wUHJvcGFnYXRpb249ZnVuY3Rpb24oKXt9OworRXZlbnQucHJvdG90eXBlLnByZXZlbnREZWZhdWx0PWZ1bmN0aW9uKCl7fTsKKy8qKgorICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50VHlwZUFyZworICogQHBhcmFtIHtCb29sZWFufSBjYW5CdWJibGVBcmcKKyAqIEBwYXJhbSB7Qm9vbGVhbn0gY2FuY2VsYWJsZUFyZworICovCitFdmVudC5wcm90b3R5cGUuaW5pdEV2ZW50PWZ1bmN0aW9uKGV2ZW50VHlwZUFyZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbkJ1YmJsZUFyZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbGFibGVBcmcpe307CitmdW5jdGlvbiBFdmVudExpc3RlbmVyKCl7fTsKK0V2ZW50TGlzdGVuZXIucHJvdG90eXBlPW5ldyBPYmplY3QoKTsKKy8qKgorICogQHBhcmFtIHtFdmVudH0gZXZlbnQKKyAqIEBtZW1iZXJPZiBFdmVudExpc3RlbmVyCisgKi8KK0V2ZW50TGlzdGVuZXIucHJvdG90eXBlLmhhbmRsZUV2ZW50PWZ1bmN0aW9uKGV2ZW50KXt9OworCitmdW5jdGlvbiBFdmVudFRhcmdldCgpe307CitFdmVudFRhcmdldC5wcm90b3R5cGU9bmV3IE9iamVjdCgpOworLyoKKyAqIFRoZXNlIGZ1bmN0aW9ucyBtYXkgbmVlZCB0byBiZSBtb3ZlZCBpbnRvIGEgYnJvd3NlciBzcGVjaWZpYyBsaWJyYXJ5LgorICovCisvKioKKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqIEBwYXJhbSBldmVudCB7RXZlbnR9CisgKiBAdGhyb3dzIHtFdmVudEV4Y2VwdGlvbn0KKyAqLworRXZlbnRUYXJnZXQucHJvdG90eXBlLmRpc3BhdGNoRXZlbnQ9ZnVuY3Rpb24oZXZlbnQpe307CisKKy8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvRE9NL2VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcgorLyoqCisgKiBAbWVtYmVyT2YgV2luZG93CisgKiBAcGFyYW0ge1N0cmluZ30gdHlwZQorICogQHBhcmFtIHtFdmVudExpc3RlbmVyfSBsaXN0ZW5lcgorICogQHBhcmFtIHtCb29sZWFufSB1c2VDYXB0dXJlCisgKi8KK0V2ZW50VGFyZ2V0LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKXt9OworLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9ET00vZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyCisvKioKKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlCisgKiBAcGFyYW0ge0V2ZW50TGlzdGVuZXJ9IGxpc3RlbmVyCisgKiBAcGFyYW0ge0Jvb2xlYW59IHVzZUNhcHR1cmUKKyAqLworRXZlbnRUYXJnZXQucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpe307CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUvbGlicmFyaWVzL2RvbTUuanMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUvbGlicmFyaWVzL2RvbTUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE5OWFiNgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS9saWJyYXJpZXMvZG9tNS5qcwpAQCAtMCwwICsxLDkyMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yKHNlbGVjdG9ycykKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvUFItc2VsZWN0b3JzLWFwaS0yMDEyMTIxMworICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9ycworICogQG1lbWJlck9mIERvY3VtZW50CisgKiBAcmV0dXJucyB7RWxlbWVudH0gICAgICAKKyAqLyAKK0RvY3VtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yPWZ1bmN0aW9uKHNlbGVjdG9ycyl7cmV0dXJuIG5ldyBFbGVtZW50KCk7fTsKKworLyoqCisgKiBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9ycykKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvUFItc2VsZWN0b3JzLWFwaS0yMDEyMTIxMworICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9ycworICogQG1lbWJlck9mIERvY3VtZW50CisgKiBAcmV0dXJucyB7Tm9kZUxpc3R9ICAgICAgCisgKi8gCitEb2N1bWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbD1mdW5jdGlvbihzZWxlY3RvcnMpe3JldHVybiBuZXcgTm9kZUxpc3QoKTt9OworCisvKioKKyAqIGZ1bmN0aW9uIHF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3JzKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9QUi1zZWxlY3RvcnMtYXBpLTIwMTIxMjEzCisgKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3JzCisgKiBAbWVtYmVyT2YgRG9jdW1lbnRGcmFnbWVudAorICogQHJldHVybnMge0VsZW1lbnR9ICAgICAgCisgKi8gCitEb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yPWZ1bmN0aW9uKHNlbGVjdG9ycyl7cmV0dXJuIG5ldyBFbGVtZW50KCk7fTsKKworLyoqCisgKiBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9ycykKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvUFItc2VsZWN0b3JzLWFwaS0yMDEyMTIxMworICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9ycworICogQG1lbWJlck9mIERvY3VtZW50RnJhZ21lbnQKKyAqIEByZXR1cm5zIHtOb2RlTGlzdH0gICAgICAKKyAqLyAKK0RvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3JBbGw9ZnVuY3Rpb24oc2VsZWN0b3JzKXtyZXR1cm4gbmV3IE5vZGVMaXN0KCk7fTsKKworLyoqCisgKiBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yKHNlbGVjdG9ycykKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvUFItc2VsZWN0b3JzLWFwaS0yMDEyMTIxMworICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9ycworICogQG1lbWJlck9mIEVsZW1lbnQKKyAqIEByZXR1cm5zIHtFbGVtZW50fSAgICAgIAorICovIAorRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3Rvcj1mdW5jdGlvbihzZWxlY3RvcnMpe3JldHVybiBuZXcgRWxlbWVudCgpO307CisKKy8qKgorICogZnVuY3Rpb24gcXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcnMpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1BSLXNlbGVjdG9ycy1hcGktMjAxMjEyMTMKKyAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RvcnMKKyAqIEBtZW1iZXJPZiBFbGVtZW50CisgKiBAcmV0dXJucyB7Tm9kZUxpc3R9ICAgICAgCisgKi8gCitFbGVtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yQWxsPWZ1bmN0aW9uKHNlbGVjdG9ycyl7cmV0dXJuIG5ldyBOb2RlTGlzdCgpO307CisKKy8qKgorICogUHJvcGVydHkgc3RhdGUKKyAqIEB0eXBlIE9iamVjdAorICogQG1lbWJlck9mIEhpc3RvcnkKKyAqLworSGlzdG9yeS5wcm90b3R5cGUuc3RhdGU9bmV3IE9iamVjdCgpOworCisvKioKKyAqIGZ1bmN0aW9uIHB1c2hTdGF0ZShkYXRhLHRpdGxlLHVybCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvQ1ItaHRtbDUtMjAxMjEyMTcvYnJvd3NlcnMuaHRtbCNoaXN0b3J5CisgKiBAcGFyYW0ge09iamVjdH0gZGF0YQorICogQHBhcmFtIHtTdHJpbmd9IHRpdGxlCisgKiBAcGFyYW0ge1N0cmluZ30gdXJsIC0gb3B0aW9uYWwKKyAqIEBtZW1iZXJPZiBIaXN0b3J5CisgKi8KK0hpc3RvcnkucHJvdG90eXBlLnB1c2hTdGF0ZT1mdW5jdGlvbihkYXRhLHRpdGxlLHVybCl7fTsKKworLyoqCisgKiBmdW5jdGlvbiByZXBsYWNlU3RhdGUoZGF0YSx0aXRsZSx1cmwpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL0NSLWh0bWw1LTIwMTIxMjE3L2Jyb3dzZXJzLmh0bWwjaGlzdG9yeQorICogQHBhcmFtIHtPYmplY3R9IGRhdGEKKyAqIEBwYXJhbSB7U3RyaW5nfSB0aXRsZQorICogQHBhcmFtIHtTdHJpbmd9IHVybCAtIG9wdGlvbmFsCisgKiBAbWVtYmVyT2YgSGlzdG9yeQorICovCitIaXN0b3J5LnByb3RvdHlwZS5yZXBsYWNlU3RhdGU9ZnVuY3Rpb24oZGF0YSx0aXRsZSx1cmwpe307CisKKy8qKgorICogUHJvcGVydHkgc2Vzc2lvblN0b3JhZ2UKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvQ1Itd2Vic3RvcmFnZS0yMDExMTIwOAorICogQHR5cGUgU3RvcmFnZQorICogQG1lbWJlck9mIFdpbmRvdworICovCitXaW5kb3cucHJvdG90eXBlLnNlc3Npb25TdG9yYWdlPW5ldyBTdG9yYWdlKCk7CisKKy8qKgorICogUHJvcGVydHkgbG9jYWxTdG9yYWdlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL0NSLXdlYnN0b3JhZ2UtMjAxMTEyMDgKKyAqIEB0eXBlIFN0b3JhZ2UKKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqLworV2luZG93LnByb3RvdHlwZS5sb2NhbFN0b3JhZ2U9bmV3IFN0b3JhZ2UoKTsKKworLyoqCisgKiBPYmplY3QgU3RvcmFnZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9DUi13ZWJzdG9yYWdlLTIwMTExMjA4CisgKi8KK2Z1bmN0aW9uIFN0b3JhZ2UoKXt9OworU3RvcmFnZS5wcm90b3R5cGU9bmV3IE9iamVjdCgpOworCisvKioKKyAqIFByb3BlcnR5IGxlbmd0aAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9DUi13ZWJzdG9yYWdlLTIwMTExMjA4CisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBTdG9yYWdlCisgKi8KK1N0b3JhZ2UucHJvdG90eXBlLmxlbmd0aD1uZXcgTnVtYmVyKCk7CisKKy8qKgorICogZnVuY3Rpb24ga2V5KGluZGV4KQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9DUi13ZWJzdG9yYWdlLTIwMTExMjA4CisgKiBAcGFyYW0ge051bWJlcn0gaW5kZXgKKyAqIEBtZW1iZXJPZiBTdG9yYWdlCisgKiBAcmV0dXJucyBTdHJpbmcKKyAqLworU3RvcmFnZS5wcm90b3R5cGUua2V5PWZ1bmN0aW9uKGluZGV4KXtyZXR1cm4gbmV3IFN0cmluZygpO307CisKKy8qKgorICogZnVuY3Rpb24gZ2V0SXRlbShrZXkpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL0NSLXdlYnN0b3JhZ2UtMjAxMTEyMDgKKyAqIEBwYXJhbSB7U3RyaW5nfSBrZXkKKyAqIEBtZW1iZXJPZiBTdG9yYWdlCisgKiBAcmV0dXJucyBTdHJpbmcKKyAqLworU3RvcmFnZS5wcm90b3R5cGUuZ2V0SXRlbT1mdW5jdGlvbihrZXkpe3JldHVybiBuZXcgU3RyaW5nKCk7fTsKKworLyoqCisgKiBmdW5jdGlvbiBzZXRJdGVtKGtleSx2YWx1ZSkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvQ1Itd2Vic3RvcmFnZS0yMDExMTIwOAorICogQHBhcmFtIHtTdHJpbmd9IGtleQorICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlCisgKiBAbWVtYmVyT2YgU3RvcmFnZQorICovCitTdG9yYWdlLnByb3RvdHlwZS5zZXRJdGVtPWZ1bmN0aW9uKGtleSx2YWx1ZSl7fTsKKworLyoqCisgKiBmdW5jdGlvbiByZW1vdmVJdGVtKGtleSkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvQ1Itd2Vic3RvcmFnZS0yMDExMTIwOAorICogQHBhcmFtIHtTdHJpbmd9IGtleQorICogQG1lbWJlck9mIFN0b3JhZ2UKKyAqLworU3RvcmFnZS5wcm90b3R5cGUucmVtb3ZlSXRlbT1mdW5jdGlvbihrZXkpe307CisKKy8qKgorICogZnVuY3Rpb24gY2xlYXIoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9DUi13ZWJzdG9yYWdlLTIwMTExMjA4CisgKiBAbWVtYmVyT2YgU3RvcmFnZQorICovCitTdG9yYWdlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe307CisKKy8qKgorICogT2JqZWN0IFdlYlNvY2tldAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9DUi13ZWJzb2NrZXRzLTIwMTIwOTIwCisgKiBAY29uc3RydWN0b3IKKyAqIEBwYXJhbSB7U3RyaW5nfSB1cmwKKyAqLworZnVuY3Rpb24gV2ViU29ja2V0KHVybCl7fTsKK1dlYlNvY2tldC5wcm90b3R5cGU9bmV3IE9iamVjdCgpOworCisvKioKKyAqIENvbnN0YW50IFdlYlNvY2tldC5DT05ORUNUSU5HPTAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvQ1Itd2Vic29ja2V0cy0yMDEyMDkyMAorICogQGNvbnN0YW50CisgKiBAdHlwZSBOdW1iZXIKKyAqLworV2ViU29ja2V0LnByb3RvdHlwZS5DT05ORUNUSU5HPTA7CisKKy8qKgorICogQ29uc3RhbnQgV2ViU29ja2V0Lk9QRU49MQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9DUi13ZWJzb2NrZXRzLTIwMTIwOTIwCisgKiBAY29uc3RhbnQKKyAqIEB0eXBlIE51bWJlcgorICovCitXZWJTb2NrZXQucHJvdG90eXBlLk9QRU49MTsKKworLyoqCisgKiBDb25zdGFudCBXZWJTb2NrZXQuQ0xPU0lORz0yCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL0NSLXdlYnNvY2tldHMtMjAxMjA5MjAKKyAqIEBjb25zdGFudAorICogQHR5cGUgTnVtYmVyCisgKi8KK1dlYlNvY2tldC5wcm90b3R5cGUuQ0xPU0lORz0yOworCisvKioKKyAqIENvbnN0YW50IFdlYlNvY2tldC5DTE9TRUQ9MworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9DUi13ZWJzb2NrZXRzLTIwMTIwOTIwCisgKiBAY29uc3RhbnQKKyAqIEB0eXBlIE51bWJlcgorICovCitXZWJTb2NrZXQucHJvdG90eXBlLkNMT1NFRD0zOworCisvKioKKyAqIFByb3BlcnR5IHVybAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9DUi13ZWJzb2NrZXRzLTIwMTIwOTIwCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBtZW1iZXJPZiBXZWJTb2NrZXQKKyAqLworV2ViU29ja2V0LnByb3RvdHlwZS51cmw9bmV3IFN0cmluZygpOworCisvKioKKyAqIFByb3BlcnR5IHJlYWR5U3RhdGUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvQ1Itd2Vic29ja2V0cy0yMDEyMDkyMAorICogQHR5cGUgTnVtYmVyCisgKiBAbWVtYmVyT2YgV2ViU29ja2V0CisgKi8KK1dlYlNvY2tldC5wcm90b3R5cGUucmVhZHlTdGF0ZT1uZXcgTnVtYmVyKCk7CisKKy8qKgorICogUHJvcGVydHkgYnVmZmVyZWRBbW91bnQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvQ1Itd2Vic29ja2V0cy0yMDEyMDkyMAorICogQHR5cGUgTnVtYmVyCisgKiBAbWVtYmVyT2YgV2ViU29ja2V0CisgKi8KK1dlYlNvY2tldC5wcm90b3R5cGUuYnVmZmVyZWRBbW91bnQ9bmV3IE51bWJlcigpOworCisvKioKKyAqIFByb3BlcnR5IGV4dGVuc2lvbnMKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvQ1Itd2Vic29ja2V0cy0yMDEyMDkyMAorICogQHR5cGUgU3RyaW5nCisgKiBAbWVtYmVyT2YgV2ViU29ja2V0CisgKi8KK1dlYlNvY2tldC5wcm90b3R5cGUuZXh0ZW5zaW9ucz1uZXcgU3RyaW5nKCk7CisKKy8qKgorICogUHJvcGVydHkgcHJvdG9jb2wKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvQ1Itd2Vic29ja2V0cy0yMDEyMDkyMAorICogQHR5cGUgU3RyaW5nCisgKiBAbWVtYmVyT2YgV2ViU29ja2V0CisgKi8KK1dlYlNvY2tldC5wcm90b3R5cGUucHJvdG9jb2w9bmV3IFN0cmluZygpOworCisvKioKKyAqIFByb3BlcnR5IGJpbmFyeVR5cGUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvQ1Itd2Vic29ja2V0cy0yMDEyMDkyMAorICogQHR5cGUgU3RyaW5nCisgKiBAbWVtYmVyT2YgV2ViU29ja2V0CisgKi8KK1dlYlNvY2tldC5wcm90b3R5cGUuYmluYXJ5VHlwZT1uZXcgU3RyaW5nKCk7CisKKy8qKgorICogZnVuY3Rpb24gY2xvc2UoY29kZSxyZWFzb24pCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL0NSLXdlYnNvY2tldHMtMjAxMjA5MjAKKyAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlIC0gb3B0aW9uYWwKKyAqIEBwYXJhbSB7U3RyaW5nfSByZWFzb24gLSBvcHRpb25hbAorICogQG1lbWJlck9mIFdlYlNvY2tldAorICovCitXZWJTb2NrZXQucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKGNvZGUscmVhc29uKXt9OworCisvKioKKyAqIGZ1bmN0aW9uIHNlbmQoZGF0YSkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvQ1Itd2Vic29ja2V0cy0yMDEyMDkyMAorICogQHBhcmFtIHtPYmplY3R9IGRhdGEgLSBtYXkgYmUgYSBTdHJpbmcsIEJsb2IsIEFycmF5QnVmZmVyLCBvciBBcnJheUJ1ZmZlclZpZXcgCisgKiBAbWVtYmVyT2YgV2ViU29ja2V0CisgKi8KK1dlYlNvY2tldC5wcm90b3R5cGUuc2VuZD1mdW5jdGlvbihkYXRhKXt9OworCisvKioKKyAqIFByb3BlcnR5IGdlb2xvY2F0aW9uCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1BSLWdlb2xvY2F0aW9uLUFQSS0yMDEyMDUxMAorICogQHR5cGUgR2VvbG9jYXRpb24KKyAqIEBtZW1iZXJPZiBOYXZpZ2F0b3IKKyAqLworTmF2aWdhdG9yLnByb3RvdHlwZS5nZW9sb2NhdGlvbj1uZXcgR2VvbG9jYXRpb24oKTsKKworLyoqCisgKiBPYmplY3QgR2VvbG9jYXRpb24KKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvUFItZ2VvbG9jYXRpb24tQVBJLTIwMTIwNTEwCisgKi8KK2Z1bmN0aW9uIEdlb2xvY2F0aW9uKCl7fTsKK0dlb2xvY2F0aW9uLnByb3RvdHlwZT1uZXcgT2JqZWN0KCk7CisKKy8qKgorICogZnVuY3Rpb24gZ2V0Q3VycmVudFBvc2l0aW9uKHN1Y2Nlc3NDYWxsYmFjayxlcnJvckNhbGxiYWNrLG9wdGlvbnMpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1BSLWdlb2xvY2F0aW9uLUFQSS0yMDEyMDUxMC8KKyAqIEBwYXJhbSB7RnVuY3Rpb259IHN1Y2Nlc3NDYWxsYmFjayAoUG9zaXRpb24gcG9zKQorICogQHBhcmFtIHtGdW5jdGlvbn0gZXJyb3JDYWxsYmFjayAoUG9zaXRpb25FcnJvciBlcnJvcikgLSBvcHRpb25hbAorICogQHBhcmFtIHtQb3NpdGlvbk9wdGlvbnN9IG9wdGlvbnMgLSBvcHRpb25hbAorICogQG1lbWJlck9mIEdlb2xvY2F0aW9uCisgKi8KK0dlb2xvY2F0aW9uLnByb3RvdHlwZS5nZXRDdXJyZW50UG9zaXRpb249ZnVuY3Rpb24oc3VjY2Vzc0NhbGxiYWNrLGVycm9yQ2FsbGJhY2ssb3B0aW9ucyl7fTsKKworLyoqCisgKiBmdW5jdGlvbiB3YXRjaFBvc2l0aW9uKHN1Y2Nlc3NDYWxsYmFjayxlcnJvckNhbGxiYWNrLG9wdGlvbnMpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1BSLWdlb2xvY2F0aW9uLUFQSS0yMDEyMDUxMC8KKyAqIEBwYXJhbSB7RnVuY3Rpb259IHN1Y2Nlc3NDYWxsYmFjayAoUG9zaXRpb24gcG9zKQorICogQHBhcmFtIHtGdW5jdGlvbn0gZXJyb3JDYWxsYmFjayAoUG9zaXRpb25FcnJvciBlcnJvcikgLSBvcHRpb25hbAorICogQHBhcmFtIHtQb3NpdGlvbk9wdGlvbnN9IG9wdGlvbnMgLSBvcHRpb25hbAorICogQG1lbWJlck9mIEdlb2xvY2F0aW9uCisgKiBAcmV0dXJucyB7TnVtYmVyfQorICovCitHZW9sb2NhdGlvbi5wcm90b3R5cGUud2F0Y2hQb3NpdGlvbj1mdW5jdGlvbihzdWNjZXNzQ2FsbGJhY2ssZXJyb3JDYWxsYmFjayxvcHRpb25zKXtyZXR1cm4gbmV3IE51bWJlcigpO307CisKKy8qKgorICogZnVuY3Rpb24gY2xlYXJXYXRjaCh3YXRjaElkKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9QUi1nZW9sb2NhdGlvbi1BUEktMjAxMjA1MTAKKyAqIEBwYXJhbSB7TnVtYmVyfSB3YXRjaElkCisgKiBAbWVtYmVyT2YgR2VvbG9jYXRpb24KKyAqLworR2VvbG9jYXRpb24ucHJvdG90eXBlLmNsZWFyV2F0Y2g9ZnVuY3Rpb24od2F0Y2hJZCl7fTsKKworLyoqCisgKiBPYmplY3QgQ29vcmRpbmF0ZXMKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvUFItZ2VvbG9jYXRpb24tQVBJLTIwMTIwNTEwCisgKi8KK2Z1bmN0aW9uIENvb3JkaW5hdGVzKCl7fTsKK0Nvb3JkaW5hdGVzLnByb3RvdHlwZT1uZXcgT2JqZWN0KCk7CisKKy8qKgorICogUHJvcGVydHkgbGF0aXR1ZGUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvUFItZ2VvbG9jYXRpb24tQVBJLTIwMTIwNTEwCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBDb29yZGluYXRlcworICovCitDb29yZGluYXRlcy5wcm90b3R5cGUubGF0aXR1ZGU9bmV3IE51bWJlcigpOzsKKworLyoqCisgKiBQcm9wZXJ0eSBsb25naXR1ZGUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvUFItZ2VvbG9jYXRpb24tQVBJLTIwMTIwNTEwCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBDb29yZGluYXRlcworICovCitDb29yZGluYXRlcy5wcm90b3R5cGUubG9uZ2l0dWRlPW5ldyBOdW1iZXIoKTs7CisKKy8qKgorICogUHJvcGVydHkgYWx0aXR1ZGUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvUFItZ2VvbG9jYXRpb24tQVBJLTIwMTIwNTEwCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBDb29yZGluYXRlcworICovCitDb29yZGluYXRlcy5wcm90b3R5cGUuYWx0aXR1ZGU9bmV3IE51bWJlcigpOzsKKworLyoqCisgKiBQcm9wZXJ0eSBhY2N1cmFjeQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9QUi1nZW9sb2NhdGlvbi1BUEktMjAxMjA1MTAKKyAqIEB0eXBlIE51bWJlcgorICogQG1lbWJlck9mIENvb3JkaW5hdGVzCisgKi8KK0Nvb3JkaW5hdGVzLnByb3RvdHlwZS5hY2N1cmFjeT1uZXcgTnVtYmVyKCk7OworCisvKioKKyAqIFByb3BlcnR5IGFsdGl0dWRlQWNjdXJhY3kKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvUFItZ2VvbG9jYXRpb24tQVBJLTIwMTIwNTEwCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBDb29yZGluYXRlcworICovCitDb29yZGluYXRlcy5wcm90b3R5cGUuYWx0aXR1ZGVBY2N1cmFjeT1uZXcgTnVtYmVyKCk7OworCisvKioKKyAqIFByb3BlcnR5IGhlYWRpbmcKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvUFItZ2VvbG9jYXRpb24tQVBJLTIwMTIwNTEwCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBDb29yZGluYXRlcworICovCitDb29yZGluYXRlcy5wcm90b3R5cGUuaGVhZGluZz1uZXcgTnVtYmVyKCk7OworCisvKioKKyAqIFByb3BlcnR5IHNwZWVkCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1BSLWdlb2xvY2F0aW9uLUFQSS0yMDEyMDUxMAorICogQHR5cGUgTnVtYmVyCisgKiBAbWVtYmVyT2YgQ29vcmRpbmF0ZXMKKyAqLworQ29vcmRpbmF0ZXMucHJvdG90eXBlLnNwZWVkPW5ldyBOdW1iZXIoKTsKKworLyoqCisgKiBPYmplY3QgUG9zaXRpb24KKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvUFItZ2VvbG9jYXRpb24tQVBJLTIwMTIwNTEwCisgKi8KK2Z1bmN0aW9uIFBvc2l0aW9uKCl7fTsKK1Bvc2l0aW9uLnByb3RvdHlwZT1uZXcgT2JqZWN0KCk7CisKKy8qKgorICogUHJvcGVydHkgY29vcmRzCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1BSLWdlb2xvY2F0aW9uLUFQSS0yMDEyMDUxMAorICogQHR5cGUgQ29vcmRpbmF0ZXMKKyAqIEBtZW1iZXJPZiBQb3NpdGlvbgorICovCitQb3NpdGlvbi5wcm90b3R5cGUuY29vcmRzPW5ldyBDb29yZGluYXRlcygpOworCisvKioKKyAqIFByb3BlcnR5IHRpbWVzdGFtcAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9QUi1nZW9sb2NhdGlvbi1BUEktMjAxMjA1MTAKKyAqIEB0eXBlIE51bWJlcgorICogQG1lbWJlck9mIFBvc2l0aW9uCisgKi8KK1Bvc2l0aW9uLnByb3RvdHlwZS50aW1lc3RhbXA9bmV3IE51bWJlcjsKKworLyoqCisgKiBPYmplY3QgUG9zaXRpb25FcnJvcgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9QUi1nZW9sb2NhdGlvbi1BUEktMjAxMjA1MTAKKyAqLworZnVuY3Rpb24gUG9zaXRpb25FcnJvcigpe307CitQb3NpdGlvbkVycm9yLnByb3RvdHlwZT1uZXcgT2JqZWN0KCk7CisKKy8qKgorICogQ29uc3RhbnQgUG9zaXRpb25FcnJvci5QRVJNSVNTSU9OX0RFTklFRD0xCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1BSLWdlb2xvY2F0aW9uLUFQSS0yMDEyMDUxMAorICogQGNvbnN0YW50CisgKiBAdHlwZSBOdW1iZXIKKyAqLworUG9zaXRpb25FcnJvci5wcm90b3R5cGUuUEVSTUlTU0lPTl9ERU5JRUQ9MTsKKworLyoqCisgKiBDb25zdGFudCBQb3NpdGlvbkVycm9yLlBPU0lUSU9OX1VOQVZBSUxBQkxFPTIKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvUFItZ2VvbG9jYXRpb24tQVBJLTIwMTIwNTEwCisgKiBAY29uc3RhbnQKKyAqIEB0eXBlIE51bWJlcgorICovCitQb3NpdGlvbkVycm9yLnByb3RvdHlwZS5QT1NJVElPTl9VTkFWQUlMQUJMRT0yOworCisvKioKKyAqIENvbnN0YW50IFBvc2l0aW9uRXJyb3IuVElNRU9VVD0zCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1BSLWdlb2xvY2F0aW9uLUFQSS0yMDEyMDUxMAorICogQGNvbnN0YW50CisgKiBAdHlwZSBOdW1iZXIKKyAqLworUG9zaXRpb25FcnJvci5wcm90b3R5cGUuVElNRU9VVD0zOworCisvKioKKyAqIFByb3BlcnR5IGNvZGUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvUFItZ2VvbG9jYXRpb24tQVBJLTIwMTIwNTEwCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBQb3NpdGlvbkVycm9yCisgKi8KK1Bvc2l0aW9uRXJyb3IucHJvdG90eXBlLmNvZGU9bmV3IE51bWJlcigpOworCisvKioKKyAqIFByb3BlcnR5IG1lc3NhZ2UKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvUFItZ2VvbG9jYXRpb24tQVBJLTIwMTIwNTEwCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBtZW1iZXJPZiBQb3NpdGlvbkVycm9yCisgKi8KK1Bvc2l0aW9uRXJyb3IucHJvdG90eXBlLm1lc3NhZ2U9bmV3IFN0cmluZygpOworCisvKioKKyAqIE9iamVjdCBQb3NpdGlvbk9wdGlvbnMKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvUFItZ2VvbG9jYXRpb24tQVBJLTIwMTIwNTEwCisgKi8KK2Z1bmN0aW9uIFBvc2l0aW9uT3B0aW9ucygpe307CitQb3NpdGlvbk9wdGlvbnMucHJvdG90eXBlPW5ldyBPYmplY3QoKTsKKworLyoqCisgKiBQcm9wZXJ0eSBlbmFibGVIaWdoQWNjdXJhY3kKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvUFItZ2VvbG9jYXRpb24tQVBJLTIwMTIwNTEwCisgKiBAdHlwZSBCb29sZWFuCisgKiBAbWVtYmVyT2YgUG9zaXRpb25PcHRpb25zCisgKi8KK1Bvc2l0aW9uT3B0aW9ucy5wcm90b3R5cGUuZW5hYmxlSGlnaEFjY3VyYWN5PW5ldyBCb29sZWFuKCk7CisKKy8qKgorICogUHJvcGVydHkgdGltZW91dAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9QUi1nZW9sb2NhdGlvbi1BUEktMjAxMjA1MTAKKyAqIEB0eXBlIE51bWJlcgorICogQG1lbWJlck9mIFBvc2l0aW9uT3B0aW9ucworICovCitQb3NpdGlvbk9wdGlvbnMucHJvdG90eXBlLnRpbWVvdXQ9bmV3IE51bWJlcigpOworCisvKioKKyAqIFByb3BlcnR5IG1heGltdW1BZ2UKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvUFItZ2VvbG9jYXRpb24tQVBJLTIwMTIwNTEwCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBQb3NpdGlvbk9wdGlvbnMKKyAqLworUG9zaXRpb25PcHRpb25zLnByb3RvdHlwZS5tYXhpbXVtQWdlPW5ldyBOdW1iZXIoKTsKKworLyoqCisgKiBPYmplY3QgVGltZVJhbmdlcworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMDMyOS9tZWRpYS1lbGVtZW50cy5odG1sCisgKi8KK2Z1bmN0aW9uIFRpbWVSYW5nZXMoKXt9OworVGltZVJhbmdlcy5wcm90b3R5cGU9bmV3IE9iamVjdCgpOworCisvKioKKyAqIFByb3BlcnR5IGxlbmd0aAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMDMyOS9tZWRpYS1lbGVtZW50cy5odG1sCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBUaW1lUmFuZ2VzCisgKi8KK1RpbWVSYW5nZXMucHJvdG90eXBlLmxlbmd0aD1uZXcgTnVtYmVyKCk7CisKKy8qKgorICogZnVuY3Rpb24gc3RhcnQoaW5kZXgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEBwYXJhbSB7TnVtYmVyfSBpbmRleAorICogQG1lbWJlck9mIFRpbWVSYW5nZXMKKyAqIEByZXR1cm5zIHtOdW1iZXJ9CisgKi8KK2Z1bmN0aW9uIHN0YXJ0KGluZGV4KSB7cmV0dXJuIG5ldyBOdW1iZXIoKTt9OworCisvKioKKyAqIGZ1bmN0aW9uIGVuZChpbmRleCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQHBhcmFtIHtOdW1iZXJ9IGluZGV4CisgKiBAbWVtYmVyT2YgVGltZVJhbmdlcworICogQHJldHVybnMge051bWJlcn0KKyAqLworZnVuY3Rpb24gZW5kKGluZGV4KSB7cmV0dXJuIG5ldyBOdW1iZXIoKTt9OworCisvKioKKyAqIE9iamVjdCBNZWRpYUVycm9yCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqLworZnVuY3Rpb24gTWVkaWFFcnJvcigpe307CitNZWRpYUVycm9yLnByb3RvdHlwZT1uZXcgT2JqZWN0KCk7CisKKy8qKgorICogQ29uc3RhbnQgTWVkaWFFcnJvci5NRURJQV9FUlJfQUJPUlRFRD0xCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEBjb25zdGFudAorICogQHR5cGUgTnVtYmVyCisgKi8KK01lZGlhRXJyb3IucHJvdG90eXBlLk1FRElBX0VSUl9BQk9SVEVEPTE7CisKKy8qKgorICogQ29uc3RhbnQgTWVkaWFFcnJvci5NRURJQV9FUlJfTkVUV09SSz0yCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEBjb25zdGFudAorICogQHR5cGUgTnVtYmVyCisgKi8KK01lZGlhRXJyb3IucHJvdG90eXBlLk1FRElBX0VSUl9ORVRXT1JLPTI7CisKKy8qKgorICogQ29uc3RhbnQgTWVkaWFFcnJvci5NRURJQV9FUlJfREVDT0RFRD0zCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEBjb25zdGFudAorICogQHR5cGUgTnVtYmVyCisgKi8KK01lZGlhRXJyb3IucHJvdG90eXBlLk1FRElBX0VSUl9ERUNPREU9MzsKKworLyoqCisgKiBDb25zdGFudCBNZWRpYUVycm9yLk1FRElBX0VSUl9TUkNfTk9UX1NVUFBPUlRFRD00CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEBjb25zdGFudAorICogQHR5cGUgTnVtYmVyCisgKi8KK01lZGlhRXJyb3IucHJvdG90eXBlLk1FRElBX0VSUl9TUkNfTk9UX1NVUFBPUlRFRD00OworCisvKioKKyAqIFByb3BlcnR5IGNvZGUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQHR5cGUgTnVtYmVyCisgKiBAbWVtYmVyT2YgTWVkaWFFcnJvcgorICovCitNZWRpYUVycm9yLnByb3RvdHlwZS5jb2RlPW5ldyBOdW1iZXIoKTsKKworLyoqCisgKiBPYmplY3QgSFRNTE1lZGlhRWxlbWVudAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMDMyOS9tZWRpYS1lbGVtZW50cy5odG1sCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTE1lZGlhRWxlbWVudCgpe307CitIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworCisvKioKKyAqIFByb3BlcnR5IHNyYworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMDMyOS9tZWRpYS1lbGVtZW50cy5odG1sCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBtZW1iZXJPZiBIVE1MTWVkaWFFbGVtZW50CisgKi8KK0hUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLnNyYz1uZXcgU3RyaW5nKCk7CisKKy8qKgorICogUHJvcGVydHkgY3VycmVudFNyYworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMDMyOS9tZWRpYS1lbGVtZW50cy5odG1sCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBtZW1iZXJPZiBIVE1MTWVkaWFFbGVtZW50CisgKi8KK0hUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLmN1cnJlbnRTcmM9bmV3IFN0cmluZygpOworCisvKioKKyAqIFByb3BlcnR5IGNyb3NzT3JpZ2luCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEB0eXBlIFN0cmluZworICogQG1lbWJlck9mIEhUTUxNZWRpYUVsZW1lbnQKKyAqLworSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUuY3Jvc3NPcmlnaW49bmV3IFN0cmluZygpOworCisvKioKKyAqIENvbnN0YW50IEhUTUxNZWRpYUVsZW1lbnQuTkVUV09SS19FTVBUWT0wCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEBjb25zdGFudAorICogQHR5cGUgTnVtYmVyCisgKi8KK0hUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLk5FVFdPUktfRU1QVFk9MDsKKworLyoqCisgKiBDb25zdGFudCBIVE1MTWVkaWFFbGVtZW50Lk5FVFdPUktfSURMRT0xCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEBjb25zdGFudAorICogQHR5cGUgTnVtYmVyCisgKi8KK0hUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLk5FVFdPUktfSURMRT0xOworCisvKioKKyAqIENvbnN0YW50IEhUTUxNZWRpYUVsZW1lbnQuTkVUV09SS19MT0FESU5HPTIKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQGNvbnN0YW50CisgKiBAdHlwZSBOdW1iZXIKKyAqLworSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUuTkVUV09SS19MT0FESU5HPTI7CisKKy8qKgorICogQ29uc3RhbnQgSFRNTE1lZGlhRWxlbWVudC5ORVRXT1JLX05PX1NPVVJDRT0zCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEBjb25zdGFudAorICogQHR5cGUgTnVtYmVyCisgKi8KK0hUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLk5FVFdPUktfTk9fU09VUkNFPTM7CisKKy8qKgorICogUHJvcGVydHkgbmV0d29ya1N0YXRlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEB0eXBlIE51bWJlcgorICogQG1lbWJlck9mIEhUTUxNZWRpYUVsZW1lbnQKKyAqLworSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUubmV0d29ya1N0YXRlPW5ldyBOdW1iZXIoKTsKKworLyoqCisgKiBQcm9wZXJ0eSBwcmVsb2FkCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEB0eXBlIFN0cmluZworICogQG1lbWJlck9mIEhUTUxNZWRpYUVsZW1lbnQKKyAqLworSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUucHJlbG9hZD1uZXcgU3RyaW5nKCk7CisKKy8qKgorICogUHJvcGVydHkgYnVmZmVyZWQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQHR5cGUgVGltZVJhbmdlcworICogQG1lbWJlck9mIEhUTUxNZWRpYUVsZW1lbnQKKyAqLworSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUuYnVmZmVyZWQ9bmV3IFRpbWVSYW5nZXMoKTsKKworLyoqCisgKiBmdW5jdGlvbiBsb2FkKCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQG1lbWJlck9mIEhUTUxNZWRpYUVsZW1lbnQKKyAqLworSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUubG9hZD1mdW5jdGlvbigpe307CisKKy8qKgorICogZnVuY3Rpb24gY2FuUGxheVR5cGUodHlwZSkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQHBhcmFtIHtTdHJpbmd9IHR5cGUKKyAqIEBtZW1iZXJPZiBIVE1MTWVkaWFFbGVtZW50CisgKiBAcmV0dXJucyB7U3RyaW5nfQorICovCitIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5jYW5QbGF5VHlwZT1mdW5jdGlvbih0eXBlKXtuZXcgU3RyaW5nKCk7fTsKKworLyoqCisgKiBDb25zdGFudCBIVE1MTWVkaWFFbGVtZW50LkhBVkVfTk9USElORz0wCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEBjb25zdGFudAorICogQHR5cGUgTnVtYmVyCisgKi8KK0hUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLkhBVkVfTk9USElORz0wOworCisvKioKKyAqIENvbnN0YW50IEhUTUxNZWRpYUVsZW1lbnQuSEFWRV9NRVRBREFUQT0xCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEBjb25zdGFudAorICogQHR5cGUgTnVtYmVyCisgKi8KK0hUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLkhBVkVfTUVUQURBVEE9MTsKKworLyoqCisgKiBDb25zdGFudCBIVE1MTWVkaWFFbGVtZW50LkhBVkVfQ1VSUkVOVF9EQVRBPTIKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQGNvbnN0YW50CisgKiBAdHlwZSBOdW1iZXIKKyAqLworSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUuSEFWRV9DVVJSRU5UX0RBVEE9MjsKKworLyoqCisgKiBDb25zdGFudCBIVE1MTWVkaWFFbGVtZW50LkhBVkVfRlVUVVJFX0RBVEE9MworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMDMyOS9tZWRpYS1lbGVtZW50cy5odG1sCisgKiBAY29uc3RhbnQKKyAqIEB0eXBlIE51bWJlcgorICovCitIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5IQVZFX0ZVVFVSRV9EQVRBPTM7CisKKy8qKgorICogQ29uc3RhbnQgSFRNTE1lZGlhRWxlbWVudC5IQVZFX0VOT1VHSF9EQVRBPTQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQGNvbnN0YW50CisgKiBAdHlwZSBOdW1iZXIKKyAqLworSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUuSEFWRV9FTk9VR0hfREFUQT00OworCisvKioKKyAqIFByb3BlcnR5IHJlYWR5U3RhdGUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQHR5cGUgTnVtYmVyCisgKiBAbWVtYmVyT2YgSFRNTE1lZGlhRWxlbWVudAorICovCitIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5yZWFkeVN0YXRlPW5ldyBOdW1iZXIoKTsKKworLyoqCisgKiBQcm9wZXJ0eSBzZWVraW5nCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEB0eXBlIEJvb2xlYW4KKyAqIEBtZW1iZXJPZiBIVE1MTWVkaWFFbGVtZW50CisgKi8KK0hUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLnNlZWtpbmc9bmV3IEJvb2xlYW4oKTsKKworLyoqCisgKiBQcm9wZXJ0eSBjdXJyZW50VGltZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMDMyOS9tZWRpYS1lbGVtZW50cy5odG1sCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBIVE1MTWVkaWFFbGVtZW50CisgKi8KK0hUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLmN1cnJlbnRUaW1lPW5ldyBOdW1iZXIoKTsKKworLyoqCisgKiBQcm9wZXJ0eSBpbml0aWFsVGltZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMDMyOS9tZWRpYS1lbGVtZW50cy5odG1sCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBIVE1MTWVkaWFFbGVtZW50CisgKi8gICAgICAgICAKK0hUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLmluaXRpYWxUaW1lPW5ldyBOdW1iZXIoKTsKKworLyoqCisgKiBQcm9wZXJ0eSBkdXJhdGlvbgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMDMyOS9tZWRpYS1lbGVtZW50cy5odG1sCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBIVE1MTWVkaWFFbGVtZW50CisgKi8KK0hUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLmR1cmF0aW9uPW5ldyBOdW1iZXIoKTsKKworLyoqCisgKiBQcm9wZXJ0eSBzdGFydE9mZnNldFRpbWUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQHR5cGUgRGF0ZQorICogQG1lbWJlck9mIEhUTUxNZWRpYUVsZW1lbnQKKyAqLworSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUuc3RhcnRPZmZzZXRUaW1lPW5ldyBEYXRlKCk7CisKKy8qKgorICogUHJvcGVydHkgcGF1c2VkCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEB0eXBlIEJvb2xlYW4KKyAqIEBtZW1iZXJPZiBIVE1MTWVkaWFFbGVtZW50CisgKi8KK0hUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLnBhdXNlZD1uZXcgQm9vbGVhbigpOworCisvKioKKyAqIFByb3BlcnR5IGRlZmF1bHRQbGF5YmFja1JhdGUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQHR5cGUgTnVtYmVyCisgKiBAbWVtYmVyT2YgSFRNTE1lZGlhRWxlbWVudAorICovCitIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5kZWZhdWx0UGxheWJhY2tSYXRlPW5ldyBOdW1iZXIoKTsKKworLyoqCisgKiBQcm9wZXJ0eSBwbGF5YmFja1JhdGUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQHR5cGUgTnVtYmVyCisgKiBAbWVtYmVyT2YgSFRNTE1lZGlhRWxlbWVudAorICovCitIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5wbGF5YmFja1JhdGU9bmV3IE51bWJlcigpOworCisvKioKKyAqIFByb3BlcnR5IHBsYXllZAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMDMyOS9tZWRpYS1lbGVtZW50cy5odG1sCisgKiBAdHlwZSBUaW1lUmFuZ2VzCisgKiBAbWVtYmVyT2YgSFRNTE1lZGlhRWxlbWVudAorICovCitIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5wbGF5ZWQ9bmV3IFRpbWVSYW5nZXMoKTsKKworLyoqCisgKiBQcm9wZXJ0eSBzZWVrYWJsZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMDMyOS9tZWRpYS1lbGVtZW50cy5odG1sCisgKiBAdHlwZSBUaW1lUmFuZ2VzCisgKiBAbWVtYmVyT2YgSFRNTE1lZGlhRWxlbWVudAorICovCitIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5zZWVrYWJsZT1uZXcgVGltZVJhbmdlcygpOworCisvKioKKyAqIFByb3BlcnR5IGVuZGVkCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEB0eXBlIEJvb2xlYW4KKyAqIEBtZW1iZXJPZiBIVE1MTWVkaWFFbGVtZW50CisgKi8KK0hUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLmVuZGVkPW5ldyBCb29sZWFuKCk7CisKKy8qKgorICogUHJvcGVydHkgYXV0b3BsYXkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQHR5cGUgQm9vbGVhbgorICogQG1lbWJlck9mIEhUTUxNZWRpYUVsZW1lbnQKKyAqLworSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUuYXV0b3BsYXk9bmV3IEJvb2xlYW4oKTsKKworLyoqCisgKiBQcm9wZXJ0eSBsb29wCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEB0eXBlIEJvb2xlYW4KKyAqIEBtZW1iZXJPZiBIVE1MTWVkaWFFbGVtZW50CisgKi8KK0hUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLmxvb3A9bmV3IEJvb2xlYW4oKTsKKworLyoqCisgKiBmdW5jdGlvbiBwbGF5KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQG1lbWJlck9mIEhUTUxNZWRpYUVsZW1lbnQKKyAqLworSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUucGxheT1mdW5jdGlvbigpe307CisKKy8qKgorICogZnVuY3Rpb24gcGF1c2UoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMDMyOS9tZWRpYS1lbGVtZW50cy5odG1sCisgKiBAbWVtYmVyT2YgSFRNTE1lZGlhRWxlbWVudAorICovCitIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe307CisKKy8qKgorICogUHJvcGVydHkgY29udHJvbHMKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQHR5cGUgQm9vbGVhbgorICogQG1lbWJlck9mIEhUTUxNZWRpYUVsZW1lbnQKKyAqLworSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUuY29udHJvbHM9bmV3IEJvb2xlYW4oKTsKKworLyoqCisgKiBQcm9wZXJ0eSB2b2x1bWUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQHR5cGUgTnVtYmVyCisgKiBAbWVtYmVyT2YgSFRNTE1lZGlhRWxlbWVudAorICovCitIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS52b2x1bWU9bmV3IE51bWJlcigpOworCisvKioKKyAqIFByb3BlcnR5IG11dGVkCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEB0eXBlIEJvb2xlYW4KKyAqIEBtZW1iZXJPZiBIVE1MTWVkaWFFbGVtZW50CisgKi8KK0hUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLm11dGVkPW5ldyBCb29sZWFuKCk7CisgICAgICAgICAKKy8qKgorICogUHJvcGVydHkgZGVmYXVsdE11dGVkCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEB0eXBlIEJvb2xlYW4KKyAqIEBtZW1iZXJPZiBIVE1MTWVkaWFFbGVtZW50CisgKi8KK0hUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLmRlZmF1bHRNdXRlZD1uZXcgQm9vbGVhbigpOworCisvKioKKyAqIE9iamVjdCBIVE1MQXVkaW9FbGVtZW50CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L3RoZS1hdWRpby1lbGVtZW50Lmh0bWwKKyAqIEBhdWdtZW50cyBIVE1MTWVkaWFFbGVtZW50CisgKiBAY29uc3RydWN0b3IKKyAqIEBwYXJhbSB7U3RyaW5nfSBzcmMKKyAqIEBzZWUgSFRNTE1lZGlhRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MQXVkaW9FbGVtZW50KHNyYyl7fTsKK0hUTUxBdWRpb0VsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxNZWRpYUVsZW1lbnQoKTsKKworLyoqCisgKiBPYmplY3QgSFRNTFZpZGVvRWxlbWVudAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMDMyOS90aGUtYXVkaW8tZWxlbWVudC5odG1sCisgKiBAYXVnbWVudHMgSFRNTE1lZGlhRWxlbWVudAorICogQHNlZSBIVE1MTWVkaWFFbGVtZW50CisgKi8KK2Z1bmN0aW9uIEhUTUxWaWRlb0VsZW1lbnQoKXt9OworSFRNTFZpZGVvRWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTE1lZGlhRWxlbWVudCgpOworCisvKioKKyAqIFByb3BlcnR5IHdpZHRoCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEB0eXBlIE51bWJlcgorICogQG1lbWJlck9mIEhUTUxWaWRlb0VsZW1lbnQKKyAqLworSFRNTFZpZGVvRWxlbWVudC5wcm90b3R5cGUud2lkdGg9bmV3IE51bWJlcigpOworCisvKioKKyAqIFByb3BlcnR5IGhlaWdodAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMDMyOS9tZWRpYS1lbGVtZW50cy5odG1sCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBIVE1MVmlkZW9FbGVtZW50CisgKi8KK0hUTUxWaWRlb0VsZW1lbnQucHJvdG90eXBlLmhlaWdodD1uZXcgTnVtYmVyKCk7CisKKy8qKgorICogUHJvcGVydHkgdmlkZW9XaWR0aAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMDMyOS9tZWRpYS1lbGVtZW50cy5odG1sCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBIVE1MVmlkZW9FbGVtZW50CisgKi8KK0hUTUxWaWRlb0VsZW1lbnQucHJvdG90eXBlLnZpZGVvV2lkdGg9bmV3IE51bWJlcigpOworCisvKioKKyAqIFByb3BlcnR5IHZpZGVvSGVpZ2h0CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEB0eXBlIE51bWJlcgorICogQG1lbWJlck9mIEhUTUxWaWRlb0VsZW1lbnQKKyAqLworSFRNTFZpZGVvRWxlbWVudC5wcm90b3R5cGUudmlkZW9IZWlnaHQ9bmV3IE51bWJlcigpOworCisvKioKKyAqIFByb3BlcnR5IHBvc3RlcgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMDMyOS9tZWRpYS1lbGVtZW50cy5odG1sCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBtZW1iZXJPZiBIVE1MVmlkZW9FbGVtZW50CisgKi8KK0hUTUxWaWRlb0VsZW1lbnQucHJvdG90eXBlLnBvc3Rlcj1uZXcgU3RyaW5nKCk7CisKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS9saWJyYXJpZXMvc3lzdGVtLmpzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2xpYnJhcmllcy9zeXN0ZW0uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA2NmZmYgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS9saWJyYXJpZXMvc3lzdGVtLmpzCkBAIC0wLDAgKzEsMTQ1OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBQbGVhc2Ugc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisqLworCisvKioKKyAgKiBPYmplY3QgT2JqZWN0KCkKKyAgKiBAY29uc3RydWN0b3IKKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworZnVuY3Rpb24gT2JqZWN0KCl7fTsKKyAvKioKKyAgKiBmdW5jdGlvbiB0b1N0cmluZygpIAorICAqIEBtZW1iZXJPZiAgIE9iamVjdAorICAqIEByZXR1cm5zIHtTdHJpbmd9CisgICogQHNlZSAgICAgT2JqZWN0CisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLyAgCitPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKXtyZXR1cm4gIiI7fTsKKyAvKioKKyAgKiBmdW5jdGlvbiB0b0xvY2FsZVN0cmluZygpIAorICAqIEBtZW1iZXJPZiAgIE9iamVjdAorICAqIEByZXR1cm5zIHtTdHJpbmd9CisgICogQHNlZSAgICAgT2JqZWN0CisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLyAgCitPYmplY3QucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nID0gZnVuY3Rpb24oKXtyZXR1cm4gIiI7fTsKKyAvKioKKyAgKiBmdW5jdGlvbiB2YWx1ZU9mKCkgCisgICogQG1lbWJlck9mICAgT2JqZWN0CisgICogQHJldHVybnMge09iamVjdH0KKyAgKiBAc2VlICAgICBPYmplY3QKKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovICAKK09iamVjdC5wcm90b3R5cGUudmFsdWVPZiA9IGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBPYmplY3QoKTt9OworIC8qKgorICAqIGZ1bmN0aW9uIGhhc093blByb3BlcnR5KG5hbWUpIAorICAqIEBtZW1iZXJPZiAgIE9iamVjdAorICAqIEBwYXJhbSAgIHtTdHJpbmd9IG5hbWUKKyAgKiBAcmV0dXJucyB7Qm9vbGVhbn0KKyAgKiBAc2VlICAgICBPYmplY3QKKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovICAKK09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkgPSBmdW5jdGlvbihuYW1lKXtyZXR1cm4gdHJ1ZTt9OworIC8qKgorICAqIGZ1bmN0aW9uIGlzUHJvdG90eXBlT2YobykgCisgICogQG1lbWJlck9mICAgT2JqZWN0CisgICogQHBhcmFtICAge09iamVjdH0gbworICAqIEByZXR1cm5zIHtCb29sZWFufQorICAqIEBzZWUgICAgIE9iamVjdAorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8gIAorT2JqZWN0LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mID0gZnVuY3Rpb24obyl7cmV0dXJuIHRydWU7fTsKKyAvKioKKyAgKiBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShuYW1lKSAKKyAgKiBAbWVtYmVyT2YgICBPYmplY3QKKyAgKiBAcGFyYW0gICB7T2JqZWN0fSBuYW1lCisgICogQHJldHVybnMge0Jvb2xlYW59CisgICogQHNlZSAgICAgT2JqZWN0CisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLyAgCitPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24obmFtZSl7cmV0dXJuIHRydWU7fTsKKy8qKgorICAqIFByb3BlcnR5IGNvbnN0cnVjdG9yCisgICogQHR5cGUgIEZ1bmN0aW9uCisgICogQG1lbWJlck9mIE9iamVjdAorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovIAorT2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IG5ldyBGdW5jdGlvbigpOworCisvKioKKyAgKiBPYmplY3QgU3RyaW5nKCkKKyAgKiBAY29uc3RydWN0b3IKKyAgKiBAZXh0ZW5kcyBPYmplY3QKKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworZnVuY3Rpb24gU3RyaW5nKCl7fQorU3RyaW5nLnByb3RvdHlwZSA9IG5ldyBPYmplY3QoKTsKKy8qKgorICAqIHN0YXRpYyBmdW5jdGlvbiBmcm9tQ2hhckNvZGUoY2hhckNvZGUxLCAuLi4pCisgICogQG1lbWJlck9mICAgU3RyaW5nCisgICogQHBhcmFtIHtOdW1iZXJ9IGNoYXJDb2RlCisgICogQHJldHVybnMge1N0cmluZ30KKyAgKiBAc3RhdGljCisgICogQHNlZSAgICAgU3RyaW5nCisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLyAgCitTdHJpbmcuZnJvbUNoYXJDb2RlID0gZnVuY3Rpb24oY2hhckNvZGUpe3JldHVybiAiIjt9OworLyoqCisgICogUHJvcGVydHkgbGVuZ3RoCisgICogQHR5cGUgICAgTnVtYmVyCisgICogQG1lbWJlck9mICAgU3RyaW5nCisgICogQHNlZSAgICAgU3RyaW5nCisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLyAgCitTdHJpbmcucHJvdG90eXBlLmxlbmd0aCA9IDE7CisgLyoqCisgICogZnVuY3Rpb24gY2hhckF0KHBvc2l0aW9uKSAKKyAgKiBAbWVtYmVyT2YgICBTdHJpbmcKKyAgKiBAcGFyYW0gICB7TnVtYmVyfSBwb3NpdGlvbgorICAqIEByZXR1cm5zIHtTdHJpbmd9CisgICogQHNlZSAgICAgU3RyaW5nCisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLyAgCitTdHJpbmcucHJvdG90eXBlLmNoYXJBdCA9IGZ1bmN0aW9uKHBvc2l0aW9uKXtyZXR1cm4gIiI7fTsKKyAvKioKKyAgKiBmdW5jdGlvbiBjaGFyQ29kZUF0KHBvc2l0aW9uKSAKKyAgKiBAbWVtYmVyT2YgICBTdHJpbmcKKyAgKiBAcGFyYW0gICB7TnVtYmVyfSBwb3NpdGlvbgorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHNlZSAgICAgU3RyaW5nCisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLyAgCitTdHJpbmcucHJvdG90eXBlLmNoYXJDb2RlQXQgPSBmdW5jdGlvbihwb3NpdGlvbil7cmV0dXJuIDA7fTsKKyAvKioKKyAgKiBmdW5jdGlvbiBjb25jYXQodmFsdWUxLCAuLi4pIAorICAqIEBtZW1iZXJPZiAgIFN0cmluZworICAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZQorICAqIEByZXR1cm5zIHtTdHJpbmd9CisgICogQHNlZSAgICAgU3RyaW5nCisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLyAgCitTdHJpbmcucHJvdG90eXBlLmNvbmNhdCA9IGZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gIiI7fTsKKyAvKioKKyAgKiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaFN0cmluZywgc3RhcnRQb3NpdGlvbikgCisgICogQG1lbWJlck9mICAgU3RyaW5nCisgICogQHBhcmFtICAge1N0cmluZ30gc2VhcmNoU3RyaW5nCisgICogQHBhcmFtICAge051bWJlcn0gc3RhcnRQb3NpdGlvbgorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHNlZSAgICAgU3RyaW5nCisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLyAgCitTdHJpbmcucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbihzZWFyY2hTdHJpbmcsIHN0YXJ0UG9zaXRpb24pe3JldHVybiAxO307CisgLyoqCisgICogZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoU3RyaW5nLCBzdGFydFBvc2l0aW9uKSAKKyAgKiBAbWVtYmVyT2YgICBTdHJpbmcKKyAgKiBAcGFyYW0gICB7U3RyaW5nfSBzZWFyY2hTdHJpbmcKKyAgKiBAcGFyYW0gICB7TnVtYmVyfSBzdGFydFBvc2l0aW9uCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAc2VlICAgICBTdHJpbmcKKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovICAKK1N0cmluZy5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbihzZWFyY2hTdHJpbmcsIHN0YXJ0UG9zaXRpb24pe3JldHVybiAxO307CisgLyoqCisgICogZnVuY3Rpb24gbG9jYWxlQ29tcGFyZShvdGhlclN0cmluZykgCisgICogQG1lbWJlck9mICAgU3RyaW5nCisgICogQHBhcmFtICAge1N0cmluZ30gb3RoZXJTdHJpbmcKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBzZWUgICAgIFN0cmluZworICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8gIAorU3RyaW5nLnByb3RvdHlwZS5sb2NhbGVDb21wYXJlID0gZnVuY3Rpb24ob3RoZXJTdHJpbmcpe3JldHVybiAwO307CisgLyoqCisgICogZnVuY3Rpb24gbWF0Y2gocmVnZXhwKSAKKyAgKiBAbWVtYmVyT2YgICBTdHJpbmcKKyAgKiBAcGFyYW0gICB7UmVnRXhwfSByZWdleHAKKyAgKiBAcmV0dXJucyB7QXJyYXl9CisgICogQHNlZSAgICAgU3RyaW5nCisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLyAgCitTdHJpbmcucHJvdG90eXBlLm1hdGNoID0gZnVuY3Rpb24ocmVnZXhwKXtyZXR1cm4gW107fTsKKyAvKioKKyAgKiBmdW5jdGlvbiByZXBsYWNlKHJlZ2V4cCwgcmVwbGFjZVZhbHVlKSAKKyAgKiBAbWVtYmVyT2YgICBTdHJpbmcKKyAgKiBAcGFyYW0gICB7UmVnRXhwfSByZWdleHAKKyAgKiBAcGFyYW0gICB7U3RyaW5nfSByZXBsYWNlVmFsdWUKKyAgKiBAcmV0dXJucyB7U3RyaW5nfQorICAqIEBzZWUgICAgIFN0cmluZworICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8gIAorU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlID0gZnVuY3Rpb24ocmVnZXhwLCByZXBsYWNlVmFsdWUpe3JldHVybiAiIjt9OworIC8qKgorICAqIGZ1bmN0aW9uIHNlYXJjaChyZWdleHApIAorICAqIEBtZW1iZXJPZiAgIFN0cmluZworICAqIEBwYXJhbSAgIHtSZWdFeHB9IHJlZ2V4cAorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHNlZSAgICAgU3RyaW5nCisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLyAgCitTdHJpbmcucHJvdG90eXBlLnNlYXJjaCA9IGZ1bmN0aW9uKHJlZ2V4cCl7cmV0dXJuIDE7fTsKKyAvKioKKyAgKiBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSAKKyAgKiBAbWVtYmVyT2YgICBTdHJpbmcKKyAgKiBAcGFyYW0gICB7TnVtYmVyfSBzdGFydAorICAqIEBwYXJhbSAgIHtOdW1iZXJ9IGVuZAorICAqIEByZXR1cm5zIHtTdHJpbmd9CisgICogQHNlZSAgICAgU3RyaW5nCisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLyAgCitTdHJpbmcucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24oc3RhcnQsIGVuZCl7cmV0dXJuICIiO307CisgLyoqCisgICogZnVuY3Rpb24gc3BsaXQoc2VwYXJhdG9yLCBsaW1pdCkgCisgICogQG1lbWJlck9mICAgU3RyaW5nCisgICogQHBhcmFtICAge1N0cmluZ30gc2VwYXJhdG9yCisgICogQHBhcmFtICAge051bWJlcn0gbGltaXQKKyAgKiBAcmV0dXJucyB7QXJyYXl9CisgICogQHNlZSAgICAgU3RyaW5nCisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLyAgCitTdHJpbmcucHJvdG90eXBlLnNwbGl0ID0gZnVuY3Rpb24oc2VwYXJhdG9yLCBsaW1pdCl7cmV0dXJuIFtdO307CisgLyoqCisgICogZnVuY3Rpb24gc3Vic3RyaW5nKHN0YXJ0LCBlbmQpIAorICAqIEBtZW1iZXJPZiAgIFN0cmluZworICAqIEBwYXJhbSAgIHtOdW1iZXJ9IHN0YXJ0CisgICogQHBhcmFtICAge051bWJlcn0gZW5kCisgICogQHJldHVybnMge1N0cmluZ30KKyAgKiBAc2VlICAgICBTdHJpbmcKKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovICAKK1N0cmluZy5wcm90b3R5cGUuc3Vic3RyaW5nID0gZnVuY3Rpb24oc3RhcnQsIGVuZCl7cmV0dXJuICIiO307CisgLyoqCisgICogZnVuY3Rpb24gdG9Mb3dlckNhc2UoKSAKKyAgKiBAbWVtYmVyT2YgICBTdHJpbmcKKyAgKiBAcmV0dXJucyB7U3RyaW5nfQorICAqIEBzZWUgICAgIFN0cmluZworICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8gIAorU3RyaW5nLnByb3RvdHlwZS50b0xvd2VyQ2FzZSA9IGZ1bmN0aW9uKCl7cmV0dXJuICIiO307CisgLyoqCisgICogZnVuY3Rpb24gdG9Mb2NhbGVMb3dlckNhc2UoKSAKKyAgKiBAbWVtYmVyT2YgICBTdHJpbmcKKyAgKiBAcmV0dXJucyB7U3RyaW5nfQorICAqIEBzZWUgICAgIFN0cmluZworICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8gIAorU3RyaW5nLnByb3RvdHlwZS50b0xvY2FsZUxvd2VyQ2FzZSA9IGZ1bmN0aW9uKCl7cmV0dXJuICIiO307CisgLyoqCisgICogZnVuY3Rpb24gdG9VcHBlckNhc2UoKSAKKyAgKiBAbWVtYmVyT2YgICBTdHJpbmcKKyAgKiBAcmV0dXJucyB7U3RyaW5nfQorICAqIEBzZWUgICAgIFN0cmluZworICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8gIAorU3RyaW5nLnByb3RvdHlwZS50b1VwcGVyQ2FzZT0gZnVuY3Rpb24gKCl7cmV0dXJuICIiO307CisgLyoqCisgICogZnVuY3Rpb24gdG9Mb2NhbGVVcHBlckNhc2UoKSAKKyAgKiBAbWVtYmVyT2YgICBTdHJpbmcKKyAgKiBAcmV0dXJucyB7U3RyaW5nfQorICAqIEBzZWUgICAgIFN0cmluZworICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8gIAorU3RyaW5nLnByb3RvdHlwZS50b0xvY2FsZVVwcGVyQ2FzZSA9IGZ1bmN0aW9uKCl7cmV0dXJuICIiO307CisKKy8qKgorICAqIE9iamVjdCBOdW1iZXIoKQorICAqIEBjb25zdHJ1Y3RvcgorICAqIEBleHRlbmRzIE9iamVjdAorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitmdW5jdGlvbiBOdW1iZXIoKXt9CitOdW1iZXIucHJvdG90eXBlID0gbmV3IE9iamVjdCgpOworLyoqCisgICogcHJvcGVydHkgTUlOX1ZBTFVFCisgICogQHR5cGUgTnVtYmVyCisgICogQG1lbWJlck9mIE51bWJlcgorICAqIEBzdGF0aWMKKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworTnVtYmVyLk1JTl9WQUxVRSA9IDA7CisvKioKKyAgKiBwcm9wZXJ0eSBNQVhfVkFMVUUKKyAgKiBAdHlwZSBOdW1iZXIKKyAgKiBAbWVtYmVyT2YgTnVtYmVyCisgICogQHN0YXRpYworICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitOdW1iZXIuTUFYX1ZBTFVFID0gMCA7CisvKioKKyAgKiBwcm9wZXJ0eSBOYU4KKyAgKiBAdHlwZSBOdW1iZXIKKyAgKiBAbWVtYmVyT2YgTnVtYmVyCisgICogQHN0YXRpYworICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitOdW1iZXIuTmFOID0gMDsKKy8qKgorICAqIHByb3BlcnR5IE5FR0FUSVZFX0lORklOSVRZCisgICogQHR5cGUgTnVtYmVyCisgICogQG1lbWJlck9mIE51bWJlcgorICAqIEBzdGF0aWMKKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gCisgKi8KK051bWJlci5ORUdBVElWRV9JTkZJTklUWSA9IDA7CisvKioKKyAgKiBwcm9wZXJ0eSBQT1NJVElWRV9JTkZJTklUWQorICAqIEB0eXBlIE51bWJlcgorICAqIEBtZW1iZXJPZiBOdW1iZXIKKyAgKiBAc3RhdGljCisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uIAorICovCitOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgPSAwOworLyoqCisgICogZnVuY3Rpb24gdG9GaXhlZChmcmFjdGlvbkRpZ2l0cykKKyAgKiBAbWVtYmVyT2YgTnVtYmVyCisgICogQHBhcmFtIHtOdW1iZXJ9IGZyYWN0aW9uRGlnaXRzCisgICogQHJldHVybnMge1N0cmluZ30KKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworTnVtYmVyLnByb3RvdHlwZS50b0ZpeGVkID0gZnVuY3Rpb24oZnJhY3Rpb25EaWdpdHMpe3JldHVybiAiIjt9OworLyoqCisgKiBmdW5jdGlvbiB0b0V4cG9uZW50aWFsKGZyYWN0aW9uRGlnaXRzKQorICogQG1lbWJlck9mIE51bWJlcgorICogQHBhcmFtIHtOdW1iZXJ9IGZyYWN0aW9uRGlnaXRzCisgKiBAcmV0dXJucyB7U3RyaW5nfQorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyovCitOdW1iZXIucHJvdG90eXBlLnRvRXhwb25lbnRpYWwgPSBmdW5jdGlvbihmcmFjdGlvbkRpZ2l0cyl7cmV0dXJuICIiO307CisvKioKKyAqIGZ1bmN0aW9uIHRvUHJlY2lzaW9uKHByZWNpc2lvbikKKyAqIEBtZW1iZXJPZiBOdW1iZXIKKyAqIEBwYXJhbSB7TnVtYmVyfSBmcmFjdGlvbkRpZ2l0cworICogQHJldHVybnMge1N0cmluZ30KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisqLworTnVtYmVyLnByb3RvdHlwZS50b1ByZWNpc2lvbiA9IGZ1bmN0aW9uKGZyYWN0aW9uRGlnaXRzKXtyZXR1cm4gIiI7fTsKKworLyoqCisgKiBPYmplY3QgQm9vbGVhbigpCisgKiBAY29uc3RydWN0b3IKKyAqIEBleHRlbmRzIE9iamVjdAorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gCisqLworZnVuY3Rpb24gQm9vbGVhbigpe307CitCb29sZWFuLnByb3RvdHlwZSA9IG5ldyBPYmplY3QoKTsKKworLyoqCisgICogT2JqZWN0IEFycmF5KCkKKyAgKiBAY29uc3RydWN0b3IKKyAgKiBAZXh0ZW5kcyBPYmplY3QKKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworZnVuY3Rpb24gQXJyYXkoKXt9OworQXJyYXkucHJvdG90eXBlID0gbmV3IE9iamVjdCgpOworLyoqCisgICogUHJvcGVydHkgbGVuZ3RoCisgICogQHR5cGUgICAgTnVtYmVyCisgICogQG1lbWJlck9mICAgQXJyYXkKKyAgKiBAc2VlICAgICBBcnJheQorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8gIAorQXJyYXkucHJvdG90eXBlLmxlbmd0aCA9IDE7CisvKioKKyAgKiBmdW5jdGlvbiBjb25jYXQoYXJncykKKyAgKiBAcGFyYW0ge0FycmF5fSBhcmdzCisgICogQHJldHVybnMge0FycmF5fQorICAqIEBtZW1iZXJPZiAgIEFycmF5CisgICogQHNlZSAgICAgQXJyYXkKKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovICAKK0FycmF5LnByb3RvdHlwZS5jb25jYXQgPSBmdW5jdGlvbihhcmdzKXtyZXR1cm4gW107fTsKKy8qKgorICAqIGZ1bmN0aW9uIGpvaW4oc2VwZXJhdG9yKQorICAqIEBwYXJhbSB7U3RyaW5nfSBzZXBlcmF0b3IKKyAgKiBAcmV0dXJucyB7QXJyYXl9CisgICogQG1lbWJlck9mICAgQXJyYXkKKyAgKiBAc2VlICAgICBBcnJheQorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8gIAorQXJyYXkucHJvdG90eXBlLmpvaW4gPSBmdW5jdGlvbihzZXBlcmF0b3Ipe3JldHVybiBbXTt9OworLyoqCisgICogZnVuY3Rpb24gcG9wKCkKKyAgKiBAcmV0dXJucyB7T2JqZWN0fQorICAqIEBtZW1iZXJPZiAgIEFycmF5CisgICogQHNlZSAgICAgQXJyYXkKKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyAqLyAgCitBcnJheS5wcm90b3R5cGUucG9wID0gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE9iamVjdCgpO307CisvKioKKyAgKiBmdW5jdGlvbiBwdXNoKGFyZ3MpCisgICogQHBhcmFtIHtBcnJheX0gYXJncworICAqIEBtZW1iZXJPZiAgIEFycmF5CisgICogQHNlZSAgICAgQXJyYXkKKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgIAorICovICAKK0FycmF5LnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24oYXJncyl7fTsKKy8qKgorICAqIGZ1bmN0aW9uIHJldmVyc2UoKQorICAqIEByZXR1cm5zIHtBcnJheX0KKyAgKiBAbWVtYmVyT2YgICBBcnJheQorICAqIEBzZWUgICAgIEFycmF5CisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLyAgCitBcnJheS5wcm90b3R5cGUucmV2ZXJzZSA9IGZ1bmN0aW9uKCl7cmV0dXJuIFtdO307CisvKioKKyAgKiBmdW5jdGlvbiBzaGlmdCgpCisgICogQHJldHVybnMge09iamVjdH0KKyAgKiBAbWVtYmVyT2YgICBBcnJheQorICAqIEBzZWUgICAgIEFycmF5CisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgIAorICovICAKK0FycmF5LnByb3RvdHlwZS5zaGlmdCA9IGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBPYmplY3QoKTt9OworLyoqCisgICogZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkKKyAgKiBAcGFyYW0ge051bWJlcn0gc3RhcnQKKyAgKiBAcGFyYW0ge051bWJlcn0gZW5kCisgICogQHJldHVybnMge0FycmF5fQorICAqIEBtZW1iZXJPZiAgIEFycmF5CisgICogQHNlZSAgICAgQXJyYXkKKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgIAorICovICAKK0FycmF5LnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpe3JldHVybiBbXTt9OworLyoqCisgICogZnVuY3Rpb24gc29ydChmdW5jdCkKKyAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jdAorICAqIEByZXR1cm5zIHtBcnJheX0KKyAgKiBAbWVtYmVyT2YgICBBcnJheQorICAqIEBzZWUgICAgIEFycmF5CisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLyAgCitBcnJheS5wcm90b3R5cGUuc29ydCA9IGZ1bmN0aW9uKGZ1bmN0KXtyZXR1cm4gW107fTsKKy8qKgorICAqIGZ1bmN0aW9uIHNwbGljZShzdGFydCwgZGVsZXRlY291bnQsIGl0ZW1zKQorICAqIEBwYXJhbSB7TnVtYmVyfSBzdGFydAorICAqIEBwYXJhbSB7TnVtYmVyfSBkZWxldGVjb3VudAorICAqIEBwYXJhbSB7QXJyYXl9IGl0ZW1zCisgICogQHJldHVybnMge0FycmF5fQorICAqIEBtZW1iZXJPZiAgIEFycmF5CisgICogQHNlZSAgICAgQXJyYXkKKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgCisgKi8gIAorQXJyYXkucHJvdG90eXBlLnNwbGljZSA9IGZ1bmN0aW9uKHN0YXJ0LCBkZWxldGVjb3VudCwgaXRlbXMpe3JldHVybiBbXTt9OworLyoqCisgICogZnVuY3Rpb24gdW5zaGlmdChpdGVtcykKKyAgKiBAcGFyYW0ge09iamVjdH0gdmFsdWVzCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAbWVtYmVyT2YgICBBcnJheQorICAqIEBzZWUgICAgIEFycmF5CisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAKKyAqLyAgCitBcnJheS5wcm90b3R5cGUudW5zaGlmdCA9IGZ1bmN0aW9uKHZhbHVlcyl7cmV0dXJuIDE7fTsKKworLyoqCisgICogT2JqZWN0IEZ1bmN0aW9uKCkKKyAgKiBAY29uc3RydWN0b3IKKyAgKiBAZXh0ZW5kcyBPYmplY3QKKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworZnVuY3Rpb24gRnVuY3Rpb24oKXt9OworRnVuY3Rpb24ucHJvdG90eXBlID0gbmV3IE9iamVjdCgpOworLyoqCisgKiBmdW5jdGlvbiBhcHBseSAodGhpc09iamVjdCwgYXJnQXJyYXkpCisgKiBAcGFyYW0ge09iamVjdH0gdGhpc09iamVjdAorICogQHBhcmFtIHtBcnJheX0gYXJnQXJyYXkKKyAqIEByZXR1cm5zIHtPYmplY3R9CisgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8gCitGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkgPSBmdW5jdGlvbih0aGlzQXJnLCBhcmdBcnJheSl7cmV0dXJuIG5ldyBPYmplY3QoKTt9OworLyoqCisgICogZnVuY3Rpb24gY2FsbCAodGhpc09iamVjdCwgYXJncykKKyAgKiBAcGFyYW0ge09iamVjdH0gdGhpc09iamVjdAorICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdzCisgICogQHJldHVybnMge09iamVjdH0KKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyAqLyAKK0Z1bmN0aW9uLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24odGhpc09iamVjdCwgYXJncyl7cmV0dXJuIG5ldyBPYmplY3QoKTt9OworLyoqCisgICogcHJvcGVydHkgbGVuZ3RoCisgICogQHR5cGUgICAgTnVtYmVyCisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8gCitGdW5jdGlvbi5wcm90b3R5cGUubGVuZ3RoID0gMDsKKworLyoqCisgICogT2JqZWN0IERhdGUocykKKyAgKiBAY29uc3RydWN0b3IKKyAgKiBAcGFyYW0ge1N0cmluZ30gcworICAqIEBleHRlbmRzIE9iamVjdAorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAKKyAqLworZnVuY3Rpb24gRGF0ZShzKXt9OworRGF0ZS5wcm90b3R5cGUgPSBuZXcgT2JqZWN0KCk7CisvKioKKyAqIGZ1bmN0aW9uIFVUQyhob3VyLCBtaW4sIHNlYywgbXMpCisgKiBAbWVtYmVyT2YgRGF0ZQorICogQHBhcmFtIHtOdW1iZXJ9IGhvdXIKKyAqIEBwYXJhbSB7TnVtYmVyfSBtaW4KKyAqIEBwYXJhbSB7TnVtYmVyfSBzZWMKKyAqIEBwYXJhbSB7TnVtYmVyfSBtcyAgCisgKiBAcmV0dXJucyB7TnVtYmVyfQorICogQHN0YXRpYworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyovCitEYXRlLlVUQyA9IGZ1bmN0aW9uKGhvdXIsIG1pbiwgc2VjLCBtcyl7cmV0dXJuIDA7fTsKKy8qKgorICAqIGZ1bmN0aW9uIHBhcnNlKHN0cmluZykKKyAgKiBAbWVtYmVyT2YgRGF0ZQorICAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBzdGF0aWMKKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworRGF0ZS5wYXJzZSA9IGZ1bmN0aW9uKHN0cmluZyl7cmV0dXJuIDA7fTsKKy8qKgorICAqIGZ1bmN0aW9uIHRvRGF0ZVN0cmluZygpCisgICogQG1lbWJlck9mIERhdGUKKyAgKiBAcmV0dXJucyB7U3RyaW5nfQorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitEYXRlLnByb3RvdHlwZS50b0RhdGVTdHJpbmcgPSBmdW5jdGlvbigpe3JldHVybiAiIjt9OworLyoqCisgICogZnVuY3Rpb24gdG9UaW1lU3RyaW5nKCkKKyAgKiBAbWVtYmVyT2YgRGF0ZQorICAqIEByZXR1cm5zIHtTdHJpbmd9CisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8KK0RhdGUucHJvdG90eXBlLnRvVGltZVN0cmluZyA9IGZ1bmN0aW9uKCl7cmV0dXJuICIiO307CisvKioKKyAgKiBmdW5jdGlvbiB0b0xvY2FsZVN0cmluZygpCisgICogQG1lbWJlck9mIERhdGUKKyAgKiBAcmV0dXJucyB7U3RyaW5nfQorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAKKyAqLworRGF0ZS5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcgPSBmdW5jdGlvbigpe3JldHVybiAiIjt9OworLyoqCisgICogZnVuY3Rpb24gdG9Mb2NhbGVEYXRlU3RyaW5nKCkKKyAgKiBAbWVtYmVyT2YgRGF0ZQorICAqIEByZXR1cm5zIHtTdHJpbmd9CisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8KK0RhdGUucHJvdG90eXBlLnRvTG9jYWxlRGF0ZVN0cmluZyA9IGZ1bmN0aW9uKCl7cmV0dXJuICIiO307CisvKioKKyAgKiBmdW5jdGlvbiB0b0xvY2FsZVRpbWVTdHJpbmcoKQorICAqIEBtZW1iZXJPZiBEYXRlCisgICogQHJldHVybnMge1N0cmluZ30KKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworRGF0ZS5wcm90b3R5cGUudG9Mb2NhbGVUaW1lU3RyaW5nID0gZnVuY3Rpb24oKXtyZXR1cm4gIiI7fTsKKy8qKgorICAqIGZ1bmN0aW9uIHZhbHVlT2YoKQorICAqIEBtZW1iZXJPZiBEYXRlCisgICogQHJldHVybnMge09iamVjdH0KKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworRGF0ZS5wcm90b3R5cGUudmFsdWVPZiA9IGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBPYmplY3QoKTt9OworLyoqCisgICogZnVuY3Rpb24gZ2V0RnVsbFllYXIoKQorICAqIEBtZW1iZXJPZiBEYXRlCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworRGF0ZS5wcm90b3R5cGUuZ2V0RnVsbFllYXIgPSBmdW5jdGlvbigpe3JldHVybiAwO307CisvKioKKyAgKiBmdW5jdGlvbiBnZXRUaW1lKCkKKyAgKiBAbWVtYmVyT2YgRGF0ZQorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAKKyAqLworRGF0ZS5wcm90b3R5cGUuZ2V0VGltZSA9IGZ1bmN0aW9uKCl7cmV0dXJuIDA7fTsKKy8qKgorICAqIGZ1bmN0aW9uIGdldFVUQ0Z1bGxZZWFyKCkKKyAgKiBAbWVtYmVyT2YgRGF0ZQorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uIAorICovCitEYXRlLnByb3RvdHlwZS5nZXRVVENGdWxsWWVhciA9IGZ1bmN0aW9uKCl7cmV0dXJuIDA7fTsKKy8qKgorICAqIGZ1bmN0aW9uIGdldE1vbnRoKCkKKyAgKiBAbWVtYmVyT2YgRGF0ZQorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8KK0RhdGUucHJvdG90eXBlLmdldE1vbnRoID0gZnVuY3Rpb24oKXtyZXR1cm4gMDt9OworLyoqCisgICogZnVuY3Rpb24gZ2V0VVRDTW9udGgoKQorICAqIEBtZW1iZXJPZiBEYXRlCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworRGF0ZS5wcm90b3R5cGUuZ2V0VVRDTW9udGggPSBmdW5jdGlvbigpe3JldHVybiAwO307CisvKioKKyAgKiBmdW5jdGlvbiBnZXREYXRlKCkKKyAgKiBAbWVtYmVyT2YgRGF0ZQorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8KK0RhdGUucHJvdG90eXBlLmdldERhdGUgPSBmdW5jdGlvbigpe3JldHVybiAwO307CisvKioKKyAgKiBmdW5jdGlvbiBnZXRVVENEYXRlKCkKKyAgKiBAbWVtYmVyT2YgRGF0ZQorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8KK0RhdGUucHJvdG90eXBlLmdldFVUQ0RhdGUgPSBmdW5jdGlvbigpe3JldHVybiAwO307CisvKioKKyAgKiBmdW5jdGlvbiBnZXREYXkoKQorICAqIEBtZW1iZXJPZiBEYXRlCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gCisgKi8KK0RhdGUucHJvdG90eXBlLmdldERheSA9IGZ1bmN0aW9uKCl7cmV0dXJuIDA7fTsKKy8qKgorICAqIGZ1bmN0aW9uIGdldFVUQ0RheSgpCisgICogQG1lbWJlck9mIERhdGUKKyAgKiBAdHlwZSBOdW1iZXIKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICAgICAKKyAqLworRGF0ZS5wcm90b3R5cGUuZ2V0VVRDRGF5PWZ1bmN0aW9uKCl7cmV0dXJuIDA7fTsKKy8qKgorICAqIGZ1bmN0aW9uIGdldEhvdXJzKCkKKyAgKiBAbWVtYmVyT2YgRGF0ZQorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uIAorICovCitEYXRlLnByb3RvdHlwZS5nZXRIb3VycyA9IGZ1bmN0aW9uKCl7cmV0dXJuIDA7fTsKKy8qKgorICAqIGZ1bmN0aW9uIGdldFVUQ0hvdXJzKCkKKyAgKiBAbWVtYmVyT2YgRGF0ZQorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8KK0RhdGUucHJvdG90eXBlLmdldFVUQ0hvdXJzID0gZnVuY3Rpb24oKXtyZXR1cm4gMDt9OworLyoqCisgICogZnVuY3Rpb24gZ2V0TWludXRlcygpCisgICogQG1lbWJlck9mIERhdGUKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitEYXRlLnByb3RvdHlwZS5nZXRNaW51dGVzID0gZnVuY3Rpb24oKXtyZXR1cm4gMDt9OworLyoqCisgICogZnVuY3Rpb24gZ2V0VVRDTWludXRlcygpCisgICogQG1lbWJlck9mIERhdGUKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitEYXRlLnByb3RvdHlwZS5nZXRVVENNaW51dGVzID0gZnVuY3Rpb24oKXtyZXR1cm4gMDt9OworLyoqCisgICogZnVuY3Rpb24gZ2V0U2Vjb25kcygpCisgICogQG1lbWJlck9mIERhdGUKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitEYXRlLnByb3RvdHlwZS5nZXRTZWNvbmRzID0gZnVuY3Rpb24oKXtyZXR1cm4gMDt9OworLyoqCisgICogZnVuY3Rpb24gZ2V0VVRDU2Vjb25kcygpCisgICogQG1lbWJlck9mIERhdGUKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitEYXRlLnByb3RvdHlwZS5nZXRVVENTZWNvbmRzID0gZnVuY3Rpb24oKXtyZXR1cm4gMDt9OworLyoqCisgICogZnVuY3Rpb24gZ2V0TWlsbGlzZWNvbmRzKCkKKyAgKiBAbWVtYmVyT2YgRGF0ZQorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8KK0RhdGUucHJvdG90eXBlLmdldE1pbGxpc2Vjb25kcyA9IGZ1bmN0aW9uKCl7cmV0dXJuIDA7fTsKKy8qKgorICAqIGZ1bmN0aW9uIGdldFVUQ01pbGxpc2Vjb25kcygpCisgICogQG1lbWJlck9mIERhdGUKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitEYXRlLnByb3RvdHlwZS5nZXRVVENNaWxsaXNlY29uZHMgPSBmdW5jdGlvbigpe3JldHVybiAwO307CisvKioKKyAgKiBmdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldCgpCisgICogQG1lbWJlck9mIERhdGUKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitEYXRlLnByb3RvdHlwZS5nZXRUaW1lem9uZU9mZnNldCA9IGZ1bmN0aW9uKCl7cmV0dXJuIDA7fTsKKy8qKgorICAqIGZ1bmN0aW9uIHNldFRpbWUodmFsdWUpCisgICogQG1lbWJlck9mIERhdGUKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZQorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitEYXRlLnByb3RvdHlwZS5zZXRUaW1lID0gZnVuY3Rpb24odmFsdWUpe3JldHVybiAwO307CisKKy8qKgorICAqIGZ1bmN0aW9uIHNldE1pbGxpc2Vjb25kcyh2YWx1ZSkKKyAgKiBAbWVtYmVyT2YgRGF0ZQorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHBhcmFtIHtOdW1iZXJ9IHZhbHVlCisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8KK0RhdGUucHJvdG90eXBlLnNldE1pbGxpc2Vjb25kcyA9IGZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gMDt9OworLyoqCisgICogZnVuY3Rpb24gc2V0VVRDTWlsbGlzZWNvbmRzKG1zKQorICAqIEBtZW1iZXJPZiBEYXRlCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAcGFyYW0ge051bWJlcn0gbXMKKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworRGF0ZS5wcm90b3R5cGUuc2V0VVRDTWlsbGlzZWNvbmRzID0gZnVuY3Rpb24obXMpe3JldHVybiAwO307CisvKioKKyAgKiBmdW5jdGlvbiBzZXRTZWNvbmRzKHNlYyxtcykKKyAgKiBAbWVtYmVyT2YgRGF0ZQorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHBhcmFtIHtOdW1iZXJ9IHNlYworICAqIEBwYXJhbSB7TnVtYmVyfSBtcworICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitEYXRlLnByb3RvdHlwZS5zZXRTZWNvbmRzID0gZnVuY3Rpb24oc2VjLG1zKXtyZXR1cm4gMDt9OworLyoqCisgICogZnVuY3Rpb24gc2V0VVRDU2Vjb25kcyhzZWMsbXMpCisgICogQG1lbWJlck9mIERhdGUKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBwYXJhbSB7TnVtYmVyfSBzZWMKKyAgKiBAcGFyYW0ge051bWJlcn0gbXMKKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworRGF0ZS5wcm90b3R5cGUuc2V0VVRDU2Vjb25kcz1mdW5jdGlvbihzZWMsbXMpe3JldHVybiAwO307CisvKioKKyAgKiBmdW5jdGlvbiBzZXRNaW51dGVzKG1pbixzZWMsbXMpCisgICogQG1lbWJlck9mIERhdGUKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBwYXJhbSB7TnVtYmVyfSBtaW4KKyAgKiBAcGFyYW0ge051bWJlcn0gc2VjCisgICogQHBhcmFtIHtOdW1iZXJ9IG1zCisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8KK0RhdGUucHJvdG90eXBlLnNldE1pbnV0ZXM9ZnVuY3Rpb24obWluLHNlYyxtcyl7cmV0dXJuIDA7fTsKKy8qKgorICAqIGZ1bmN0aW9uIHNldFVUQ01pbnV0ZShtaW4sc2VjLG1zKQorICAqIEBtZW1iZXJPZiBEYXRlCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAcGFyYW0ge051bWJlcn0gbWluCisgICogQHBhcmFtIHtOdW1iZXJ9IHNlYworICAqIEBwYXJhbSB7TnVtYmVyfSBtcworICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitEYXRlLnByb3RvdHlwZS5zZXRVVENNaW51dGUgPSBmdW5jdGlvbihtaW4sc2VjLG1zKXtyZXR1cm4gMDt9OworLyoqCisgICogZnVuY3Rpb24gc2V0SG91cnMoaG91ciwgbWluLHNlYyxtcykKKyAgKiBAbWVtYmVyT2YgRGF0ZQorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHBhcmFtIHtOdW1iZXJ9IGhvdXIKKyAgKiBAcGFyYW0ge051bWJlcn0gbWluCisgICogQHBhcmFtIHtOdW1iZXJ9IHNlYworICAqIEBwYXJhbSB7TnVtYmVyfSBtcworICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitEYXRlLnByb3RvdHlwZS5zZXRIb3VycyA9IGZ1bmN0aW9uKGhvdXIsbWluLHNlYyxtcyl7cmV0dXJuIDA7fTsKKy8qKgorICAqIGZ1bmN0aW9uIHNldFVUQ0hvdXJzKGhvdXIsIG1pbixzZWMsbXMpCisgICogQG1lbWJlck9mIERhdGUKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBwYXJhbSB7TnVtYmVyfSBob3VyCisgICogQHBhcmFtIHtOdW1iZXJ9IG1pbgorICAqIEBwYXJhbSB7TnVtYmVyfSBzZWMKKyAgKiBAcGFyYW0ge051bWJlcn0gbXMKKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworRGF0ZS5wcm90b3R5cGUuc2V0VVRDSG91cnMgPSBmdW5jdGlvbihob3VyLG1pbixzZWMsbXMpe3JldHVybiAwO307CisKKy8qKgorICAqIGZ1bmN0aW9uIHNldERhdGUoZGF0ZSkKKyAgKiBAbWVtYmVyT2YgRGF0ZQorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHBhcmFtIHtOdW1iZXJ9IGRhdGUKKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworRGF0ZS5wcm90b3R5cGUuc2V0RGF0ZSA9IGZ1bmN0aW9uKGRhdGUpe3JldHVybiAwO307CisKKy8qKgorICAqIGZ1bmN0aW9uIHNldFVUQ0RhdGUoZGF0ZSkKKyAgKiBAbWVtYmVyT2YgRGF0ZQorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHBhcmFtIHtOdW1iZXJ9IGRhdGUKKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworRGF0ZS5wcm90b3R5cGUuc2V0VVRDRGF0ZSA9IGZ1bmN0aW9uKGRhdGUpe3JldHVybiAwO307CisKKy8qKgorICAqIGZ1bmN0aW9uIHNldE1vbnRoKG1vbnRoLGRhdGUpCisgICogQG1lbWJlck9mIERhdGUKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBwYXJhbSB7TnVtYmVyfSBkYXRlCisgICogQHBhcmFtIHtOdW1iZXJ9IG1vbnRoCisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uIAorICovCitEYXRlLnByb3RvdHlwZS5zZXRNb250aCA9IGZ1bmN0aW9uKG1vbnRoLGRhdGUpe3JldHVybiAxO307CisvKioKKyAgKiBmdW5jdGlvbiBzZXRVVENNb250aChtb250aCxkYXRlKQorICAqIEBtZW1iZXJPZiBEYXRlCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAcGFyYW0ge051bWJlcn0gZGF0ZQorICAqIEBwYXJhbSB7TnVtYmVyfSBtb250aAorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitEYXRlLnByb3RvdHlwZS5zZXRVVENNb250aCA9IGZ1bmN0aW9uKG1vbnRoLGRhdGUpe3JldHVybiAxO307CisvKioKKyAgKiBmdW5jdGlvbiBzZXRGdWxsWWVhcihtb250aCxkYXRlKQorICAqIEBtZW1iZXJPZiBEYXRlCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAcGFyYW0ge051bWJlcn0gZGF0ZQorICAqIEBwYXJhbSB7TnVtYmVyfSBtb250aAorICAqIEBwYXJhbSB7TnVtYmVyfSB5ZWFyCisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uIAorICovCitEYXRlLnByb3RvdHlwZS5zZXRGdWxsWWVhciA9IGZ1bmN0aW9uKHllYXIsIG1vbnRoLGRhdGUpe3JldHVybiAwO307CisvKioKKyAgKiBmdW5jdGlvbiBzZXRVVENGdWxsWWVhcihtb250aCxkYXRlKQorICAqIEBtZW1iZXJPZiBEYXRlCisgICogQHJldHVybnMge0RhdGV9CisgICogQHBhcmFtIHtOdW1iZXJ9IGRhdGUKKyAgKiBAcGFyYW0ge051bWJlcn0gbW9udGgKKyAgKiBAcGFyYW0ge051bWJlcn0geWVhcgorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitEYXRlLnByb3RvdHlwZS5zZXRVVENGdWxsWWVhciA9IGZ1bmN0aW9uKHllYXIsIG1vbnRoLGRhdGUpe307CisvKioKKyAqIGZ1bmN0aW9uIHRvVVRDU3RyaW5nKCkKKyAqIEBtZW1iZXJPZiBEYXRlCisgKiBAcmV0dXJucyB7U3RyaW5nfQorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyovCitEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZyA9IGZ1bmN0aW9uKCl7cmV0dXJuICIiO307CisKKy8qKgorICAqIFByb3BlcnR5IE5hTgorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAKKyAqLwordmFyIE5hTj0wOworLyoqCisgICogUHJvcGVydHkgSW5maW5pdHkKKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgCisgKi8KK3ZhciBJbmZpbml0eT0wOworLyoqCisgICogZnVuY3Rpb24gZXZhbChzKQorICAqIEBwYXJhbSB7U3RyaW5nfSBzCisgICogQHR5cGUgT2JqZWN0CisgICogQHJldHVybnMge09iamVjdH0KKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAgCisgKi8KK2Z1bmN0aW9uIGV2YWwocyl7cmV0dXJuIG5ldyBPYmplY3QoKTt9OworCisvL0BHSU5POiBCdWcgMTk3OTg3IChUZW1wIEZpeCkKKy8qKgorICAqIFByb3BlcnR5IGRlYnVnZ2VyCisgICogQGRlc2NyaXB0aW9uIERlYnVnZ2VyIGtleXdvcmQKKyAqLwordmFyIGRlYnVnZ2VyPW51bGw7CisKKy8qKgorICogUHJvcGVydHkgdW5kZWZpbmVkCisgKiBAZGVzY3JpcHRpb24gdW5kZWZpbmVkCisqLwordmFyIHVuZGVmaW5lZD1udWxsOworCisvKioKKyAgKiBmdW5jdGlvbiBwYXJzZUludChzLHJhZGl4KQorICAqIEBwYXJhbSB7U3RyaW5nfSBzCisgICogQHBhcmFtIHtOdW1iZXJ9IHJhZGl4CisgICogQHR5cGUgTnVtYmVyCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyAqLworZnVuY3Rpb24gcGFyc2VJbnQocyxyYWRpeCl7cmV0dXJuIDA7fTsKKy8qKgorICAqIGZ1bmN0aW9uIHBhcnNlRmxvYXQocykKKyAgKiBAcGFyYW0ge1N0cmluZ30gcworICAqIEB0eXBlIE51bWJlcgorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAKKyAqLworZnVuY3Rpb24gcGFyc2VGbG9hdChzKXtyZXR1cm4gMDt9OworLyoqCisgKiBmdW5jdGlvbiBlc2NhcGUocykKKyAqIEBwYXJhbSB7U3RyaW5nfSBzCisgKiBAdHlwZSBTdHJpbmcKKyAqIEByZXR1cm5zIHtTdHJpbmd9CisgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgCisqLworZnVuY3Rpb24gZXNjYXBlKHMpe3JldHVybiAiIjt9OworLyoqCisgKiBmdW5jdGlvbiB1bmVzY2FwZShzKQorICogQHBhcmFtIHtTdHJpbmd9IHMKKyAqIEB0eXBlIFN0cmluZworICogQHJldHVybnMge1N0cmluZ30KKyAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAKKyovCitmdW5jdGlvbiB1bmVzY2FwZShzKXtyZXR1cm4gIiI7fTsKKy8qKgorICAqIGZ1bmN0aW9uIGlzTmFOKG51bWJlcikKKyAgKiBAcGFyYW0ge1N0cmluZ30gbnVtYmVyCisgICogQHR5cGUgQm9vbGVhbgorICAqIEByZXR1cm5zIHtCb29sZWFufQorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAKKyAqLworZnVuY3Rpb24gaXNOYU4obnVtYmVyKXtyZXR1cm4gZmFsc2U7fTsKKy8qKgorICAqIGZ1bmN0aW9uIGlzRmluaXRlKG51bWJlcikKKyAgKiBAcGFyYW0ge1N0cmluZ30gbnVtYmVyCisgICogQHR5cGUgQm9vbGVhbgorICAqIEByZXR1cm5zIHtCb29sZWFufQorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovCitmdW5jdGlvbiBpc0Zpbml0ZShudW1iZXIpe3JldHVybiBmYWxzZTt9OworLyoqCisgKiBmdW5jdGlvbiBkZWNvZGVVUkkoZW5jb2RlZFVSSSkKKyAqIEBwYXJhbSB7U3RyaW5nfSBlbmNvZGVkVVJJCisgKiBAdHlwZSBTdHJpbmcKKyAqIEByZXR1cm5zIHtTdHJpbmd9CisgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAKKyovCitmdW5jdGlvbiBkZWNvZGVVUkkoZW5jb2RlZFVSSSl7cmV0dXJuICIiO307CisvKioKKyAqIEBwYXJhbSB7U3RyaW5nfSB1cmlDb21wb25lbnQKKyAqIEB0eXBlIFN0cmluZworICogQHJldHVybnMge1N0cmluZ30KKyAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gIAorKi8KK2Z1bmN0aW9uIGRlY29kZVVSSUNvbXBvbmVudCh1cmlDb21wb25lbnQpe3JldHVybiAiIjt9OworLyoqCisgKiBmdW5jdGlvbiBlbmNvZGVVUklDb21wb25lbnQodXJpQ29tcG9uZW50KQorICogQHBhcmFtIHtTdHJpbmd9IHVyaUNvbXBvbmVudAorICogQHR5cGUgU3RyaW5nCisgKiBAcmV0dXJucyB7U3RyaW5nfQorICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyovCitmdW5jdGlvbiBlbmNvZGVVUklDb21wb25lbnQodXJpQ29tcG9uZW50KXtyZXR1cm4gIiI7fTsKKworLyoqCisgKiBmdW5jdGlvbiBlbmNvZGVVUklDb21wb25lbnQoVVJJKQorICogQHBhcmFtIHtTdHJpbmd9IFVSSQorICogQHR5cGUgU3RyaW5nCisgKiBAcmV0dXJucyB7U3RyaW5nfQorICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyovCitmdW5jdGlvbiBlbmNvZGVVUkkoVVJJKXtyZXR1cm4gIiI7fTsKKworLyoqCisgICogT2JqZWN0IE1hdGgoXHMpCisgICogQHN1cGVyIE9iamVjdAorICAqIEBjb25zdHJ1Y3RvcgorICAqIEBtZW1iZXJPZiBNYXRoCisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgICAgIAorICovCitmdW5jdGlvbiBNYXRoKCl7fTsKK01hdGgucHJvdG90eXBlPW5ldyBPYmplY3QoKTsKKy8qKgorICAqIFByb3BlcnR5IEUKKyAgKiBAbWVtYmVyT2YgTWF0aAorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovCitNYXRoLkU9MDsKKy8qKgorICAqIFByb3BlcnR5IExOMTAKKyAgKiBAbWVtYmVyT2YgTWF0aAorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovCitNYXRoLkxOMTA9MDsKKy8qKgorICAqIFByb3BlcnR5IExOMgorICAqIEBtZW1iZXJPZiBNYXRoCisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworTWF0aC5MTjI9MDsKKy8qKgorICAqIFByb3BlcnR5IExPRzJFCisgICogQG1lbWJlck9mIE1hdGgKKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyAqLworTWF0aC5MT0cyRT0wOworLyoqCisgICogUHJvcGVydHkgTE9HMTBFCisgICogQG1lbWJlck9mIE1hdGgKKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAKKyAqLworTWF0aC5MT0cxMEU9MDsKKy8qKgorICAqIFByb3BlcnR5IFBJCisgICogQG1lbWJlck9mIE1hdGgKKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgCisgKi8KK01hdGguUEk9MDsKKy8qKgorICAqIFByb3BlcnR5IFNRUlQxXzIKKyAgKiBAbWVtYmVyT2YgTWF0aAorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovCitNYXRoLlNRUlQxXzI9MDsKKy8qKgorICAqIFByb3BlcnR5IFNRUlQyCisgICogQG1lbWJlck9mIE1hdGgKKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAKKyAqLworTWF0aC5TUVJUMj0wOworLyoqCisgICogZnVuY3Rpb24gYWJzKHgpCisgICogQG1lbWJlck9mIE1hdGgKKyAgKiBAcGFyYW0ge051bWJlcn0geAorICAqIEB0eXBlIE51bWJlcgorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgIAorICovCitNYXRoLmFicz1mdW5jdGlvbih4KXtyZXR1cm4gMDt9OworLyoqCisgICogZnVuY3Rpb24gYWNvcyh4KQorICAqIEBtZW1iZXJPZiBNYXRoCisgICogQHBhcmFtIHtOdW1iZXJ9IHgKKyAgKiBAdHlwZSBOdW1iZXIKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8KK01hdGguYWNvcz1mdW5jdGlvbih4KXtyZXR1cm4gMDt9OworLyoqCisgICogZnVuY3Rpb24gYXNpbih4KQorICAqIEBtZW1iZXJPZiBNYXRoCisgICogQHBhcmFtIHtOdW1iZXJ9IHgKKyAgKiBAdHlwZSBOdW1iZXIKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAKKyAqLworTWF0aC5hc2luPWZ1bmN0aW9uKHgpe3JldHVybiAwO307CisvKioKKyAgKiBmdW5jdGlvbiBhdGFuKHgpCisgICogQG1lbWJlck9mIE1hdGgKKyAgKiBAcGFyYW0ge051bWJlcn0geAorICAqIEB0eXBlIE51bWJlcgorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworTWF0aC5hdGFuPWZ1bmN0aW9uKHgpe3JldHVybiAwO307CisvKioKKyAgKiBmdW5jdGlvbiBhdGFuMih4LHkpCisgICogQG1lbWJlck9mIE1hdGgKKyAgKiBAcGFyYW0ge051bWJlcn0geAorICAqIEBwYXJhbSB7TnVtYmVyfSB5CisgICogQHR5cGUgTnVtYmVyCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgCisgKi8KK01hdGguYXRhbjI9ZnVuY3Rpb24oeCx5KXtyZXR1cm4gMDt9OworLyoqCisgICogZnVuY3Rpb24gY2VpbCh4KQorICAqIEBtZW1iZXJPZiBNYXRoCisgICogQHBhcmFtIHtOdW1iZXJ9IHgKKyAgKiBAdHlwZSBOdW1iZXIKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovCitNYXRoLmNlaWw9ZnVuY3Rpb24oeCl7cmV0dXJuIDA7fTsKKy8qKgorICAqIGZ1bmN0aW9uIGNvcyh4KQorICAqIEBtZW1iZXJPZiBNYXRoCisgICogQHBhcmFtIHtOdW1iZXJ9IHgKKyAgKiBAdHlwZSBOdW1iZXIKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAKKyAqLworTWF0aC5jb3M9ZnVuY3Rpb24oeCl7cmV0dXJuIDA7fTsKKy8qKgorICAqIGZ1bmN0aW9uIGV4cCh4KQorICAqIEBtZW1iZXJPZiBNYXRoCisgICogQHBhcmFtIHtOdW1iZXJ9IHgKKyAgKiBAdHlwZSBOdW1iZXIKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uIAorICovCitNYXRoLmV4cD1mdW5jdGlvbih4KXtyZXR1cm4gMDt9OworLyoqCisgICogZnVuY3Rpb24gZmxvb3IoeCkKKyAgKiBAbWVtYmVyT2YgTWF0aAorICAqIEBwYXJhbSB7TnVtYmVyfSB4CisgICogQHR5cGUgTnVtYmVyCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgCisgKi8KK01hdGguZmxvb3I9ZnVuY3Rpb24oeCl7cmV0dXJuIDA7fTsKKy8qKgorICAqIGZ1bmN0aW9uIGxvZyh4KQorICAqIEBtZW1iZXJPZiBNYXRoCisgICogQHBhcmFtIHtOdW1iZXJ9IHgKKyAgKiBAdHlwZSBOdW1iZXIKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovCitNYXRoLmxvZz1mdW5jdGlvbih4KXtyZXR1cm4gMDt9OworLyoqCisgICogZnVuY3Rpb24gbWF4KGFyZykKKyAgKiBAbWVtYmVyT2YgTWF0aAorICAqIEBwYXJhbSB7TnVtYmVyfSBhcmdzCisgICogQHR5cGUgTnVtYmVyCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgCisgKi8KK01hdGgubWF4PWZ1bmN0aW9uKGFyZ3Mpe3JldHVybiAwO307CisvKioKKyAgKiBmdW5jdGlvbiBtaW4oYXJnKQorICAqIEBtZW1iZXJPZiBNYXRoCisgICogQHBhcmFtIHtOdW1iZXJ9IGFyZ3MKKyAgKiBAdHlwZSBOdW1iZXIKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovCitNYXRoLm1pbj1mdW5jdGlvbihhcmdzKXtyZXR1cm4gMDt9OworLyoqCisgICogZnVuY3Rpb24gcG93KHgseSkKKyAgKiBAbWVtYmVyT2YgTWF0aAorICAqIEBwYXJhbSB7TnVtYmVyfSB4CisgICogQHBhcmFtIHtOdW1iZXJ9IHkKKyAgKiBAdHlwZSBOdW1iZXIKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovCitNYXRoLnBvdz1mdW5jdGlvbih4LHkpe3JldHVybiAwO307CisvKioKKyAgKiBmdW5jdGlvbiBwb3coKQorICAqIEBtZW1iZXJPZiBNYXRoCisgICogQHR5cGUgTnVtYmVyCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAgCisgKi8KK01hdGgucmFuZG9tPWZ1bmN0aW9uKCl7cmV0dXJuIDA7fTsKKy8qKgorICAqIGZ1bmN0aW9uIHJvdW5kKHgpCisgICogQG1lbWJlck9mIE1hdGgKKyAgKiBAcGFyYW0ge051bWJlcn0geAorICAqIEB0eXBlIE51bWJlcgorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAKKyAqLworTWF0aC5yb3VuZD1mdW5jdGlvbih4KXtyZXR1cm4gMDt9OworLyoqCisgICogZnVuY3Rpb24gc2luKHgpCisgICogQG1lbWJlck9mIE1hdGgKKyAgKiBAcGFyYW0ge051bWJlcn0geAorICAqIEB0eXBlIE51bWJlcgorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8KK01hdGguc2luPWZ1bmN0aW9uKHgpe3JldHVybiAwO307CisvKioKKyAgKiBmdW5jdGlvbiBzcXJ0KHgpCisgICogQG1lbWJlck9mIE1hdGgKKyAgKiBAcGFyYW0ge051bWJlcn0geAorICAqIEB0eXBlIE51bWJlcgorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgIAorICovCitNYXRoLnNxcnQ9ZnVuY3Rpb24oeCl7cmV0dXJuIDA7fTsKKy8qKgorICAqIGZ1bmN0aW9uIHRhbih4KQorICAqIEBtZW1iZXJPZiBNYXRoCisgICogQHBhcmFtIHtOdW1iZXJ9IHgKKyAgKiBAdHlwZSBOdW1iZXIKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovCitNYXRoLnRhbj1mdW5jdGlvbih4KXtyZXR1cm4gMDt9OworLyoqCisgICogT2JqZWN0IFJlZ0V4cCgpCisgICogQHN1cGVyIE9iamVjdAorICAqIEBjb25zdHJ1Y3RvcgorICAqIEBtZW1iZXJPZiBSZWdFeHAKKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworZnVuY3Rpb24gUmVnRXhwKCl7fTsKK1JlZ0V4cC5wcm90b3R5cGU9bmV3IE9iamVjdCgpOworLyoqCisgICogZnVuY3Rpb24gZXhlYyhzdHJpbmcpCisgICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZworICAqIEByZXR1cm5zIHtBcnJheX0KKyAgKiBAdHlwZSBBcnJheQorICAqIEBtZW1iZXJPZiBSZWdFeHAKKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworUmVnRXhwLnByb3RvdHlwZS5leGVjPWZ1bmN0aW9uKHN0cmluZyl7cmV0dXJuIFtdO307CisvKioKKyAgKiBmdW5jdGlvbiB0ZXN0KHN0cmluZykKKyAgKiBAcGFyYW0ge1N0cmluZ30gc3RyaW5nCisgICogQHJldHVybnMge0Jvb2xlYW59CisgICogQHR5cGUgQm9vbGVhbgorICAqIEBtZW1iZXJPZiBSZWdFeHAKKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gIAorICovCitSZWdFeHAucHJvdG90eXBlLnRlc3Q9ZnVuY3Rpb24oc3RyaW5nKXtyZXR1cm4gZmFsc2U7fTsKKy8qKgorICAqIHByb3BlcnR5IHNvdXJjZQorICAqIEB0eXBlIFN0cmluZworICAqIEBtZW1iZXJPZiBSZWdFeHAKKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gCisgKi8KK1JlZ0V4cC5wcm90b3R5cGUuc291cmNlPSIiOworLyoqCisgICogcHJvcGVydHkgZ2xvYmFsCisgICogQHR5cGUgQm9vbGVhbgorICAqIEBtZW1iZXJPZiBSZWdFeHAKKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworUmVnRXhwLnByb3RvdHlwZS5nbG9iYWw9ZmFsc2U7CisKKy8qKgorICAqIHByb3BlcnR5IGlnbm9yZUNhc2UKKyAgKiBAdHlwZSBCb29sZWFuCisgICogQG1lbWJlck9mIFJlZ0V4cAorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAKKyAqLworUmVnRXhwLnByb3RvdHlwZS5pZ25vcmVDYXNlPWZhbHNlOworLyoqCisgICogcHJvcGVydHkgbXVsdGlsaW5lCisgICogQHR5cGUgQm9vbGVhbgorICAqIEBtZW1iZXJPZiBSZWdFeHAKKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworUmVnRXhwLnByb3RvdHlwZS5tdWx0aWxpbmU9ZmFsc2U7CisvKioKKyAgKiBwcm9wZXJ0eSBsYXN0SW5kZXgKKyAgKiBAdHlwZSBOdW1iZXIKKyAgKiBAbWVtYmVyT2YgUmVnRXhwCisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8KK1JlZ0V4cC5wcm90b3R5cGUubGFzdEluZGV4PTA7CisvKioKKyAgKiBPYmplY3QgRXJyb3IobWVzc2FnZSkKKyAgKiBAc3VwZXIgT2JqZWN0CisgICogQGNvbnN0cnVjdG9yCisgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UKKyAgKiBAbWVtYmVyT2YgRXJyb3IKKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gCisgKi8KK2Z1bmN0aW9uIEVycm9yKG1lc3NhZ2Upe307CitFcnJvci5wcm90b3R5cGU9bmV3IE9iamVjdCgpOworLyoqCisgICogcHJvcGVydHkgbmFtZQorICAqIEB0eXBlIFN0cmluZworICAqIEBtZW1iZXJPZiBFcnJvcgorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAKKyAqLworRXJyb3IucHJvdG90eXBlLm5hbWU9IiI7CisvKioKKyAgKiBwcm9wZXJ0eSBtZXNzYWdlCisgICogQHR5cGUgU3RyaW5nCisgICogQG1lbWJlck9mIEVycm9yCisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uIAorICovCitFcnJvci5wcm90b3R5cGUubWVzc2FnZT0iIjsKKy8qKgorICAqIE9iamVjdCBFdmFsRXJyb3IoKQorICAqIEBzdXBlciBFcnJvcgorICAqIEBjb25zdHJ1Y3RvcgorICAqCisgICogQG1lbWJlck9mIEV2YWxFcnJvcgorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitmdW5jdGlvbiBFdmFsRXJyb3IoKXt9OworRXZhbEVycm9yLnByb3RvdHlwZT1uZXcgRXJyb3IoIiIpOworLyoqCisgICogT2JqZWN0IFJhbmdlRXJyb3IoKQorICAqIEBzdXBlciBFcnJvcgorICAqIEBjb25zdHJ1Y3RvcgorICAqCisgICogQG1lbWJlck9mIFJhbmdlRXJyb3IKKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworZnVuY3Rpb24gUmFuZ2VFcnJvcigpe307CitSYW5nZUVycm9yLnByb3RvdHlwZT1uZXcgRXJyb3IoIiIpOworLyoqCisgICogT2JqZWN0IFJlZmVyZW5jZUVycm9yKCkKKyAgKiBAc3VwZXIgRXJyb3IKKyAgKiBAY29uc3RydWN0b3IKKyAgKgorICAqIEBtZW1iZXJPZiBSZWZlcmVuY2VFcnJvcgorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitmdW5jdGlvbiBSZWZlcmVuY2VFcnJvcigpe307CitSZWZlcmVuY2VFcnJvci5wcm90b3R5cGU9bmV3IEVycm9yKCIiKTsKKy8qKgorICAqIE9iamVjdCBTeW50YXhFcnJvcigpCisgICogQHN1cGVyIEVycm9yCisgICogQGNvbnN0cnVjdG9yCisgICoKKyAgKiBAbWVtYmVyT2YgU3ludGF4RXJyb3IKKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworZnVuY3Rpb24gU3ludGF4RXJyb3IoKXt9OworU3ludGF4RXJyb3IucHJvdG90eXBlPW5ldyBFcnJvcigiIik7CisvKioKKyAgKiBPYmplY3QgVHlwZUVycm9yKCkKKyAgKiBAc3VwZXIgRXJyb3IKKyAgKiBAY29uc3RydWN0b3IKKyAgKgorICAqIEBtZW1iZXJPZiBUeXBlRXJyb3IKKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworZnVuY3Rpb24gVHlwZUVycm9yKCl7fTsKK1R5cGVFcnJvci5wcm90b3R5cGU9bmV3IEVycm9yKCIiKTsKKy8qKgorICAqIE9iamVjdCBVUklFcnJvcigpCisgICogQHN1cGVyIEVycm9yCisgICogQGNvbnN0cnVjdG9yCisgICoKKyAgKiBAbWVtYmVyT2YgVVJJRXJyb3IKKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworZnVuY3Rpb24gVVJJRXJyb3IoKXt9OworVVJJRXJyb3IucHJvdG90eXBlPW5ldyBFcnJvcigiIik7CisKKy8vc3VwcG9ydCBmb3IgZGVidWdnZXIga2V5d29yZAordmFyIGRlYnVnZ2VyID0gbnVsbDsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUvbGlicmFyaWVzL3hoci5qcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS9saWJyYXJpZXMveGhyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNmMwMTEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUvbGlicmFyaWVzL3hoci5qcwpAQCAtMCwwICsxLDEwNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEJhc2VkIG9uIGluZm9ybWF0aW9uIGZyb20gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvRW4vWE1MSHR0cFJlcXVlc3QKKyAqIGFuZCBodHRwOi8vbXNkbjIubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNTMzMDYyLmFzcHgKKyAqKi8KKworLyoqCisqIGZ1bmN0aW9uIGNyZWF0ZVJlcXVlc3QKKyogQHR5cGUgWE1MSHR0cFJlcXVlc3QKKyogQG1lbWJlck9mIFdpbmRvdworKi8KK1dpbmRvdy5wcm90b3R5cGUuY3JlYXRlUmVxdWVzdD0gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7fTsKKy8qKgorKiBPYmplY3QgWE1MSHR0cFJlcXVlc3QKKyogQHR5cGUgY29uc3RydWN0b3IKKyovCitYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGU9bmV3IE9iamVjdCgpOworZnVuY3Rpb24gWE1MSHR0cFJlcXVlc3QoKXt9OworCisvKioKKyAqIGZ1bmN0aW9uIG9ucmVhZHlzdGF0ZWNoYW5nZQorICogQG1lbWJlck9mIFhNTEh0dHBSZXF1ZXN0CisgKi8KK1hNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXt9OworLyoqCisgKiBwcm9wZXJ0eSByZWFkeVN0YXRlCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBYTUxIdHRwUmVxdWVzdAorICovCitYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUucmVhZHlTdGF0ZT0wOworLyoqCisgKiBwcm9wZXJ0eSByZXNwb25zZVRleHQKKyAqIEB0eXBlIFN0cmluZworICogQG1lbWJlck9mIFhNTEh0dHBSZXF1ZXN0CisgKi8KK1hNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5yZXNwb25zZVRleHQ9IiI7CisvKioKKyAqIHByb3BlcnR5IHJlc3BvbnNlWE1MCisgKiBAdHlwZSBEb2N1bWVudAorICogQG1lbWJlck9mIFhNTEh0dHBSZXF1ZXN0CisgKi8KK1hNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5yZXNwb25zZVhNTD1uZXcgRG9jdW1lbnQoKTsKKy8qKgorICogcHJvcGVydHkgc3RhdHVzCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBYTUxIdHRwUmVxdWVzdAorICovCitYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUuc3RhdHVzPTA7CisvKioKKyAqIHByb3BlcnR5IHN0YXR1c1RleHQKKyAqIEB0eXBlIFN0cmluZworICogQG1lbWJlck9mIFhNTEh0dHBSZXF1ZXN0CisgKi8KK1hNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5zdGF0dXNUZXh0PSIiOworLyoqCisgKiBmdW5jdGlvbiBhYm9ydCgpCisgKiBAbWVtYmVyT2YgWE1MSHR0cFJlcXVlc3QKKyAqLworWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLmFib3J0PWZ1bmN0aW9uKCl7fTsKKy8qKgorKiBmdW5jdGlvbiBnZXRBbGxSZXNwb25zZUhlYWRlcnMoKQorKiBAdHlwZSBTdHJpbmcKKyogQG1lbWJlck9mIFhNTEh0dHBSZXF1ZXN0CisqLworWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLmdldEFsbFJlc3BvbnNlSGVhZGVycz1mdW5jdGlvbigpe3JldHVybiAiIjt9OworLyoqCisqIGZ1bmN0aW9uIG9wZW4obWV0aG9kLCB1cmwsIGFzeW5jLCB1c2VybmFtZSwgcGFzc3dvcmQpCisqIEBwYXJhbSB7U3RyaW5nfSBtZXRob2QKKyogQHBhcmFtIHtTdHJpbmd9IHVybAorKiBAcGFyYW0ge0Jvb2xlYW59IG9wdGlvbmFsIGFzeW5jCisqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25hbCB1c2VybmFtZQorKiBAcGFyYW0ge1N0cmluZ30gb3B0aW9uYWwgcGFzc3dvcmQKKyogQG1lbWJlck9mIFhNTEh0dHBSZXF1ZXN0CisqLworWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLm9wZW49ZnVuY3Rpb24obWV0aG9kLCB1cmwsIGFzeW5jLCB1c2VybmFtZSwgcGFzc3dvcmQpe307CisvKioKKyogZnVuY3Rpb24gc2VuZChib2R5KQorKiBAcGFyYW0ge09iamVjdH0gYm9keQorKiBAbWVtYmVyT2YgWE1MSHR0cFJlcXVlc3QKKyovCitYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUuc2VuZD1mdW5jdGlvbihib2R5KXt9OworLyoqCisqIGZ1bmN0aW9uIHNldFJlcXVlc3RIZWFkZXIoaGVhZGVyLHZhbHVlKQorKiBAcGFyYW0ge1N0cmluZ30gaGVhZGVyCisqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZQorKiBAbWVtYmVyT2YgWE1MSHR0cFJlcXVlc3QKKyovCitYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUuc2V0UmVxdWVzdEhlYWRlcj1mdW5jdGlvbihoZWFkZXIsdmFsdWUpe307CisvKioKKyogZnVuY3Rpb24gZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkKKyogQHBhcmFtIHtTdHJpbmd9IGhlYWRlcgorKiBAdHlwZSBTdHJpbmcKKyogQG1lbWJlck9mIFhNTEh0dHBSZXF1ZXN0CisqLworWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLmdldFJlc3BvbnNlSGVhZGVyPWZ1bmN0aW9uKGhlYWRlcil7cmV0dXJuICIiO307CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUvdmFyaWFibGVzQW5kQ29udGFpbmVycy5kYXQgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUvdmFyaWFibGVzQW5kQ29udGFpbmVycy5kYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIwMDY2YQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS92YXJpYWJsZXNBbmRDb250YWluZXJzLmRhdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LnVpL09wZW5UeXBlSGlzdG9yeS54bWwgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LnVpL09wZW5UeXBlSGlzdG9yeS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRlZTNjYgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQudWkvT3BlblR5cGVIaXN0b3J5LnhtbApAQCAtMCwwICsxLDIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPHR5cGVJbmZvSGlzdHJveS8+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LnVpL1F1YWxpZmllZFR5cGVOYW1lSGlzdG9yeS54bWwgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LnVpL1F1YWxpZmllZFR5cGVOYW1lSGlzdG9yeS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUzOTBmNQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQudWkvUXVhbGlmaWVkVHlwZU5hbWVIaXN0b3J5LnhtbApAQCAtMCwwICsxLDIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPHF1YWxpZmllZFR5cGVOYW1lSGlzdHJveS8+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LnVpL2RpYWxvZ19zZXR0aW5ncy54bWwgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LnVpL2RpYWxvZ19zZXR0aW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZWI3YgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQudWkvZGlhbG9nX3NldHRpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8c2VjdGlvbiBuYW1lPSJXb3JrYmVuY2giPgorCTxzZWN0aW9uIG5hbWU9IkphdmFFbGVtZW50U2VhcmNoQWN0aW9ucyI+CisJPC9zZWN0aW9uPgorPC9zZWN0aW9uPgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS9qc3NlYXJjaC8xMjQ2MjA3NjU5LmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS9qc3NlYXJjaC8xMjQ2MjA3NjU5LmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMDE3M2EKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlL2pzc2VhcmNoLzEyNDYyMDc2NTkuaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS9qc3NlYXJjaC8yNDU0MjczNTguaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlL2pzc2VhcmNoLzI0NTQyNzM1OC5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjAxNzNhCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS9qc3NlYXJjaC8yNDU0MjczNTguaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS9qc3NlYXJjaC8yNTMwMTYxODU4LmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS9qc3NlYXJjaC8yNTMwMTYxODU4LmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhZmM5OWUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlL2pzc2VhcmNoLzI1MzAxNjE4NTguaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS9qc3NlYXJjaC8zNTY1MTkwNjAuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlL2pzc2VhcmNoLzM1NjUxOTA2MC5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGY3ODczCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS9qc3NlYXJjaC8zNTY1MTkwNjAuaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS9qc3NlYXJjaC83MDA4NzUzOTguaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlL2pzc2VhcmNoLzcwMDg3NTM5OC5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjA4Y2NlCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS9qc3NlYXJjaC83MDA4NzUzOTguaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUvdGFzay10YWdzLnByb3BlcnRpZXMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS90YXNrLXRhZ3MucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjA2YzI3Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUvdGFzay10YWdzLnByb3BlcnRpZXMKQEAgLTAsMCArMSwzIEBACisjCisjVHVlIFNlcCAyOCAxNzo1MDoxOSBDRVNUIDIwMjEKK3Rhc2stdGFnLXByb2plY3RzLWFscmVhZHktc2Nhbm5lZD1HbGVtbUNsaWVudCx0ZXN0cyxHbGVtbVNlcnZpY2VzLHV0aWxzLEpzb25UcmF2ZXJzZSx3Zm9ybVNlcnZpY2VzLHdmb3JtU2VydmljZUphcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpL2RpYWxvZ19zZXR0aW5ncy54bWwgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5zc2UudWkvZGlhbG9nX3NldHRpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2ZhZTI1Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpL2RpYWxvZ19zZXR0aW5ncy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHNlY3Rpb24gbmFtZT0iV29ya2JlbmNoIj4KKwk8c2VjdGlvbiBuYW1lPSJjb250ZW50YXNzaXN0c2l6ZSI+CisJPC9zZWN0aW9uPgorPC9zZWN0aW9uPgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi9kZXAuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uL2RlcC5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTUyZWFlCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi9kZXAuaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvZmF2b3JpdGVzLndzaWwgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9mYXZvcml0ZXMud3NpbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDQyN2U1Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvZmF2b3JpdGVzLndzaWwKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGluc3BlY3Rpb24geG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDEvMTAvaW5zcGVjdGlvbi8iCit4bWxuczp3c2lsd3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwMS8xMC9pbnNwZWN0aW9uL3dzZGwvIgoreG1sbnM6d3NpbHVkZGk9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDEvMTAvaW5zcGVjdGlvbi91ZGRpLyIKK3htbG5zOnVkZGk9InVybjp1ZGRpLW9yZzphcGkiPgorPC9pbnNwZWN0aW9uPgorCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC53cy51aS9kaWFsb2dfc2V0dGluZ3MueG1sIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3Qud3MudWkvZGlhbG9nX3NldHRpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2EwYjc3Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3Qud3MudWkvZGlhbG9nX3NldHRpbmdzLnhtbApAQCAtMCwwICsxLDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8c2VjdGlvbiBuYW1lPSJXb3JrYmVuY2giPgorPC9zZWN0aW9uPgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUvZGVmYXVsdF9jYXRhbG9nLnhtbCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlL2RlZmF1bHRfY2F0YWxvZy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdmYWExNgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlL2RlZmF1bHRfY2F0YWxvZy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KKyAgPG5leHRDYXRhbG9nIGNhdGFsb2c9InVzZXJfY2F0YWxvZy54bWwiIGlkPSJ1c2VyX2NhdGFsb2ciLz4KKyAgPG5leHRDYXRhbG9nIGNhdGFsb2c9InN5c3RlbV9jYXRhbG9nLnhtbCIgaWQ9InN5c3RlbV9jYXRhbG9nIi8+Cis8L2NhdGFsb2c+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS9zeXN0ZW1fY2F0YWxvZy54bWwgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS9zeXN0ZW1fY2F0YWxvZy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDllNTI2MQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlL3N5c3RlbV9jYXRhbG9nLnhtbApAQCAtMCwwICsxLDE3NiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyI+CisgIDxzeXN0ZW0gc3lzdGVtSWQ9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL21hdmVuLXY0XzBfMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UubTJlLm1vZGVsLmVkaXRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXIhL3hzZC9tYXZlbi12NF8wXzAueHNkIi8+CisgIDxzeXN0ZW0gc3lzdGVtSWQ9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UubTJlLm1vZGVsLmVkaXRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXIhL3hzZC9tYXZlbi12NF8wXzAueHNkIi8+CisgIDxzeXN0ZW0gc3lzdGVtSWQ9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9zZXR0aW5ncy0xLjAuMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UubTJlLm1vZGVsLmVkaXRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXIhL3hzZC9zZXR0aW5ncy12MV8wXzAueHNkIi8+CisgIDxzeXN0ZW0gc3lzdGVtSWQ9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9wcm9maWxlcy0xLjAuMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UubTJlLm1vZGVsLmVkaXRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXIhL3hzZC9wcm9maWxlcy12MV8wXzAueHNkIi8+CisgIDxzeXN0ZW0gc3lzdGVtSWQ9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9hcmNoZXR5cGUtMS4wLjAueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5tb2RlbC5lZGl0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyIS94c2QvYXJjaGV0eXBlLTEuMC4wLnhzZCIvPgorICA8c3lzdGVtIHN5c3RlbUlkPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvYXJjaGV0eXBlLWNhdGFsb2ctMS4wLjAueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5tb2RlbC5lZGl0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyIS94c2QvYXJjaGV0eXBlLWNhdGFsb2ctMS4wLjAueHNkIi8+CisgIDxzeXN0ZW0gc3lzdGVtSWQ9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9hcmNoZXR5cGUtZGVzY3JpcHRvci0xLjAuMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UubTJlLm1vZGVsLmVkaXRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXIhL3hzZC9hcmNoZXR5cGUtZGVzY3JpcHRvci0xLjAuMC54c2QiLz4KKyAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS53c3Quc3RhbmRhcmQuc2NoZW1hc18xLjAuODAwLnYyMDE3MTEyMDE3MzIuamFyIS9kdGRzL3dtbDExLmR0ZCIvPgorICA8cHVibGljIHB1YmxpY0lkPSItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS53c3Quc3RhbmRhcmQuc2NoZW1hc18xLjAuODAwLnYyMDE3MTEyMDE3MzIuamFyIS9kdGRzL3hodG1sMS1zdHJpY3QuZHRkIiB3ZWJVUkw9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiLz4KKyAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LnN0YW5kYXJkLnNjaGVtYXNfMS4wLjgwMC52MjAxNzExMjAxNzMyLmphciEvZHRkcy94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCIgd2ViVVJMPSJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIi8+CisgIDxwdWJsaWMgcHVibGljSWQ9Ii0vL1czQy8vRFREIFhIVE1MIDEuMCBGcmFtZXNldC8vRU4iIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LnN0YW5kYXJkLnNjaGVtYXNfMS4wLjgwMC52MjAxNzExMjAxNzMyLmphciEvZHRkcy94aHRtbDEtZnJhbWVzZXQuZHRkIiB3ZWJVUkw9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLWZyYW1lc2V0LmR0ZCIvPgorICA8cHVibGljIHB1YmxpY0lkPSItLy9XM0MvL0RURCBYSFRNTCBCYXNpYyAxLjAvL0VOIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMC44MDAudjIwMTcxMTIwMTczMi5qYXIhL2R0ZHMveGh0bWwtYmFzaWMxMC1mLmR0ZCIgd2ViVVJMPSJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1iYXNpYy94aHRtbC1iYXNpYzEwLmR0ZCIvPgorICA8cHVibGljIHB1YmxpY0lkPSItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMC44MDAudjIwMTcxMTIwMTczMi5qYXIhL2R0ZHMveGh0bWwxMS1mbGF0LmR0ZCIgd2ViVVJMPSJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZCIvPgorICA8cHVibGljIHB1YmxpY0lkPSItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMC44MDAudjIwMTcxMTIwMTczMi5qYXIhL2R0ZHMveGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQiIHdlYlVSTD0iaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3hodG1sLW1vYmlsZTEwLmR0ZCIvPgorICA8cHVibGljIHB1YmxpY0lkPSItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjMvL0VOIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMC44MDAudjIwMTcxMTIwMTczMi5qYXIhL2R0ZHMvd21sMTMuZHRkIiB3ZWJVUkw9Imh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWwxMy5kdGQiLz4KKyAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vVzNDLy9EVEQgSFRNTCA0LjAxIEZyYW1lc2V0Ly9FTiIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS53c3Quc3RhbmRhcmQuc2NoZW1hc18xLjAuODAwLnYyMDE3MTEyMDE3MzIuamFyIS9kdGRzL2ZyYW1lc2V0LmR0ZCIgd2ViVVJMPSJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9mcmFtZXNldC5kdGQiLz4KKyAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vVzNDLy9FTlRJVElFUyBMYXRpbiAxLy9FTi8vSFRNTCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS53c3Quc3RhbmRhcmQuc2NoZW1hc18xLjAuODAwLnYyMDE3MTEyMDE3MzIuamFyIS9kdGRzL0hUTUxsYXQxLmVudCIgd2ViVVJMPSJIVE1MbGF0MS5lbnQiLz4KKyAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vVzNDLy9FTlRJVElFUyBTcGVjaWFsLy9FTi8vSFRNIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMC44MDAudjIwMTcxMTIwMTczMi5qYXIhL2R0ZHMvSFRNTHNwZWNpYWwuZW50IiB3ZWJVUkw9IkhUTUxzcGVjaWFsLmVudCIvPgorICA8cHVibGljIHB1YmxpY0lkPSItLy9XM0MvL0VOVElUSUVTIFN5bWJvbHMvL0VOLy9IVE1MIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMC44MDAudjIwMTcxMTIwMTczMi5qYXIhL2R0ZHMvSFRNTHN5bWJvbC5lbnQiIHdlYlVSTD0iSFRNTHN5bWJvbC5lbnQiLz4KKyAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LnN0YW5kYXJkLnNjaGVtYXNfMS4wLjgwMC52MjAxNzExMjAxNzMyLmphciEvZHRkcy9sb29zZS5kdGQiIHdlYlVSTD0iaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIi8+CisgIDxwdWJsaWMgcHVibGljSWQ9Ii0vL1czQy8vRFREIEhUTUwgNC4wMS8vRU4iIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LnN0YW5kYXJkLnNjaGVtYXNfMS4wLjgwMC52MjAxNzExMjAxNzMyLmphciEvZHRkcy9zdHJpY3QuZHRkIiB3ZWJVUkw9Imh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L3N0cmljdC5kdGQiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS53c3Quc3RhbmRhcmQuc2NoZW1hc18xLjAuODAwLnYyMDE3MTEyMDE3MzIuamFyIS94c2Qvd3NkbC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMC44MDAudjIwMTcxMTIwMTczMi5qYXIhL3hzZC9zb2FwLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LnN0YW5kYXJkLnNjaGVtYXNfMS4wLjgwMC52MjAxNzExMjAxNzMyLmphciEveHNkL2h0dHAueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9taW1lLyIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS53c3Quc3RhbmRhcmQuc2NoZW1hc18xLjAuODAwLnYyMDE3MTEyMDE3MzIuamFyIS94c2Qvd3NkbC1taW1lLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMC44MDAudjIwMTcxMTIwMTczMi5qYXIhL3hzZC9zb2FwZW5jLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMC44MDAudjIwMTcxMTIwMTczMi5qYXIhL3hzZC9zb2FwZW52LnhzZCIvPgorICA8dXJpIG5hbWU9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LnN0YW5kYXJkLnNjaGVtYXNfMS4wLjgwMC52MjAxNzExMjAxNzMyLmphciEveHNkL3htbGNhdGFsb2cxMS54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LnN0YW5kYXJkLnNjaGVtYXNfMS4wLjgwMC52MjAxNzExMjAxNzMyLmphciEvZHRkcy9sb29zZS5kdGQiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9zdHJpY3QuZHRkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMC44MDAudjIwMTcxMTIwMTczMi5qYXIhL2R0ZHMvc3RyaWN0LmR0ZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzLXN4L3dzLXNlY3VyaXR5cG9saWN5LzIwMDcwMiIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS53c3Quc3RhbmRhcmQuc2NoZW1hc18xLjAuODAwLnYyMDE3MTEyMDE3MzIuamFyIS94c2Qvd3Mtc2VjdXJpdHlwb2xpY3ktMS4yLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzLXN4L3dzLXNlY3VyaXR5cG9saWN5LzIwMDgwMiIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS53c3Quc3RhbmRhcmQuc2NoZW1hc18xLjAuODAwLnYyMDE3MTEyMDE3MzIuamFyIS94c2Qvd3Mtc2VjdXJpdHlwb2xpY3kueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sZHNpZy1jb3JlL3htbGRzaWctY29yZS1zY2hlbWEueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMC44MDAudjIwMTcxMTIwMTczMi5qYXIhL3hzZC94bWxkc2lnLWNvcmUtc2NoZW1hLnhzZCIvPgorICA8c3lzdGVtIHN5c3RlbUlkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UueHNkXzIuMTQuMC52MjAxODAxMjctMDU0Ny5qYXIhL2NhY2hlL3d3dy53My5vcmcvMjAwMS94bWwueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UueHNkXzIuMTQuMC52MjAxODAxMjctMDU0Ny5qYXIhL2NhY2hlL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEueHNkIi8+CisgIDxwdWJsaWMgcHVibGljSWQ9Ii0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBKMkVFIEFwcGxpY2F0aW9uIDEuMi8vRU4iIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvYXBwbGljYXRpb25fMV8yLmR0ZCIgd2ViVVJMPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvZHRkcy9hcHBsaWNhdGlvbl8xXzIuZHRkIi8+CisgIDxwdWJsaWMgcHVibGljSWQ9Ii0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBKMkVFIEFwcGxpY2F0aW9uIDEuMy8vRU4iIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvYXBwbGljYXRpb25fMV8zLmR0ZCIgd2ViVVJMPSJodHRwOi8vamF2YS5zdW4uY29tL2R0ZC9hcHBsaWNhdGlvbl8xXzMuZHRkIi8+CisgIDxwdWJsaWMgcHVibGljSWQ9Ii0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBKMkVFIEFwcGxpY2F0aW9uIENsaWVudCAxLjIvL0VOIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2FwcGxpY2F0aW9uLWNsaWVudF8xXzIuZHRkIiB3ZWJVUkw9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS9kdGRzL2FwcGxpY2F0aW9uLWNsaWVudF8xXzIuZHRkIi8+CisgIDxwdWJsaWMgcHVibGljSWQ9Ii0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBKMkVFIEFwcGxpY2F0aW9uIENsaWVudCAxLjMvL0VOIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2FwcGxpY2F0aW9uLWNsaWVudF8xXzMuZHRkIiB3ZWJVUkw9Imh0dHA6Ly9qYXZhLnN1bi5jb20vZHRkL2FwcGxpY2F0aW9uLWNsaWVudF8xXzMuZHRkIi8+CisgIDxwdWJsaWMgcHVibGljSWQ9Ii0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBDb25uZWN0b3IgMS4wLy9FTiIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9jb25uZWN0b3JfMV8wLmR0ZCIgd2ViVVJMPSJodHRwOi8vamF2YS5zdW4uY29tL2R0ZC9jb25uZWN0b3JfMV8wLmR0ZCIvPgorICA8cHVibGljIHB1YmxpY0lkPSItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgRW50ZXJwcmlzZSBKYXZhQmVhbnMgMS4xLy9FTiIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9lamItamFyXzFfMS5kdGQiIHdlYlVSTD0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlL2R0ZHMvZWpiLWphcl8xXzEuZHRkIi8+CisgIDxwdWJsaWMgcHVibGljSWQ9Ii0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBFbnRlcnByaXNlIEphdmFCZWFucyAyLjAvL0VOIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2VqYi1qYXJfMl8wLmR0ZCIgd2ViVVJMPSJodHRwOi8vamF2YS5zdW4uY29tL2R0ZC9lamItamFyXzJfMC5kdGQiLz4KKyAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIFdlYiBBcHBsaWNhdGlvbiAyLjIvL0VOIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3dlYi1hcHBfMl8yLmR0ZCIgd2ViVVJMPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvZHRkcy93ZWItYXBwXzIuMi5kdGQiLz4KKyAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIFdlYiBBcHBsaWNhdGlvbiAyLjMvL0VOIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3dlYi1hcHBfMl8zLmR0ZCIgd2ViVVJMPSJodHRwOi8vamF2YS5zdW4uY29tL2R0ZC93ZWItYXBwXzJfMy5kdGQiLz4KKyAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIEZhY2VsZXQgVGFnbGliIDEuMC8vRU4iIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvZmFjZWxldC10YWdsaWJfMV8wLmR0ZCIvPgorICA8cHVibGljIHB1YmxpY0lkPSItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgSmF2YVNlcnZlciBGYWNlcyBDb25maWcgMS4wLy9FTiIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy93ZWItZmFjZXNjb25maWdfMV8wLmR0ZCIgd2ViVVJMPSJodHRwOi8vamF2YS5zdW4uY29tL2R0ZC93ZWItZmFjZXNjb25maWdfMV8wLmR0ZCIvPgorICA8cHVibGljIHB1YmxpY0lkPSItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgSmF2YVNlcnZlciBGYWNlcyBDb25maWcgMS4xLy9FTiIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy93ZWItZmFjZXNjb25maWdfMV8xLmR0ZCIgd2ViVVJMPSJodHRwOi8vamF2YS5zdW4uY29tL2R0ZC93ZWItZmFjZXNjb25maWdfMV8xLmR0ZCIvPgorICA8cHVibGljIHB1YmxpY0lkPSItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgSlNQIFRhZyBMaWJyYXJ5IDEuMS8vRU4iIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvd2ViLWpzcHRhZ2xpYnJhcnlfMV8xLmR0ZCIgd2ViVVJMPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvZHRkcy93ZWItanNwdGFnbGlicmFyeV8xXzEuZHRkIi8+CisgIDxwdWJsaWMgcHVibGljSWQ9Ii0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBKU1AgVGFnIExpYnJhcnkgMS4yLy9FTiIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy93ZWItanNwdGFnbGlicmFyeV8xXzIuZHRkIiB3ZWJVUkw9Imh0dHA6Ly9qYXZhLnN1bi5jb20vZHRkL3dlYi1qc3B0YWdsaWJyYXJ5XzFfMi5kdGQiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL2FwcGxpY2F0aW9uXzFfNC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvYXBwbGljYXRpb25fMV80LnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qMmVlL2FwcGxpY2F0aW9uXzFfNC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvYXBwbGljYXRpb25fMV80LnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS9hcHBsaWNhdGlvbl81LnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9hcHBsaWNhdGlvbl81LnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvYXBwbGljYXRpb25fNS54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvYXBwbGljYXRpb25fNS54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvYXBwbGljYXRpb25fNi54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvYXBwbGljYXRpb25fNi54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2FwcGxpY2F0aW9uXzYueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2FwcGxpY2F0aW9uXzYueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9hcHBsaWNhdGlvbl83LnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9hcHBsaWNhdGlvbl83LnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvYXBwbGljYXRpb25fOC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvYXBwbGljYXRpb25fOC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL2FwcGxpY2F0aW9uLWNsaWVudF8xXzQueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2FwcGxpY2F0aW9uLWNsaWVudF8xXzQueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2oyZWUvYXBwbGljYXRpb24tY2xpZW50XzFfNC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvYXBwbGljYXRpb24tY2xpZW50XzFfNC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvYXBwbGljYXRpb24tY2xpZW50XzUueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2FwcGxpY2F0aW9uLWNsaWVudF81LnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvYXBwbGljYXRpb24tY2xpZW50XzUueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2FwcGxpY2F0aW9uLWNsaWVudF81LnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS9hcHBsaWNhdGlvbi1jbGllbnRfNi54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvYXBwbGljYXRpb24tY2xpZW50XzYueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9hcHBsaWNhdGlvbi1jbGllbnRfNi54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvYXBwbGljYXRpb24tY2xpZW50XzYueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9hcHBsaWNhdGlvbi1jbGllbnRfNy54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvYXBwbGljYXRpb24tY2xpZW50XzcueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9hcHBsaWNhdGlvbi1jbGllbnRfOC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvYXBwbGljYXRpb24tY2xpZW50XzgueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9iYXRjaFhNTF8xXzAueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2JhdGNoWE1MXzFfMC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2pvYlhNTF8xXzAueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2pvYlhNTF8xXzAueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL2JlYW5zXzFfMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvYmVhbnNfMV8wLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvYmVhbnNfMV8wLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9iZWFuc18xXzAueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9iZWFuc18xXzEueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2JlYW5zXzFfMS54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2JlYW5zXzJfMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvYmVhbnNfMl8wLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheGIvYmluZGluZ3NjaGVtYV8yXzAueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2JpbmRpbmdzY2hlbWFfMl8wLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXhiL2JpbmRpbmdzY2hlbWFfMl8wLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9iaW5kaW5nc2NoZW1hXzJfMC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL2Nvbm5lY3Rvcl8xXzUueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2Nvbm5lY3Rvcl8xXzUueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2oyZWUvY29ubmVjdG9yXzFfNS54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvY29ubmVjdG9yXzFfNS54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvY29ubmVjdG9yXzFfNi54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvY29ubmVjdG9yXzFfNi54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2Nvbm5lY3Rvcl8xXzYueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2Nvbm5lY3Rvcl8xXzYueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9jb25uZWN0b3JfMV83LnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9jb25uZWN0b3JfMV83LnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvZWpiLWphcl8yXzEueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2VqYi1qYXJfMl8xLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qMmVlL2VqYi1qYXJfMl8xLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9lamItamFyXzJfMS54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvZWpiLWphcl8zXzAueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2VqYi1qYXJfM18wLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvZWpiLWphcl8zXzAueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2VqYi1qYXJfM18wLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS9lamItamFyXzNfMS54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvZWpiLWphcl8zXzEueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9lamItamFyXzNfMS54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvZWpiLWphcl8zXzEueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9lamItamFyXzNfMi54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvZWpiLWphcl8zXzIueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS8iIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvajJlZV8xXzQueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS9qMmVlXzFfNC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvajJlZV8xXzQueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2oyZWUvajJlZV8xXzQueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2oyZWVfMV80LnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS9qYXZhZWVfNS54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvamF2YWVlXzUueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9qYXZhZWVfNS54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvamF2YWVlXzUueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL2phdmFlZV82LnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9qYXZhZWVfNi54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2phdmFlZV82LnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9qYXZhZWVfNi54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2phdmFlZV83LnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9qYXZhZWVfNy54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2phdmFlZV84LnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9qYXZhZWVfOC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vd3d3LmlibS5jb20vd2Vic2VydmljZXMveHNkL2oyZWVfamF4cnBjX21hcHBpbmdfMV8xLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9qMmVlX2pheHJwY19tYXBwaW5nXzFfMS54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL2oyZWVfamF4cnBjX21hcHBpbmdfMV8xLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9qMmVlX2pheHJwY19tYXBwaW5nXzFfMS54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvajJlZS9qMmVlX2pheHJwY19tYXBwaW5nXzFfMS54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvajJlZV9qYXhycGNfbWFwcGluZ18xXzEueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3d3dy5pYm0uY29tL3dlYnNlcnZpY2VzL3hzZC9qMmVlX3dlYl9zZXJ2aWNlc18xXzEueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2oyZWVfd2ViX3NlcnZpY2VzXzFfMS54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL2oyZWVfd2ViX3NlcnZpY2VzXzFfMS54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvajJlZV93ZWJfc2VydmljZXNfMV8xLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qMmVlL2oyZWVfd2ViX3NlcnZpY2VzXzFfMS54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvajJlZV93ZWJfc2VydmljZXNfMV8xLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS9qYXZhZWVfd2ViX3NlcnZpY2VzXzFfMi54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvamF2YWVlX3dlYl9zZXJ2aWNlc18xXzIueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9qYXZhZWVfd2ViX3NlcnZpY2VzXzFfMi54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvamF2YWVlX3dlYl9zZXJ2aWNlc18xXzIueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL2phdmFlZV93ZWJfc2VydmljZXNfMV8zLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9qYXZhZWVfd2ViX3NlcnZpY2VzXzFfMy54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2phdmFlZV93ZWJfc2VydmljZXNfMV8zLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9qYXZhZWVfd2ViX3NlcnZpY2VzXzFfMy54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2phdmFlZV93ZWJfc2VydmljZXNfMV80LnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9qYXZhZWVfd2ViX3NlcnZpY2VzXzFfNC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vd3d3LmlibS5jb20vd2Vic2VydmljZXMveHNkL2oyZWVfd2ViX3NlcnZpY2VzX2NsaWVudF8xXzEueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2oyZWVfd2ViX3NlcnZpY2VzX2NsaWVudF8xXzEueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS9qMmVlX3dlYl9zZXJ2aWNlc19jbGllbnRfMV8xLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9qMmVlX3dlYl9zZXJ2aWNlc19jbGllbnRfMV8xLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qMmVlL2oyZWVfd2ViX3NlcnZpY2VzX2NsaWVudF8xXzEueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2oyZWVfd2ViX3NlcnZpY2VzX2NsaWVudF8xXzEueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL2phdmFlZV93ZWJfc2VydmljZXNfY2xpZW50XzFfMi54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvamF2YWVlX3dlYl9zZXJ2aWNlc19jbGllbnRfMV8yLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvamF2YWVlX3dlYl9zZXJ2aWNlc19jbGllbnRfMV8yLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9qYXZhZWVfd2ViX3NlcnZpY2VzX2NsaWVudF8xXzIueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL2phdmFlZV93ZWJfc2VydmljZXNfY2xpZW50XzFfMy54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvamF2YWVlX3dlYl9zZXJ2aWNlc19jbGllbnRfMV8zLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvamF2YWVlX3dlYl9zZXJ2aWNlc19jbGllbnRfMV8zLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9qYXZhZWVfd2ViX3NlcnZpY2VzX2NsaWVudF8xXzMueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9qYXZhZWVfd2ViX3NlcnZpY2VzX2NsaWVudF8xXzQueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2phdmFlZV93ZWJfc2VydmljZXNfY2xpZW50XzFfNC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL2pzcF8yXzAueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2pzcF8yXzAueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2oyZWUvanNwXzJfMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvanNwXzJfMC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvanNwXzJfMS54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvanNwXzJfMS54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2pzcF8yXzEueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2pzcF8yXzEueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL2pzcF8yXzIueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2pzcF8yXzIueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9qc3BfMl8yLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9qc3BfMl8yLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvanNwXzJfMy54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvanNwXzJfMy54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL3Blcm1pc3Npb25zXzcueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3Blcm1pc3Npb25zXzcueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvcGVyc2lzdGVuY2Uvb3JtXzFfMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvb3JtXzFfMC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvcGVyc2lzdGVuY2Uvb3JtXzFfMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvb3JtXzFfMC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9wZXJzaXN0ZW5jZS9vcm1fMl8wLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9vcm1fMl8wLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9wZXJzaXN0ZW5jZS9vcm1fMl8wLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9vcm1fMl8wLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9wZXJzaXN0ZW5jZS9vcm1fMl8xLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9vcm1fMl8xLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL3BlcnNpc3RlbmNlL3BlcnNpc3RlbmNlXzFfMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvcGVyc2lzdGVuY2VfMV8wLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9wZXJzaXN0ZW5jZS9wZXJzaXN0ZW5jZV8xXzAueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3BlcnNpc3RlbmNlXzFfMC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9wZXJzaXN0ZW5jZS9wZXJzaXN0ZW5jZV8yXzAueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3BlcnNpc3RlbmNlXzJfMC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvcGVyc2lzdGVuY2UvcGVyc2lzdGVuY2VfMl8wLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9wZXJzaXN0ZW5jZV8yXzAueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL3BlcnNpc3RlbmNlL3BlcnNpc3RlbmNlXzJfMS54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvcGVyc2lzdGVuY2VfMl8xLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly93d3cuamJvc3Mub3JnL3htbC9ucy9qYXZheC92YWxpZGF0aW9uL2NvbmZpZ3VyYXRpb24vdmFsaWRhdGlvbi1jb25maWd1cmF0aW9uLTEuMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvdmFsaWRhdGlvbi1jb25maWd1cmF0aW9uLTEuMC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vd3d3Lmpib3NzLm9yZy94bWwvbnMvamF2YXgvdmFsaWRhdGlvbi9jb25maWd1cmF0aW9uL3ZhbGlkYXRpb24tY29uZmlndXJhdGlvbi0xLjEueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3ZhbGlkYXRpb24tY29uZmlndXJhdGlvbi0xLjEueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL3ZhbGlkYXRpb24vY29uZmlndXJhdGlvbi92YWxpZGF0aW9uLWNvbmZpZ3VyYXRpb24tMi4wLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy92YWxpZGF0aW9uLWNvbmZpZ3VyYXRpb24tMi4wLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly93d3cuamJvc3Mub3JnL3htbC9ucy9qYXZheC92YWxpZGF0aW9uL21hcHBpbmcvdmFsaWRhdGlvbi1tYXBwaW5nLTEuMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvdmFsaWRhdGlvbi1tYXBwaW5nLTEuMC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vd3d3Lmpib3NzLm9yZy94bWwvbnMvamF2YXgvdmFsaWRhdGlvbi9tYXBwaW5nL3ZhbGlkYXRpb24tbWFwcGluZy0xLjEueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3ZhbGlkYXRpb24tbWFwcGluZy0xLjEueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL3ZhbGlkYXRpb24vbWFwcGluZy92YWxpZGF0aW9uLW1hcHBpbmctMi4wLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy92YWxpZGF0aW9uLW1hcHBpbmctMi4wLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3dlYi1hcHBfMl80LnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy93ZWItYXBwXzJfNC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3dlYi1hcHBfMl81LnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3dlYi1hcHBfMl81LnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzNfMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvd2ViLWFwcF8zXzAueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS93ZWItYXBwXzNfMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvd2ViLWFwcF8zXzAueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS93ZWItYXBwXzNfMS54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvd2ViLWFwcF8zXzEueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS93ZWItYXBwXzRfMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvd2ViLWFwcF80XzAueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1jb21tb25fM18wLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy93ZWItY29tbW9uXzNfMC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL3dlYi1jb21tb25fM18wLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy93ZWItY29tbW9uXzNfMC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL3dlYi1jb21tb25fM18xLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy93ZWItY29tbW9uXzNfMS54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL3dlYi1jb21tb25fNF8wLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy93ZWItY29tbW9uXzRfMC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWZhY2VsZXR0YWdsaWJyYXJ5XzJfMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvd2ViLWZhY2VsZXR0YWdsaWJyYXJ5XzJfMC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL3dlYi1mYWNlbGV0dGFnbGlicmFyeV8yXzAueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3dlYi1mYWNlbGV0dGFnbGlicmFyeV8yXzAueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS93ZWItZmFjZWxldHRhZ2xpYnJhcnlfMl8yLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy93ZWItZmFjZWxldHRhZ2xpYnJhcnlfMl8yLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvd2ViLWZhY2VsZXR0YWdsaWJyYXJ5XzJfMy54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvd2ViLWZhY2VsZXR0YWdsaWJyYXJ5XzJfMy54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWZhY2VzY29uZmlnXzFfMi54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvd2ViLWZhY2VzY29uZmlnXzFfMi54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL3dlYi1mYWNlc2NvbmZpZ18xXzIueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3dlYi1mYWNlc2NvbmZpZ18xXzIueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1mYWNlc2NvbmZpZ18yXzAueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3dlYi1mYWNlc2NvbmZpZ18yXzAueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS93ZWItZmFjZXNjb25maWdfMl8wLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy93ZWItZmFjZXNjb25maWdfMl8wLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvd2ViLWZhY2VzY29uZmlnXzJfMi54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvd2ViLWZhY2VzY29uZmlnXzJfMi54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL3dlYi1mYWNlc2NvbmZpZ18yXzMueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3dlYi1mYWNlc2NvbmZpZ18yXzMueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1mYWNlc3VpY29tcG9uZW50XzJfMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvd2ViLWZhY2VzdWljb21wb25lbnRfMl8wLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvd2ViLWZhY2VzdWljb21wb25lbnRfMl8wLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy93ZWItZmFjZXN1aWNvbXBvbmVudF8yXzAueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1mcmFnbWVudF8zXzAueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3dlYi1mcmFnbWVudF8zXzAueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS93ZWItZnJhZ21lbnRfM18wLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy93ZWItZnJhZ21lbnRfM18wLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvd2ViLWZyYWdtZW50XzNfMS54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvd2ViLWZyYWdtZW50XzNfMS54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL3dlYi1mcmFnbWVudF80XzAueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3dlYi1mcmFnbWVudF80XzAueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItanNwdGFnbGlicmFyeV8yXzAueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3dlYi1qc3B0YWdsaWJyYXJ5XzJfMC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvajJlZS93ZWItanNwdGFnbGlicmFyeV8yXzAueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3dlYi1qc3B0YWdsaWJyYXJ5XzJfMC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWpzcHRhZ2xpYnJhcnlfMl8xLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy93ZWItanNwdGFnbGlicmFyeV8yXzEueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS93ZWItanNwdGFnbGlicmFyeV8yXzEueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3dlYi1qc3B0YWdsaWJyYXJ5XzJfMS54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLXBhcnRpYWxyZXNwb25zZV8yXzAueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3dlYi1wYXJ0aWFscmVzcG9uc2VfMl8wLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvd2ViLXBhcnRpYWxyZXNwb25zZV8yXzAueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3dlYi1wYXJ0aWFscmVzcG9uc2VfMl8wLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvd2ViLXBhcnRpYWxyZXNwb25zZV8yXzIueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3dlYi1wYXJ0aWFscmVzcG9uc2VfMl8yLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvd2ViLXBhcnRpYWxyZXNwb25zZV8yXzMueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3dlYi1wYXJ0aWFscmVzcG9uc2VfMl8zLnhzZCIvPgorPC9jYXRhbG9nPgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS92ZXJzaW9uLmluaSBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvdmVyc2lvbi5pbmkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY1YjgyMwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvdmVyc2lvbi5pbmkKQEAgLTAsMCArMSwzIEBACisjVHVlIE5vdiAwOSAxNToxNjoyNiBDRVQgMjAyMQorb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lPTIKK29yZy5lY2xpcHNlLnBsYXRmb3JtPTQuOC4wLnYyMDE4MDYxMS0wNTAwCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLnJlY29tbWVuZGVycy9jYWNoZXMvaWRlbnRpZmllZC1wcm9qZWN0LWNvb3JkaW5hdGVzLmpzb24gYi93c3AtS29yQVAtU2VydmljZXMvLnJlY29tbWVuZGVycy9jYWNoZXMvaWRlbnRpZmllZC1wcm9qZWN0LWNvb3JkaW5hdGVzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUyNmRmZQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ucmVjb21tZW5kZXJzL2NhY2hlcy9pZGVudGlmaWVkLXByb2plY3QtY29vcmRpbmF0ZXMuanNvbgpAQCAtMCwwICsxIEBACit7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ucmVjb21tZW5kZXJzL2NhY2hlcy9tYW51YWwtbWFwcGluZ3MuanNvbiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ucmVjb21tZW5kZXJzL2NhY2hlcy9tYW51YWwtbWFwcGluZ3MuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTI2ZGZlCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5yZWNvbW1lbmRlcnMvY2FjaGVzL21hbnVhbC1tYXBwaW5ncy5qc29uCkBAIC0wLDAgKzEgQEAKK3t9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=